Подключение и работа с AMI в продуктах Yeastar

Материал из Xgu.ru

Перейти к: навигация, поиск
stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.

Если вы считаете, что её стоило бы доработать как можно быстрее, пожалуйста, скажите об этом.


Статья в разработке.


Содержание

[править] 1. Включение доступа к АТС по протоколу AMI

Для доступа по AMI необходимо сконфигурировать AMI-настройки на устройстве Yeastar с помощью Веб-панели.

Для этого, необходимо в Веб-панели устройства в меню Yeastar Система -> AMI-настройки включить флажок, добавить разрешенные IP-адреса, задать логин и пароль.

YsAMI1.jpg

Подключение будет доступно по стандартному порту Call Manager Asterisk 5038.

[править] 2. Подключение с помощью утилиты Putty

Для ознакомления и начала работы с Call Manager в устройствах Yeastar можно использовать программу Putty.

Для подключения к Call Manager с помощью Putty выполните следующие действия:

1. Настроить IP-адрес, порт 5038 и тип подключения "Raw". Нажать кнопку "Open".

YsAMIPutty1.png

2. При успешном подключении, Putty отобразит сообщение.

YsAMIPutty2.jpg

3. Далее необходимо авторизоваться.

Для авторизации в консоль ввести:

Action: Login
Username: admin
Secret: amipassword

Нажмите "Enter".

YsAMIPutty3.jpg

4. При успешной авторизации, консоль должна отобразить надпсь:

Response: Success
Message: Authentication accepted

[править] 3. Получение списка команд

С помощью консоли можно получить список команд, которые доступны для выполнения с помощью интерфейса Call Manager.

Для этого в консоль необходимо ввести команды:

Action: ListCommands

Результат в виде списка команд отобразится на экране консоли:

YsAMIListCommands.jpg

Справочную информацию по командам можно получить на вики 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.


YsAMIOriginate.png


При успешном выполнении вызова консоль отобразит сообщение:

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:

YsAMISMS.png

2. Далее через данный канал можно выполнить отправку SMS на мобильный номер:

Например, для отправки через обнаруженный канал 14 на номер +79164444444 команда:

Action: command
command: gsm send sms 14 +79164444444 "TEST SMS"

YsAMICallsPHP1.png

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();

}

?>