Навык (skill) для ИИ для работы с сервисом
Эта инструкция помогает поручить ИИ-агенту рутину в боте «Откуда подписки». Вы пишете задач у обычными словами, а агент сам создаёт яндекс-интеграции и трекинг-ссылки в ваших каналах. Ссылки на канал, id и JSON собирать не нужно — это делает агент.
Навык (skill) — это запись инструкции у агента. Один раз отправляете ему эту страницу, и дальше он выполняет такие задачи сам.
В этой инструкции мы по шагам разберём, как подключить навык и ставить агенту задачи обычными словами.
Как пользоваться навыком
Шаг 1 — Отправьте агенту ссылку на эту страницу
Скопируйте адрес этой страницы и отправьте его ИИ-агенту. Попросите сделать навык (skill) по ней для бота «Откуда подписки».
Ссылка: https://doc.tgtrack.ru/doc/ai-skill
Шаг 2 — Напишите, что нужно сделать
Дальше в чате пишите задачу обычными словами. Например: «сделай новую интеграцию в канале Реклама заработает».
Агент сам запросит персональный ключ и напишет, что нажать в боте.
Шаг 3 — Создайте персональный ключ, когда агент попросит
Если ключа ещё нет, агент остановится и попросит его создать. Сделайте так:
Telegram
Max
- Откройте бота «Откуда подписки»: tgTrack_bot.
- Отправьте команду
/personal_api - Нажмите
Создать персональный ключ.

- Пришлите ключ агенту в этот же чат. Бот пришлёт ключ в ответ.

- Откройте бота «Откуда подписки»: бот в MAX.
- Отправьте команду
/personal_api - Нажмите
Создать персональный ключ.

- Пришлите ключ агенту в этот же чат. Бот пришлёт ключ в ответ.

Не показывайте ключ целиком в других чатах, тикетах и логах. Если нужно перевыпустить ключ: та же команда /personal_api, кнопка Перевыпустить персональный ключ. Старый ключ перестаёт работать сразу.
Так сохраняется доступ к Яндекс.Метрике. Сделайте одну интеграцию вручную, дальше агент создаст остальные сам.
- Telegram:
/integration_yandex - MAX:
/yandex
Если канал ещё не подключён к боту:
- Telegram:
/add_channel - MAX:
/add_chat
Для ИИ-агента
Человеку этот раздел читать не обязательно. Дальше — инструкция для ИИ-агента.
Прочитай страницу целиком и сделай навык. Человек формулирует задачу обычными словами. З апросы к API отправляешь ты.
Перед каждой задачей заново открой https://bot-api.tgtrack.ru/personal-api.md. Если инструкция на странице отличается от навыка, обнови навык по свежей инструкции и только потом выполняй задачу. По устаревшему навыку запросы не отправляй.
Один контракт для Telegram и MAX. Отличаются только базовый URL и вид ссылки на канал.
Ключ даёт создавать яндекс-интеграции и трекинг-ссылки в каналах, к которым у владельца ключа есть доступ. Чат-методы (user_did_start_bot, send_reach_goal, вебхуки) этим ключом вызывать нельзя.
Если ключа ещё нет, API не вызывай. Остановись и попроси человека создать персональный ключ. Напиши ему эти шаги:
- Откройте бота «Откуда подписки»: в Telegram это бот tgtrack, в MAX — бот tgtrack.
- Отправьте команду
/personal_api - Нажмите «Создать персональный ключ».
- Пришлите ключ в этот чат.
Ключ — секрет. Храни его в секрете навыка. В ответах человеку ключ целиком не показывай, если он сам не попросил. В другие чаты, тикеты и логи ключ не пиши.
Перевыпуск: та же команда /personal_api, кнопка «Перевыпустить персональный ключ». Старый ключ перестаёт работать сразу. После перевыпуска попроси новый ключ.
Если при создании яндекс-интеграции пришёл ответ No live Yandex Metrika access. Create one integration with /integration_yandex in the bot first., попроси человека один раз сделать интеграцию в боте. Объясни, что так сохраняется доступ к Яндекс.Метрике, и следующие интеграции создашь ты.
- Telegram:
/integration_yandex - MAX:
/yandex
Если канал не найден, код 405, попроси человека подключить его к боту:
- Telegram:
/add_channel - MAX:
/add_chat
1. Запрос
POST, тело — JSON.
Персональный ключ и имя метода стоят в пути. Заголовки X-Api-Key, Authorization и query token не используются. Вместо <ключ> подставь персональный ключ. Полный адрес каждого метода указан в его разделе.
- Telegram:
https://bot-api.tgtrack.ru/v1/<ключ>/get_channels - MAX:
https://max.tgtrack.ru/API/bot-api/v1/<ключ>/get_channels
Успех:
{
"status": "OK",
"data": {}
}
Ошибка:
{
"status": "error",
"error_code": 422,
"error_description": "Unprocessable entity",
"error_details": "текст причины"
}
Коды:
| code | когда |
|---|---|
| 400 | нет метода или пустое тело |
| 401 | ключ не передан или неверный |
| 402 | ключ отозван |
| 403 | нет доступа к каналу, либо ключ не того типа |
| 405 | канал не подключён к боту |
| 409 | такое имя в канале уже есть |
| 422 | поля не прошли проверку, нет доступа к Метрике, Яндекс отказал |
| 429 | слишком много запросов |
Поле channel — ссылка на канал или его id в мессенджере. Внутренний id tgtrack не подходит. channelID из get_channels копируйте строкой, как есть.
- Telegram:
https://t.me/username, пригласительнаяhttps://t.me/+...или id чата, например-1001234567890 - MAX: ссылка
max.ru/...или id чата в MAX
2. Лимиты
Только персональный ключ: не больше 1 запроса в секунду и не больше 1000 запросов в сутки. При превышении код 429.
Между вызовами держите паузу не меньше одной секунды. Пачку созданий не отправляйте параллельно.
3. get_channels
Список каналов, к которым у владельца ключа есть доступ. Тело не нужно.
POST
- Telegram:
https://bot-api.tgtrack.ru/v1/<ключ>/get_channels - MAX:
https://max.tgtrack.ru/API/bot-api/v1/<ключ>/get_channels
По ответу агент сопоставляет имя из запроса пользователя с полем name и дальше передаёт channelID в поле channel других методов.
Успех, поле data:
{
"channels": [
{
"channelID": "-1001234567890",
"name": "Реклама заработает",
"username": "reklama"
}
]
}
channelID в Telegram — id чата, в MAX — id чата MAX. username пустой, если у канала нет публичного адреса. Закрытый канал без пуб личной ссылки и без уже сохранённой пригласительной в channel по id не создаётся: передайте пригласительную ссылку.
4. create_yandex_integration
Создаёт яндекс-интеграцию и возвращает код ссылки и тег скрипта для сайта.
POST
- Telegram:
https://bot-api.tgtrack.ru/v1/<ключ>/create_yandex_integration - MAX:
https://max.tgtrack.ru/API/bot-api/v1/<ключ>/create_yandex_integration
Тело:
{
"name": "Директ — кампания 1",
"counterID": "12345678",
"channel": "https://t.me/username",
"autoFollow": false,
"goalToChannel": "toTelegram",
"goalOpen": "userDidOpenTelegram",
"goalSub": "userDidSubscribe"
}
Обязательны name, counterID, channel. Остальные поля можно не передавать: подставятся значения по умолчанию из примера. Имена целей по умолчанию в Telegram и MAX одни и те же.
channel — ссылка или id канала в мессенджере. Id берите из get_channels (channelID) и передавайте строкой, не числом.
{
"name": "Директ — кампания 1",
"counterID": "12345678",
"channel": "-1001234567890"
}
Ссылка вместо id: Telegram https://t.me/username или https://t.me/+..., MAX https://max.ru/.... У закрытого канала без публичного адреса и без уже сохранённой пригласительной id не хватает: передайте пригласительную ссылку.
counterID — только цифры, длина 6–9. Имена целей уникальны, латиница, цифры и _, не длиннее 45 символов. name уникально внутри канала, не длиннее 100 символов.
Успех, поле data:
{
"linkID": "AbCdEf",
"script": "<script src=\"https://...\" type=\"text/javascript\" defer></script>"
}
Если живого доступа к Метрике нет, error_details: No live Yandex Metrika access. Create one integration with /integration_yandex in the bot first. В MAX текст тот же по смыслу: сначала одна интеграция через бота.
OAuth-токен Яндекса в запрос не передаётся.