Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 27 Следующий »

На этой странице

Вебхук приходит с 87.251.83.190 (в вайт лист лучше добавлять весь диапазон  TWIN: 87.251.83.160/27)

У хука есть 3 типа событий и отправка идет по каждому их них:

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

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

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

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

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

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

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

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

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

  1. Получаем хук CALL_ENDED.

  2. Получаем хук CANDIDATE_CHANGED.


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

  1. Получаем хук CALL_REDIRECTED.

  2. Получаем хук CALL_ENDED.

  3. Получаем хук CANDIDATE_CHANGED.


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

  1. Получаем хук CALL_ENDED.

  2. Получаем хук CALL_ENDED.

  3. Получаем хук CANDIDATE_CHANGED.


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

  1. Получаем хук CALL_REDIRECTED.

  2. Получаем хук CALL_ENDED.

  3. Получаем хук CALL_REDIRECTED.

  4. Получаем хук CALL_ENDED.

  5. Получаем хук CANDIDATE_CHANGED.


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

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

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

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

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

Тело запроса:

{
 	"event": "CALL_REDIRECTED",
    "id": "a9f629ab-20f0-4c11-8a82-05af87e49e43",
    "redirectAdditional": null,
    "redirectAnons": null,
    "redirectDestination": "ch",
    "redirectDestinationId": "10103",
    "callbackData": []
}

Описание полей:

Поле

Тип

Обязательно

Описание

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

eventstringда

Тип события. Возможные значения:

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

string

да

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

id
redirectAdditional

string

да

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

-
redirectAnons

string

да

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

-
redirectDestination

string

да

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

  • ch (канал перевода);
  • custom (произвольный перевод).
-
redirectDestinationId

string

да

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

-

|   callbackData

Object

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

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

-

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

Тело запроса:

{
  "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"
  },
  "amd": "MACH",
  "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": []
}

Описание полей:

Поле

Тип

Обязательно

Описание

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

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]

нет

Маркеры.

-

|    evaluation

string

нет

Оценка из блока результат.


|    confirmation

string

нет

Подтверждение.

results.confirm

|    nps

string

нет

NPS.

results.nps

|    ключ_1

string

нет

Произвольный результат. 

Задается в блоке Результат с типом Произвольный результат.

results.ключ_1
amdstring

да

Результат работы определителя автоответчика. Возможные значения:

  • HUMN (человек);
  • MACH (автоответчик);
  • NOT_DEF (не определялось).
amd
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

да

Кто положил трубку (BOT, HUMAN).

-
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» (Только для исходящих)

Тело запроса:

{
  "event": "CANDIDATE_CHANGED",
  "id": "683c00af-a299-4bb5-9500-5f594be0a0b6",
  "clientExternalId": "",
  "taskId": "e4da8b67-4786-432d-8092-a3d974a83d88",
  "status": "FINISHED",
  "lastCallId": "83c2e72f-00c0-4df4-bf32-d7369f55d8b8"
}

Описание полей:

Поле

Тип

Обязательно

Описание

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

eventstringда

Тип события. Возможные значения:

  • CANDIDATE_CHANGED (Обновление статуса по кандидату).

-
id

string

да

Идентификатор кандидата.

id
clientExternalId

string

да (может быть null)

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

-
taskId

string

да

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

taskId
lastCallId

string

да

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

-
status

string

да

Статус вызова. Возможные значения:

  • FINISHED (Обработка кандидата завершена, больше звонков совершено не будет).

status

|   callbackData

Object

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

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

-

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

Тело запроса:

{
	"event":"RECALL_SCHEDULED",
	"id":"59205dce-7dd8-418c-be9c-54eaeaa4629f",
	"date":"2024-01-31T13:25:00+00:00",
	"callbackData":[]
}

Описание полей:

Поле

Тип

Обязательно

Описание

event
stringда

Тип события RECALL_SCHEDULED — указывает на запланированный перезвон в рамках текущего звонка (через блок Результат).

id

stringдаID звонка.
datestringдаДата и время, на которые запланирован звонок.
callbackDataArrayда

Поле для дополнительной информации.


  • Нет меток