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";
-
$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.