Страница 1 из 1
AMI Event Listener на MyPBX 1600
Добавлено: 12 май 2012, 21:49
slavaka_z
Здравствуйте! Поставил Yeastar MyPBX 1600, хочу сделать связку со своей CRM, а точнее получать callerID сразу при входящем звонке.
До этого стояла TDM800, та сразу при входящем звонке запускала AGI скрипт, передающий CallerID в удаленную базу MySQL. Здесь так не сделать. Получается, что нужно удаленно с сервера слушать и парсить события, и при событии входящего звонка выдирать CallerID.
Не пойму чем слушать, пытался с помощью asterisk-php-api, но он почему-то очень долго думает и все равно CallerID не дает, и как им слушать, опрашивать asterisk каждую секунду скриптов, что ли? Как можно такое сделать-то?
Re: AMI Event Listener на MyPBX 1600
Добавлено: 12 май 2012, 23:42
slavaka_z
Да, спасибо Вам, нашел демон, буду пробовать.
Я так понимаю, что на железку я ничего не могу поместить, и запускать с нее тоже не смогу (как мне объяснили в поддержке, все изменения через SSH бесполезны, так как они все равно затрутся). Получается, что выход только один - запускать скрипт с удаленного сервера.
Т.е. я запускаю ваш скрипт у себя на сервере как демон и он будет висеть и удаленно слушать астериск, а при наличии нужного события (в нашем случае NewCallerID) будет генерить чего-нужно, сработает так?
Re: AMI Event Listener на MyPBX 1600
Добавлено: 18 май 2012, 18:48
slavaka_z
Попробовал, и правда получается. Только в Events он почему-то три раза подряд выдает CallerID при звонке, вы не знаете почему?
Re: AMI Event Listener на MyPBX 1600
Добавлено: 20 май 2012, 12:39
slavaka_z
Ладно, разберемся. Спасибо за скрипт.
Re: AMI Event Listener на MyPBX 1600
Добавлено: 11 июн 2012, 02:25
slavaka_z
Разобрался со скриптом, полезная штука. Правда пришлось немного подправить. В исходном состоянии он у меня работал пару минут и потом, видимо, терялось соединение, а заново соединится не получалось, пришлось, почему-то заново создавать переменную, заново прописывать событие и т.д. но теперь в таком состоянии у меня работает постоянно:
Код: Выделить всё
#!/usr/bin/env php
<?php
require_once '../../../config.php';
$manager = new AGI_AsteriskManager();
$con = $manager->connect('localhost', 'admin', 'passwd');
if (!$con) {
echo "Can't connect to manager!";
}
$manager->add_event_handler('NewCallerID','NewCallerID');
$response = $manager->wait_response(TRUE);
while (!$response)
{
sleep("1");
$manager = new AGI_AsteriskManager();
$con = $manager->connect('localhost', 'admin', 'passwd');
$manager->add_event_handler('NewCallerID','NewCallerID');
$response = $manager->wait_response(TRUE);
}
function NewCallerID($ecode, $data, $server, $port) {
$event = $data['Event'];
if ($event == "NewCallerID")
{
print_r($data);
}
}
?>
Далее, если не вдаваться в детали, у меня запускается скрипт, который по сети оповещает все компы о номере входящего звонка (я не стал подробно function NewCallerID расписывать). Теперь я столкнулся с такой проблемой: скрипт срабатывает и когда есть входящие звонки, но так же и когда есть исходящие. Я заметил, что в этих двух случаях разная последовательность событий: при исходящем звонке идет Event: Dial, затем Event: NewCallerID, а при входящем Event: NewChannel, затем Even: NewCallerID. Я могу обработчик написать для каждого из этих отдельных событий, но никак не могу понять, как мне определять в какой последовательности они идут, иначе говоря - была ли последовательность Dial->NewCallerID или NewChannel->NewCallerID.