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.
|
|