Функционирование интеграции
Перевод вызова на ответственного менеджера
В самом начале вызов попадает в голосовое меню — на внутренний номер типа IVR, где добавляется правило "Call Interactive". Это правило чаще всего используется в интеграциях для действия SetVar, чтобы задать переменную, значение которой будет содержать внутренний номер, на который нужно перевести вызов. Этот функционал чаще всего называется “перевод вызова на ответственного сотрудника”.
На внутреннем номере типа IVR первым действием отправляется запрос “Call interactive” на поиск по номеру звонящего соответствующей ему сущности в CRM-системе и связанного с ней ответственного менеджера для того, чтобы вернуть в АТС внутренний номер ответственного менеджера в переменной действия Setvar. АТС, минуя голосовое приветствие, отправляет вызов этому ответственному менеджеру (правилом IVR “Transfer to number in variable”). В случае, если внутренний номер не может принять вызов, а правил переадресации на внутреннем номере нет, рекомендуется не делать правило “Transfer to number in variable” финальным.
Пример
https://myintegration:8080/cid/807/getmanager/TLP55522
где https://myintegration:8080 — адрес сервера интеграции,
807 — порядковый номер приложения для данной интеграции,
TLP55522 — логин пользователя АТС, под которым создано приложение для данной интеграции.
Позволяет удобно отлавливать только события интеграции данного пользователя на сервере интеграции с помощью ngrep или в логах. Предлагается запрашивать у пользователя необходимость наличия перевода входящего вызова на ответственного менеджера и в случае согласия автоматически добавлять ее в IVR в Главный контекст первыми правилами:
Call interactive + Transfer from variable, где Variable name должна быть равна имени переменной, возвращаемой интеграцией.
В случае выключения опции перевода входящего вызова на ответственного менеджера в настройках приложения/виджета интеграции необходимо удалить эти правила из Главного контекста IVR (рекомендуется осуществлять данное действие внимательно, чтобы не удалить лишнее, т.к. их порядковый номер может быть изменен в ходе настроек АТС).
Регистрация данных о звонках
Все события обычных внутренних телефонных номеров (type
= phone
) для событий dial-in и dial-out анализируются и в случае наличия события answer регистрируются по событию hangup и SubCallID, как отдельные вызовы, вместо CallID. Таким образом удастся делить вызов в рамках АТС на отдельные плечи (call legs) – до перевода и после перевода и регистрировать их как отдельные вызовы.
Неотвеченные входящие вызовы фиксируются по наличию в hangup-ах от IVR и очередей параметра Bridged=no. При этом нужно помнить, что Bridged=yes — это всегда успешный входящий вызов. По нему данные должны быть зафиксированы при анализе событий dial-in в рамках их собственных SubCallID.
Инициация вызова (ClickToCall/callback)
Система сначала вызывает номер-источник вызова (src_num), а затем, при успешном ответе, вызывает номер назначения вызова (dst_num).
В случае если номер-источник вызова — внутренний номер, рекомендуется передавать не только параметры src_num и dst_num, но и caller_id_name, а также caller_id_number, указывая в них значение, равное значению dst_num. Таким образом, при поступлении вызова на SIP-телефон пользователя будет высвечиваться не его собственный внутренний номер (значение из src_num, передаваемое системой по умолчанию, если не заданы caller_id_name и caller_id_number), а номер, на который он будет звонить, что даст ему возможность как минимум нажатием RD(redial) перезвонить на этот же номер без участия интеграции.
Передача в интеграцию ссылки на запись разговора
В системе фиксируются входящие, исходящие и пропущенные звонки, ведется их статистика по каждому внутреннему номеру. Ресурс “Записи разговоров (/record/)” позволяет получить список доступных записей разговоров клиента или определенного внутреннего номера за заданный период времени, получить непосредственно файлы записи, а также удалить записи в диапазоне или поштучно. Приложение, использующее REST API (например, CRM-система) получает ссылку на файл в хранилище с помощью соответствующих ресурсов API:
GET /extension/{extension_id}/record/{record_uuid}/storage_url/
Данный ресурс возвращает ответы вида:{ "record_url": "http://storage.hostname/bd7zzrXD5395gn7FMgzKtB8zhZnNoYx8BdkX_HgNdeE2lnJjPMLcOR_1hQprGf-dW94wuTCNRAY6MDjMZ0zWIg==" }
Переход по ссылке из ответа API будет непосредственным скачиванием файла записи разговора. Полученную таким образом ссылку на файл записи разговора можно использовать в интеграции с CRM-системой. Для использования данного способа необходима дополнительная настройка стороннего веб-сервера.
Пример
Запрос:GET https://hostname/api/ver1.0/client/@me/record/30-624835FEEE0E11E6A19D331E4D6A0606/storage_url/
Ответ системы:{ "record_url": "http://storage.hostname/bd7zzrXD5395gn7FMgzKtB8zhZnNoYx8BdkX_HgNdeE2lnJjPMLcOR_1hQprGf-dW94wuTCNRAY6MDjMZ0zWIg==" }