Часто в CRM системах возникает задача контроля фактически совершенного звонка, перехват события входящего звонка с отображением информации о клиенте. В Freeswitch можно данную задачу попытаться решить при помощи LUA, CURL и других костылей в которых будет необходимо организовать всю логику обслуживания звонка, т.к. Freeswitch “орудует” каналами (channels, legs) а не одним звонком. Данный сервис позволяет получать “готовые” события в нативной .NET сборке для дальнейшей обработки в CRM.
Сервис состоит из двух частей:
1. Кроссплатформенная (Linux, Windows) серверная часть: art.core.pbxeventsserver на .NET Core 2.1, которая подключается непосредственно к Freeswitch через mod_eventsocket, собирает, анализирует и формирует нужные события вызовов для передачи клиентской части.
2. Клиентская часть – art.pbxeventsclient.dll. Необходима для подключения к серверной части (tcp) и парсинга всех необходимых событий вызовов. Через клиентскую часть возможно передача некоторых команд в серверную часть. Можно создать wrapper с COM, которые уже использовать в 1С и других (не .NET) платформах.
Серверная часть создает одно подключение к Freeswitch, что разгружает Freeswitch и значительно сокращает объем траффика в отличии от схемы когда клиентская часть подключается напрямик к mod_eventsocket.
Все уведомления клиентским частям передаются синхронном режиме (попрядку), чтобы сократить ресурсы сервера с таймаутом 3000 мс (в случае если клиент не смог получить очередной пакет в течении 3 сек, клиент исключается из пула). Все данные передаются в открытом XML и не шифруются, поэтому вы можете подключиться напрямик к сервису и парсить пакеты самостоятельно.
Конфигурация серверной части
Перед запуском в режиме сервиса (настраивается вручную в зависимости от версии Linux или Windows) рекомендуется проверить работу сервиса в интерактивном режиме.
Конфигурация сервиса находится в файле config.xml рядом с исполняемым файлом.
- serverport – порт TCP, для входящих клиентских подключений
- host – ip/hostname вашего freeswitch с активированным mod_eventsocket
- port – номер порта mod_eventsocket. По-умолчанию 8021/
- password – secret mod_eventsocket
- log – режим логирования: human – вывод событий в режиме вызовов, simple – упрощенные raw – полные.
Клиентская часть
Клиентская часть – полностью нативная сборка .NET Framework 4.0 без зависимомстей.
События класса CallController:
- Connected – при успешном подключении к сервреной части;
- ConnectionError – при проблеме с подключением к серверной части;
- NewCall – новый звонок;
- CallProgress – изменение статуса звонка (вызов, ответ);
- CallCompleted – завершение звонка;
- DTMF – абонентом нажата цифра;
Все события вызываются в асинхронном потоке.

если редактируется уже существующий шлюз, то вначале потребуется убить существующую регистрацию командой freeswitch sofia profile external killgw gateway_name freeswitch sofia profile external rescan reloadxml