Нужно по окончанию звонка запускать скрипт, в который передавать переменную UNIQUEID (уникальный номер звонка). Как не крутили - переменная не передается. Что делаю:
extensions.conf
..... exten => h,1,Read(${UNIQUEID})
exten => h,n,AGI(test.php,${UNIQUEID})
exten => _X.,n,Hangup()
test.php:
#!/usr/bin/php-cgi -q
$file="text.txt";
if( !file_exists($file)) {
$fp = fopen($file, "w");
fwrite($fp, $chan);
fclose ($fp);
}
?>
Этот скрипт отрабатывает и все хорошо. т.е. астериск по окончанию звонка его запускает.
Подскажите как мне выдернуть из астериска переменную UNIQUEID?
Заранее спасибо!
Попробуйте использовать готовую библиотеку для phpagi, например из состава freepbx. Трудно сказать без лога что у вас там. Попробуйте отладку AGI включить (agi set debug)
Вот ссылка : AGI переменные канала Надеюсь поможет.
Как вариант:
в директории скрипта
создать файл composer.json
{
"require" : {
"php" : ">=5.3",
"marcelog/pagi" : "dev-master"
},
"repositories": [
{
"type": "pear",
"url": "http://pear.apache.org/log4php/"
}]
}
$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar install
в той-же директории test.php
<?php
require_once dirname(__FILE__)."/vendor/autoload.php";
$agi = PAGI\Client\Impl\ClientImpl::getInstance();
$uniqueid = $agi->getVariable("UNIQUEID");
Задан: 2013-08-09 12:31:08 +0400
Просмотрен: 970 раз
Обновлен: Aug 10 '13
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
$chan - что это и откуда взялось?
zzuz ( 2013-08-09 14:03:50 +0400 )редактироватьСпасибо откликнувшимся! Скрипт запустился, переменную поймали. но появилась следующая проблема:
При исходящем звонке запись в базу MySQL проходит, видимо, сразу после Hangup().
Соответственно скрипт в базе запись не находит.
Изначально делалось все для того, чтоб подсчитать стоимость звонков.
Планировалось запускать скрипт после каждого звонка и записывать значение в таблицу CDR о стоимости каждого звонка. в личном кабинете можно було бы все удобно смотреть почти в реальном времени.
Вопрос в следующем. Как сделать так, чтоб скрипт запустился после Hangup()
На данный момент сейчас настроено так:
exten => _X,1,Read(${UNIQUEID})
exten => h,1,AGI(/var/www/localhost/htdocs/asterisk/test.php,${UNIQUEID})
exten => h,n,Noop(end)
exten => _X.,n,Hangup()
При такой конструкции скрипт не запускается:
exten => _X,1,Read(${UNIQUEID})
exten => _X.,n,Hangup()
exten => h,1,AGI(/var/www/localhost/htdocs/asterisk/test.php,${UNIQUEID})
exten => h,n,Noop(end)
sergkzntsv ( 2013-08-26 12:13:57 +0400 )редактироватьИ что? Не работает?
zzuz ( 2013-08-26 12:36:01 +0400 )редактироватьДва разных экстеншена.
zzuz ( 2013-08-26 12:37:38 +0400 )редактировать