Информация |
---|
Вебхук приходит с 87.251.83.190 (в вайт лист лучше добавлять весь диапазон TWIN: 87.251.83.160/27) |
У хука есть 3 типа событий и отправка идет по каждому их них:
- "event": "CALL_REDIRECTED"
...
- – Хук, с информацией о звонке, переведенном на оператора. Отправляется только тогда, когда в диалоге бота настроен перевод на оператора.
Событие отправляется самым первым хуком, чтобы проинформировать стороннюю систему о переводе звонка в КЦ.
Отправляется и для входящих и для исходящих звонков, если в сценарии настроен перевод на оператора. Если перевода не было или он не предусмотрен - событие отправляться не будет. - "event": "CALL_ENDED"
...
- – Хук, с информацией о попытке дозвона. Отправляется всегда, по итогам завершения звонка. Отправляется и для входящих и для исходящих звонков.
- "event": "CANDIDATE_CHANGED"
...
- – Хук, с информацией о итоге обработки кандидата. Отправляется в качестве сигнала, что данный кандидат полностью обработан системой и больше звонков по кандидату не будет.
На него можно опираться для снятия блокировки с кандидата в CRM или дайлера. Отправляется только для исходящих звонков. Для входящих событие отправляться не будет.
Примеры кейсов и описание для них логики отправок хуков:
Звонок 1 кандидату (1 номер, без перевода на оператора):1.
- Получаем хук CALL_ENDED
...
- Получаем хук CANDIDATE_CHANGED
Звонок 1 кандидату (1 номер, перевод на оператора):1.
- Получаем хук CALL_REDIRECTED
...
- Получаем хук CALL_ENDED
...
- Получаем хук CANDIDATE_CHANGED
Звонок 1 кандидату (2+ номеров, без перевода на оператора):1.
- Получаем хук CALL_ENDED
...
- Получаем хук CALL_ENDED
...
- Получаем хук CANDIDATE_CHANGED
Звонок 1 кандидату (2+ номеров, перевод на оператора):1.
- Получаем хук CALL_REDIRECTED
...
- Получаем хук CALL_ENDED
...
- Получаем хук CALL_REDIRECTED
...
- Получаем хук CALL_ENDED
...
- Получаем хук CANDIDATE_CHANGED
Информация |
---|
На нашей платформе реализована система гарантированной доставки хуков. Система ожидает в ответ по каждому отправленному хуку 200й код. В противном случае мы будет делать повторные отправки сообщений в течение 24 часов с увеличением интервалов повторной отправке по экспоненицальной формуле (чем больше попыток - тем больше будет интервал попыток). Меж серверное взаимодействие ожидает подтверждения в получении отправленных данных. |
Описание хука по событию
...
«CALL_REDIRECTED
...
» (Только для ботов с переводом на оператора)
...
Пример запроса:
Тело webHook в формате Json:
...
Блок кода |
---|
...
|
...
|
...
|
...
|
...
|
...
|
...
|
...
| |
{ |
...
...
"event": "CALL_REDIRECTED", |
...
"id": "a9f629ab-20f0-4c11-8a82-05af87e49e43", |
...
"redirectAdditional": null, |
...
"redirectAnons": null, |
...
"redirectDestination": "ch", |
...
"redirectDestinationId": "10103", |
...
"callbackData": [] |
...
} |
Описание полей:
Поле | Тип | Обязательно | Описание | Соответствие с полем из метода старой телефонии |
---|---|---|---|---|
event | string | да | Тип события.
| - |
id | string | да | Идентификатор вызова | id |
redirectAdditional | string | да | Дополнительные данные, которые идут в SIP обмене | - |
redirectAnons | string | да | Текст сопровождения перевода, указанный в настройках бота при переводе звонка. | - |
redirectDestination | string | да | Тип перевода (настраивается в сценарии бота): ch (канал перевода) custom (произвольный перевод) int (внутренний номер, вроде не используем) | - |
redirectDestinationId | string | да | Значение конечного номера, для выбранного типа перевода (номер канала, номер произвольного перевода, внутренний номер) | - |
| callbackData | Object | да (может быть пустым) | Информация о кандидате, переданная в момент добавления кандидата (см. метод добавления кандидата) | - |
Описание хука по событию
...
«CALL_ENDED
...
»
Пример запроса:
Тело webHook в формате Json:
...
Блок кода |
---|
...
|
...
|
...
|
...
|
...
|
...
|
...
| ||
{ "event": "CALL_ENDED", |
...
"type": "OUTGOING", |
...
"companyId": |
...
5, |
...
"botId": "228cc4fa-92f2-4709-94e3-7344a96a5903", |
...
"id": "80970c2c-9b30-4f33-96a6-9f37f37009e2", |
...
"externalId": "f6d1c992-09d7-11ee-a9b5-9ae97dfae6df", |
...
"taskId": "bd5ed800-a7e1-443d-afa2-4368e4f0de61", |
...
"candidateId": "c89b04c3-fc46-4ab3-ac70-ae7de8d5617c", |
...
"status": "ANSWERED", |
...
"callFrom": "79669876543", |
...
"callTo": "79991234567", |
...
"startedAt": "2023-06-13T10:49:36+00:00", |
...
"finishedAt": "2023-06-13T10:49:38+00:00", |
...
"billedAt": "2023-06-13T10:49:55+00:00", |
...
"variables": { |
...
"age": "35", |
...
"name": "Иван Иванов" |
...
}, |
...
"result": { |
...
"initialVariables": { |
...
"phone": "79991234567", |
...
"age": "35", |
...
"name": "Иван Иванов" |
...
}, |
...
"markers": [ |
...
"Маркер 1", |
...
"Маркер 2", |
...
"Маркер 3" |
...
], |
...
"confirmation": "Подтверждение", |
...
"nps": "NPS", |
...
"ключ_1": "его значение 1", |
...
"ключ_2": "его значение 2" |
...
}, |
...
"recordPath": "/180/2023/6/13/1686653365.8627691_79992082892_180.mp3", |
...
"flow": [ |
...
{ |
...
"botId": "228cc4fa-92f2-4709-94e3-7344a96a5903", |
...
"start": "2023-06-13 13:49:37.016654+03", |
...
"end": "2023-06-13 13:49:37.016654+03", |
...
"messages": [ |
...
{ |
...
"text": "Привет и пока", |
...
"author": "BOT", |
...
"time": "2023-06-13 13:49:37.016654+03" |
...
} |
...
] |
...
} |
...
], |
...
"gmtOffset": |
...
0, |
...
"hungUpBy": null, |
...
"duration": |
...
2, |
...
"totalCost": |
...
0.09, |
...
"robotCallDuration": |
...
1, |
...
"robotCallTotalCost": |
...
0.05, |
...
"mainCallCost": |
...
1.45, |
...
"mainCallDiscount": |
...
0, |
...
"mainCallDuration": |
...
2, |
...
"mainCallTotalCost": |
...
0.05, |
...
"autoCallCost": |
...
0, |
...
"autoCallDiscount": |
...
0, |
...
"autoCallDuration": |
...
0, |
...
"autoCallTotalCost": |
...
0, |
...
"robotCallCost": |
...
2.5, |
...
"robotCallDiscount": |
...
0, |
...
"transferCallCost": |
...
0, |
...
"transferCallDiscount": |
...
0, |
...
"transferCallDuration": |
...
0, |
...
"transferCallTotalCost": |
...
0.05, |
...
"callbackData": [] |
...
} |
Описание полей:
Поле | Тип | Обязательно | Описание | Соответствие с полем из метода старой телефонии |
---|---|---|---|---|
event | string | да | Тип события. Возможные значения:
| - |
type | string | да | Тип звонка. Возможные значения:
| - |
companyId | int | да | Идентификатор компании | - |
botId | string | да | Идентификатор сценария | botId |
id | string | да | Идентификатор вызова | id |
externalId | string | да | Переданный в запросе на инициализацию идентификатор (callId) | - |
taskId | string | да | Идентификатор задания на обзвон | taskId |
candidateId | string | да | Идентификатор кандидата на обзвон | - |
status | string | да | Статус вызова. Возможные значения:
| status |
callFrom | string | да | Вызывающий номер | - |
callTo | string | да | Вызываемый номер | phone |
startedAt | string | да | Дата начала вызова | startedAt |
finishedAt | string | да | Дата окончания вызова | - |
billedAt | string | да | Дата билинга вызова | - |
variables | Object | да (может быть пустым) | Произвольный словарь типа ключ-значения, который был передан перед инициализацией вызова. Содержит исходные переменные | - |
result | Object | да | Произвольный словарь типа ключ-значения. Результаты разговора робота | results |
| initialVariables | Object | да (может быть пустым) | Исходные переменные | - |
| markers | Array[string] | да (может быть пустым) | Маркеры | - |
| confirmation | string | да (может быть пустым) | Подтверждение | results.confirm |
| nps | string | да (может быть пустым) | NPS | results.nps |
| ключ_1 | string | нет | Произвольный результат. Задается в блоке "Результат" с типом "Произвольный результат" | results.ключ_1 |
recordPath | string | да (пустой для первого хука) | Путь к аудиофайлу. Для получения ссылки нужно добавить в начале пути | recordPath |
flow | Array[Object] | да | Массив фрагментов разговора | - |
| botId | string | да | Идентификатор сценария | - |
| start | string | да | Время начала части диалога | - |
| end | string | да | Время окончания части диалога | - |
| messages | Array[Object] | да | Массив сообщений по диалогу | messages |
| | text | string | да | Текст сообщений | messages.X.text |
| | author | string | да | Кто произнес сообщение (BOT, CLIENT) | messages.X.author |
| | time | string | да | Время отправки сообщения | messages.X.created_at |
gmtOffset | int | да | смещение в минутах от UTC часового пояса клиента | timezone |
hungUpBy | string | да (пока всегда null) | Кто положил трубку (пока всегда null) | - |
duration | int | да | Общая длительность разговора | duration |
totalCost | float | да | Общая стоимость разговора | - |
robotCallDuration | int | да | Длительность разговора робота | botDuration |
robotCallTotalCost | float | да | Стоимость разговора робота со скидкой | - |
mainCallCost | float | да | Стоимость разговора (транк клиента) | - |
mainCallDiscount | float | да | Скидка за разговор (транк клиента) | - |
mainCallDuration | int | да | Длительность разговора (транк клиента) | - |
autoCallCost | float | да | Всегда равен 0 | - |
autoCallDiscount | float | да | Всегда равен 0 | - |
autoCallDuration | int | да | Всегда равен 0 | - |
autoCallTotalCost | float | да | Всегда равен 0 | - |
robotCallCost | float | да | Стоимость разговора робота | - |
robotCallDiscount | float | да | Скидка за разговор робота | - |
transferCallCost | float | да | Стоимость перевода звонка | - |
transferCallDiscount | float | да | Скидка за перевод звонка | - |
transferCallDuration | int | да | Длительность звонка после перевода | operatorDuration |
transferCallTotalCost | float | да | Стоимость звонка после перевода со скидкой | - |
callbackData | Object | да (может быть пустым) | Информация о кандидате, переданная в момент добавления кандидата (см. метод добавления кандидата) | - |
Описание хука по событию
...
«CANDIDATE_CHANGED
...
» (Только для исходящих):
Пример запроса:
Тело webHook в формате Json:
...
Блок кода |
---|
...
|
...
|
...
|
...
|
...
|
...
|
...
| ||
{ |
...
"event": "CANDIDATE_CHANGED", |
...
"id": "5c0d503f-a34e-4806-b455-3225de25***", |
...
"clientExternalId": null, |
...
"taskId": "210ef80*-1f92-48b*-9800-84fcf59363*e", |
...
"status": "FINISHED", |
...
"callbackData": [ |
...
{ |
...
"id_num": "12q12", |
...
"id_debt": "456321" |
...
} |
...
} |
Описание полей:
Поле | Тип | Обязательно | Описание | Соответствие с полем из метода старой телефонии |
---|---|---|---|---|
Поле | Тип | Обязательно | Описание | Соответствие с полем из метода старой телефонии |
event | string | да | Тип события. Возможные значения:
| - |
id | string | да | Идентификатор вызова | id |
clientExternalId | string | да | Переданный в запросе на инициализацию идентификатор (callId) | - |
taskId | string | да | Идентификатор задания на обзвон | taskId |
candidateId | string | да | Идентификатор кандидата на обзвон | - |
status | string | да | Статус вызова. Возможные значения:
| status |
| callbackData | Object | да (может быть пустым) | Информация о кандидате, переданная в момент добавления кандидата (см. метод добавления кандидата) | - |