На внутреннем номере типа 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==" }