VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

AGI_AsteriskManager и события

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Ответить
mcsa2003
Сообщения: 23
Зарегистрирован: 08 апр 2011, 16:38

AGI_AsteriskManager и события

Сообщение 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 полная тишина. Может кто подскажет почему?
Samael28
Сообщения: 1057
Зарегистрирован: 08 янв 2011, 18:32
Откуда: Киев
Контактная информация:

Re: AGI_AsteriskManager и события

Сообщение Samael28 »

А лучше - написать службу. Бесконечный цикл, насколько я знаю, скушает слишком много процессора.
Мой профайл на Upwork
Samael28
Сообщения: 1057
Зарегистрирован: 08 янв 2011, 18:32
Откуда: Киев
Контактная информация:

Re: AGI_AsteriskManager и события

Сообщение Samael28 »

Переподниму тему.... Задача примерно такая же. Т.е. получить события от Asterisk. Код взял из первого сообщения. Но хитрость то в том, что скрипт не завершается, а продолжает висеть в память благодаря

Код: Выделить всё

    while (1 == 1) {
        sleep(10);
    }
Тогда почему не вызывается функция dump_event?
Мой профайл на Upwork
Samael28
Сообщения: 1057
Зарегистрирован: 08 янв 2011, 18:32
Откуда: Киев
Контактная информация:

Re: AGI_AsteriskManager и события

Сообщение Samael28 »

Да, спасибо. Работает. Буду искать отличия :) Плюс, стабильно работать тоже попытаюсь заставить :)
Мой профайл на Upwork
Аватара пользователя
Aven
Сообщения: 798
Зарегистрирован: 28 янв 2011, 16:20

Re: AGI_AsteriskManager и события

Сообщение Aven »

Столкнулся с этой же проблемой, не вызывается функция колбэка пока не запустишь wait_response, а она в бесконечном цикле висит. Есть ли выход?
Решения телефонии на базе Asterisk || http://it-need.ru
Аватара пользователя
Aven
Сообщения: 798
Зарегистрирован: 28 янв 2011, 16:20

Re: AGI_AsteriskManager и события

Сообщение 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>";
}

Решения телефонии на базе Asterisk || http://it-need.ru
Аватара пользователя
Aven
Сообщения: 798
Зарегистрирован: 28 янв 2011, 16:20

Re: AGI_AsteriskManager и события

Сообщение Aven »

Ну все правильно.
Читает он только при запуске wait_response.
А вот таймаут в этой функции не работает...
PRIME_BBCODE_SPOILER_SHOW PRIME_BBCODE_SPOILER:
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
Решения телефонии на базе Asterisk || http://it-need.ru
Аватара пользователя
Aven
Сообщения: 798
Зарегистрирован: 28 янв 2011, 16:20

Re: AGI_AsteriskManager и события

Сообщение Aven »

Вообщем я нашел решение.
Делаем $ami->Ping(); и wait_response считает все накопившееся в буфере эвенты и выйдет при считывании респонза от этой команды.
Решения телефонии на базе Asterisk || http://it-need.ru
Аватара пользователя
Aven
Сообщения: 798
Зарегистрирован: 28 янв 2011, 16:20

Re: AGI_AsteriskManager и события

Сообщение Aven »

Так у меня именно такой случай и есть.
Экшен SIPpeers
респонз SIPpeers
потом уже каждый пир в отдельном эвенте PeerEntry прилетает
и завершается все эвентом PeerlistComplete
Решения телефонии на базе Asterisk || http://it-need.ru
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH