Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

Тип событияЗначениеОписание
eventCALL_REDIRECTED

Вебхук, с информацией о звонке, переведенном на оператора. Отправляется только тогда, когда в диалоге бота настроен перевод на оператора.

Событие отправляется самым первым хуком, чтобы проинформировать стороннюю систему о переводе звонка в КЦ. 

Отправляется и для входящих и для исходящих звонков, если в сценарии настроен перевод на оператора. Если перевода не было или он не предусмотрен - событие отправляться не будет.

eventCALL_ENDEDВебхук, с информацией о попытке дозвона. Отправляется всегда, по итогам завершения звонка. Отправляется и для входящих и для исходящих звонков.
eventCANDIDATE_CHANGED

Вебхук, с информацией о итоге обработки кандидата. Отправляется в качестве сигнала, что данный кандидат полностью обработан системой и больше звонков по кандидату не будет.

На него можно опираться для снятия блокировки с кандидата в CRM или дайлера. Отправляется только для исходящих звонков. Для входящих событие отправляться не будет.

Примеры кейсов и описание для них логики отправок хуков

Звонок 1 кандидату (1 номер, без перевода на оператора):

...

Информация

На нашей платформе реализована система гарантированной доставки хуков. 

Система ожидает в ответ по каждому отправленному хуку 200й код. В противном случае мы будет делать повторные отправки сообщений в течение 24 часов с увеличением интервалов повторной отправке по экспоненциальной формуле (чем больше попыток - тем больше будет интервал попыток).

Меж серверное взаимодействие ожидает подтверждения в получении отправленных данных. 

Если вам нужен только один тип хука, вы можете отвечать 200м кодом на все остальные передачи и ничего не делать с полученными данными. Решение что обрабатывать, а что игнорировать, находится на стороне бизнес логики компании заказчика. 

Описание хука по событию «CALL_REDIRECTED» (Только для ботов с переводом на оператора)

Пример запроса:
Тело webHook в формате Json:

...

Поле

Тип

Обязательно

Описание

Соответствие с полем из метода старой телефонии

eventstringда

Тип события. 

  • CALL_REDIRECTED (Вызов переведен)
-
id

string

да

Идентификатор вызова

id
redirectAdditional

string

да

Дополнительные данные, которые идут в SIP обмене

-
redirectAnons

string

да

Текст сопровождения перевода, указанный в настройках бота при переводе звонка.

-
redirectDestination

string

да

Тип перевода (настраивается в сценарии бота):

ch (канал перевода)

custom (произвольный перевод)

int (внутренний номер, вроде не используем)

-
redirectDestinationId

string

да

Значение конечного номера, для выбранного типа перевода (номер канала, номер произвольного перевода, внутренний номер)

-

|   callbackData

Object

да (может быть пустым)

Информация о кандидате, переданная в момент добавления кандидата (см. метод добавления кандидата)

-

Описание хука по событию «CALL_ENDED»

Пример запроса:
Тело webHook в формате Json:

...

Поле

Тип

Обязательно

Описание

Соответствие с полем из метода старой телефонии

eventstringда

Тип события. 

Возможные значения:

  • CALL_ENDED (Вызов завершен)
-
type

string

да

Тип звонка.

Возможные значения:

  • INCOMING (Входящий)
  • OUTGOING (Исходящий)
-
companyId

int

да

Идентификатор компании

-
botId

string

да

Идентификатор сценария

botId
id

string

да

Идентификатор вызова

id
externalId

string

да

Переданный в запросе на инициализацию идентификатор (callId)

-
taskId

string

да

Идентификатор задания на обзвон

taskId
candidateId

string

да

Идентификатор кандидата на обзвон

-
status

string

да

Статус вызова. 

Возможные значения:

  • CANCEL (Вызов отменен)
  • ANSWERED (Вызов отвечен)
  • NOANSWER (Нет ответа)
  • BUSY (Занято)
  • CONGESTION (Оператор отклонил вызов)
  • CHANUNAVAIL (Транк не доступен)
  • FAILED (Ошибка системы при обработке вызова)
  • SCHEDULED (Вызов запланирован)
  • BLACKLIST (Телефон в черном списке)
  • DIAL (Набор номера)
  • INPROGRESS (Идет диалог)
  • FZ230 (Запрет вызова по 230ФЗ)
  • INVALID (Номер не корректный)
  • UNAVAILABLE (Удаленная АТС не доступна)
  • EXPIRED (Соединение не установлено за таймаут)
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

да (пустой для первого хука)

Путь к аудиофайлу.

Для получения ссылки нужно добавить в начале пути 

https://minio.twin24.ai/twin-cis-production/records

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:

...