Подключение и работа с AMI в продуктах Yeastar
Материал из Xgu.ru
Статья в разработке.
Содержание |
[править] 1. Включение доступа к АТС по протоколу AMI
Для доступа по AMI необходимо сконфигурировать AMI-настройки на устройстве Yeastar с помощью Веб-панели.
Для этого, необходимо в Веб-панели устройства в меню Yeastar Система -> AMI-настройки включить флажок, добавить разрешенные IP-адреса, задать логин и пароль.
Подключение будет доступно по стандартному порту Call Manager Asterisk 5038.
[править] 2. Подключение с помощью утилиты Putty
Для ознакомления и начала работы с Call Manager в устройствах Yeastar можно использовать программу Putty.
Для подключения к Call Manager с помощью Putty выполните следующие действия:
1. Настроить IP-адрес, порт 5038 и тип подключения "Raw". Нажать кнопку "Open".
2. При успешном подключении, Putty отобразит сообщение.
3. Далее необходимо авторизоваться.
Для авторизации в консоль ввести:
Action: Login Username: admin Secret: amipassword
Нажмите "Enter".
4. При успешной авторизации, консоль должна отобразить надпсь:
Response: Success Message: Authentication accepted
[править] 3. Получение списка команд
С помощью консоли можно получить список команд, которые доступны для выполнения с помощью интерфейса Call Manager.
Для этого в консоль необходимо ввести команды:
Action: ListCommands
Результат в виде списка команд отобразится на экране консоли:
Справочную информацию по командам можно получить на вики Asterisk
https://wiki.asterisk.org/wiki/display/AST/AMI+Actions
[править] 4. Выполнение вызова
Выполнение вызова можно инициировать с помощью метода originate.
Например метод:
Action: originate Context: Channel: SIP/385 Exten: 386 Priority: 1 Timeout: 30000 CallerID: DialTo 386 ActionID: 1
Инициирует вызов с телефона 385 на телефон 386.
В первую очередь зазвонит телефон, зарегистрированный под номером указанным в переменной Channel: SIP/385.
На экране телефона отобразится информация CallerID: DialTo 386.
После поднятия трубки, вызов отправится на номер, указанный в переменной Exten: 386.
При успешном выполнении вызова консоль отобразит сообщение:
Response: Success ActionID: #Number Message: Originate successfully queued
[править] 5. Отслеживание событий звонков
Консоль будет отображать события о вызовах, которые производятся в АТС.
Например, при звонке с номера 385 на номер 386 Call Manager возвратит следующую последовательность событий:
Event: ExtensionStatus Privilege: call,all Exten: 385 Context: default Hint: SIP/385 Status: 1 Event: ExtensionStatus Privilege: call,all Exten: 385 Context: extensions-hintcontext Hint: SIP/385 Status: 1 Event: Newchannel Privilege: call,all Channel: SIP/385-0000000c ChannelState: 0 ChannelStateDesc: Down CallerIDNum: 385 CallerIDName: 385 AccountCode: Exten: 386 Context: DLPN_DialPlan385 Uniqueid: 1452603583.12 Event: Newstate Privilege: call,all Channel: SIP/385-0000000c ChannelState: 4 ChannelStateDesc: Ring CallerIDNum: 385 CallerIDName: 385 Uniqueid: 1452603583.12 Event: Newchannel Privilege: call,all Channel: SIP/386-0000000d ChannelState: 0 ChannelStateDesc: Down CallerIDNum: CallerIDName: AccountCode: Exten: Context: DLPN_DialPlan386 Uniqueid: 1452603583.13 Event: ExtensionStatus Privilege: call,all Exten: 386 Context: default Hint: SIP/386 Status: 8 Event: ExtensionStatus Privilege: call,all Exten: 386 Context: extensions-hintcontext Hint: SIP/386 Status: 8 Event: Dial Privilege: call,all SubEvent: Begin Channel: SIP/385-0000000c Destination: SIP/386-0000000d CallerIDNum: 385 CallerIDName: 385 UniqueID: 1452603583.12 DestUniqueID: 1452603583.13 Dialstring: 386 Event: NewCallerid Privilege: call,all Channel: SIP/386-0000000d CallerIDNum: 386 CallerIDName: Uniqueid: 1452603583.13 CID-CallingPres: 0 (Presentation Allowed, Not Screened) Event: Newstate Privilege: call,all Channel: SIP/386-0000000d ChannelState: 5 ChannelStateDesc: Ringing CallerIDNum: 386 CallerIDName: Uniqueid: 1452603583.13 Event: ExtensionStatus Privilege: call,all Exten: 386 Context: default Hint: SIP/386 Status: 1 Event: ExtensionStatus Privilege: call,all Exten: 386 Context: extensions-hintcontext Hint: SIP/386 Status: 1 Event: Newstate Privilege: call,all Channel: SIP/386-0000000d ChannelState: 6 ChannelStateDesc: Up CallerIDNum: 386 CallerIDName: Uniqueid: 1452603583.13 Event: Newstate Privilege: call,all Channel: SIP/385-0000000c ChannelState: 6 ChannelStateDesc: Up CallerIDNum: 385 CallerIDName: 385 Uniqueid: 1452603583.12 Event: NewAccountCode Privilege: call,all Channel: SIP/386-0000000d Uniqueid: 1452603583.13 AccountCode: OldAccountCode: Event: Bridge Privilege: call,all Bridgestate: Link Bridgetype: core Channel1: SIP/385-0000000c Channel2: SIP/386-0000000d Uniqueid1: 1452603583.12 Uniqueid2: 1452603583.13 CallerID1: 385 CallerID2: 386 Event: Unlink Privilege: call,all Channel1: SIP/385-0000000c Channel2: SIP/386-0000000d Uniqueid1: 1452603583.12 Uniqueid2: 1452603583.13 CallerID1: 385 CallerID2: 386 Event: Cdr Privilege: cdr,all AccountCode: Source: 385 Destination: 386 DestinationContext: DLPN_DialPlan385 CallerID: "385" <385> Channel: SIP/385-0000000c DestinationChannel: SIP/386-0000000d LastApplication: Dial LastData: SIP/386,30,tTkKWwXx StartTime: 2016-01-12 04:59:43 AnswerTime: 2016-01-12 04:59:45 EndTime: 2016-01-12 04:59:50 Duration: 7 BillableSeconds: 5 Disposition: ANSWERED AMAFlags: DOCUMENTATION UniqueID: 1452603583.12 UserField: Event: Hangup Privilege: call,all Channel: SIP/386-0000000d Uniqueid: 1452603583.13 CallerIDNum: 386 CallerIDName: <unknown> Cause: 16 Cause-txt: Normal Clearing Event: Dial Privilege: call,all SubEvent: End Channel: SIP/385-0000000c UniqueID: 1452603583.12 DialStatus: ANSWER Event: Hangup Privilege: call,all Channel: SIP/385-0000000c Uniqueid: 1452603583.12 CallerIDNum: 385 CallerIDName: 385 Cause: 16 Cause-txt: Normal Clearing Event: ExtensionStatus Privilege: call,all Exten: 386 Context: default Hint: SIP/386 Status: 0 Event: ExtensionStatus Privilege: call,all Exten: 386 Context: extensions-hintcontext Hint: SIP/386 Status: 0 Event: ExtensionStatus Privilege: call,all Exten: 385 Context: default Hint: SIP/385 Status: 0
Обрабатывая события на клиентской стороне можно формировать, например всплывающее окно входящего вызова в CRM.
Например, событие при установке соединения (поднятие трубки на обоих сторонах линии 385 и 386):
Event: Bridge Privilege: call,all Bridgestate: Link Bridgetype: core Channel1: SIP/385-0000000c Channel2: SIP/386-0000000d Uniqueid1: 1452603583.12 Uniqueid2: 1452603583.13 CallerID1: 385 CallerID2: 386
Аналогичным образом можно отследить события поступления вызова, перевода вызова, пропущенный вызов, занятость канала и т.д.
[править] 6. Отправка SMS
С помощью интерфейса Call Manager можно также производить отправку SMS на мобильные телефоны через GSM каналы на станции.
Для этого, необходимо:
1. Определить какие каналы используются GSM модулями.
Команда для MyPBX:
Action: command command: gsm show spans
Команда для шлюзов:
Action: smscommand command: gsm show spans
В результате консоль возвратит номер канала GSM:
2. Далее через данный канал можно выполнить отправку SMS на мобильный номер:
Например, для отправки через обнаруженный канал 14 на номер +79164444444 команда:
Action: command command: gsm send sms 14 +79164444444 "TEST SMS"
3. При успешной отправке SMS консоль должна вернуть завершение без значения:
Response: Follows Privilege: Command --END COMMAND--
4. Отправка USSD
MyPBX*CLI> gsm send ussd 14 *111*10# 1:Received USSD success on span: 14 USSD Responses: 0 USSD Code: 72 USSD Len: 268 USSD Message: 041D043E043C043504400020043704300431043B043E043A04380440043E04320430043D002E0020041E043F04350440043004460438044F0020043D04350434043E044104420443043F043D0430002E0020041F043E04360430043B04430439044104420430002C0020043F043E043F043E043B043D04380442043500200441044704350442 [2016-02-25 05:42:06] NOTICE[2042]: chan_ysgsm.c:6892 gsm_dchannel: Send ussd success! MyPBX*CLI>
[править] 7. Библиотека PHP для работы с AMI
Для автоматизации работы с AMI Call Manager АТС существует множество библиотек, разработанных под разные платформы на различных языках программирования.
Например, для языка PHP можно использовать библиотеку PHPAGI:
http://phpagi.sourceforge.net/
Использование библиотеки:
0. Установить на ОС, из которой планируется выполнять работу интерпретатор PHP.
1. Распаковать в каталог архив библиотеки так, чтобы была доступна папка /phpagi/.
2. Создать скрипт PHP (например, mypbx-sms-send.php для АТС или tg-sms-send.php для шлюза).
3. Вызвать отправку SMS с помощью скрипта с передачей параметров.
Для АТС mypbx:
php mypbx-sms-send.php '14' '+7916444444' "Text для SMS-MyPBX"
Для шлюза:
php tg-sms-send.php '14' '+79164444444' "Text для SMS-MyPBX"
Содержание скриптов:
Скрипт отправки SMS на АТС mypbx-sms-send.php:
<?php require_once('./phpagi/phpagi.php'); require_once('./phpagi/phpagi-asmanager.php'); $hostM="192.168.254.32"; //Адрес TG шлюза, с настроенным API $userM="admin"; //Логин для подключения к TG шлюзу, с настроенным API $passM="password"; //Пароль для подключения к TG шлюзу, с настроенным API // $channel = 8; //Канал gsm // $phonenumber= '8916444444'; // Номер телефона // $textforsms = 'TextForSMS-19'; // Текст SMS $channel = $argv[1]; //Канал gsm $phonenumber= $argv[2]; // Номер телефона $textforsms = $argv[3]; // Текст SMS $am = new AGI_AsteriskManager(); if($am->connect($hostM,$userM,$passM)){ $am->send_request('command',array('command'=>'gsm send sms '.$channel.' '.$phonenumber.' "'.strval($textforsms).'" 13')); echo ' Отправка через GSM-канал MyPBX: '.$channel.' На номер: '.$phonenumber.' Текст СМС:'.$textforsms; $am->disconnect(); } ?>
Скрипт отправки SMS на GSM-Шлюзе tg-sms-send.php:
<?php require_once('./phpagi/phpagi.php'); require_once('./phpagi/phpagi-asmanager.php'); $hostM="192.168.254.36"; //Адрес TG шлюза, с настроенным API $userM="apiuser"; //Логин для подключения к TG шлюзу, с настроенным API $passM="apipass"; //Пароль для подключения к TG шлюзу, с настроенным API // $channel = 2; //Канал gsm // $phonenumber= '8916444444'; // Номер телефона //$textforsms = 'Text ForSMS - 16'; // Текст SMS $channel = $argv[1]; //Канал gsm $phonenumber= $argv[2]; // Номер телефона $textforsms = $argv[3]; // Текст SMS $am = new AGI_AsteriskManager(); if($am->connect($hostM,$userM,$passM)){ $am->send_request('smscommand',array('command'=>'gsm send sms '.$channel.' '.$phonenumber.' "'.strval($textforsms).'" 13')); echo ' Отправка через GSM-канал TG: '.$channel.' На номер: '.$phonenumber.' Текст СМС:'.strval($textforsms); $am->disconnect(); } ?>