Asterisk
Glossary Item Box
Общие положения
Для взаимодействия с сервером Asterisk используется AMI (Asterisk Manager API). Manager API позволяет клиентским программам соединяться с сервером Asterisk, используя TCP/IP протокол. Данный API (Application Programming Interface) позволяет считывать события, происходящие в автоматической телефонной станции (АТС), и отправлять команды управления звонком.
К СВЕДЕНИЮ
До версии 7.8.4, bpm'online поддерживает интеграцию c Asterisk до версии 11 включительно. Начиная с версии 7.8.4, bpm'online поддерживает интеграцию c Asterisk до версии 13.
Для коммуникации между АТС Asterisk и подсоединенным Manager API клиентом используется простой текстовый построчный протокол вида: "параметр: значение". Окончание строки определяется последовательностью перевода строки и возврата каретки (CRLF).
К СВЕДЕНИЮ
В дальнейшем для набора строк вида "параметр: значение", после которых идет пустая строка, содержащая только CRLF, для упрощения будет использоваться термин "пакет".
Настройка конфигурационного файла сервиса Messaging Service для интеграции bpm'online с Asterisk
Для работы интеграции с bpm'online необходимо установить Terrasoft Messaging Service (TMS) на выделенном компьютере, который будет использоваться в качестве сервера данной интеграции. В конфигурационном файле Terrasoft.Messaging.Service.exe.config необходимо установить следующие параметры для коннектора Asterisk.
<asterisk filePath="" url="Имя_или_адрес_сервера_Asterisk" port="Порт_сервера_Asterisk" userName="Логин Asterisk" secret="Пароль Asterisk" originateContext="Исходящий контекст" parkingLotContext="Контекст парковки" autoPauseOnCommutationStart="true" queueExtensionFormat="Local/{0}@from-queue/n" asyncOriginate="true" sendRingStartedOnRingingState="true" traceQueuesState="false" packetInfoConfig="Дополнительные параметры пакетов для обработки в конфигурации" />
Порты для интеграции bpm'online с Asterisk
- TMS принимает от браузера WebSocket подключение на порт 2013 по протоколу TCP.
- TMS подключается к серверу Asterisk по умолчанию на порт 5038.
Сервис Terrasoft Messaging Service для интеграции bpm'online с Asterisk
Интеграционная часть Messaging Service реализована в ядре основного решения bpm'online в библиотеке Terrasoft.Messaging.Asterisk.
Основные классы библиотеки:
- AsteriskAdapter — класс, преобразующий события Asterisk в высокоуровневые события модели звонка, используемой в интеграции bpm'online.
- AsteriskManager — класс, использующийся для создания и удаления пользовательского соединения с сервером Asterisk.
- AsteriskConnection — класс, представляющий собой пользовательское соединение при интеграции с Asterisk.
- AsteriskClient — класс, использующийся для отправки команд на сервер Asterisk.
Пример взаимодействия CtiModel, Terrasoft Messaging Service и Asterisk Manager API
Исходящий звонок оператора абоненту с установкой звонка на удержание абонентом, снятия с удержания абонентом и завершения звонка оператором.
На рис. 1 приведена последовательнось возникновения событий для данного примера. А в таблице 1 приведен пример обработки событий — как данные события интерпретируются TMS, какие значения из приведенных событий используются при обработке входящего звонка.
Рис. 3. — Последовательность возникновения событий при звонке
Табл. 1. — События Asterisk
Asterisk log | TMS | Action | Client |
---|---|---|---|
{ Event: newchannel Channel: <channel_name> UniqueID: <unique_id> } |
Создается канал и добавляется в коллекцию new AsteriskChannel({ Name: <channel_name>, UniqueId: <unique_id> }); |
||
{ Event: Hold UniqueID: <unique_id> Status: "On" } |
В коллекции каналов ищется канал по <unique_id> и с помощью метода fireEvent генерируется событие | PutHoldAction | Обработка события PutHoldAction, отображение установки звонка на удержание |
{ Event: Hold UniqueID: <unique_id> Status: "Off" } |
В коллекции каналов ищется канал по <unique_id> и с помощью метода fireEvent генерируется событие | EndHoldAction | Обработка события EndHoldAction, отображение установки звонка на удержание |
{ Event: Hangup UniqueID: <unique_id> } |
В коллекции каналов ищется канал по <unique_id> и с помощью метода fireEvent генерируется событие | RingFinished | Обработка события, отображение завершения звонка |
{ Event: Dial SubEvent: Begin UniqueID: <unique_id> } |
В коллекции каналов ищется канал по <unique_id>, заполняются данные и с помощью метода fireEvent генерируется событие | RingStarted | Обработка события RingStarted, отображение на панели исходящего звонка |
{ Event: Bridge UniqueID: <unique_id> } |
В коллекции каналов ищется канал по <unique_id> и с помощью метода fireEvent генерируется событие | CommutationStarted | Обработка события CommutationStarted, отображение разговора |
Нажатие кнопки "Ответить" инициирует новое событие в Asterisk |
События Asterisk
Подробный список событий и информация об их параметрах приведены в докуметации по Asterisk.