Pleep Docs

Звонок голосовым агентом

Исходящий звонок голосового агента по номеру телефона через API Pleep, сейчас или в назначенное время, и ответ, дозвонились или нет

Запуск одного исходящего звонка голосового агента из ваших систем. Переписка в WhatsApp для этого не нужна, достаточно номера телефона. В ответе приходит результат: взял ли человек трубку.

Звонок можно и запланировать на потом, например перезвонить клиенту завтра в 11:00. Как это сделать, смотрите ниже в разделе «Запланировать звонок».

Эндпоинты

POST https://microservice.pleep.app/api/v1/calls/make-call
GET  https://microservice.pleep.app/api/v1/calls/scheduled-calls
POST https://microservice.pleep.app/api/v1/calls/cancel-scheduled-call

Заголовки

ЗаголовокЗначениеОбязательный
X-API-KeyВаш API-ключДа
Content-Typeapplication/jsonДа

Кому звонить

  • phone: номер в международном формате, например +77001234567. Плюс, пробелы и дефисы можно оставить. Казахстанский номер можно передать и с восьмёркой: 87001234567.
  • thread_id: идентификатор диалога. Номер Pleep возьмёт из диалога, а звонок продолжит этот диалог: агент увидит переписку, и расшифровка звонка попадёт туда же. Это тот же идентификатор, что в этапах лида и в получении диалогов.

Можно передать оба поля: тогда агент звонит на phone, а звонок продолжает диалог thread_id. Если у диалога нет номера, например это Instagram или Telegram, передайте phone.

Какой агент звонит

Если в аккаунте один голосовой агент, указывать его не нужно. С thread_id звонит голосовой агент того ассистента, который ведёт диалог. Если голосовых агентов несколько, передайте voice_agent_id: его можно узнать у поддержки.

Когда Pleep звонит

Только в рабочие часы из настроек аккаунта. Если рабочие часы выключены, с 9:00 до 21:00 по часовому поясу аккаунта. Вне этих часов API не звонит и отвечает 409 OUTSIDE_CALLING_HOURS с полем opens_at: с этого момента звонить можно. Запланируйте звонок на это время: передайте scheduled_at.

Pleep не звонит людям, которые отказались от звонков и сообщений, и контактам, заблокированным в мониторе.

Тело запроса

ПолеТипОбязательноеОписание
phonestringДа, если нет thread_idНомер, на который звонить
thread_idstringДа, если нет phoneДиалог, который продолжит звонок, например thread_0765c2bd-980d-4c65-aeea-d04069646be5
voice_agent_idstringЕсли голосовых агентов несколькоКакой голосовой агент звонит
assistant_idstringНетЗвонит голосовой агент этого ассистента
first_messagestringНетПервая фраза агента в этом звонке, до 2000 символов
extra_promptstringНетУказания агенту только на этот звонок, до 20 000 символов. Например, о чём спросить
scheduled_atstringНетПозвонить не сейчас, а в это время. ISO 8601 с часовым поясом, например 2026-11-12T15:00:00+05:00
replace_scheduledbooleanНетТолько с scheduled_at: если у лида уже есть запланированный звонок, отменить его и запланировать этот

Пример

curl -X POST https://microservice.pleep.app/api/v1/calls/make-call \
  -H "Content-Type: application/json" \
  -H "X-API-Key: pk_live_ваш_ключ" \
  -d '{
    "phone": "+77001234567",
    "extra_prompt": "Клиент оставил заявку на сайте. Уточни, когда ему удобно подъехать."
  }'

Ответ

Запрос ждёт, пока человек возьмёт трубку или вызов закончится. Обычно это до 30 секунд, поэтому таймаут HTTP-клиента ставьте не меньше 60 секунд.

{
  "ok": true,
  "data": {
    "thread_id": "thread_0765c2bd-980d-4c65-aeea-d04069646be5",
    "conversation_id": "custom_convai_5d0c9e1a",
    "call_status": "connected",
    "answered": true,
    "hangup_cause": null
  }
}
ПолеОписание
thread_idДиалог, в котором сохранится звонок и его расшифровка
conversation_idИдентификатор звонка
call_statusЧем закончился вызов, значения ниже
answeredtrue, если человек взял трубку, false, если нет, null, если пока неизвестно
hangup_causeКод причины от оператора связи, если вызов не состоялся. Например, 17 занято, 19 нет ответа
script_appliedЕсть, только если вы передали first_message или extra_prompt: дошли ли они до агента
call_statusЧто значит
connectedЧеловек взял трубку, агент разговаривает
no_answerЧеловек не взял трубку
busyЗанято
rejectedВызов отклонён (код 21): человек сбросил его, или сеть не пропустила вызов, и телефон мог не зазвонить
not_connectedСоединиться не удалось, например номер не обслуживается
network_errorСбой сети оператора
initiatedВызов отправлен, результат неизвестен

Не повторяйте запрос вслепую

504 CALL_RESULT_UNKNOWN значит, что линия не сообщила результат вовремя. Звонок мог пройти, и повтор позвонит человеку второй раз. Сначала проверьте диалог через получение диалогов.

Звонок расходует минуты голосового агента так же, как звонок из сценария.

Запланировать звонок

Передайте в make-call поле scheduled_at. Pleep не звонит сразу, а сохраняет звонок и отвечает 202. В назначенное время голосовой агент звонит и продолжает тот же диалог. Если вы передали только phone, Pleep найдёт диалог по номеру или создаст новый, и в мониторе в нём появится строка «Звонок запланирован на …».

  • Время нужно указывать с часовым поясом: +05:00 или Z. Время без пояса API не примет. Пустое scheduled_at API тоже не примет и ответит 422: чтобы позвонить сразу, не передавайте это поле совсем.
  • Голосовой агент должен уметь звонить уже при планировании. Если к нему не подключён номер, API ответит 409 VOICE_AGENT_NOT_READY, как и на звонок сейчас.
  • Часы звонков те же, что для звонка сейчас. Время вне них API отклонит с 409 OUTSIDE_CALLING_HOURS, в opens_at будет ближайшее время после scheduled_at, когда звонить можно. Время в прошлом API отклонит с 422 SCHEDULED_AT_IN_PAST.
  • Перед самым звонком Pleep проверяет всё заново: не отказался ли человек от звонков, не заблокирован ли контакт, остались ли минуты, готов ли голосовой агент. Если рабочие часы с тех пор поменялись и время оказалось вне них, звонок переносится на ближайшее разрешённое время, а в moved_from остаётся исходное.
  • Если человек ещё говорит с агентом (звонок начался в последние 35 минут и не закончился), звонок сдвигается на 3 минуты с причиной CALL_IN_PROGRESS, до трёх раз. moved_from при этом не меняется. После третьего раза агент звонит.
  • Один звонок на лида. Если у диалога или у этого номера уже есть запланированный звонок (например, ИИ-агент запланировал его в переписке с этим номером), API ответит 409 SCHEDULED_CALL_EXISTS и вернёт его в scheduled_call. Чтобы заменить его новым, передайте "replace_scheduled": true: старый получит статус cancelled с причиной REPLACED.

ИИ-агент тоже умеет планировать звонки сам, когда клиент просит перезвонить. Для этого включите расширение «Запланированные звонки». Такие звонки попадают в тот же список с "source": "agent" и так же заменяют друг друга. Если клиент передумал, агент сам отменяет звонок (причина CANCELLED_BY_AGENT). Лиду в этапе, где ИИ выключен, агент звонок не планирует и говорит, что с клиентом свяжется менеджер.

curl -X POST https://microservice.pleep.app/api/v1/calls/make-call \
  -H "Content-Type: application/json" \
  -H "X-API-Key: pk_live_ваш_ключ" \
  -d '{
    "thread_id": "thread_0765c2bd-980d-4c65-aeea-d04069646be5",
    "scheduled_at": "2026-11-12T11:00:00+05:00",
    "extra_prompt": "Клиент просил перезвонить, когда освободится. Уточни, удобно ли записаться на пятницу."
  }'

Ответ 202:

{
  "ok": true,
  "data": {
    "id": "6f1c2a8e-3b0d-4c8e-9a51-2f7d0e4b9c13",
    "thread_id": "thread_0765c2bd-980d-4c65-aeea-d04069646be5",
    "phone": "77001234567",
    "scheduled_at": "2026-11-12T06:00:00.000Z",
    "status": "scheduled",
    "status_reason": null,
    "moved_from": null,
    "source": "api",
    "extra_prompt": "Клиент просил перезвонить, когда освободится. Уточни, удобно ли записаться на пятницу.",
    "first_message": null,
    "call_status": null,
    "conversation_id": null,
    "created_at": "2026-11-11T09:20:00.000Z",
    "finished_at": null,
    "replaced_scheduled_call_id": null
  }
}

Время в ответах всегда в UTC.

ПолеОписание
idИдентификатор запланированного звонка, для отмены
thread_idДиалог, который продолжит звонок
phoneНомер, на который позвонит агент
scheduled_atКогда звонить
statusЧто со звонком сейчас, значения ниже
status_reasonПочему звонок отменён, не состоялся или перенесён, значения ниже
moved_fromИсходное время, если звонок перенесли из-за часов звонков
sourceapi: запланирован через API, agent: запланировал ИИ-агент
extra_prompt, first_messageУказания на этот звонок. У звонка от ИИ-агента в extra_prompt его заметка, о чём звонок
call_statusКогда звонок сделан: чем закончился вызов, как в ответе на звонок сейчас
conversation_idИдентификатор звонка, когда он сделан
finished_atКогда звонок сделан, отменён или не состоялся
replaced_scheduled_call_idТолько в ответе make-call: звонок, вместо которого запланирован этот
statusЧто значит
scheduledЖдёт своего времени
callingАгент набирает номер
doneЗвонок сделан. Чем закончился, смотрите в call_status
cancelledОтменён через API, отменён ИИ-агентом по просьбе клиента, отменён вручную в мониторе или заменён новым
skippedНе сделан намеренно: человек отказался от звонков, контакт заблокирован, расширение выключено, ИИ больше не работает с лидом, чат забрал менеджер или сделка закрыта
failedПозвонить не удалось
status_reasonЧто значит
REPLACEDВместо него запланирован новый звонок этому лиду
CANCELLED_BY_APIОтменён через cancel-scheduled-call
CANCELLED_BY_AGENTКлиент передумал в разговоре, и ИИ-агент отменил звонок. Так отменяется и звонок, запланированный через API
CANCELLED_IN_MONITORОтменён вручную в мониторе, кнопкой «Отменить звонок» в чате. Так можно отменить и звонок, запланированный через API
OUTSIDE_CALLING_HOURSПеренесён: назначенное время оказалось вне часов звонков
CALL_IN_PROGRESSПеренесён на 3 минуты: человек ещё говорил с агентом. Бывает у звонка со статусом scheduled
OUTREACH_SUPPRESSEDЧеловек отказался от звонков и сообщений
CONTACT_BLOCKEDКонтакт заблокирован в мониторе
EXTENSION_OFFЗвонок от ИИ-агента, а расширение «Запланированные звонки» выключили
LEAD_STATUS_AI_DISABLEDЗвонок от ИИ-агента, а лида перенесли в этап воронки, где ИИ выключен
LEAD_STATUS_REQUIREDЗвонок от ИИ-агента, у лида нет этапа воронки, а ИИ работает только с лидами в этапах
OPERATOR_MODEЗвонок от ИИ-агента, а после того как его запланировали, чат забрал менеджер
LEAD_CLOSEDЗвонок от ИИ-агента, а после того как его запланировали, лида перевели в успешный или проигранный этап
NO_CALLING_HOURSВ рабочих часах нет ни одного дня для звонков
VOICE_QUOTA_EXCEEDEDЗакончились минуты голосового агента или подписка неактивна
VOICE_AGENT_NOT_READYГолосовой агент не может звонить, например к нему не подключён номер
CALL_FAILEDПозвонить не удалось
CALL_RESULT_UNKNOWNЛиния не сообщила результат вовремя, звонок мог пройти
INTERRUPTEDЗвонок прервался во время набора. Повторно Pleep не звонит, чтобы не позвонить человеку дважды

Список запланированных звонков

GET https://microservice.pleep.app/api/v1/calls/scheduled-calls

Все звонки аккаунта, запланированные через API и ИИ-агентом, сначала новые.

ПараметрОписание
thread_idТолько звонки этого диалога
statusТолько звонки с этим статусом, например scheduled
limitСколько звонков вернуть, от 1 до 200. По умолчанию 100
cursornext_cursor из предыдущего ответа, чтобы получить следующую страницу
curl "https://microservice.pleep.app/api/v1/calls/scheduled-calls?thread_id=thread_0765c2bd-980d-4c65-aeea-d04069646be5&status=scheduled" \
  -H "X-API-Key: pk_live_ваш_ключ"
{
  "ok": true,
  "data": {
    "scheduled_calls": [
      {
        "id": "6f1c2a8e-3b0d-4c8e-9a51-2f7d0e4b9c13",
        "thread_id": "thread_0765c2bd-980d-4c65-aeea-d04069646be5",
        "phone": "77001234567",
        "scheduled_at": "2026-11-12T06:00:00.000Z",
        "status": "scheduled",
        "status_reason": null,
        "moved_from": null,
        "source": "agent",
        "extra_prompt": "Клиент просил перезвонить завтра утром, уточнить время записи",
        "first_message": null,
        "call_status": null,
        "conversation_id": null,
        "created_at": "2026-11-11T09:20:00.000Z",
        "finished_at": null
      }
    ],
    "has_more": false,
    "next_cursor": null
  }
}

Отменить запланированный звонок

POST https://microservice.pleep.app/api/v1/calls/cancel-scheduled-call
ПолеТипОбязательноеОписание
scheduled_call_idstringДаid запланированного звонка
curl -X POST https://microservice.pleep.app/api/v1/calls/cancel-scheduled-call \
  -H "Content-Type: application/json" \
  -H "X-API-Key: pk_live_ваш_ключ" \
  -d '{ "scheduled_call_id": "6f1c2a8e-3b0d-4c8e-9a51-2f7d0e4b9c13" }'

В ответе звонок со статусом cancelled и причиной CANCELLED_BY_API. Отменить можно только звонок со статусом scheduled. Для звонка, который уже набирается или сделан, API ответит 409 SCHEDULED_CALL_NOT_CANCELLABLE и вернёт его в scheduled_call.

Коды ошибок

HTTP-статусКод ошибкиОписание
401UNAUTHORIZEDОтсутствует или недействителен API-ключ
402VOICE_QUOTA_EXCEEDEDЗакончились минуты голосового агента или подписка неактивна
404THREAD_NOT_FOUNDДиалога с таким thread_id нет в аккаунте ключа
404VOICE_AGENT_NOT_FOUNDГолосового агента нет в аккаунте ключа
404SCHEDULED_CALL_NOT_FOUNDЗапланированного звонка с таким scheduled_call_id нет в аккаунте ключа
409OUTSIDE_CALLING_HOURSСейчас нерабочее время. В поле opens_at время, с которого можно звонить
409OUTREACH_SUPPRESSEDЧеловек отказался от звонков и сообщений, или контакт заблокирован в мониторе
409VOICE_AGENT_NOT_READYГолосовой агент пока не может звонить, например к нему не подключён номер
409SCHEDULED_CALL_EXISTSУ лида уже есть запланированный звонок, он в scheduled_call. Отмените его или передайте "replace_scheduled": true
409SCHEDULED_CALL_NOT_CANCELLABLEЗвонок уже набирается, сделан или отменён
422NO_PHONEУ диалога нет номера. Передайте phone
422INVALID_PHONEphone не похож на номер телефона
422SCHEDULED_AT_IN_PASTscheduled_at уже прошло
422VALIDATION_ERRORНет ни phone, ни thread_id, поле не строка или длиннее допустимого, scheduled_at пустое или без часового пояса, голосовых агентов несколько и не передан voice_agent_id, или диалог принадлежит другому ассистенту
429RATE_LIMITEDСлишком много запросов. Лимит: 60 запросов в минуту на API-ключ
502CALL_FAILEDПозвонить не удалось. Можно повторить позже
504CALL_RESULT_UNKNOWNРезультат неизвестен, звонок мог пройти. Не повторяйте, не проверив диалог