Страница 1 из 1
AGI_AsteriskManager и события
Добавлено: 26 апр 2011, 19:23
mcsa2003
Добрый день.
Пытаюсь подписаться на события, которые Астер может отдавать подключенным менеджерам.
Просто через телнет ломлюсь
lelnet localhost 5038
Код: Выделить всё
Action: Login
ActionID: 1
Username: activa
Secret: activa
События в консоль попадают.
Пытаюсь сделать то-же при помощи php и AGI_AsteriskManage
Код: Выделить всё
<?php
require_once "lib/phpagi-asmanager.php";
$ami = new AGI_AsteriskManager();
$res = $ami->connect('localhost','activa','activa');
$ami->Events("on");
if($res === TRUE) {
echo "Connection established.\n";
$ami->add_event_handler('*', 'dump_event');
while (1 == 1) {
sleep(10);
}
} else {
echo "Connection failed.\n";
exit;
}
function dump_event($ecode,$data,$server,$port) {
echo "received event '$ecode' from $server:$port\n";
print_r($data);
}
?>
И в консоли после
Connection established полная тишина. Может кто подскажет почему?
Re: AGI_AsteriskManager и события
Добавлено: 27 апр 2011, 09:23
Samael28
А лучше - написать службу. Бесконечный цикл, насколько я знаю, скушает слишком много процессора.
Re: AGI_AsteriskManager и события
Добавлено: 18 апр 2012, 15:42
Samael28
Переподниму тему.... Задача примерно такая же. Т.е. получить события от Asterisk. Код взял из первого сообщения. Но хитрость то в том, что скрипт не завершается, а продолжает висеть в память благодаря
Тогда почему не вызывается функция dump_event?
Re: AGI_AsteriskManager и события
Добавлено: 18 апр 2012, 16:59
Samael28
Да, спасибо. Работает. Буду искать отличия
Плюс, стабильно работать тоже попытаюсь заставить
Re: AGI_AsteriskManager и события
Добавлено: 04 май 2012, 02:41
Aven
Столкнулся с этой же проблемой, не вызывается функция колбэка пока не запустишь wait_response, а она в бесконечном цикле висит. Есть ли выход?
Re: AGI_AsteriskManager и события
Добавлено: 04 май 2012, 11:40
Aven
Так тоже не работает. Прилетает:
Код: Выделить всё
[May 4 11:32:59] ERROR[30225]: utils.c:1211 ast_careful_fwrite: fwrite() returned error: Broken pipe
Т.е. клиент AMI не читает отправляемые ему данные.
Вот такой код у меня сейчас:
Код: Выделить всё
$ami->add_event_handler('PeerEntry', 'PeerEntry');
// Нормально возвращает респонз, но эвенты дальше не попадает в колбэк функцию :(
$res = $ami->SIPpeers();
// сколько тут не жди эвенты он не прочитает, хотя они приходят мгновенно
sleep("3");
function PeerEntry($ecode, $data, $server, $port) {
$event = $data['Event'];
echo "2<br>";
}
Re: AGI_AsteriskManager и события
Добавлено: 04 май 2012, 12:29
Aven
Ну все правильно.
Читает он только при запуске wait_response.
А вот таймаут в этой функции не работает...
12:46:16 do response
12:46:16 SIPpeers
12:46:16 do event
12:46:16 do response
12:46:16 begin
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerEntry
12:46:16 do event
12:46:16 PeerlistComplete
12:47:16 do
12:47:16 end
Re: AGI_AsteriskManager и события
Добавлено: 04 май 2012, 13:05
Aven
Вообщем я нашел решение.
Делаем $ami->Ping(); и wait_response считает все накопившееся в буфере эвенты и выйдет при считывании респонза от этой команды.
Re: AGI_AsteriskManager и события
Добавлено: 04 май 2012, 15:38
Aven
Так у меня именно такой случай и есть.
Экшен SIPpeers
респонз SIPpeers
потом уже каждый пир в отдельном эвенте PeerEntry прилетает
и завершается все эвентом PeerlistComplete