Итак, в первой статей уже был рассмотрен способ подключения к AMI aka AJAM. Теперь рассмотрим одно из его практических применений. Для этого понадобится еще немного настроить Asterisk и клиентское рабочее место.
Создадим расширение осуществления исходящего телефонного звонка в Asterisk. В конец конфига /etc/asterisk/extensions.conf добавим свою секцию:
[call2back] exten => _.,1,Answer exten => _.,1,Wait(1) exten => _.,n,Dial(Local/${EXTEN}@from-internal,300,Tt) exten => _.,n,Hangup()
Рассмотрим что она (секция) описывает. call2back - имя секции (контекст команды дозвона) и последовательность действий: ответить на звонок, подождать 1 секунду, начать дозвон к абоненту ${EXTEN} (параметр команды дозвона) и завершить звонок.
На клиентском рабочем месте устанавливаем SIP-клиент и настаиваем автоматический ответ с собственного внутреннего телефонного номера. Например, внутренний номер 0319, следовательно в SIP-клиенте должен быть настроен автоответ на номер 0319.
Теперь для осуществления исходящего звонка через AJAM достаточно выполнить следующую последовательность команд:
1. Авторизация
http://asterisk_ipadress:8088/asterisk/mxml?action=login&username=1cajam&secret=myajamuserpass
параметры username и secret соответственно подставить из своих настроек AMI
2. Дозвон
http://asterisk_ipadress:8088/asterisk/mxml?action=originate&channel=SIP/0319&callerid=0319&timeout=15000&context=call2back&exten=subscriber&priority=1&async=yes
где 0319 - это внутренний номер, call2back - созданное ранее расширение, subscriber - номер телефона того, кому звоним.
В 1С это все можно осуществить через несложный код:
Организация соединения:
Соединение = Новый HTTPСоединение(IP,Port,,,,Таймаут,);
Отправка и чтение запроса:
ТекстКоманды="/asterisk/mxml?action=login&username=1cajam&secret=myajamuserpass"; Куки = ""; Запрос=Новый HTTPЗапрос(); Запрос.АдресРесурса=ТекстКоманды; Запрос.Заголовки.Вставить("Connection", "keep-alive"); Запрос.Заголовки.Вставить("Cookie", Куки); Ответ=Соединение.Получить(Запрос); Куки=Ответ.Заголовки.Получить("Set-Cookie"); Куки=?(Куки=Неопределено,"",Куки); ТекстКоманды="/asterisk/mxml?action=originate&channel=SIP/0319&callerid=0319&timeout=15000&context=call2back&exten=subscriber&priority=1&async=yes"; Запрос.АдресРесурса=ТекстКоманды; Запрос.Заголовки.Вставить("Connection", "keep-alive"); Запрос.Заголовки.Вставить("Cookie", Куки); Ответ=Соединение.Получить(Запрос);ВАЖНО!!! При последовательном выполнении команд из 1С НЕ ЗАБЫВАТЬ про Cookie и пердкаждой следующей командой их перечитывать.
Ответ возвращается в виде XML и его, конечно, тоже неплохо бы парсить на предмет ошибок, но это уже другая история.