AnySkills
Управление онлайн-школой: курсы, уроки, тесты, ученики и воронка продаж
Добавьте сервер в «Мои MCP» — получите адрес подключения для Claude и ChatGPT.
Добавить в «Мои MCP»Нужно войти или зарегистрироваться — вернём на эту страницу.
Описание
AnySkills — платформа для онлайн-школ. Сервер позволяет вести школу через ИИ-ассистента: собирать курсы, следить за учениками и работать со сделками, не открывая кабинет. Можно получить сводку по школе, создавать курсы, модули, уроки и тесты, править содержимое уроков и публиковать курс или возвращать его в черновики. Для обучения есть списки потоков, прогресс каждого ученика, поиск тех, кто давно ничего не делает, очередь работ на проверку куратору и статистика ответов по вопросам тестов. Для продаж доступна воронка: этапы, сделки, новые заявки, перевод сделки по этапам, заметки, метки и задачи со сроком. Нужен свой аккаунт школы в AnySkills и ключ доступа; часть действий, например публикация курсов, ограничена тарифом.
Инструменты · 45
из ответа tools/list
Заметка в сделку
add_deal_note
Заметка в сделку
add_deal_note Добавить заметку в ленту сделки: итог звонка, договорённость, возражение. Заметку увидят менеджеры в карточке сделки.
add_deal_note(text: string, deal_id: integer)
// inputSchema
{
"type": "object",
"required": [
"deal_id",
"text"
],
"properties": {
"text": {
"type": "string",
"title": "Text"
},
"deal_id": {
"type": "integer",
"title": "Deal Id"
}
}
}
Поставить метку сделке
add_deal_tag
Поставить метку сделке
add_deal_tag Поставить сделке метку по имени. Имя сравнивается без регистра и с прежними именами меток; такой метки нет, она заводится. Если метка в группе «одна из», прежняя метка группы снимается сама. Повторная метка ничего не меняет. Событие ложится в ленту сделки.
add_deal_tag(name: string, deal_id: integer)
// inputSchema
{
"type": "object",
"required": [
"deal_id",
"name"
],
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"deal_id": {
"type": "integer",
"title": "Deal Id"
}
}
}
Задача по сделке
add_deal_task
Задача по сделке
add_deal_task Поставить задачу по сделке со сроком: позвонить, отправить договор. Ответственный — хозяин ключа. Срок обязателен: задача без срока не попадёт в «Сегодня» и будет забыта.
add_deal_task(text: string, due_at: string, deal_id: integer)
// inputSchema
{
"type": "object",
"required": [
"deal_id",
"text",
"due_at"
],
"properties": {
"text": {
"type": "string",
"title": "Text"
},
"due_at": {
"type": "string",
"title": "Due At",
"format": "date-time"
},
"deal_id": {
"type": "integer",
"title": "Deal Id"
}
}
}
Проверить черновик воронки
check_funnel
Проверить черновик воронки
check_funnel Та же проверка, что перед публикацией, но ничего не публикует. errors: не опубликуется, пока не исправить; warnings: можно, но стоит посмотреть. У каждой записи номер блока (node) и текст.
check_funnel(funnel_id: integer)
// inputSchema
{
"type": "object",
"required": [
"funnel_id"
],
"properties": {
"funnel_id": {
"type": "integer",
"title": "Funnel Id"
}
}
}
Прогресс потока по ученикам
cohort_progress
Прогресс потока по ученикам
cohort_progress По каждому ученику потока: процент курса (считается по обязательным опубликованным урокам, как в кабинете), когда последний раз заходил или проходил урок, сколько дней с тех пор. Плюс доходимость потока — доля тех, кто дошёл до 100 %. Имена — только по ступени 3 (см. описание сервера), иначе «Ученик 14».
cohort_progress(cohort_id: integer)
// inputSchema
{
"type": "object",
"required": [
"cohort_id"
],
"properties": {
"cohort_id": {
"type": "integer",
"title": "Cohort Id"
}
}
}
Создать курс
create_course
Создать курс
create_course Заводит курс-черновик: ученикам он не виден, пока не опубликован через `publish_course`. Черновиков можно держать сколько угодно на любом тарифе. Режим доступа: `open` — всё открыто сразу, `cohort` — по расписанию потока, `sequence` — по прогрессу ученика. Автор курса — хозяин ключа. Повтор с тем же Idempotency-Key вернёт тот же курс, а не создаст второй.
create_course(title: string, access_mode?: string, description?: string)
// inputSchema
{
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"title": "Title",
"maxLength": 200,
"minLength": 1
},
"access_mode": {
"enum": [
"open",
"cohort",
"sequence"
],
"type": "string",
"title": "Access Mode",
"default": "open"
},
"description": {
"type": "string",
"title": "Description",
"default": ""
}
}
}
Завести метку сделок
create_deal_tag
Завести метку сделок
create_deal_tag Новая метка в справочнике сделок. group: имя группы «одна из» (у сделки одна метка группы, например «Урок»), новая группа заведётся. is_source: метка говорит, откуда пришёл человек. Имя, занятое другой меткой или её прежним именем, отказ: возьмите ту метку.
create_deal_tag(name: string, color?: string, group?: any, is_source?: boolean)
// inputSchema
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"color": {
"type": "string",
"title": "Color",
"default": "secondary"
},
"group": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Group"
},
"is_source": {
"type": "boolean",
"title": "Is Source",
"default": false
}
}
}
Собрать новую воронку черновиком
create_funnel_draft
Собрать новую воронку черновиком
create_funnel_draft Новая воронка бота черновиком. Людям ничего не уходит: опубликовать её может только человек в кабинете, ссылка в ответе (editor_url). Формат воронки: get_funnel_format. В ответе проверка (errors, warnings): исправьте ошибки правкой черновика.
create_funnel_draft(name: string, graph: object, bot_id: integer)
// inputSchema
{
"type": "object",
"required": [
"bot_id",
"name",
"graph"
],
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"graph": {
"type": "object",
"title": "Graph",
"additionalProperties": true
},
"bot_id": {
"type": "integer",
"title": "Bot Id"
}
}
}
Новая заявка
create_lead
Новая заявка
create_lead Завести заявку: человек и сделка одним запросом. Нужна почта, телефон или Telegram. Человек, который уже есть, не заводится второй раз; повторная заявка про то же ложится заметкой в открытую сделку. Заголовок `Idempotency-Key` защищает от двойной отправки.
create_lead(name?: string, email?: string, phone?: string, comment?: string, telegram?: string, utm_term?: string, course_id?: any, utm_medium?: string, utm_source?: string, utm_content?: string, utm_campaign?: string)
// inputSchema
{
"type": "object",
"required": [],
"properties": {
"name": {
"type": "string",
"title": "Name",
"default": ""
},
"email": {
"type": "string",
"title": "Email",
"default": ""
},
"phone": {
"type": "string",
"title": "Phone",
"default": ""
},
"comment": {
"type": "string",
"title": "Comment",
"default": ""
},
"telegram": {
"type": "string",
"title": "Telegram",
"default": ""
},
"utm_term": {
"type": "string",
"title": "Utm Term",
"default": ""
},
"course_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Course Id"
},
"utm_medium": {
"type": "string",
"title": "Utm Medium",
"default": ""
},
"utm_source": {
"type": "string",
"title": "Utm Source",
"default": ""
},
"utm_content": {
"type": "string",
"title": "Utm Content",
"default": ""
},
"utm_campaign": {
"type": "string",
"title": "Utm Campaign",
"default": ""
}
}
}
Добавить урок в модуль
create_lesson
Добавить урок в модуль
create_lesson Урок встаёт в конец модуля. `document` — в формате Editor.js: `{"blocks": [{"type": "header", "data": {"text": "...", "level": 2}}, {"type": "paragraph", "data": {"text": "..."}}, ...]}`. Разрешённые блоки: header, paragraph, list, quote, callout, code, table, image, video (провайдер и идентификатор, не iframe), file, test (`{"test_id": N}`). Неизвестные блоки выбрасываются, разметка чистится. Образец готового документа отдаёт `get_lesson`.
create_lesson(kind?: string, title: string, document?: any, module_id: integer, is_required?: boolean, duration_minutes?: any)
// inputSchema
{
"type": "object",
"required": [
"module_id",
"title"
],
"properties": {
"kind": {
"enum": [
"lecture",
"practice",
"webinar",
"test",
"survey"
],
"type": "string",
"title": "Kind",
"default": "lecture"
},
"title": {
"type": "string",
"title": "Title",
"maxLength": 200,
"minLength": 1
},
"document": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Document"
},
"module_id": {
"type": "integer",
"title": "Module Id"
},
"is_required": {
"type": "boolean",
"title": "Is Required",
"default": true
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 600.0,
"minimum": 0.0
},
{
"type": "null"
}
],
"title": "Duration Minutes"
}
}
}
Добавить модуль в курс
create_module
Добавить модуль в курс
create_module Модуль встаёт в конец курса. Уроки добавляются в модуль отдельно, `create_lesson`. Порядок модулей потом можно поменять в кабинете.
create_module(title: string, course_id: integer)
// inputSchema
{
"type": "object",
"required": [
"course_id",
"title"
],
"properties": {
"title": {
"type": "string",
"title": "Title",
"maxLength": 200,
"minLength": 1
},
"course_id": {
"type": "integer",
"title": "Course Id"
}
}
}
Собрать шаг правила продаж выключенным
create_sales_rule
Собрать шаг правила продаж выключенным
create_sales_rule Шаг правила продаж, ВСЕГДА выключенный: включает его владелец в кабинете, до этого он ничего не делает. Повод: event tag (tag_id, метка поставлена на сделку) или stage (stage_id, сделка перешла на этап). delay_minutes: через сколько. action: bot (funnel_id, запустить воронку бота), tag_add или tag_remove (target_tag_id), stage (target_stage_id, «Оплачено» нельзя), task (task_text, task_days), goal (цель Метрики). skip_if_replied: не делать, если человек ответил.
create_sales_rule(goal?: any, event?: any, action?: any, tag_id?: any, stage_id?: any, funnel_id?: any, task_days?: any, task_text?: any, lost_reason?: any, delay_minutes?: any, target_tag_id?: any, skip_if_replied?: any, target_stage_id?: any)
// inputSchema
{
"type": "object",
"required": [],
"properties": {
"goal": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Goal"
},
"event": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Event"
},
"action": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Action"
},
"tag_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Tag Id"
},
"stage_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Stage Id"
},
"funnel_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Funnel Id"
},
"task_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Task Days"
},
"task_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Task Text"
},
"lost_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Lost Reason"
},
"delay_minutes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Delay Minutes"
},
"target_tag_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Target Tag Id"
},
"skip_if_replied": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Skip If Replied"
},
"target_stage_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Target Stage Id"
}
}
}
Завести этап продаж
create_sales_stage
Завести этап продаж
create_sales_stage Новый этап «в работе» в воронке продаж: сразу после after_stage_id, а без него перед «Оплачено» и «Отказом». Цвет: secondary, azure, blue, purple, yellow, orange, green, red. Людям это ничего не шлёт. Удалить этап может только человек в кабинете.
create_sales_stage(name: string, color?: string, after_stage_id?: any)
// inputSchema
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"color": {
"type": "string",
"title": "Color",
"default": "secondary"
},
"after_stage_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "After Stage Id"
}
}
}
Завести короткую ссылку
create_short_link
Завести короткую ссылку
create_short_link Короткая ссылка на домене школы: на адрес (url) или в бота (bot_username и, если нужно, start_code: код воронки «Старта»). platform (youtube, vk, rutube, telegram, direct, email, site, other) ставит метки сама: utm_source, utm_medium, utm_campaign; свои метки (utm: source, medium, campaign, content, term) главнее. path: свой путь латиницей; без него система выберет понятный, варианты покажет suggest_link_path. button: подпись кнопки под роликом, set_id: ролик или кампания школы. Та же ссылка (тот же адрес или бот с кодом, та же площадка, кнопка и ролик) второй раз не заводится: вернётся прежняя, created=false. Например: url https://it-ontime.ru/mikrotik, platform youtube → short_url https://go.it-ontime.ru/mikrotik, метки youtube, video, mikrotik. Ошибка (путь занят, адрес не тот, нет домена) приходит ответом 400 с текстом для человека.
create_short_link(url?: string, utm?: any, path?: string, title?: string, button?: string, set_id?: any, platform?: string, start_code?: string, bot_username?: string)
// inputSchema
{
"type": "object",
"required": [],
"properties": {
"url": {
"type": "string",
"title": "Url",
"default": ""
},
"utm": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Utm"
},
"path": {
"type": "string",
"title": "Path",
"default": ""
},
"title": {
"type": "string",
"title": "Title",
"default": ""
},
"button": {
"type": "string",
"title": "Button",
"default": ""
},
"set_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Set Id"
},
"platform": {
"type": "string",
"title": "Platform",
"default": ""
},
"start_code": {
"type": "string",
"title": "Start Code",
"default": ""
},
"bot_username": {
"type": "string",
"title": "Bot Username",
"default": ""
}
}
}
Создать тест с вопросами
create_test
Создать тест с вопросами
create_test Тест целиком за один вызов: параметры и вопросы по порядку. Типы вопросов: `one` (один из списка, ровно один верный), `many` (несколько верных), `text` и `number` (верный ответ в `correct_text`), `open` (ответ своими словами; `reference_answer` и `criteria` помогают проверке). Куда положить: `lesson_id` — блоком в конец урока, `module_id` — итоговым тестом модуля; можно и то и другое, можно ничего.
create_test(title: string, lesson_id?: any, module_id?: any, questions: array, pass_score?: integer, description?: string, max_attempts?: integer)
// inputSchema
{
"type": "object",
"required": [
"title",
"questions"
],
"properties": {
"title": {
"type": "string",
"title": "Title",
"maxLength": 200,
"minLength": 1
},
"lesson_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Lesson Id"
},
"module_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Module Id"
},
"questions": {
"type": "array",
"items": {
"type": "object",
"title": "QuestionIn",
"required": [
"text"
],
"properties": {
"kind": {
"enum": [
"one",
"many",
"text",
"number",
"open"
],
"type": "string",
"title": "Kind",
"default": "one"
},
"text": {
"type": "string",
"title": "Text",
"minLength": 1
},
"weight": {
"type": "integer",
"title": "Weight",
"default": 1,
"maximum": 100.0,
"minimum": 1.0
},
"options": {
"type": "array",
"items": {
"type": "object",
"title": "OptionIn",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"title": "Text",
"maxLength": 300,
"minLength": 1
},
"is_correct": {
"type": "boolean",
"title": "Is Correct",
"default": false
}
}
},
"title": "Options",
"default": []
},
"criteria": {
"type": "string",
"title": "Criteria",
"default": ""
},
"correct_text": {
"type": "string",
"title": "Correct Text",
"default": ""
},
"reference_answer": {
"type": "string",
"title": "Reference Answer",
"default": ""
}
}
},
"title": "Questions",
"minItems": 1
},
"pass_score": {
"type": "integer",
"title": "Pass Score",
"default": 70,
"maximum": 100.0,
"minimum": 0.0
},
"description": {
"type": "string",
"title": "Description",
"default": ""
},
"max_attempts": {
"type": "integer",
"title": "Max Attempts",
"default": 0,
"maximum": 100.0,
"minimum": 0.0
}
}
}
Структура курса
get_course
Структура курса
get_course Один курс целиком: модули по порядку, в каждом — уроки по порядку с типом (`lecture`, `practice`, `webinar`, `test`, `survey`), длительностью и признаком обязательности. Итоговый тест модуля, если есть, назван по номеру — его вопросы отдаёт `get_test`. Текст уроков сюда не входит: за ним `get_lesson`.
get_course(course_id: integer)
// inputSchema
{
"type": "object",
"required": [
"course_id"
],
"properties": {
"course_id": {
"type": "integer",
"title": "Course Id"
}
}
}
Сделка с лентой
get_deal
Сделка с лентой
get_deal Одна сделка: поля, человек и последние 30 событий ленты (заметки менеджеров, переводы, открытие доступа, оплаты). Помогает ответить, что с человеком происходит и о чём с ним договорились.
get_deal(deal_id: integer)
// inputSchema
{
"type": "object",
"required": [
"deal_id"
],
"properties": {
"deal_id": {
"type": "integer",
"title": "Deal Id"
}
}
}
Воронка целиком
get_funnel
Воронка целиком
get_funnel Черновик и опубликованная версия воронки, номер версии черновика (нужен для правки) и сколько людей сейчас стоит на каждом блоке опубликованной версии. Люди считаются числом, без имён.
get_funnel(funnel_id: integer)
// inputSchema
{
"type": "object",
"required": [
"funnel_id"
],
"properties": {
"funnel_id": {
"type": "integer",
"title": "Funnel Id"
}
}
}
Как устроена воронка
get_funnel_format
Как устроена воронка
get_funnel_format Формат воронки: блоки, их настройки и стрелки. Прочитать до того, как собирать или править воронку: черновик присылается целиком в этом формате.
get_funnel_format()
// inputSchema
{
"type": "object",
"required": [],
"properties": {}
}
Урок целиком
get_lesson
Урок целиком
get_lesson Документ урока в формате Editor.js: список блоков `header`, `paragraph`, `list`, `quote`, `callout`, `code`, `table`, `image`, `video`, `file`. Это тот же формат, в котором урок принимается на запись, поэтому ответ годится как образец для `create_lesson`. У старых уроков документа может не быть — тогда `document` пуст, а содержимое лежит строками в `blocks`.
get_lesson(lesson_id: integer)
// inputSchema
{
"type": "object",
"required": [
"lesson_id"
],
"properties": {
"lesson_id": {
"type": "integer",
"title": "Lesson Id"
}
}
}
Статистика короткой ссылки
get_link_stats
Статистика короткой ссылки
get_link_stats Что принесла одна ссылка за период. funnel: clicks (переходы), people (разные люди), to_bot (пришли в бота), leads (заявки с сайта), deals (сделки), payments (оплаты), revenue (рубли, строкой), returned (вернулись в бота, были в нём раньше), filtered (отсеяны роботы и повторы). daily: переходы по дням. paths: люди по каждому пути за 7 и 30 дней и всего, видно, идут ли ещё по старому пути. referrers: откуда переходят, devices: с чего. Период: since и until, даты ГГГГ-ММ-ДД включительно, по Москве; без них последние days дней (по умолчанию 30), days=0 значит всё время. Например, «сколько оплат дал ролик за сентябрь»: since=2026-09-01, until=2026-09-30.
get_link_stats(days?: any, since?: any, until?: any, link_id: integer)
// inputSchema
{
"type": "object",
"required": [
"link_id"
],
"properties": {
"days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Days"
},
"since": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "Since"
},
"until": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "Until"
},
"link_id": {
"type": "integer",
"title": "Link Id"
}
}
}
Сводка школы
get_school_summary
Сводка школы
get_school_summary Название школы, тариф, сколько курсов и из них опубликовано, сколько учеников и потоков, и что можно этому ключу. ИИ вызывает это первым при подключении и представляется человеку по-человечески: не списком инструментов, а тремя делами, ради которых школа его подключила, и одним примером вопроса. Цифры настоящие, из этого же ключа.
get_school_summary()
// inputSchema
{
"type": "object",
"required": [],
"properties": {}
}
Тест с вопросами
get_test
Тест с вопросами
get_test Тест целиком: порог зачёта, число попыток и вопросы по порядку. У каждого вопроса тип (`one`, `many`, `text`, `number`, `open`), варианты с отметкой верного либо верный текст. Верные ответы отдаются, потому что ключ принадлежит сотруднику школы, а не ученику.
get_test(test_id: integer)
// inputSchema
{
"type": "object",
"required": [
"test_id"
],
"properties": {
"test_id": {
"type": "integer",
"title": "Test Id"
}
}
}
Боты школы
list_bots
Боты школы
list_bots Боты школы в Telegram: номер, название, адрес и работает ли. Номер бота нужен, чтобы читать его воронки и собирать новые.
list_bots()
// inputSchema
{
"type": "object",
"required": [],
"properties": {}
}
Потоки школы
list_cohorts
Потоки школы
list_cohorts Потоки: курс, даты старта и окончания, сколько записано. Поток — группа учеников с общим расписанием; прогресс по нему — `cohort_progress`. Ученики вне потоков (запись без потока) сюда не попадают — их ищет `stuck_students` без `cohort_id`.
list_cohorts()
// inputSchema
{
"type": "object",
"required": [],
"properties": {}
}
Курсы школы
list_courses
Курсы школы
list_courses Все курсы школы, включая черновики: название, опубликован ли, сколько модулей и уроков. Звать первым, чтобы узнать номера курсов для остальных запросов. Черновик отличается от опубликованного полем `is_published`; ученики видят только опубликованные.
list_courses()
// inputSchema
{
"type": "object",
"required": [],
"properties": {}
}
Метки сделок
list_deal_tags
Метки сделок
list_deal_tags Справочник меток сделок школы: имя, цвет, группа «одна из» (у сделки одна метка группы, новая снимает прежнюю), признак источника (откуда пришёл человек), прежние имена и на скольких сделках метка стоит. Нужен, чтобы поставить метку существующим именем, а не завести дубль.
list_deal_tags()
// inputSchema
{
"type": "object",
"required": [],
"properties": {}
}
Сделки школы
list_deals
Сделки школы
list_deals Сделки школы, новые сверху: этап, курс, сумма, метки, откуда пришёл человек. Например, «какие сделки ждут оплаты»: отбор по этапу, «кто молчит»: по метке (`tag`, имя метки или её прежнее имя). Люди без имён, если у ключа нет области «имена» или школа не разрешила ИИ персональные данные. Не больше 200 за раз.
list_deals(tag?: any, limit?: integer, stage_id?: any, open_only?: boolean, updated_since?: any)
// inputSchema
{
"type": "object",
"required": [],
"properties": {
"tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tag"
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 50
},
"stage_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Stage Id"
},
"open_only": {
"type": "boolean",
"title": "Open Only",
"default": true
},
"updated_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"title": "Updated Since"
}
}
}
Воронки бота
list_funnels
Воронки бота
list_funnels Воронки бота: состояние (draft — черновик, active — работает, paused — остановлена), есть ли неопубликованные правки и чьи.
list_funnels(bot_id: integer)
// inputSchema
{
"type": "object",
"required": [
"bot_id"
],
"properties": {
"bot_id": {
"type": "integer",
"title": "Bot Id"
}
}
}
Правила продаж
list_sales_rules
Правила продаж
list_sales_rules Шаги правил продаж: повод (event tag или stage, с номером метки или этапа), через сколько минут, что сделать (action: bot запустить воронку бота, tag_add, tag_remove, stage, task, goal), включён ли и почему может не сработать (problem).
list_sales_rules()
// inputSchema
{
"type": "object",
"required": [],
"properties": {}
}
Этапы воронки продаж
list_sales_stages
Этапы воронки продаж
list_sales_stages Этапы воронки продаж школы по порядку: номер, название и смысл (open — в работе, won — успех, lost — отказ). Нужны, чтобы перевести сделку или отобрать сделки на одном этапе.
list_sales_stages()
// inputSchema
{
"type": "object",
"required": [],
"properties": {}
}
Короткие ссылки школы
list_short_links
Короткие ссылки школы
list_short_links Короткие ссылки школы, новые сверху: короткий адрес, куда ведёт (адрес или бот с кодом воронки), площадка, ролик или кампания, метки и цифры за последние 30 дней в stats_30d: clicks (переходы), people (разные люди), to_bot (пришли в бота), leads (заявки), deals (сделки), payments (оплаты), revenue (рубли, строкой). Отбор: q ищет в названии, адресе, кнопке, имени бота и пути; platform: youtube, vk, rutube, telegram, direct, email, site, other; set_id: ссылки одного ролика или кампании; archived=true: архив. Например, «какая ссылка под роликами YouTube принесла больше денег»: platform=youtube, затем сравнить stats_30d.revenue. Не больше 200 за раз, дальше offset; total показывает, сколько всего.
list_short_links(q?: string, limit?: integer, offset?: integer, set_id?: any, archived?: boolean, platform?: any)
// inputSchema
{
"type": "object",
"required": [],
"properties": {
"q": {
"type": "string",
"title": "Q",
"default": ""
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 50
},
"offset": {
"type": "integer",
"title": "Offset",
"default": 0
},
"set_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Set Id"
},
"archived": {
"type": "boolean",
"title": "Archived",
"default": false
},
"platform": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Platform"
}
}
}
Перевести сделку на этап
move_deal
Перевести сделку на этап
move_deal Перевести сделку на другой этап той же воронки. Для отказа можно указать причину. Перевод пишется в ленту сделки с пометкой, что его сделал ключ API сотрудника.
move_deal(reason?: string, deal_id: integer, stage_id: integer)
// inputSchema
{
"type": "object",
"required": [
"deal_id",
"stage_id"
],
"properties": {
"reason": {
"type": "string",
"title": "Reason",
"default": ""
},
"deal_id": {
"type": "integer",
"title": "Deal Id"
},
"stage_id": {
"type": "integer",
"title": "Stage Id"
}
}
}
Опубликовать курс
publish_course
Опубликовать курс
publish_course Открывает курс ученикам или возвращает в черновики. Публикация идёт через лимит тарифа — ту же проверку, что кнопка в кабинете: считаются только опубликованные курсы, черновики нет. Если лимит исчерпан — 409 с текстом, что делать. Снять с публикации можно всегда.
publish_course(course_id: integer, published?: boolean)
// inputSchema
{
"type": "object",
"required": [
"course_id"
],
"properties": {
"course_id": {
"type": "integer",
"title": "Course Id"
},
"published": {
"type": "boolean",
"title": "Published",
"default": true
}
}
}
Где спотыкаются
question_stats
Где спотыкаются
question_stats По каждому вопросу теста: сколько ответов и какая доля верных по завершённым попыткам. Считаются ВСЕ попытки, а не последняя: вопрос, на котором спотыкаются с первого раза, виден только так. Ниже 50 % верных — вопрос стоит перечитать: он либо трудный, либо сформулирован неясно.
question_stats(test_id: integer)
// inputSchema
{
"type": "object",
"required": [
"test_id"
],
"properties": {
"test_id": {
"type": "integer",
"title": "Test Id"
}
}
}
Снять метку со сделки
remove_deal_tag
Снять метку со сделки
remove_deal_tag Снять со сделки метку по имени (или прежнему имени). Метка остаётся в справочнике и на других сделках. Если её на сделке не было, ответ `changed: false`.
remove_deal_tag(name: string, deal_id: integer)
// inputSchema
{
"type": "object",
"required": [
"deal_id",
"name"
],
"properties": {
"name": {
"type": "string",
"title": "Name"
},
"deal_id": {
"type": "integer",
"title": "Deal Id"
}
}
}
Очередь проверки
review_queue
Очередь проверки
review_queue Работы, которые ждут куратора: кто сдал, по какому заданию, когда и сколько часов ждёт. Отсортировано от самых старых. Принять или вернуть работу через API нельзя — только посмотреть очередь.
review_queue()
// inputSchema
{
"type": "object",
"required": [],
"properties": {}
}
Кто встал
stuck_students
Кто встал
stuck_students Ученики, которые не дошли до конца и ничего не делали дольше `days` дней (ни входа, ни пройденного урока). Это адрес для куратора, а не оценка ученика. `cohort_id` сужает до одного потока; без него — вся школа, включая записи без потока. Черновики курсов не считаются.
stuck_students(days?: integer, cohort_id?: any)
// inputSchema
{
"type": "object",
"required": [],
"properties": {
"days": {
"type": "integer",
"title": "Days",
"default": 7
},
"cohort_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Cohort Id"
}
}
}
Подсказать понятный путь ссылки
suggest_link_path
Подсказать понятный путь ссылки
suggest_link_path До трёх свободных понятных путей для новой ссылки, лучшие первыми: латиница, дефисы, до 40 знаков (go.школа.ru/osi-minikurs вместо go.школа.ru/k7Pq2a). Строятся из того, что передали: адрес, куда вести (url), название ссылки (title), подпись кнопки под роликом (button), название ролика (video_title) или ролик и кампания школы (set_id), кампания (campaign), заголовок страницы (page_title), код воронки бота (code), площадка (platform). Ничего не создаёт. Выбранный путь передайте в create_short_link (path); без path он выберет первый сам. Например: video_title «Модель OSI», button «Мини-курс» → model-osi-minikurs, minikurs, model-osi.
suggest_link_path(url?: string, code?: string, title?: string, button?: string, set_id?: any, campaign?: string, platform?: string, page_title?: string, video_title?: string)
// inputSchema
{
"type": "object",
"required": [],
"properties": {
"url": {
"type": "string",
"title": "Url",
"default": ""
},
"code": {
"type": "string",
"title": "Code",
"default": ""
},
"title": {
"type": "string",
"title": "Title",
"default": ""
},
"button": {
"type": "string",
"title": "Button",
"default": ""
},
"set_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Set Id"
},
"campaign": {
"type": "string",
"title": "Campaign",
"default": ""
},
"platform": {
"type": "string",
"title": "Platform",
"default": ""
},
"page_title": {
"type": "string",
"title": "Page Title",
"default": ""
},
"video_title": {
"type": "string",
"title": "Video Title",
"default": ""
}
}
}
Поправить метку сделок
update_deal_tag
Поправить метку сделок
update_deal_tag Переименовать метку (прежнее имя запомнится, бот и правила по нему её найдут), сменить цвет, группу (пустая строка убирает из группы) или признак источника. Удалить и склеить метки можно только в кабинете.
update_deal_tag(name?: any, color?: any, group?: any, tag_id: integer, is_source?: any)
// inputSchema
{
"type": "object",
"required": [
"tag_id"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name"
},
"color": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Color"
},
"group": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Group"
},
"tag_id": {
"type": "integer",
"title": "Tag Id"
},
"is_source": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Is Source"
}
}
}
Поправить черновик воронки
update_funnel_draft
Поправить черновик воронки
update_funnel_draft Заменить черновик воронки целиком, в том числе у работающей: люди идут по опубликованной версии, пока человек не опубликует правки в кабинете (там он увидит их списком). draft_version из get_funnel: если черновик успели поменять, ответ 409, прочитайте воронку заново. В ответе задетые блоки и проверка.
update_funnel_draft(name?: any, graph: object, funnel_id: integer, draft_version: integer)
// inputSchema
{
"type": "object",
"required": [
"funnel_id",
"graph",
"draft_version"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name"
},
"graph": {
"type": "object",
"title": "Graph",
"additionalProperties": true
},
"funnel_id": {
"type": "integer",
"title": "Funnel Id"
},
"draft_version": {
"type": "integer",
"title": "Draft Version"
}
}
}
Изменить урок
update_lesson
Изменить урок
update_lesson Меняет название и/или документ урока. Истории правок нет и замена необратима, поэтому при замене документа ОБЯЗАТЕЛЬНО передать `updated_at` из `get_lesson`: если урок с тех пор менялся — отказ 409, а не затирание. Сначала `get_lesson`, потом правка.
update_lesson(title?: any, document?: any, lesson_id: integer, updated_at?: any)
// inputSchema
{
"type": "object",
"required": [
"lesson_id"
],
"properties": {
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 200,
"minLength": 1
},
{
"type": "null"
}
],
"title": "Title"
},
"document": {
"anyOf": [
{
"type": "object",
"additionalProperties": true
},
{
"type": "null"
}
],
"title": "Document"
},
"lesson_id": {
"type": "integer",
"title": "Lesson Id"
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Updated At"
}
}
}
Поправить выключенный шаг правила
update_sales_rule
Поправить выключенный шаг правила
update_sales_rule Поправить шаг правила, пока он выключен: только присланные поля. Включённый шаг работает на людях, его меняет только владелец в кабинете: ответ 409.
update_sales_rule(goal?: any, event?: any, action?: any, tag_id?: any, rule_id: integer, stage_id?: any, funnel_id?: any, task_days?: any, task_text?: any, lost_reason?: any, delay_minutes?: any, target_tag_id?: any, skip_if_replied?: any, target_stage_id?: any)
// inputSchema
{
"type": "object",
"required": [
"rule_id"
],
"properties": {
"goal": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Goal"
},
"event": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Event"
},
"action": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Action"
},
"tag_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Tag Id"
},
"rule_id": {
"type": "integer",
"title": "Rule Id"
},
"stage_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Stage Id"
},
"funnel_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Funnel Id"
},
"task_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Task Days"
},
"task_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Task Text"
},
"lost_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Lost Reason"
},
"delay_minutes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Delay Minutes"
},
"target_tag_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Target Tag Id"
},
"skip_if_replied": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Skip If Replied"
},
"target_stage_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Target Stage Id"
}
}
}
Поправить этап продаж
update_sales_stage
Поправить этап продаж
update_sales_stage Переименовать этап, сменить цвет или переставить: after_stage_id это этап, после которого он встанет. Смысл этапа (в работе, успех, отказ) меняется только в кабинете.
update_sales_stage(name?: any, color?: any, stage_id: integer, after_stage_id?: any)
// inputSchema
{
"type": "object",
"required": [
"stage_id"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name"
},
"color": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Color"
},
"stage_id": {
"type": "integer",
"title": "Stage Id"
},
"after_stage_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "After Stage Id"
}
}
}
Поправить короткую ссылку
update_short_link
Поправить короткую ссылку
update_short_link Поменять, куда ведёт ссылка (url), её название (title) или убрать в архив (archived=true, вернуть: false). Короткий адрес не меняется: новый url сразу получат все, кто нажмёт ссылку под роликами, в письмах и в рекламе, поэтому сначала прочитайте ссылку (list_short_links) и убедитесь, что меняете ту. Ссылку в бота url переводит на адрес. Архивная ссылка продолжает вести людей, она только уходит из списка. Например: {"url": "https://it-ontime.ru/mikrotik-2026"}. Удаления нет: ссылка с переходами хранит историю.
update_short_link(url?: any, title?: any, link_id: integer, archived?: any)
// inputSchema
{
"type": "object",
"required": [
"link_id"
],
"properties": {
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Url"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Title"
},
"link_id": {
"type": "integer",
"title": "Link Id"
},
"archived": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Archived"
}
}
}
Вопросы, новые серверы, обсуждение MCP
t.me/rusmcp · t.me/RusMcp_bot