При обработке звонка (как входящего, так и исходящего) в ВАТС происходят события. По событиям генерируются сообщения WebHooks, моментально доставляемые приложениям, которые могут использовать эту информацию и, в свою очередь, передавать в ВАТС команды по API (не по WebHooks).
Сообщения о событиях содержат набор параметров (см. раздел «События в ВАТС и сообщения WebHooks» ниже). Анализ последовательности сообщений, относящихся к одному звонку, позволяет определить текущее состояние звонка (завершён или в обработке, и на каком этапе) и предшествующие этапы обработки, а также получить связанные с этим звонком данные (продолжительность разговоров, идентификаторы операторов и файлов записи разговоров).
В настоящее время в ВАТС MCN Telecom реализованы 8 сообщений Webhooks для обработки входящего звонка и 4 – для исходящего.
Данные передаются во внешнюю систему по протоколу HTTP в POST-запросе в виде JSON-объекта непосредственно в теле запроса (raw body).
Общая схема обработки звонка на ВАТС
Обработка звонка на ВАТС включает:
- переключения на различные объекты ВАТС (для входящих звонков – согласно сценарию маршрутизации); переключения происходят быстро (доли секунды),
- ожидание (прослушивание внешним абонентом автоматически транслируемых сообщений и ввод команд набором цифр или голосом) – возможно на следующих этапах обработки звонка:
- звуковое приветствие (при поступлении звонка извне на ВАТС),
- сообщения IVR/голосового помощника,
- сообщения очереди (анонс, объявление позиции в очереди),
- гудки/музыка на ожидании ответа оператора.
Простейший типовой сценарий обработки звонка в ВАТС приводит к соединению оператора (внутреннего номера ВАТС) с внешним абонентом, после чего следует разговор и завершение звонка.
Возможно завершение звонка без соединения с оператором, при этом звонок может считаться либо пропущенным, либо обработанным автоматически – например, если звонящий получил всю нужную информацию через автоматического информатора (IVR или голосового помощника).
Переход звонка на оператора возможен:
- по сценарию маршрутизации,
- прямой набор внутреннего номера (DID) внешним абонентом,
- из очереди,
- перевод звонка оператором после соединения.
WebHooks не отслеживают события на очередях, но для событий при переходе на оператора по сценарию маршрутизации и из очереди формируются сообщения разного типа.
Переводы звонка
Основную сложность в отслеживание процесса обработки вносят переводы звонка (возможны как для входящего, так и для исходящего с ВАТС). Если решение вопроса клиента требует участия нескольких специалистов или соединить его с нужным сотрудником не удалось сразу, соединение с внешним абонентом может последовательно переводиться на несколько операторов, в т. ч. через различные очереди, и в т. ч. возможны возвраты переведённого звонка.
В результате по одному звонку формируется несколько сообщений с типами onInCallingAnswered/ onOutCallingAnswered («ответ» – «соединение с оператором») и записей разговоров. При этом, несмотря на наличие состоявшихся разговоров, звонок может завершиться сообщением с типами onInCallingMissed, onInAbonMissed, onOutCallingMissed («пропущен») – если последний в цепочке оператор не ответил.
Для отслеживания всегда можно опираться на события типа Begin, это события старта звонка, когда он еще не распределился. Такой hook, имея уникальный номер, не может быть отправлен более одного раза. Его можно связать с hook’ом завершения вызова (события где “End” или “Miss” на конце), уникальный номер будет тот же, и можно понять, что это один разговор клиента и нескольких операторов, а не несколько разных звонков. При этом необходимо также отсеять неудачные переводы звонка и удержания звонка (когда менеджер звонил для консультации своему коллеге). Это нужно, например, чтобы принять решение, кто в CRM будет ответственный за лид, так как возможен только один вариант. А также для того, чтобы разграничить права на записи разговоров среди сотрудников.
Завершение звонка
Завершение звонка, поступившего в ВАТС, возможно на любом этапе обработки:
- звонящим («положил трубку»),
- в ВАТС:
- штатная команда отбоя в сценарии маршрутизации или на объекте в схеме,
- превышение максимальной длительности звонка, заданной в ВАТС,
- на внешней линии (вне ВАТС):
- превышение максимальной длительности звонка, заданной для оборудования на внешней линии,
- при техническом сбое на любом оборудовании, задействованном в реализации звонка;
а также
- ответившим на звонок («положил трубку») – в течение разговора,.
Звонок, завершённый в течение разговора (на ответе оператора), считается обработанным успешно.
События в ВАТС и сообщения WebHooks
Обработка звонка в ВАТС порождает сообщения WebHooks, соответствующие определённым событиям.
Набор параметров, присутствующий во всех сообщениях
Набор параметров, присутствующий в сообщениях, зависит от их типа. В данном пункте перечислены параметры, присутствующие в сообщениях всех типов; остальные параметры, присутствующие в сообщениях, приведены ниже, в пунктах, соответствующих типам сообщений.
1. |
event_type |
тип сообщения |
2. |
vpbx_id |
идентификатор ВАТС (в биллинге MCN Telecom), на которую поступил звонок |
3. |
account_id |
идентификатор клиента MCN Telecom (в биллинге), на ВАТС которого поступил звонок |
4. |
did_mcn |
внешний телефонный номер MCN Telecom, подключённый к ВАТС, через который поступил входящий звонок или выполнен исходящий (обычный номер телефонной сети или учётная запись SIP) |
5. |
did |
внешний телефонный номер, с которого поступил входящий звонок или на который выполнен исходящий (обычный номер телефонной сети или учётная запись SIP) |
6. |
call_id |
уникальный идентификатор звонка, по которому можно определить все сообщения, относящиеся к данному звонку |
7. |
secret |
токен (секретный ключ для аутентификации) |
Для одного звонка, как входящего, так и исходящего, параметры 2 – 7 имеют одно и то же значение, меняется значение параметра «event_type» (возможно формирование для звонка нескольких сообщений с одним типом).
Для разных звонков всегда отличается параметр «call_id».
Входящий звонок
События в ВАТС и сообщения WebHooks при обработке входящего звонка
События в ВАТС |
Тип сообщения |
Комментарий |
1. входящий звонок поступил на ВАТС: |
onBegin |
далее возможен переход звонка по сценарию маршрутизации (например, через автоинформатора или DID) на очередь (п. 2) или оператора (п. 4) |
9(1) звонок завершён на стадии 1 – пропущен (на сценарии маршрутизации) |
onInCallingMissed |
значения параметров who_answered и who_missed пусты |
2. переход на очередь: |
onInCallingStart –формируется для каждого оператора, которым направлен звонок (их может быть несколько в случае настройки очереди «Звонить всем») |
далее: п. 3 |
9(2) звонок завершён на стадии 2 – пропущен (на очереди) |
onInCallingMissed |
|
3. оператор ответил («снял трубку»); это может быть также перехват звонка – ответил не тот оператор, на которого шёл звонок |
onInCallingAnswered; также формируются onCloseIncomingNotice для каждого оператора, которым был направлен звонок (в случае настройки очереди «Звонить всем») |
далее звонок может быть переведён на номера других операторов (п. 4) или очереди (п. 2) |
9(3) звонок завершён на стадии 3 – успешно (на ответе оператора из очереди) |
onInCallingEnd |
|
4. переход на оператора (внутренний номер) по сценарию маршрутизации – НЕ из очереди: |
onInCallingStart |
если в сценарии маршрутизации задано ограничение времени ожидания ответа оператора – |
9(4) звонок завершён на стадии 4 – пропущен (на операторе) |
onInAbonMissed |
|
5. оператор ответил («снял трубку»); это также может быть перехват звонка – ответил не тот оператор, на которого шёл звонок |
onInCallingAnswered |
далее звонок может быть переведён на номера других операторов (п. 4) или очереди (п. 2) |
9(5) звонок завершён на стадии 5 – успешно (на ответе оператора НЕ из очереди) |
onInAbonEnd |
|
onBegin – звонок поступил на ВАТС
1 |
event_type |
onBegin |
2 – 7 |
|
см. п. «Набор параметров, присутствующий во всех сообщениях« |
3 сообщения – звонок переведён на очередь:
onInCallingStart – звонок идёт на оператора (возможно – на нескольких операторов),
onInCallingAnswered – один из операторов ответил,
onCloseIncomingNotice – отбой неответившим операторам
1 |
event_type |
onInCallingStart, или onCloseIncomingNotice, или onInCallingAnswered |
2 – 7 |
|
см. п. «Набор параметров, присутствующий во всех сообщениях« |
8 |
abon |
внутренний номер оператора, на которого распределён звонок |
2 сообщения: onInAbonEnd и onInAbonMissed – звонок завершён, разговор с оператором состоялся или не состоялся
1 |
event_type |
onInAbonMissed или onInAbonEnd |
2 – 7 |
|
см. п. «Набор параметров, присутствующий во всех сообщениях« |
8 |
abon |
внутренний номер оператора, на которого распределён звонок |
9 |
billsec |
длительность разговора в секундах |
10 |
record |
признак наличия файла записи разговора: 1 – есть, 0 – нет |
11 |
record_file |
идентификатор файла записи разговора |
onInCallingEnd – звонок завершён, разговор с оператором состоялся
1 |
event_type |
onInCallingEnd |
2 – 7 |
|
см. п. «Набор параметров, присутствующий во всех сообщениях« |
8 |
abon |
внутренний номер оператора, на которого распределён звонок |
9 |
billsec |
длительность разговора в секундах |
10 |
record |
признак наличия файла записи разговора: 1 – есть, 0 – нет |
11 |
record_file |
идентификатор файла записи разговора |
12 |
who_answered |
номера операторов, ответивших на звонок и переведших его на других операторов или очереди |
13 |
who_missed |
номер оператора, на котором завершён звонок |
Параметры 2 – 11 те же, что и для событий onInAbonMissed и onInAbonEnd.
onInCallingMissed – звонок завершён, разговор с оператором не состоялся
1 |
event_type |
onInCallingMissed |
2 – 7 |
|
см. п. «Набор параметров, присутствующий во всех сообщениях« |
8 |
who_answered |
номера операторов, ответивших на звонок и переведших его на других операторов или очереди |
9 |
who_missed |
номер оператора, на котором завершён звонок |
Параметры 8 и 9 – те же, что и параметры 12 и 13 для сообщения onInCallingEnd
Исходящий звонок
События в ВАТС и сообщения WebHooks при обработке исходящего звонка
События в ВАТС |
Тип сообщения |
Комментарий |
1. Оператор инициировал исходящий звонок: Внешний абонент получает сигнал вызова. |
onOutCallingStart |
Если оператор не снял трубку, звонок внешнему абоненту не производится |
9(1) звонок завершён на стадии 1 |
onOutCallingMissed |
значения параметров record и billsec =0 |
2. Внешний абонент ответил на звонок («снял трубку») |
onOutCallingAnswered |
далее звонок может быть переведён на другие номера ВАТС; после этого для данного звонка WebHooks генерируются как для входящих (см. раздел «Входящий звонок»: п. 4 при переводе на оператора, п. 2 при переводе на очередь) |
9(2) звонок завершён на стадии 2 |
onOutCallingEnd |
|
onOutCallingStart – звонок поступил на ВАТС
1 |
event_type |
onInCallingStart, или onCloseIncomingNotice, или onInCallingAnswered |
2 – 7 |
|
см. п. «Набор параметров, присутствующий во всех сообщениях« |
8 |
abon |
внутренний номер оператора, инициировавшего звонок |
onOutCallingAnswered – внешний абонент ответил на звонок
1 |
event_type |
onInCallingStart, или onCloseIncomingNotice, или onInCallingAnswered |
2 – 7 |
|
см. п. «Набор параметров, присутствующий во всех сообщениях« |
8 |
abon |
внутренний номер оператора, инициировавшего звонок |
9 |
record |
признак наличия файла записи разговора: 1 – есть, 0 – нет |
2 сообщения – звонок завершён:
onOutCallingEnd – разговор с оператором состоялся,
onOutCallingMissed – звонок пропущен
1 |
event_type |
onInCallingStart, или onCloseIncomingNotice, или onInCallingAnswered |
2 – 7 |
|
см. п. «Набор параметров, присутствующий во всех сообщениях« |
8 |
abon |
внутренний номер оператора, инициировавшего звонок |
9 |
billsec |
длительность разговора в секундах |
10 |
record |
признак наличия файла записи разговора: 1 – есть, 0 – нет |
11 |
record_file |
идентификатор файла записи разговора |
Пример сложного сценария: исходящий звонок с переводами между операторами
Оператор с внутренним номером на ВАТС 100 открывает в ИС (информационной системе) интерфейс с данными клиента (например, «карточка клиента»),
инициирует исходящий звонок командой в ИС (например, кнопка «Позвонить»);
ИС через API посылает в ВАТС необходимые команды, содержащие номера оператора и внешнего абонента,
ВАТС посылает звонок на аппарат оператора 100,
оператор получает сигналы входящего вызова и принимает звонок от ВАТС,
ВАТС посылает звонок на внешнего абонента и подключает его на аппарат оператора – два вызова, исходящих с ВАТС, превращаются в одно соединение между оператором и внешним абонентом,
ВАТС генерирует сообщение WebHook:
"event_type":"onOutCallingStart", "vpbx_id":"...", "account_id":"...", "did_mcn":"...", "did":"...", "call_id":"...", "secret ":"...", "abon":"100"
оператор слышит сигналы исходящего вызова (ожидания соединения), клиент получает сигналы входящего вызова.
Внешний абонент (клиент) отвечает на звонок,
ВАТС генерирует сообщение WebHook:
"event_type":"onOutCallingAnswered", …, "abon":"100", "record":"1"
Оператор и клиент разговаривают
Оператор переводит звонок на очередь (командой в ИС или с телефонного аппарата)
ВАТС генерирует сообщение WebHook:
"event_type":"onOutCallingEnd", …, "abon":"100", "billsec":"200", "record":"1", "record_file":"11...00"
Звонок для оператора 100 завершён, сформирован файл записи.
Клиент слышит сообщения очереди.
ВАТС согласно настройке «Звонить всем», заданной для очереди, посылает звонок на аппараты нескольких операторов очереди (всем свободным операторам с одинаковым приоритетом (наивысшим из возможных на текущий момент), установленным в настройках очереди),
ВАТС генерирует сообщение WebHook для каждого из операторов, которым направлен звонок (например, для операторов 101, 102, 103):
"event_type":"onInCallingStart", …, "abon":"101" "event_type":"onInCallingStart", …, "abon":"102" "event_type":"onInCallingStart", …, "abon":"103"
Клиент слышит сигналы исходящего вызова (ожидания соединения), операторы получают сигналы входящего вызова.
ИС по каждому сообщению типа «onInCallingStart» открывает для оператора интерфейс с данными по клиенту (например, «карточка клиента»).
Оператор 101 принимает звонок командой в ИС (в «карточке клиента»),
ИС транслирует команду в ВАТС через API,
ВАТС соединяет оператора 101 с клиентом и прекращает дозвон на прочих операторов очереди.
ВАТС генерирует сообщение WebHook для оператора, принявшего звонок:
"event_type":"onInCallingAnswered", …, "abon":"101"
ВАТС генерирует сообщения WebHook для всех остальных операторов, которым был направлен звонок:
"event_type":"onCloseIncomingNotice", …, "abon":"102" "event_type":"onCloseIncomingNotice", …, "abon":"103"
Получив сообщения WebHook с типом «onCloseIncomingNotice», ИС закрывает для каждого указанного в них оператора (102, 103) «карточку клиента», она остаётся открытой только у оператора, принявшего звонок (101).
Оператор 101 и клиент разговаривают.
Оператор 101 переводит звонок на оператора 109 (командой в ИС или с телефонного аппарата)
Звонок для оператора 101 завершён, сформирован файл записи.
ВАТС генерирует сообщения WebHook:
"event_type":"onInCallingEnd", …, "abon":"101", "billsec":"200", "record":"1", "record_file":"11...01" "event_type":"onInCallingStart", …, "abon":"109"
Клиент слышит сигналы исходящего вызова (ожидания соединения), оператор 109 получает сигналы входящего вызова.
ИС открывает для оператора 109 «карточку клиента».
Оператор 109 не принимает звонок, ВАТС направляет звонок обратно на оператора 101 (т. к. он был переведён этим оператором).
ВАТС генерирует сообщения WebHook:
"event_type":"onInAbonMissed", …, "abon":"109", "billsec":"0", "record":"1", "record_file":"11...09" "event_type":"onCloseIncomingNotice", "vpbx_id":"1", …, "abon":"109" "event_type":"onInCallingStart", "vpbx_id":"1", …, "abon":"101"
По сообщению WebHook с типом «onCloseIncomingNotice» ИС закрывает для оператора 109 «карточку клиента».
Клиент слышит сигналы исходящего вызова (ожидания соединения), оператор 101 получает сигналы входящего вызова.
Если оператор 101 уже закрыл у себя «карточку клиента», ИС открывает её снова.
Оператор 101 не принимает звонок, ВАТС завершает звонок.
ВАТС генерирует сообщения WebHook:
"event_type":"onInCallingMissed", …, "abon":"101", "who_answered":"??", "who_missed ":"??" "event_type":"onInAbonMissed", …, "abon":"101", "billsec":"0", "record":"1", "record_file":"11...01" "event_type":"onCloseIncomingNotice", …, "abon":"101"
По сообщению WebHook с типом «onCloseIncomingNotice» ИС закрывает для оператора 101 «карточку клиента».