Установка вебхука в кабинет
Для того, чтобы прикрепить адрес вебхука к кабинету нужно:
- Получить авторизационный токен (используя логин и пароль)
curl --location 'https://iam.twin24.ai/api/v1/auth/login' \ --header 'Content-Type: application/json' \ --data '{ "email": "{{login}}", "password": "{{password}}", "ttl": 43200 }'
- Выполнить метод для привязки вебхука (вместо {{cabinet}} указать номер личного кабинета, вместо {{url}} — адрес вашего вебхука, для авторизации использовать токен из прошлого шага)
curl --location --request PATCH 'https://tcl.twin24.ai/api/iam/v1/companies/{{cabinet}}/settings' \ --header 'Authorization: Bearer {{auth_token}}' \ --header 'Content-Type: application/json' \ --data '{ "settings": { "cis.webhooks.incomingCall": "{{url}}" } }'
Формат вебхука
Пример вебхуков
Хука будет два на каждый звонок (из-за особенностей реализации внутри системы):
Как завершит работать бот
Как завершит работать "оболочка" над ботом
Разница между хуками в наличии во втором хука пути до аудизаписи диалога и биллинга по звонку.
- Пример первого хука
- Пример второго хука по этому же диалогу
Описание полей вебхука
Поле | Описание |
---|---|
callId | Идентификатор звонка в системе TWIN |
startedAt | Дата начала звонка |
number | Номер на который пришел звонок |
duration | Длительность звонка |
robotCallDuration | Длительность работы робота в звонке |
robotCallTotalCost | Стоимость работы робота в звонке |
externalId | НЕ АКТУАЛЬНО ДЛЯ ВХОДЯЩЕЙ |
currentStatusName | Статус звонка |
additional | НЕ АКТУАЛЬНО ДЛЯ ВХОДЯЩЕЙ |
recordPath | Путь до записи (запись расположена на хосте https://minio.twin24.ai/twin-cis-production/records по этому пути) |
mainCallCost | Тариф для основного звонка |
mainCallDiscount | Скидка для основного звонка |
mainCallDuration | Длительность основного звонка |
mainCallTotalCost | Стоимость основного звонка |
autoCallCost | НЕ АКТУАЛЬНО ДЛЯ ВХОДЯЩЕЙ |
autoCallDiscount | НЕ АКТУАЛЬНО ДЛЯ ВХОДЯЩЕЙ |
autoCallDuration | НЕ АКТУАЛЬНО ДЛЯ ВХОДЯЩЕЙ |
autoCallTotalCost | НЕ АКТУАЛЬНО ДЛЯ ВХОДЯЩЕЙ |
robotCallCost | Тариф работы робота в звонке |
robotCallDiscount | Скидка работы робота в звонке |
transferCallCost | Тариф переадрессации звонка |
transferCallDuration | Длительность переадрессованного звонка |
transferCallTotalCost | Стоимость переадрессованного звонка |
totalCost | Общая стоимость звонка |
companyId | Номер личного кабинета компании |
method | Метод, вызвавший отправку вебхука |
id.identity | == callId |
createdAt | НЕ АКТУАЛЬНО ДЛЯ ВХОДЯЩЕЙ |
updatedAt | НЕ АКТУАЛЬНО ДЛЯ ВХОДЯЩЕЙ |
callerId | Номер, позвонивший на входящую |
data | Массив данных по диалогу |
data.flow | Данные по работе каждого сценария (в звонке может быть несколько сценариев. Они отличаются по botId) |
data.flow.botId | Идентификатор сценария |
data.flow.start | Дата и время начала работы сценария |
data.flow.end | Дата и время конца работы сценария |
data.flow.messages | Сообщения в сценарии (Разделенные по Автору: Бот или Клиент) |
data.duration | == duration |
data.totalCost | == totalCost |
data.result | Массив результатов диалога |
data.result.initialVariables | НЕ АКТУАЛЬНО ДЛЯ ВХОДЯЩЕЙ |
data.result.markers | Массив маркеров (Опциональны для сценария) |
data.result.confirmation | Данные из поля “Подтверждение результата” |
data.result.nps | Данные из поля “NPS” |
data.result.переменная_1 | Данные из пользовательских полей, заданных в сценарии |
taskName | НЕ АКТУАЛЬНО ДЛЯ ВХОДЯЩЕЙ |
taskCreatedAt | НЕ АКТУАЛЬНО ДЛЯ ВХОДЯЩЕЙ |
botId | Идентификатор сценарий, который принял звонок |
callingNumber | == callerId |
timezone | таймзона |
messagesAsString | Весь диалог бота и клиента одной строкой |
resultsString | == data.result |
emotion | Определенная эмоция (при наличии блока в сценарии) |
hungUpBy | НЕ АКТУАЛЬНО ДЛЯ ВХОДЯЩЕЙ |
gender | Определенный пол (при наличии блока в сценарии) |
nps | == data.result.nps |
isAssistantRequest | Запросил ли бот “помощь” - перевод на оператора |
markers | НЕ АКТУАЛЬНО ДЛЯ ВХОДЯЩЕЙ |
callbackData | НЕ АКТУАЛЬНО ДЛЯ ВХОДЯЩЕЙ |