API-пайплайн: создать, настроить, запустить, остановить, измерить и удалить Telegram-кампанию любого вида

Индекс: API-пайплайны — индекс

Цель: создать, настроить, запустить, остановить, измерить и удалить Telegram-кампанию любого вида. Кампания — это карточка (card_type: "campaign"), которая выполняет одну задачу для проекта в Telegram, через ваших оракулов и в группах. Все виды используют одну карточку, один набор маршрутов и один жизненный цикл; kind выбирается при создании и не меняется.

Виды

kind Что делает Что нужно для запуска Когда заканчивается Пайплайн
mtproto_radar (по умолчанию) Слушает группы и ищет сообщения с вашими ключевыми словами; совпадения могут уйти оракулу для первого сообщения Pro-проект; для outreach: оракулы + агенда; для auto: outreach + 5 эталонных совпадений Когда остановлена API-пайплайн: слушать Telegram-группы и находить людей, которым вы нужны: создать и настроить радар, работать с его совпадениями и выходить на первый контакт (черновик, отправка, автоматический outreach)
mtproto_ai_scout ИИ читает группы пачками, публикует обзор в канал, может передавать находки радару Pro-проект, агенда, оракулы, группы Когда остановлена API-пайплайн: ИИ читает группы пачками, публикует обзор в ваш канал и передаёт находки радару
mtproto_announcements Публикует ваши посты в группах в темпе, заданном их трафиком Pro-проект, группы, оракулы, посты, агенда Когда остановлена API-пайплайн: публиковать ваши посты в группах в темпе, заданном их трафиком, и следить за отправленным и удалённым
mtproto_join_chats / mtproto_leave_chats Ваши оракулы вступают в группы из списка или выходят из них в рамках лимитов Telegram Pro-проект, группы, оракулы Completed, когда каждый оракул прошёл список API-пайплайн: ваши оракулы вступают в группы из списка или выходят из них в рамках лимитов Telegram
mtproto_reactions Ваши оракулы ставят реакции на свежие сообщения Pro-проект, оракулы, хотя бы 1 реакция; группы необязательны Когда остановлена API-пайплайн: ваши оракулы ставят реакции на свежие сообщения в группах в выбранном темпе

Группы для любого вида: API-пайплайн: добавить свои Telegram-группы, найти группы по ключевому слову, месту или рубрике, проверить их и подключить к кампании

Шаги

1. Создать (всегда Paused).

POST /v0/my/campaigns
Idempotency-Key: camp-join-phuket-1
{"title": "Join Phuket chats", "kind": "mtproto_join_chats",
 "project_nonce": "<Pro project>", "tg_groups": ["<preset nonce>"], "oracles": ["<oracle nonce>"]}
→ {"nonce": "470360000000000001", "card_type": "campaign", "kind": "mtproto_join_chats",
   "status": "Paused", "is_active": false,
   "telegram_groups_list": ["<preset nonce>"], "oracles_list": ["<oracle nonce>"],
   "lists": {"telegram_groups": [{…tile…}], "oracles": [{…}], "posts": []}, …}

2. Настроить. PATCH /v0/my/campaigns/{nonce} с любым полем создания; слот в теле заменяет весь список. Активный радар или ИИ-скаут подхватывает изменения ключевых слов, исключений, групп, проекта, auto и пачек на ходу.

3. Запустить.

POST /v0/my/campaigns/470360000000000001/start
→ {"success": true, "status": "Active", "is_active": true}

Каждая непройденная проверка — 400 с причиной: assign this campaign to a project before activating, assigned project not found, project needs an active Pro membership to run campaigns, assign telegram groups before activating, assign oracles before activating, assign posts before activating, announcements require an agenda assigned: …, assign at least one reaction before activating, ai scout requires an agenda assigned.

4. Остановить. POST …/stop → Paused (радар сохраняет настройки и совпадения). 400 значит, что остановка не прошла: вызовите stop ещё раз.

5. Измерить.

GET /v0/my/campaigns/{nonce}/performance
→ {"totals": {"sent": 40, "deleted": 3, "replied": 5, "reacted": 0, "groups": 25, "oracles": 1,
              "joined": 0, "join_pending": 0, "already_member": 0, …, "first_at": "…", "last_at": "…"},
   "timeline": [{"day": "2026-10-08", "sent": 0, "joined": 31, "reacted": 40, …}],
   "groups": [{"username": "example_group", "sent": 3, "deleted": 2, "replied": 0, "join_status": "already_member", …}],
   "join": {"member": 30, "pending": 4, "skipped": 2, "remaining": 0, "oracles": [{…, "flooded_until": null}]}}

GET /v0/my/campaigns/{nonce}/sends?page=1&limit=50
→ {"rows": [{"username": "example_group", "message_id": 17552, "oracle": "…", "post": "…",
             "sent_at": "…", "deleted_at": null, "replied_at": "…", "replies": 2}], "total": 40, "has_more": true, …}

Результаты радара — это совпадения и комнаты в инбоксе, а не отправки. Визиты на лендинг по кампании: GET /v0/my/console/traffic/campaign?campaign=. Cabi.Chat Inbox — лиды

6. Удалить. Сначала остановите, затем DELETE /v0/my/campaigns/{nonce}.

Статусы: Active, Paused, Completed, Cancelled, Failed. Когда проект теряет Pro, его активные кампании ставятся на паузу.

Активность одного оракула

Что один оракул сделал во всех кампаниях (только владелец, иначе 404):

Статусы членства в этих отчётах: joined, join_pending (заявка на вступление ждёт админов), join_banned, join_dead (группы больше нет), join_skipped, join_flood (Telegram попросил подождать), join_limit (аккаунт упёрся в лимит вступлений Telegram), already_member, left, leave_failed, not_member.

За кадром

Правила (кто что может)

Действие Нужно
GET /{nonce} read
PATCH, matches/evict, matches/sweep, start, stop write
Привязка к проекту (project_nonce) владелец кампании владеет проектом или имеет на него x
DELETE, performance, sends, matches/{post}/draft, matches/{post}/outreach только владелец

GET /v0/my/campaigns показывает только ваши кампании. Поделиться кампанией по ссылке (права, grant_ttl, кто может принять): индекс, «Доступ по ссылкам»; когда грант с w заканчивается, кампания ставится на паузу, если её не держит другой действующий грант с w. Граф Cabi.Chat — политики карточек

Поверхность API

Эндпоинт Назначение FE ИИ / оракул
GET /v0/my/campaigns Свои кампании плитками + total (limit, offset, archived) да да
POST /v0/my/campaigns Создать любой вид, Paused да да
GET /v0/my/campaigns/{nonce} Полная карточка: вид, статус, слоты, её воркспейсы да да
PATCH /v0/my/campaigns/{nonce} Изменить настройки и слоты да да
DELETE /v0/my/campaigns/{nonce} Удалить (владелец) да редко
POST /v0/my/campaigns/{nonce}/start, /stop Проверить и запустить; пауза да да
GET /v0/my/campaigns/{nonce}/performance Итоги, динамика, по группам, план вступлений да да, отчёты
GET /v0/my/campaigns/{nonce}/sends Каждое отправленное сообщение и его судьба (page, limit) да да
POST /v0/my/campaigns/{nonce}/matches/… Радар: evict, sweep, draft, outreach да см. пайплайн радара
GET /v0/my/oracles/{nonce}/performance, /campaigns Активность одного оракула да да, отчёты
GET /v0/my/console/traffic/campaign?campaign= Визиты на лендинг по кампании да по желанию

Упомянуто