PHP + Asterisk AMI

Asterisk Manager Interface (AMI) – интерфейс, позволяющей клиентам подключаться к работающему asterisk, и через набор заданных функций получать данные о его работе или менять его настройки. Звучит хорошо?

На практике все несколько тяжелее. Для включения AMI нужно настроить asterisk/manager.conf

[general]
 displaysystemname = no
 enabled = yes
 port = 5038
 bindaddr = 127.0.0.1
 [admin]
 secret = secret5
 deny = 0.0.0.0/0.0.0.0
 permit = 127.0.0.1/255.255.255.255
 read = all,system,call,log,verbose,command,agent,user,config
 write = all,system,call,log,verbose,command,agent,user,config

После чего можно сделать вот так

$ telnet 127.0.0.1 5038
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Asterisk Call Manager/1.0

вводим команды и после несколько раз нажимаем enter

Action: Login
ActionID: 1
Username: admin
Secret: secret5

получаем ответ

Response: Success
ActionID: 1
Message: Authentication accepted

дальше можно сделать вот так

Action: Queues
ActionID: 2

и получить ответ

supports has 0 calls (max unlimited) in 'ringall' strategy (0s holdtime), W:0, C:0, A:0, SL:0.0% within 0s
   Members:
      SIP/100 (Unavailable) has taken no calls yet
      SIP/101 (Unavailable) has taken no calls yet
      SIP/102 (Not in use) has taken no calls yet
      SIP/103 (Unavailable) has taken no calls yet
      SIP/104 (Not in use) has taken no calls yet
   No Callers

Если посмотреть список доступных функций, то открывается массу возможностей по управлению asterisk в реальном времени без редактирования конфигов. Дело за малым – найти библиотеку для работы с AMI, чтобы самому не писать обвязку для работы с TCP сокетами и т.п. Библиотек много, кажется есть почти для каждого популярного языка программирования. Я выбрал для PHP asterisk-php-api, можно скачать с google code. Напишем пример для статистики по очередям

<?php
require "AsteriskManager.php";
$params = array('server' => '127.0.0.1', 'port' => '5038');
$ast = new Net_AsteriskManager($params);
try {
    $ast->connect();
} catch (PEAR_Exception $e) {
    echo $e;
}
try {
    $ast->login('admin', 'secret5');
} catch(PEAR_Exception $e) {
    echo $e;
}
try {
    $queuestatus = $ast->getQueues();
} catch(PEAR_Exception $e) {
    echo $e;
}

echo $queuestatus;
?>

Вид конечно не очень, но все понятно, можно сделать страницу с авторефрешем и присматривать за работой очередей asterisk.


Tags:

Четверг, Октябрь 22nd, 2009 Советы
Cheap Retro Replica NFL NBA MLB Throwback Football Basketball Jerseys | hp printer ink cartridges refills| Jewelry Making Supplies | Thumb Joint Pain | Dog Health Problems |Tinkerbell Personal Checks |Garden Planters