Asterisk™: будущее телефонии Второе издание - Меггелен Джим Ван
Шрифт:
Интервал:
Закладка:
Отладка из операционной системы
Как упоминалось выше, у вас должно получиться запустить свою программу прямо из операционной системы, чтобы проверить ее поведение. Хитрость здесь в том, чтобы действовать подобно Asterisk, предоставляя сценарию следующее:
• Список переменных и их значений, таких как agi_test:1.
• Символы перевода строки (n), указывающие на то, что передача переменных завершена.
• Ответы на каждую из команд AGI, поступающую из вашего сценария AGI. Обычно достаточно ввести 200 response=1.
При тестировании программы непосредственно из операционной системы, возможно, проще замечать ошибки в ней.
Использование команды Asterisk agi debug
В интерфейсе командной строки Asterisk есть очень полезная команда для отладки сценариев AGI, которая называется (вполне уместно) agi debug. Если ввести в консоли Asterisk agi debug и затем запустить AGI- сценарий, вы увидите нечто подобное:
-- Executing AGI("Zap/1-1", "temperature.php") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/temperature.php AGI Tx >> agi_request: temperature.php AGI Tx >> agi_channel: Zap/1-1 AGI Tx >> agi_language: en AGI Tx >> agi_type: Zap AGI Tx >> agi_uniqueid: 1116732890.8 AGI Tx >> agi_callerid: 101 AGI Tx >> agi_calleridname: Tom Jones
AGI Tx >> agi_callingpres: 00 AGI Tx >> agi_callingani2: 0 AGI Tx >> agi_callington: 0 AGI Tx >> agi_callingtns: 0 AGI Tx >> agi_dnid: unknown AGI Tx >> agi_rdnis: unknown AGI Tx >> agi_context: incoming AGI Tx >> agi_extension: 141 AGI Tx >> agi_priority: 2 AGI Tx >> agi_enhanced: 0.0 AGI Tx >> agi_accountcode: AGI Tx >> AGI Rx << STREAM FILE temperature AGI Tx >> 200 result=0 endpos=6400 AGI Rx << STREAM FILE is "" AGI Tx >> 200 result=0 endpos=5440 AGI Rx << SAY NUMBER 67 ""-- Playing 'digits/60' (language 'en')
-- Playing 'digits/7' (language 'en')
AGI Tx >> 200 result=0
AGI Rx << STREAM FILE degrees ""
AGI Tx >> 200 result=0 endpos=6720
AGI Rx << STREAM FILE fahrenheit ""
AGI Tx >> 200 result=0 endpos=8000
-- AGI Script temperature.php completed, returning 0
Во время выполнения сценария AGI будут выведены строки трех типов. Первый тип - строки, начинающиеся с AGI TX >>. Это строки, которые Asterisk передает в STDIN вашей программы. Второй тип - строки, начинающиеся с AGI RX <<. Это команды, которые ваша AGI-программа записывает в Asterisk через STDOUT. Третий тип - строки, начинающиеся с --. Это стандартные сообщения Asterisk, выводимые при выполнении определенных команд.
Чтобы отключить отладку AGI после запуска, просто введите в консоли Asterisk agi no debug.
Используя команду agi debug, можно увидеть взаимодействие между Asterisk и своей программой, что может быть очень полезным при отладке. Надеемся, эти два совета помогут вам создавать и отлаживать мощные AGI-программы.
Заключение
AGI для разработчика - это один из наиболее революционных и веских аргументов в пользу Asterisk, а не закрытой узкоспециализированной офисной АТС. Но AGI - это только часть картины. В главе 10 будет рассмотрен другой мощный интерфейс программирования, известный как Asterisk Manager Interface.10
Интерфейс Asterisk Manager (AMI) и Adhearsion
Лучше позаботьтесь о том, чтобы все слова ваши были понятны, пристойны и правильно расположены, чтобы каждое предложение и каждый ваш период, затейливый и полнозвучный, с наивозможною и доступною вам простотою и живостью передавали то, что вы хотите сказать; выражайтесь яснее, не запутывая и не затемняя смысла. - Мигель де Сервантес, предисловие к книге «Дон Кихот»
Интерфейс Manager
Asterisk Manager Interface (AMI) - мощный программный интерфейс. Он позволяет внешним программам как управлять, так и контролировать систему Asterisk1. Этот интерфейс часто используется для интеграции Asterisk с существующими бизнес-процессами и системами, программным обеспечением CRM (Customer Relationship Management - управление взаимоотношениями с клиентами). Он также может применяться для разнообразных приложений, таких как программы автоматического набора номера и системы click-to-call (звонок-по-щелчку). Интерфейс Asterisk Manager слушает соединения, устанавливаемые по сетевому порту. Клиентская программа может соединяться с интерфейсом Asterisk Manager через этот порт, аутентифицироваться и передавать команды в Asterisk. После этого Asterisk будет отвечать на запрос, а также обновлять в клиентской программе информацию о статусе системы.
Чтобы использовать интерфейс Manager, необходимо задать учетную запись в файле /etc/asterisk/manager.conf. Этот файл будет выглядеть примерно так:
[general] enabled = yes port = 5038 bindaddr = 0.0.0.0
[oreilly]
secret = notvery
;deny=0.0.0.0/0.0.0.0
;permit=209.16.236.73/255.255.255.0
read = system,call,log,verbose,command,agent,user
write = system,call,log,verbose,command,agent,user
В разделе [general] необходимо активировать сервис, задав параметр enabled = yes. Чтобы эти изменения вступили в силу, понадобится перезагрузить интерфейс Manager (команда module reload manager из консоли Asterisk). По умолчанию используется TCP-порт 5038. Далее вы создаете по разделу для каждого пользователя, который будет присылать запрос на аутентификацию в системе. Для пользователя задается имя пользователя в квадратных скобках ([ ]), за которым следует пароль этого пользователя (secret), все IP-адреса, которым вы желаете запретить (deny) доступ, все IP-адреса, которым вы хотите разрешить (permit) доступ, и права на чтение (read) и запись (write) для этого пользователя.
Очень важно понимать, что, кроме незашифрованного пароля и возможности ограничить доступ для определенных IP-адре- сов, в интерфейсе Manager нет других средств обеспечения безопасности. Если вы запускаете Manager в ненадежной сети (или существуют любые другие сложные требования), для обработки всех соединений с API интерфейса Manager следует использовать замечательный пакет AstManProxy Дэвида Троя (David Troy).
Подключение к интерфейсу Manager
Важно помнить, что интерфейс Manager создан для использования программами, а не пользователями. Дело здесь не в том, что не получится направлять команды к нему напрямую, просто не следует ожидать увидеть обычный консольный интерфейс - назначение интерфейса Manager не в этом.
Команды в интерфейс Manager доставляются в пакетах, имеющих следующий синтаксис (строки завершаются CR+LF)[104]:
Действие: <тип действия> Ключ 1: Значение 1 Ключ 2: Значение 2 и т. д. ... Переменная: Значение Переменная: Значение и т. д. ...
Например, чтобы пройти аутентификацию в интерфейсе Manager (которая необходима для получения возможности любого взаимодействия), необходимо передать следующее:
Action: login Username: oreilly Secret: notvery <CR+LF>
Дополнительная CR+LF в пустой строке обеспечит передачу в интерфейс Manager пакета целиком.