Свободная компонента подключения к Asterisk. BROM-Asterisk-Native.dll |
25.05.17 22:23 |
Когда я столкнулся с необходимостью обрабатывать звонки, поступающие на телефоны менеджеров по продажам, я первым делом стал искать что-то бесплатное, так как денег на платные решения в бюджете заложено не было. Да и задачи у меня были не столь глобальными, как предлагают создатели коробочных CRM. Оказалось, что раньше существовала ROM-Asterisk.Dll, которой все счастливо пользовались до выхода платформы 8.3.6, где эта Dll-ка стала тупо зависать. Ещё несколько часов поисков привели меня на гитхаб. Конкретно сюда: https://github.com/shachneff/BROM-Asterisk-Native Если кто-то хочет скомпилировать библиотеку самостоятельно, то там есть одна небольшая проблема. Там файл AddInNative.cpp не содержит первые три байта, которые указывают на кодировку UTF-8 (без BOM). Поэтому русские буквы работать не будут, пока не исправите кодировку. А ещё в этих исходниках есть привязка к компьютеру и работа в режиме демо-версии. Режим демо-версии я для себя вырезал. Мне не улабывается бегать по всему предприятию и регистрировать эту библиотеку. Сама компонента это NativeAPI. Поэтому, подключаем мы её таким кодом:
Если компонента нормально подключилась, то у нее доступны следующие свойства: Подключено (Connected) - показывает, есть ли соединение с портом сервера АТС. РежимПрослушивания (Listen) - постоянный мониторинг сокета включен, или нет. Генерятся события ВнешнееСобытие, или нет. РегулярноеВыражение (RegEx) - выражение, которое фильтрует входящие сообщения от АТС. ВнешнееСобытие генерируется только для подходящих под выражение пакетов. Версия (Version) - версия Dll. Я не менял номер версии, хоть и отключил привязку к компьютеру ОшибкаКакСобытие (ErrorAsEvent) - При включенном режиме, компонента не генерирует событие, а просто шлёт во ВнешнееСобытие описание ошибки. ДемонстрационныйРежим (IsDemo) - Показывает, соответствует ли ключ продукта идентификатору компьютера. Ограничения демо-режма сняты. Идентификатор (ID) - Идентификатор компьютера КлючПродукта (Key) - Ключ продукта И ещё вам доступны методы: Подключиться(Сервер, Порт) (Connect(Server, Port)) - установить соединение с AMI сервером. После установки соединения вам нужно самим залогиниться на сервер специальной AMI-командой. Отключиться() (Disconnect()) - отключиться от AMI сервера ВыполнитьКоманду(Команда) (SendCommand(Command)) - послать команду к АТС РежимПрослушивания(ДаНет) (ListenMode(YesNo)) - Влючить/отключить режим прослушивания. Режим прослушивания сам по себе не включит поток сообщений. Необходимо попросить сервер слать вам сообщения специальной командой. УстановитьРегулярноеВыражение(РегулярноеВыражение) (SetRegEx(RegEx)) - Устанавливает фильтр на входящие от сервера сообщения. Дело в том, что даже при "EVENTMASK: call", астериск просто бомбардирует сообщениями (если это конечно рабочая АТС). В самой обработке для управляемых форм реализованы:
Внимание: Библиотека только для 32-разрядного клиента. Для 64-разрядного клиента или сервера я не пробовал компилировать. Добавлю бонус. Каждое сообщение от AMI очень удобно положить в структуру, вот таким кодом:
Это, конечно, будут накладные расходы, но так становится заметно удобнее отрабатывать сообщение. У меня так решено в продакшне, а в обработке - нет. Решил поделиться. |