AnySkills
AnySkills online school: build courses, lessons and tests, publish, track student progress.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (23)
- LOWen get_school_summary
- LOWen publish_course
- LOWen list_cohorts
- LOWen cohort_progress
- LOWen stuck_students
- LOWen review_queue
- LOWen question_stats
- LOWen create_sales_stage
- LOWen list_deals
- LOWen get_deal
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"anyskills": {
"url": "https://mcp.anyskills.ru/"
}
}
}Puntos de conexión remotos
https://mcp.anyskills.ru/streamable-httpQué puede hacer
Inventario de herramientas
Herramientas (40)
🟢get_school_summary
Название школы, тариф, сколько курсов и из них опубликовано, сколько учеников и потоков, и что можно этому ключу. ИИ вызывает это первым при подключении и представляется человеку по-человечески: не списком инструментов, а тремя делами, ради которых школа его подключила, и одним примером вопроса. Цифры настоящие, из этого же ключа.
Esquema de entrada
{
"type": "object",
"properties": {},
"required": []
}🟢list_courses
Все курсы школы, включая черновики: название, опубликован ли, сколько модулей и уроков. Звать первым, чтобы узнать номера курсов для остальных запросов. Черновик отличается от опубликованного полем `is_published`; ученики видят только опубликованные.
Esquema de entrada
{
"type": "object",
"properties": {},
"required": []
}🟡create_course(title, description, access_mode)
Заводит курс-черновик: ученикам он не виден, пока не опубликован через `publish_course`. Черновиков можно держать сколько угодно на любом тарифе. Режим доступа: `open` — всё открыто сразу, `cohort` — по расписанию потока, `sequence` — по прогрессу ученика. Автор курса — хозяин ключа. Повтор с тем же Idempotency-Key вернёт тот же курс, а не создаст второй.
Esquema de entrada
{
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"title": "Title"
},
"description": {
"type": "string",
"title": "Description",
"default": ""
},
"access_mode": {
"type": "string",
"enum": [
"open",
"cohort",
"sequence"
],
"title": "Access Mode",
"default": "open"
}
},
"required": [
"title"
]
}Esquema de salida
{
"type": "object",
"additionalProperties": true
}🟢get_course(course_id)
Один курс целиком: модули по порядку, в каждом — уроки по порядку с типом (`lecture`, `practice`, `webinar`, `test`, `survey`), длительностью и признаком обязательности. Итоговый тест модуля, если есть, назван по номеру — его вопросы отдаёт `get_test`. Текст уроков сюда не входит: за ним `get_lesson`.
Esquema de entrada
{
"type": "object",
"properties": {
"course_id": {
"type": "integer",
"title": "Course Id"
}
},
"required": [
"course_id"
]
}🟢get_lesson(lesson_id)
Документ урока в формате Editor.js: список блоков `header`, `paragraph`, `list`, `quote`, `callout`, `code`, `table`, `image`, `video`, `file`. Это тот же формат, в котором урок принимается на запись, поэтому ответ годится как образец для `create_lesson`. У старых уроков документа может не быть — тогда `document` пуст, а содержимое лежит строками в `blocks`.
Esquema de entrada
{
"type": "object",
"properties": {
"lesson_id": {
"type": "integer",
"title": "Lesson Id"
}
},
"required": [
"lesson_id"
]
}🔴update_lesson(lesson_id, title, document, updated_at)
Меняет название и/или документ урока. Истории правок нет и замена необратима, поэтому при замене документа ОБЯЗАТЕЛЬНО передать `updated_at` из `get_lesson`: если урок с тех пор менялся — отказ 409, а не затирание. Сначала `get_lesson`, потом правка.
Esquema de entrada
{
"type": "object",
"properties": {
"lesson_id": {
"type": "integer",
"title": "Lesson Id"
},
"title": {
"anyOf": [
{
"type": "string",
"maxLength": 200,
"minLength": 1
},
{
"type": "null"
}
],
"title": "Title"
},
"document": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"title": "Document"
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Updated At"
}
},
"required": [
"lesson_id"
]
}🟢get_test(test_id)
Тест целиком: порог зачёта, число попыток и вопросы по порядку. У каждого вопроса тип (`one`, `many`, `text`, `number`, `open`), варианты с отметкой верного либо верный текст. Верные ответы отдаются, потому что ключ принадлежит сотруднику школы, а не ученику.
Esquema de entrada
{
"type": "object",
"properties": {
"test_id": {
"type": "integer",
"title": "Test Id"
}
},
"required": [
"test_id"
]
}🟡create_module(course_id, title)
Модуль встаёт в конец курса. Уроки добавляются в модуль отдельно, `create_lesson`. Порядок модулей потом можно поменять в кабинете.
Esquema de entrada
{
"type": "object",
"properties": {
"course_id": {
"type": "integer",
"title": "Course Id"
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"title": "Title"
}
},
"required": [
"course_id",
"title"
]
}Esquema de salida
{
"type": "object",
"additionalProperties": true
}🟡create_lesson(module_id, title, kind, duration_minutes, is_required, ...)
Урок встаёт в конец модуля. `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`.
Esquema de entrada
{
"type": "object",
"properties": {
"module_id": {
"type": "integer",
"title": "Module Id"
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"title": "Title"
},
"kind": {
"type": "string",
"enum": [
"lecture",
"practice",
"webinar",
"test",
"survey"
],
"title": "Kind",
"default": "lecture"
},
"duration_minutes": {
"anyOf": [
{
"type": "integer",
"maximum": 600,
"minimum": 0
},
{
"type": "null"
}
],
"title": "Duration Minutes"
},
"is_required": {
"type": "boolean",
"title": "Is Required",
"default": true
},
"document": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"title": "Document"
}
},
"required": [
"module_id",
"title"
]
}Esquema de salida
{
"type": "object",
"additionalProperties": true
}🟡create_test(title, description, pass_score, max_attempts, questions, ...)
Тест целиком за один вызов: параметры и вопросы по порядку. Типы вопросов: `one` (один из списка, ровно один верный), `many` (несколько верных), `text` и `number` (верный ответ в `correct_text`), `open` (ответ своими словами; `reference_answer` и `criteria` помогают проверке). Куда положить: `lesson_id` — блоком в конец урока, `module_id` — итоговым тестом модуля; можно и то и другое, можно ничего.
Esquema de entrada
{
"type": "object",
"properties": {
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"title": "Title"
},
"description": {
"type": "string",
"title": "Description",
"default": ""
},
"pass_score": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"title": "Pass Score",
"default": 70
},
"max_attempts": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"title": "Max Attempts",
"default": 0
},
"questions": {
"items": {
"properties": {
"text": {
"type": "string",
"minLength": 1,
"title": "Text"
},
"kind": {
"type": "string",
"enum": [
"one",
"many",
"text",
"number",
"open"
],
"title": "Kind",
"default": "one"
},
"weight": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"title": "Weight",
"default": 1
},
"options": {
"items": {
"properties": {
"text": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"title": "Text"
},
"is_correct": {
"type": "boolean",
"title": "Is Correct",
"default": false
}
},
"type": "object",
"required": [
"text"
],
"title": "OptionIn"
},
"type": "array",
"title": "Options",
"default": []
},
"correct_text": {
"type": "string",
"title": "Correct Text",
"default": ""
},
"reference_answer": {
"type": "string",
"title": "Reference Answer",
"default": ""
},
"criteria": {
"type": "string",
"title": "Criteria",
"default": ""
}
},
"type": "object",
"required": [
"text"
],
"title": "QuestionIn"
},
"type": "array",
"minItems": 1,
"title": "Questions"
},
"lesson_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Lesson Id"
},
"module_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Module Id"
}
},
"required": [
"title",
"questions"
]
}🟡publish_course(course_id, published)
Открывает курс ученикам или возвращает в черновики. Публикация идёт через лимит тарифа — ту же проверку, что кнопка в кабинете: считаются только опубликованные курсы, черновики нет. Если лимит исчерпан — 409 с текстом, что делать. Снять с публикации можно всегда.
Esquema de entrada
{
"type": "object",
"properties": {
"course_id": {
"type": "integer",
"title": "Course Id"
},
"published": {
"type": "boolean",
"title": "Published",
"default": true
}
},
"required": [
"course_id"
]
}🟢list_cohorts
Потоки: курс, даты старта и окончания, сколько записано. Поток — группа учеников с общим расписанием; прогресс по нему — `cohort_progress`. Ученики вне потоков (запись без потока) сюда не попадают — их ищет `stuck_students` без `cohort_id`.
Esquema de entrada
{
"type": "object",
"properties": {},
"required": []
}🟢cohort_progress(cohort_id)
По каждому ученику потока: процент курса (считается по обязательным опубликованным урокам, как в кабинете), когда последний раз заходил или проходил урок, сколько дней с тех пор. Плюс доходимость потока — доля тех, кто дошёл до 100 %. Имена — только по ступени 3 (см. описание сервера), иначе «Ученик 14».
Esquema de entrada
{
"type": "object",
"properties": {
"cohort_id": {
"type": "integer",
"title": "Cohort Id"
}
},
"required": [
"cohort_id"
]
}🟢stuck_students(days, cohort_id)
Ученики, которые не дошли до конца и ничего не делали дольше `days` дней (ни входа, ни пройденного урока). Это адрес для куратора, а не оценка ученика. `cohort_id` сужает до одного потока; без него — вся школа, включая записи без потока. Черновики курсов не считаются.
Esquema de entrada
{
"type": "object",
"properties": {
"days": {
"type": "integer",
"title": "Days",
"default": 7
},
"cohort_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Cohort Id"
}
},
"required": []
}🟢review_queue
Работы, которые ждут куратора: кто сдал, по какому заданию, когда и сколько часов ждёт. Отсортировано от самых старых. Принять или вернуть работу через API нельзя — только посмотреть очередь.
Esquema de entrada
{
"type": "object",
"properties": {},
"required": []
}🟢question_stats(test_id)
По каждому вопросу теста: сколько ответов и какая доля верных по завершённым попыткам. Считаются ВСЕ попытки, а не последняя: вопрос, на котором спотыкаются с первого раза, виден только так. Ниже 50 % верных — вопрос стоит перечитать: он либо трудный, либо сформулирован неясно.
Esquema de entrada
{
"type": "object",
"properties": {
"test_id": {
"type": "integer",
"title": "Test Id"
}
},
"required": [
"test_id"
]
}🟢list_sales_stages
Этапы воронки продаж школы по порядку: номер, название и смысл (open — в работе, won — успех, lost — отказ). Нужны, чтобы перевести сделку или отобрать сделки на одном этапе.
Esquema de entrada
{
"type": "object",
"properties": {},
"required": []
}🟡create_sales_stage(name, color, after_stage_id)
Новый этап «в работе» в воронке продаж: сразу после after_stage_id, а без него перед «Оплачено» и «Отказом». Цвет: secondary, azure, blue, purple, yellow, orange, green, red. Людям это ничего не шлёт. Удалить этап может только человек в кабинете.
Esquema de entrada
{
"type": "object",
"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"
}
},
"required": [
"name"
]
}🟢list_deals(stage_id, open_only, limit, updated_since, tag)
Сделки школы, новые сверху: этап, курс, сумма, метки, откуда пришёл человек. Например, «какие сделки ждут оплаты»: отбор по этапу, «кто молчит»: по метке (`tag`, имя метки или её прежнее имя). Люди без имён, если у ключа нет области «имена» или школа не разрешила ИИ персональные данные. Не больше 200 за раз.
Esquema de entrada
{
"type": "object",
"properties": {
"stage_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Stage Id"
},
"open_only": {
"type": "boolean",
"title": "Open Only",
"default": true
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 50
},
"updated_since": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"title": "Updated Since"
},
"tag": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tag"
}
},
"required": []
}🟢get_deal(deal_id)
Одна сделка: поля, человек и последние 30 событий ленты (заметки менеджеров, переводы, открытие доступа, оплаты). Помогает ответить, что с человеком происходит и о чём с ним договорились.
Esquema de entrada
{
"type": "object",
"properties": {
"deal_id": {
"type": "integer",
"title": "Deal Id"
}
},
"required": [
"deal_id"
]
}🟡create_lead(name, email, phone, telegram, comment, ...)
Завести заявку: человек и сделка одним запросом. Нужна почта, телефон или Telegram. Человек, который уже есть, не заводится второй раз; повторная заявка про то же ложится заметкой в открытую сделку. Заголовок `Idempotency-Key` защищает от двойной отправки.
Esquema de entrada
{
"type": "object",
"properties": {
"name": {
"type": "string",
"title": "Name",
"default": ""
},
"email": {
"type": "string",
"title": "Email",
"default": ""
},
"phone": {
"type": "string",
"title": "Phone",
"default": ""
},
"telegram": {
"type": "string",
"title": "Telegram",
"default": ""
},
"comment": {
"type": "string",
"title": "Comment",
"default": ""
},
"course_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Course Id"
},
"utm_source": {
"type": "string",
"title": "Utm Source",
"default": ""
},
"utm_medium": {
"type": "string",
"title": "Utm Medium",
"default": ""
},
"utm_campaign": {
"type": "string",
"title": "Utm Campaign",
"default": ""
},
"utm_content": {
"type": "string",
"title": "Utm Content",
"default": ""
},
"utm_term": {
"type": "string",
"title": "Utm Term",
"default": ""
}
},
"required": []
}⚪move_deal(deal_id, stage_id, reason)
Перевести сделку на другой этап той же воронки. Для отказа можно указать причину. Перевод пишется в ленту сделки с пометкой, что его сделал ключ API сотрудника.
Esquema de entrada
{
"type": "object",
"properties": {
"deal_id": {
"type": "integer",
"title": "Deal Id"
},
"stage_id": {
"type": "integer",
"title": "Stage Id"
},
"reason": {
"type": "string",
"title": "Reason",
"default": ""
}
},
"required": [
"deal_id",
"stage_id"
]
}🟡add_deal_note(deal_id, text)
Добавить заметку в ленту сделки: итог звонка, договорённость, возражение. Заметку увидят менеджеры в карточке сделки.
Esquema de entrada
{
"type": "object",
"properties": {
"deal_id": {
"type": "integer",
"title": "Deal Id"
},
"text": {
"type": "string",
"title": "Text"
}
},
"required": [
"deal_id",
"text"
]
}🟢list_deal_tags
Справочник меток сделок школы: имя, цвет, группа «одна из» (у сделки одна метка группы, новая снимает прежнюю), признак источника (откуда пришёл человек), прежние имена и на скольких сделках метка стоит. Нужен, чтобы поставить метку существующим именем, а не завести дубль.
Esquema de entrada
{
"type": "object",
"properties": {},
"required": []
}🟡create_deal_tag(name, color, group, is_source)
Новая метка в справочнике сделок. group: имя группы «одна из» (у сделки одна метка группы, например «Урок»), новая группа заведётся. is_source: метка говорит, откуда пришёл человек. Имя, занятое другой меткой или её прежним именем, отказ: возьмите ту метку.
Esquema de entrada
{
"type": "object",
"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
}
},
"required": [
"name"
]
}🟡add_deal_tag(deal_id, name)
Поставить сделке метку по имени. Имя сравнивается без регистра и с прежними именами меток; такой метки нет, она заводится. Если метка в группе «одна из», прежняя метка группы снимается сама. Повторная метка ничего не меняет. Событие ложится в ленту сделки.
Esquema de entrada
{
"type": "object",
"properties": {
"deal_id": {
"type": "integer",
"title": "Deal Id"
},
"name": {
"type": "string",
"title": "Name"
}
},
"required": [
"deal_id",
"name"
]
}🔴remove_deal_tag(deal_id, name)
Снять со сделки метку по имени (или прежнему имени). Метка остаётся в справочнике и на других сделках. Если её на сделке не было, ответ `changed: false`.
Esquema de entrada
{
"type": "object",
"properties": {
"deal_id": {
"type": "integer",
"title": "Deal Id"
},
"name": {
"type": "string",
"title": "Name"
}
},
"required": [
"deal_id",
"name"
]
}🟡add_deal_task(deal_id, text, due_at)
Поставить задачу по сделке со сроком: позвонить, отправить договор. Ответственный — хозяин ключа. Срок обязателен: задача без срока не попадёт в «Сегодня» и будет забыта.
Esquema de entrada
{
"type": "object",
"properties": {
"deal_id": {
"type": "integer",
"title": "Deal Id"
},
"text": {
"type": "string",
"title": "Text"
},
"due_at": {
"type": "string",
"format": "date-time",
"title": "Due At"
}
},
"required": [
"deal_id",
"text",
"due_at"
]
}🟡update_sales_stage(stage_id, name, color, after_stage_id)
Переименовать этап, сменить цвет или переставить: after_stage_id это этап, после которого он встанет. Смысл этапа (в работе, успех, отказ) меняется только в кабинете.
Esquema de entrada
{
"type": "object",
"properties": {
"stage_id": {
"type": "integer",
"title": "Stage Id"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name"
},
"color": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Color"
},
"after_stage_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "After Stage Id"
}
},
"required": [
"stage_id"
]
}🟡update_deal_tag(tag_id, name, color, group, is_source)
Переименовать метку (прежнее имя запомнится, бот и правила по нему её найдут), сменить цвет, группу (пустая строка убирает из группы) или признак источника. Удалить и склеить метки можно только в кабинете.
Esquema de entrada
{
"type": "object",
"properties": {
"tag_id": {
"type": "integer",
"title": "Tag Id"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name"
},
"color": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Color"
},
"group": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Group"
},
"is_source": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Is Source"
}
},
"required": [
"tag_id"
]
}🟢list_sales_rules
Шаги правил продаж: повод (event tag или stage, с номером метки или этапа), через сколько минут, что сделать (action: bot запустить воронку бота, tag_add, tag_remove, stage, task, goal), включён ли и почему может не сработать (problem).
Esquema de entrada
{
"type": "object",
"properties": {},
"required": []
}🔴create_sales_rule(event, tag_id, stage_id, delay_minutes, action, ...)
Шаг правила продаж, ВСЕГДА выключенный: включает его владелец в кабинете, до этого он ничего не делает. Повод: 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: не делать, если человек ответил.
Esquema de entrada
{
"type": "object",
"properties": {
"event": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Event"
},
"tag_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Tag Id"
},
"stage_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Stage Id"
},
"delay_minutes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Delay Minutes"
},
"action": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Action"
},
"funnel_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Funnel Id"
},
"target_tag_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Target Tag Id"
},
"target_stage_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Target Stage Id"
},
"lost_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Lost Reason"
},
"task_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Task Text"
},
"task_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Task Days"
},
"goal": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Goal"
},
"skip_if_replied": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Skip If Replied"
}
},
"required": []
}🟡update_sales_rule(rule_id, event, tag_id, stage_id, delay_minutes, ...)
Поправить шаг правила, пока он выключен: только присланные поля. Включённый шаг работает на людях, его меняет только владелец в кабинете: ответ 409.
Esquema de entrada
{
"type": "object",
"properties": {
"rule_id": {
"type": "integer",
"title": "Rule Id"
},
"event": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Event"
},
"tag_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Tag Id"
},
"stage_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Stage Id"
},
"delay_minutes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Delay Minutes"
},
"action": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Action"
},
"funnel_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Funnel Id"
},
"target_tag_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Target Tag Id"
},
"target_stage_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Target Stage Id"
},
"lost_reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Lost Reason"
},
"task_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Task Text"
},
"task_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Task Days"
},
"goal": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Goal"
},
"skip_if_replied": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Skip If Replied"
}
},
"required": [
"rule_id"
]
}🟢list_bots
Боты школы в Telegram: номер, название, адрес и работает ли. Номер бота нужен, чтобы читать его воронки и собирать новые.
Esquema de entrada
{
"type": "object",
"properties": {},
"required": []
}🟢list_funnels(bot_id)
Воронки бота: состояние (draft — черновик, active — работает, paused — остановлена), есть ли неопубликованные правки и чьи.
Esquema de entrada
{
"type": "object",
"properties": {
"bot_id": {
"type": "integer",
"title": "Bot Id"
}
},
"required": [
"bot_id"
]
}🟡create_funnel_draft(bot_id, name, graph)
Новая воронка бота черновиком. Людям ничего не уходит: опубликовать её может только человек в кабинете, ссылка в ответе (editor_url). Формат воронки: get_funnel_format. В ответе проверка (errors, warnings): исправьте ошибки правкой черновика.
Esquema de entrada
{
"type": "object",
"properties": {
"bot_id": {
"type": "integer",
"title": "Bot Id"
},
"name": {
"type": "string",
"title": "Name"
},
"graph": {
"additionalProperties": true,
"type": "object",
"title": "Graph"
}
},
"required": [
"bot_id",
"name",
"graph"
]
}🟢get_funnel_format
Формат воронки: блоки, их настройки и стрелки. Прочитать до того, как собирать или править воронку: черновик присылается целиком в этом формате.
Esquema de entrada
{
"type": "object",
"properties": {},
"required": []
}🟢get_funnel(funnel_id)
Черновик и опубликованная версия воронки, номер версии черновика (нужен для правки) и сколько людей сейчас стоит на каждом блоке опубликованной версии. Люди считаются числом, без имён.
Esquema de entrada
{
"type": "object",
"properties": {
"funnel_id": {
"type": "integer",
"title": "Funnel Id"
}
},
"required": [
"funnel_id"
]
}🟢check_funnel(funnel_id)
Та же проверка, что перед публикацией, но ничего не публикует. errors: не опубликуется, пока не исправить; warnings: можно, но стоит посмотреть. У каждой записи номер блока (node) и текст.
Esquema de entrada
{
"type": "object",
"properties": {
"funnel_id": {
"type": "integer",
"title": "Funnel Id"
}
},
"required": [
"funnel_id"
]
}🔴update_funnel_draft(funnel_id, graph, draft_version, name)
Заменить черновик воронки целиком, в том числе у работающей: люди идут по опубликованной версии, пока человек не опубликует правки в кабинете (там он увидит их списком). draft_version из get_funnel: если черновик успели поменять, ответ 409, прочитайте воронку заново. В ответе задетые блоки и проверка.
Esquema de entrada
{
"type": "object",
"properties": {
"funnel_id": {
"type": "integer",
"title": "Funnel Id"
},
"graph": {
"additionalProperties": true,
"type": "object",
"title": "Graph"
},
"draft_version": {
"type": "integer",
"title": "Draft Version"
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Name"
}
},
"required": [
"funnel_id",
"graph",
"draft_version"
]
}Prompts recomendados
get_school_summaryget_school_summarylist_courseslist_courseslist_coursesget_school_summaryComunidad
Evidencia