Описание WebHook по заданию или по входящим звонкам
Вебхук приходит с 87.251.83.190 (в вайт лист лучше добавлять весь диапазон TWIN: 87.251.83.160/27)
...
Система ожидает в ответ по каждому отправленному хуку 200й код. В противном случае мы будет делать повторные отправки сообщений в течение 24 часов с увеличением интервалов повторной отправке по экспоненицальной формуле (чем больше попыток - тем больше будет интервал попыток). Меж серверное взаимодействие ожидает подтверждения в получении отправленных данных.
Если вам нужен только один тип хука, вы можете отвечать 200м кодом на все остальные передачи и ничего не делать с полученными данными. Решение что обрабатывать, а что игнорировать, находится на стороне бизнес логики компании заказчика.
Описание хука по событию "CALL_REDIRECTED" (Только для ботов с переводом на оператора):
Пример запроса:
Тело webHook в формате Json:
...
Поле | Тип | Обязательно | Описание | Соответствие с полем из метода старой телефонии |
---|---|---|---|---|
event | string | да | Тип события.
| - |
id | string | да | Идентификатор вызова | id |
redirectAdditional | string | да | Дополнительные данные, которые идут в SIP обмене | - |
redirectAnons | string | да | Текст сопровождения перевода, указанный в настройках бота при переводе звонка. | - |
redirectDestination | string | да | Тип перевода (настраивается в сценарии бота): ch (канал перевода) custom (произвольный перевод) int (внутренний номер, вроде не используем) | - |
redirectDestinationId | string | да | Значение конечного номера, для выбранного типа перевода (номер канала, номер произвольного перевода, внутренний номер) | - |
| callbackData | Object | да (может быть пустым) | Информация о кандидате, переданная в момент добавления кандидата (см. метод добавления кандидата) | - |
Описание хука по событию "CALL_ENDED":
Пример запроса:
Тело webHook в формате Json:
...
Поле | Тип | Обязательно | Описание | Соответствие с полем из метода старой телефонии |
---|---|---|---|---|
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:
...