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

Ключ

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

Установка вебхука в кабинет

Вебхук нельзя установить для отдельного номера входящей линии, а только на все входящие номера в кабинете разом. Для того чтобы прикрепить адрес вебхука к кабинету нужно:

  1. Получить авторизационный токен (используя логин и пароль)
    Блок кода
    languagejs
    themeDJango
    firstline1
    linenumberstrue
    curl --location 'https://iam.twin24.ai/api/v1/auth/login' \
    --header 'Content-Type: application/json' \
    --data '{
        "email": "{{login}}",
        "password": "{{password}}",
        "ttl": 43200
    }'
  2. Выполнить метод для привязки вебхука (вместо {{cabinet}} указать номер личного кабинета, вместо {{url}} — адрес вашего вебхука, для авторизации использовать токен из прошлого шага)
    Блок кода
    languagejs
    themeDJango
    firstline1
    linenumberstrue
    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}}"
        }
    }'

Формат вебхука

Пример вебхуков

Хука будет два на каждый звонок (из-за особенностей реализации внутри системы):

...

  1. Пример первого хука
    Блок кода
    languagejs
    themeDJango
    firstline1
    linenumberstrue
    collapsetrue
    {
      "callId": "88556d65-9bc1-46cf-ba2d-306842b238f7",
      "startedAt": "2023-04-05 20:01",
      "number": "79309990580",
      "duration": 8,
      "robotCallDuration": 8,
      "robotCallTotalCost": "0.27",
      "externalId": "005112a5-2633-47e7-89ee-0f0bddb3ac2e",
      "currentStatusName": "ANSWERED",
      "additional": null,
      "recordPath": null,
      "mainCallCost": "0",
      "mainCallDiscount": "0",
      "mainCallDuration": 0,
      "mainCallTotalCost": "0",
      "autoCallCost": "0",
      "autoCallDiscount": "0",
      "autoCallDuration": "0",
      "autoCallTotalCost": "0",
      "robotCallCost": "2.00",
      "robotCallDiscount": "0",
      "transferCallCost": "0",
      "transferCallDiscount": "0",
      "transferCallDuration": "0",
      "transferCallTotalCost": 0,
      "totalCost": "0.27",
      "companyId": 1758,
      "method": "callEnded",
      "id": {
        "identity": "88556d65-9bc1-46cf-ba2d-306842b238f7"
      },
      "createdAt": null,
      "updatedAt": null,
      "callerId": "79992082892",
      "data": {
        "flow": [
          {
            "botId": "11b17988-7e83-445a-ad3d-ec30f619edee",
            "start": "2023-04-05 11:20:01.667647+03",
            "end": "2023-04-05 11:20:07.709039+03",
            "messages": [
              {
                "text": "Назови число",
                "author": "BOT",
                "time": "2023-04-05 11:20:01.667647+03"
              },
              {
                "text": "11",
                "author": "CLIENT",
                "time": "2023-04-05 11:20:06.023713+03"
              },
              {
                "text": "Ты назвал 11",
                "author": "BOT",
                "time": "2023-04-05 11:20:07.709039+03"
              }
            ]
          }
        ],
        "duration": 8,
        "totalCost": 0.27,
        "result": {
          "initialVariables": {
            "phone": "79992082892"
          },
          "markers": [
            "Вопрос",
            "Ответ",
            "Результат 1"
          ],
          "confirmation": "Поле подтверждение",
          "nps": "Поле нпс",
          "Переменная_1": "Ее значение",
          "Переменная_2": "Ее значение"
        }
      },
      "taskName": null,
      "taskCreatedAt": null,
      "botId": "11b17988-7e83-445a-ad3d-ec30f619edee",
      "callingNumber": "79992082892",
      "timezone": 10800,
      "messagesAsString": "BOT: Назови число\nCLIENT: 11\nBOT: Ты назвал 11",
      "resultsString": {
        "initialVariables": {
          "phone": "79992082892"
        },
        "markers": [
          "Вопрос",
          "Ответ",
          "Результат 1"
        ],
        "confirmation": "Поле подтверждение",
        "nps": "Поле нпс",
        "Переменная_1": "Ее значение",
        "Переменная_2": "Ее значение"
      },
      "emotion": null,
      "hungUpBy": null,
      "gender": null,
      "nps": "Поле нпс",
      "isAssistantRequest": null,
      "markers": null,
      "callbackData": []
    }
  2. Пример второго хука по этому же диалогу
    Блок кода
    languagejs
    themeDJango
    firstline1
    linenumberstrue
    collapsetrue
    {
      "callId": "88556d65-9bc1-46cf-ba2d-306842b238f7",
      "startedAt": "2023-04-05 20:01",
      "number": "79309990580",
      "duration": 10,
      "robotCallDuration": 8,
      "robotCallTotalCost": "0.27",
      "externalId": "005112a5-2633-47e7-89ee-0f0bddb3ac2e",
      "currentStatusName": "ANSWERED",
      "additional": null,
      "recordPath": "/1672/2023/4/5/1680682799.7442646_79309990580_79992082892.mp3",
      "mainCallCost": "1.30",
      "mainCallDiscount": "0",
      "mainCallDuration": 10,
      "mainCallTotalCost": "0.22",
      "autoCallCost": "0",
      "autoCallDiscount": "0",
      "autoCallDuration": "0",
      "autoCallTotalCost": "0",
      "robotCallCost": "2.00",
      "robotCallDiscount": "0",
      "transferCallCost": "0",
      "transferCallDiscount": "0",
      "transferCallDuration": "0",
      "transferCallTotalCost": "0.22",
      "totalCost": "0.49",
      "companyId": 1758,
      "method": "callEnded",
      "id": {
        "identity": "88556d65-9bc1-46cf-ba2d-306842b238f7"
      },
      "createdAt": null,
      "updatedAt": null,
      "callerId": "79992082892",
      "data": {
        "flow": [
          {
            "botId": "11b17988-7e83-445a-ad3d-ec30f619edee",
            "start": "2023-04-05 11:20:01.667647+03",
            "end": "2023-04-05 11:20:07.709039+03",
            "messages": [
              {
                "text": "Назови число",
                "author": "BOT",
                "time": "2023-04-05 11:20:01.667647+03"
              },
              {
                "text": "11",
                "author": "CLIENT",
                "time": "2023-04-05 11:20:06.023713+03"
              },
              {
                "text": "Ты назвал 11",
                "author": "BOT",
                "time": "2023-04-05 11:20:07.709039+03"
              }
            ]
          }
        ],
        "duration": 10,
        "totalCost": 0.49,
        "result": {
          "initialVariables": {
            "phone": "79992082892"
          },
          "markers": [
            "Вопрос",
            "Ответ",
            "Результат 1"
          ],
          "confirmation": "Поле подтверждение",
          "nps": "Поле нпс",
          "Переменная_1": "Ее значение",
          "Переменная_2": "Ее значение"
        }
      },
      "taskName": null,
      "taskCreatedAt": null,
      "botId": "11b17988-7e83-445a-ad3d-ec30f619edee",
      "callingNumber": "79992082892",
      "timezone": 10800,
      "messagesAsString": "BOT: Назови число\nCLIENT: 11\nBOT: Ты назвал 11",
      "resultsString": {
        "initialVariables": {
          "phone": "79992082892"
        },
        "markers": [
          "Вопрос",
          "Ответ",
          "Результат 1"
        ],
        "confirmation": "Поле подтверждение",
        "nps": "Поле нпс",
        "Переменная_1": "Ее значение",
        "Переменная_2": "Ее значение"
      },
      "emotion": null,
      "hungUpBy": null,
      "gender": null,
      "nps": "Поле нпс",
      "isAssistantRequest": null,
      "markers": null,
      "callbackData": []
    }

Описание полей вебхука

ПолеОписание
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НЕ АКТУАЛЬНО ДЛЯ ВХОДЯЩЕЙ