Trigger Call API
Программный запуск исходящего AI-звонка из любой CRM или внешней системы. Звонок ставится в очередь и инициируется в рабочие часы организации.
Endpoint
POST https://your-host/api/public/trigger-call
Заголовки
| Заголовок | Значение |
|---|---|
| Authorization | Bearer YOUR_API_KEY — ключ, выпущенный в личном кабинете |
| Content-Type | application/json |
Тело запроса
| Поле | Тип | Описание |
|---|---|---|
| phone | string, required | Номер в любом формате: +79991234567, 89991234567, 8 (999) 123-45-67. Нормализуется к E.164. |
| payload | object, optional | Произвольный JSON-объект с контекстом. Попадает в промпт голосового агента в блоке <client_context>. Лимит 5 KB; строки длиннее 200 символов обрезаются. |
| external_ref | string, optional, ≤128 | Идентификатор сущности в вашей CRM (например LEAD_42). Используется для дедупликации и для обновления именно этого лида после звонка. |
| external_system | string, optional, ≤32 | Имя CRM (bitrix, amocrm, custom). Влияет на способ обратного апдейта лида. |
Минимальный запрос
{
"phone": "+79991234567"
}Полный запрос
{
"phone": "+79991234567",
"payload": {
"name": "Иван",
"stage": "Согласование цены",
"product": "CRM Pro",
"deal_amount": 240000
},
"external_ref": "LEAD_42",
"external_system": "bitrix"
}curl
curl -X POST 'https://your-host/api/public/trigger-call' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"phone":"+79991234567","payload":{"name":"Иван","stage":"Согласование цены","product":"CRM Pro","deal_amount":240000},"external_ref":"LEAD_42","external_system":"bitrix"}'Ответы
| Код | Когда |
|---|---|
| 202 | Звонок поставлен в очередь. Тело: {"queued":true,"call_list_entry_id":N} |
| 400 | Невалидный номер, превышен размер payload (>5 KB), битый JSON. |
| 401 | Ключ отсутствует, отозван, или формат не соответствует sk_live_…. |
| 403 | У ключа нет scope trigger_call. |
| 409 | Дубль. Если передан external_ref — уже есть активная запись с тем же ref. Если нет — есть активная запись на тот же телефон. |
| 429 | Превышен rate-limit: 60 запросов в минуту или 1000 в сутки на ключ. Заголовок Retry-After указывает, сколько ждать. |
Настройка робота Bitrix24
В Bitrix24 «исходящий вебхук» из робота воронки шлёт POST с шаблоном тела на наш URL. Это самый простой путь — никаких приложений ставить не нужно.
- В Bitrix24 откройте CRM → Воронки → Роботы на нужной стадии.
- Добавьте робота «Уведомление по HTTP» или аналогичный «webhook».
- Метод:
POST. URL:https://your-host/api/public/trigger-call - В заголовках:
Authorization: Bearer YOUR_API_KEYContent-Type: application/json
- В теле — JSON с подстановками плейсхолдеров Bitrix:
{
"phone": "{{=Document:PHONE}}",
"payload": {
"name": "{{=Document:NAME}}",
"stage": "{{=Document:STAGE_ID}}",
"title": "{{=Document:TITLE}}"
},
"external_ref": "LEAD_{{=Document:ID}}",
"external_system": "bitrix"
}После настройки: при переходе лида на эту стадию робот вызывает наш endpoint, мы ставим звонок в очередь. AI-агент получит контекст из payload в системном промпте, а после успешного звонка результат вернётся обратно в тот же лид (а не создаст дубль) — благодаря external_ref.
amoCRM, Kommo и другие CRM
Endpoint провайдеро-нейтральный. Настройте webhook на стадии воронки или триггер автоматизации с теми же заголовками и телом. Поле external_system подскажет нашему бэкенду, как обращаться к API вашей CRM при обратном апдейте.
Дедупликация и идемпотентность
- С
external_ref: повторные запросы с тем же(организация, external_ref)пока запись активна (pending/in_progress) возвращают 409. Это безопасно для ретраев Bitrix. - Без
external_ref: дедупликация по телефону — пока есть активная запись с тем же номером, новый запрос отклоняется. - После завершения звонка (
completed/failed/no_answer) тот жеexternal_refснова можно использовать — это нормальный сценарий повторного обзвона.
Когда звонок реально уходит
Звонок ставится в очередь моментально. Реально набирается, когда:
- Текущее время попадает в рабочие часы организации (настраиваются в личном кабинете).
- Свободен слот для исходящих (по умолчанию до 3 одновременных звонков).
- Номер не в DNC-листе организации.
- Если попадание в рабочее окно невозможно — звонок ждёт следующего окна.
Статусы и результаты звонка
После завершения звонка номер в списке обзвона получает оперативный статус и бизнес-результат. Они означают разное и не должны путаться.
Статус (что произошло на уровне телефонии)
pending— ожидает в очереди.ringing— идёт дозвон, абонент ещё не ответил.talking— абонент ответил, идёт разговор с агентом.completed— разговор завершён нормально.no_answer— абонент не ответил, сбросил, попали на голосовую почту, или агент не услышал ответа.busy— занято.failed— ошибка телефонии (нет маршрута, неверный номер, провайдер недоступен).skipped— номер был в DNC-листе или пропущен оператором.
Outcome (бизнес-результат)
booked,interested,callback— успех в разной степени.not_interested— клиент отказался.voicemail— определён автоответчик (AMD).silent— звонок состоялся, но клиент молчал (или это была голосовая почта без AMD).hung_up— клиент сбросил до начала разговора.error— техническая ошибка.
Важно: голосовая почта и тишина больше не отмечаются как «Завершён». Если AMD определил автоответчик, статус будет no_answer, outcome — voicemail. Это значит, что в карточку лида можно перезвонить, а не считать, что встреча была.
Настройки обзвона
На странице /call-list администратор может настроить параметры обзвона для своей организации:
- Макс. попыток (1–10) — сколько раз звонить одному номеру до перевода в
failed. - Время ожидания ответа (10–180 сек) — сколько ждать ответа на звонок.
- Пауза перед повтором (1–1440 мин) — через сколько после
no_answerможно перезвонить. - Пауза между звонками (0–600 сек) — задержка после каждого звонка перед началом следующего.
- Макс. длительность разговора (30–1800 сек) — после этого звонок принудительно завершается.
- Макс. одновременных звонков (1–10) — лимит на одну организацию.
- Определять автоответчик — включает AMD-проверку, чтобы не тратить минуты на голосовую почту.
Изменения применяются на ходу — рабочий цикл подхватит новые значения в течение минуты, без рестарта.
Безопасность
- Ключ показывается один раз при создании. Восстановить нельзя — только выпустить новый и отозвать старый.
- Ключи хранятся в виде SHA-256 хешей; даже утечка БД их не раскрывает.
- На организацию можно завести несколько активных ключей (отдельный для prod / dev / каждой CRM).
- Rate-limit: 60/мин и 1000/сутки на каждый ключ. Превышение → 429 с
Retry-After.