AnySkills

AnySkills online school: build courses, lessons and tests, publish, track student progress.

사용해야 할까요

품질 및 안전성

B
설명 품질
73%
스키마 완전성
64%
이름 품질
98%
오염 위험
60%
권한 일치
100%
프로토콜 준수
100%

발견 사항 (26)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains URL to non-standard domaincreate_short_link에서
  • MEDIUMTool description contains URL to non-standard domainupdate_short_link에서
  • LOWTool 'get_school_summary' description lacks action verbget_school_summary에서
  • LOWTool 'publish_course' description lacks action verbpublish_course에서
  • LOWTool 'list_cohorts' description lacks action verblist_cohorts에서
  • LOWTool 'cohort_progress' description lacks action verbcohort_progress에서
  • LOWTool 'stuck_students' description lacks action verbstuck_students에서
  • LOWTool 'review_queue' description lacks action verbreview_queue에서
  • LOWTool 'question_stats' description lacks action verbquestion_stats에서

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~11,330토큰 (도구 정의)
~874 B일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 8.85%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "anyskills": {
      "url": "https://mcp.anyskills.ru/"
    }
  }
}

원격 엔드포인트

https://mcp.anyskills.ru/streamable-http

할 수 있는 일

도구 목록

도구 (45)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢get_school_summary

Название школы, тариф, сколько курсов и из них опубликовано, сколько учеников и потоков, и что можно этому ключу. ИИ вызывает это первым при подключении и представляется человеку по-человечески: не списком инструментов, а тремя делами, ради которых школа его подключила, и одним примером вопроса. Цифры настоящие, из этого же ключа.

입력 스키마

{
  "type": "object",
  "properties": {},
  "required": []
}
🟢list_courses

Все курсы школы, включая черновики: название, опубликован ли, сколько модулей и уроков. Звать первым, чтобы узнать номера курсов для остальных запросов. Черновик отличается от опубликованного полем `is_published`; ученики видят только опубликованные.

입력 스키마

{
  "type": "object",
  "properties": {},
  "required": []
}
🟡create_course(title, description, access_mode)

Заводит курс-черновик: ученикам он не виден, пока не опубликован через `publish_course`. Черновиков можно держать сколько угодно на любом тарифе. Режим доступа: `open` — всё открыто сразу, `cohort` — по расписанию потока, `sequence` — по прогрессу ученика. Автор курса — хозяин ключа. Повтор с тем же Idempotency-Key вернёт тот же курс, а не создаст второй.

입력 스키마

{
  "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"
  ]
}

출력 스키마

{
  "type": "object",
  "additionalProperties": true
}
🟢get_course(course_id)

Один курс целиком: модули по порядку, в каждом — уроки по порядку с типом (`lecture`, `practice`, `webinar`, `test`, `survey`), длительностью и признаком обязательности. Итоговый тест модуля, если есть, назван по номеру — его вопросы отдаёт `get_test`. Текст уроков сюда не входит: за ним `get_lesson`.

입력 스키마

{
  "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`.

입력 스키마

{
  "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`, потом правка.

입력 스키마

{
  "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`), варианты с отметкой верного либо верный текст. Верные ответы отдаются, потому что ключ принадлежит сотруднику школы, а не ученику.

입력 스키마

{
  "type": "object",
  "properties": {
    "test_id": {
      "type": "integer",
      "title": "Test Id"
    }
  },
  "required": [
    "test_id"
  ]
}
🟡create_module(course_id, title)

Модуль встаёт в конец курса. Уроки добавляются в модуль отдельно, `create_lesson`. Порядок модулей потом можно поменять в кабинете.

입력 스키마

{
  "type": "object",
  "properties": {
    "course_id": {
      "type": "integer",
      "title": "Course Id"
    },
    "title": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "title": "Title"
    }
  },
  "required": [
    "course_id",
    "title"
  ]
}

출력 스키마

{
  "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`.

입력 스키마

{
  "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"
  ]
}

출력 스키마

{
  "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` — итоговым тестом модуля; можно и то и другое, можно ничего.

입력 스키마

{
  "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 с текстом, что делать. Снять с публикации можно всегда.

입력 스키마

{
  "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`.

입력 스키마

{
  "type": "object",
  "properties": {},
  "required": []
}
🟢cohort_progress(cohort_id)

По каждому ученику потока: процент курса (считается по обязательным опубликованным урокам, как в кабинете), когда последний раз заходил или проходил урок, сколько дней с тех пор. Плюс доходимость потока — доля тех, кто дошёл до 100 %. Имена — только по ступени 3 (см. описание сервера), иначе «Ученик 14».

입력 스키마

{
  "type": "object",
  "properties": {
    "cohort_id": {
      "type": "integer",
      "title": "Cohort Id"
    }
  },
  "required": [
    "cohort_id"
  ]
}
🟢stuck_students(days, cohort_id)

Ученики, которые не дошли до конца и ничего не делали дольше `days` дней (ни входа, ни пройденного урока). Это адрес для куратора, а не оценка ученика. `cohort_id` сужает до одного потока; без него — вся школа, включая записи без потока. Черновики курсов не считаются.

입력 스키마

{
  "type": "object",
  "properties": {
    "days": {
      "type": "integer",
      "title": "Days",
      "default": 7
    },
    "cohort_id": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Cohort Id"
    }
  },
  "required": []
}
🟢review_queue

Работы, которые ждут куратора: кто сдал, по какому заданию, когда и сколько часов ждёт. Отсортировано от самых старых. Принять или вернуть работу через API нельзя — только посмотреть очередь.

입력 스키마

{
  "type": "object",
  "properties": {},
  "required": []
}
🟢question_stats(test_id)

По каждому вопросу теста: сколько ответов и какая доля верных по завершённым попыткам. Считаются ВСЕ попытки, а не последняя: вопрос, на котором спотыкаются с первого раза, виден только так. Ниже 50 % верных — вопрос стоит перечитать: он либо трудный, либо сформулирован неясно.

입력 스키마

{
  "type": "object",
  "properties": {
    "test_id": {
      "type": "integer",
      "title": "Test Id"
    }
  },
  "required": [
    "test_id"
  ]
}
🟢list_sales_stages

Этапы воронки продаж школы по порядку: номер, название и смысл (open — в работе, won — успех, lost — отказ). Нужны, чтобы перевести сделку или отобрать сделки на одном этапе.

입력 스키마

{
  "type": "object",
  "properties": {},
  "required": []
}
🟡create_sales_stage(name, color, after_stage_id)

Новый этап «в работе» в воронке продаж: сразу после after_stage_id, а без него перед «Оплачено» и «Отказом». Цвет: secondary, azure, blue, purple, yellow, orange, green, red. Людям это ничего не шлёт. Удалить этап может только человек в кабинете.

입력 스키마

{
  "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 за раз.

입력 스키마

{
  "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 событий ленты (заметки менеджеров, переводы, открытие доступа, оплаты). Помогает ответить, что с человеком происходит и о чём с ним договорились.

입력 스키마

{
  "type": "object",
  "properties": {
    "deal_id": {
      "type": "integer",
      "title": "Deal Id"
    }
  },
  "required": [
    "deal_id"
  ]
}
🟡create_lead(name, email, phone, telegram, comment, ...)

Завести заявку: человек и сделка одним запросом. Нужна почта, телефон или Telegram. Человек, который уже есть, не заводится второй раз; повторная заявка про то же ложится заметкой в открытую сделку. Заголовок `Idempotency-Key` защищает от двойной отправки.

입력 스키마

{
  "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 сотрудника.

입력 스키마

{
  "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)

Добавить заметку в ленту сделки: итог звонка, договорённость, возражение. Заметку увидят менеджеры в карточке сделки.

입력 스키마

{
  "type": "object",
  "properties": {
    "deal_id": {
      "type": "integer",
      "title": "Deal Id"
    },
    "text": {
      "type": "string",
      "title": "Text"
    }
  },
  "required": [
    "deal_id",
    "text"
  ]
}
🟢list_deal_tags

Справочник меток сделок школы: имя, цвет, группа «одна из» (у сделки одна метка группы, новая снимает прежнюю), признак источника (откуда пришёл человек), прежние имена и на скольких сделках метка стоит. Нужен, чтобы поставить метку существующим именем, а не завести дубль.

입력 스키마

{
  "type": "object",
  "properties": {},
  "required": []
}
🟡create_deal_tag(name, color, group, is_source)

Новая метка в справочнике сделок. group: имя группы «одна из» (у сделки одна метка группы, например «Урок»), новая группа заведётся. is_source: метка говорит, откуда пришёл человек. Имя, занятое другой меткой или её прежним именем, отказ: возьмите ту метку.

입력 스키마

{
  "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)

Поставить сделке метку по имени. Имя сравнивается без регистра и с прежними именами меток; такой метки нет, она заводится. Если метка в группе «одна из», прежняя метка группы снимается сама. Повторная метка ничего не меняет. Событие ложится в ленту сделки.

입력 스키마

{
  "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`.

입력 스키마

{
  "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)

Поставить задачу по сделке со сроком: позвонить, отправить договор. Ответственный — хозяин ключа. Срок обязателен: задача без срока не попадёт в «Сегодня» и будет забыта.

입력 스키마

{
  "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 это этап, после которого он встанет. Смысл этапа (в работе, успех, отказ) меняется только в кабинете.

입력 스키마

{
  "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)

Переименовать метку (прежнее имя запомнится, бот и правила по нему её найдут), сменить цвет, группу (пустая строка убирает из группы) или признак источника. Удалить и склеить метки можно только в кабинете.

입력 스키마

{
  "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).

입력 스키마

{
  "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: не делать, если человек ответил.

입력 스키마

{
  "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.

입력 스키마

{
  "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: номер, название, адрес и работает ли. Номер бота нужен, чтобы читать его воронки и собирать новые.

입력 스키마

{
  "type": "object",
  "properties": {},
  "required": []
}
🟢list_funnels(bot_id)

Воронки бота: состояние (draft — черновик, active — работает, paused — остановлена), есть ли неопубликованные правки и чьи.

입력 스키마

{
  "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): исправьте ошибки правкой черновика.

입력 스키마

{
  "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

Формат воронки: блоки, их настройки и стрелки. Прочитать до того, как собирать или править воронку: черновик присылается целиком в этом формате.

입력 스키마

{
  "type": "object",
  "properties": {},
  "required": []
}
🟢get_funnel(funnel_id)

Черновик и опубликованная версия воронки, номер версии черновика (нужен для правки) и сколько людей сейчас стоит на каждом блоке опубликованной версии. Люди считаются числом, без имён.

입력 스키마

{
  "type": "object",
  "properties": {
    "funnel_id": {
      "type": "integer",
      "title": "Funnel Id"
    }
  },
  "required": [
    "funnel_id"
  ]
}
🟢check_funnel(funnel_id)

Та же проверка, что перед публикацией, но ничего не публикует. errors: не опубликуется, пока не исправить; warnings: можно, но стоит посмотреть. У каждой записи номер блока (node) и текст.

입력 스키마

{
  "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, прочитайте воронку заново. В ответе задетые блоки и проверка.

입력 스키마

{
  "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"
  ]
}
🟢list_short_links(q, platform, set_id, archived, limit, ...)

Короткие ссылки школы, новые сверху: короткий адрес, куда ведёт (адрес или бот с кодом воронки), площадка, ролик или кампания, метки и цифры за последние 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 показывает, сколько всего.

입력 스키마

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "title": "Q",
      "default": ""
    },
    "platform": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Platform"
    },
    "set_id": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Set Id"
    },
    "archived": {
      "type": "boolean",
      "title": "Archived",
      "default": false
    },
    "limit": {
      "type": "integer",
      "title": "Limit",
      "default": 50
    },
    "offset": {
      "type": "integer",
      "title": "Offset",
      "default": 0
    }
  },
  "required": []
}
🟡create_short_link(url, bot_username, start_code, platform, path, ...)

Короткая ссылка на домене школы: на адрес (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 с текстом для человека.

입력 스키마

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "title": "Url",
      "default": ""
    },
    "bot_username": {
      "type": "string",
      "title": "Bot Username",
      "default": ""
    },
    "start_code": {
      "type": "string",
      "title": "Start Code",
      "default": ""
    },
    "platform": {
      "type": "string",
      "title": "Platform",
      "default": ""
    },
    "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"
    },
    "utm": {
      "anyOf": [
        {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "title": "Utm"
    }
  },
  "required": []
}
🟢get_link_stats(link_id, since, until, days)

Что принесла одна ссылка за период. 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.

입력 스키마

{
  "type": "object",
  "properties": {
    "link_id": {
      "type": "integer",
      "title": "Link Id"
    },
    "since": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "title": "Since"
    },
    "until": {
      "anyOf": [
        {
          "type": "string",
          "format": "date"
        },
        {
          "type": "null"
        }
      ],
      "title": "Until"
    },
    "days": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Days"
    }
  },
  "required": [
    "link_id"
  ]
}
🟢suggest_link_path(url, title, button, platform, set_id, ...)

До трёх свободных понятных путей для новой ссылки, лучшие первыми: латиница, дефисы, до 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.

입력 스키마

{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "title": "Url",
      "default": ""
    },
    "title": {
      "type": "string",
      "title": "Title",
      "default": ""
    },
    "button": {
      "type": "string",
      "title": "Button",
      "default": ""
    },
    "platform": {
      "type": "string",
      "title": "Platform",
      "default": ""
    },
    "set_id": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "title": "Set Id"
    },
    "video_title": {
      "type": "string",
      "title": "Video Title",
      "default": ""
    },
    "campaign": {
      "type": "string",
      "title": "Campaign",
      "default": ""
    },
    "page_title": {
      "type": "string",
      "title": "Page Title",
      "default": ""
    },
    "code": {
      "type": "string",
      "title": "Code",
      "default": ""
    }
  },
  "required": []
}
🔴update_short_link(link_id, url, title, archived)

Поменять, куда ведёт ссылка (url), её название (title) или убрать в архив (archived=true, вернуть: false). Короткий адрес не меняется: новый url сразу получат все, кто нажмёт ссылку под роликами, в письмах и в рекламе, поэтому сначала прочитайте ссылку (list_short_links) и убедитесь, что меняете ту. Ссылку в бота url переводит на адрес. Архивная ссылка продолжает вести людей, она только уходит из списка. Например: {"url": "https://it-ontime.ru/mikrotik-2026"}. Удаления нет: ссылка с переходами хранит историю.

입력 스키마

{
  "type": "object",
  "properties": {
    "link_id": {
      "type": "integer",
      "title": "Link Id"
    },
    "url": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Url"
    },
    "title": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "title": "Title"
    },
    "archived": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "title": "Archived"
    }
  },
  "required": [
    "link_id"
  ]
}

권장 프롬프트

retrieve_data
Get details about [item] from AnySkills
예상 도구: get_school_summary
fetch_info
Fetch [information type] using AnySkills
예상 도구: get_school_summary
list_items
List all [items] available in AnySkills
예상 도구: list_courses
browse_collection
Show me the [collection] from AnySkills
예상 도구: list_courses
explore_workflow
List available [items], then get details for each one using AnySkills
예상 도구: list_coursesget_school_summary

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 45개
검증됨버전이 기록되지 않음도구 40개
검증됨버전이 기록되지 않음도구 16개