Здравствуйте!
Не отрабатывает php скрипт которому передает аргумент Asterisk. Передаю ${UNIQUEID} и через Agi и Через System безрезультатно. Точнее значение в скрипт уходит но функция не отрабатывает
Если этому же скрипту передаю руками тот же самое значение UNIQUEID то все корректно работает. Не понимаю в упор в чем проблема. Может в кодировке или в типе данных?
Когда через AGI или System так или иначе аргументы передает астериск функция возвращает пустой массив. А когда руками - нормально данные возвращает. Причем, данные в скрипт уходят и из астериска (проверял скидыванием переменной в лог при проходе скрипта)
Фот как мы вызываем функцию:
#!/usr/bin/php -q
<?php
set_time_limit(2000);
ob_implicit_flush(false);
error_reporting(E_ALL);
require('phpagi220/phpagi.php');
require ('db.inc');
require ('lib.inc');
$file = file_get_contents('/var/log/asterisk/queue_log');
$uniqueid = trim($argv['1']);
if (isset($uniqueid)) {
$queue_vars = parse_qeues($uniqueid, $file);
ну и туда оответственно пустой массив приходит
Вот начало функции (она подключается через require)
function parse_qeues($uniqueid,$file) {
$pattern = "/(^.*?($uniqueid).*?$)/im";
preg_match_all($pattern, $file, $matches);
вот конец
$return = array("status" => $status, "operator" => $operator, "holdtime" => $holdtime, "calltime" => $calltime);
return $return;
спросил Apr 16 '15
Аноним
А сам скрипт парсит queue.log который в ASCII
Как именно он это делает ? cat + awk ? Пути до cat + awk в скрипте полные ? Скорее всего нет.
используйте phpagi клас.
также всегда используйте логи, выводите в них информацию которую вы получили.
Задан: Apr 16 '15
Просмотрен: 358 раз
Обновлен: Apr 17 '15
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
а как вы собственно его передаете ?
komrad123 (Apr 16 '15)editsame => n,Agi(test.php,${UNIQUEID}) либо: same => n,System(php /var/lib/asterisk/agi-bin/test.php ${UNIQUEID})
Andrey_F (Apr 16 '15)editА сам скрипт парсит queue.log который в ASCII
Andrey_F (Apr 16 '15)editecho добавьте в свой скрипт вначале. Вы уверенны что в момеент парсинга в queue.log уже есть нужная инфа. ?
телепатия все это без скрипта и консоли астериска с дебагом.
komrad123 (Apr 16 '15)editаги тоже ASCII. можете сделать в консоли agi set debug on и посмотреть протокол обмена.
meral (Apr 16 '15)editпрошу заметить, AGI протокол не передает вам парметры так как у вас в system. agi протокол использует stdin для передачи параметров.
meral (Apr 16 '15)editВсе же не совсем так. В STDIN передаются парамы от самого астериска, там же содержится agi_uniqueid и собственно абсолютно не зачем отдавать её как отдельный парам.
http://www.voip-info.org/wiki/view/Asterisk+AGI+php
Парамы для скрипта php скрипта находятся в массиве $argv.
virus_net (Apr 17 '15)editДанные в логах уже есть. Я ставил usleep на 10 сек чтобы подождать Ловлю их в $argv чтобы можно было и из shell и из agi передавать аргументы
Приложил сверху код. Может кто что посоветует
Andrey_F (Apr 17 '15)editучли, что пользователь у запущенного астериска может быть не root?
meral (Apr 17 '15)edit+1 к meral, проверьте права
вы смотрели что показывает agi set debug on в CLI ?
virus_net (Apr 17 '15)editДа астериск от рута работает, хоть и не рекомендуют. В дебаге все ровно : <SIP/TTK-00001665>AGI Tx >> agirequest: test.php <SIP/TTK-00001665>AGI Tx >> agichannel: SIP/TTK-00001665 <SIP/TTK-00001665>AGI Tx >> agilanguage: ru <SIP/TTK-00001665>AGI Tx >> agitype: SIP <SIP/TTK-00001665>AGI Tx >> agiuniqueid: 1429264327.19341 <SIP/TTK-00001665>AGI Tx >> agiversion: 1.8.28-cert4 <SIP/TTK-00001665>AGI Tx >> agicallerid: 9219561102 <SIP/TTK-00001665>AGI Tx >> agicalleridname: 9219561102 <SIP/TTK-00001665>AGI Tx >> agicallingpres: 0 <SIP/TTK-00001665>AGI Tx >> agicallingani2: 0 <SIP/TTK-00001665>AGI Tx >> agicallington: 0 <SIP/TTK-00001671>AGI Tx >> agithreadid: 140639448913664 <SIP/TTK-00001671>AGI Tx >> agiarg1: 1429264470.19373 потом несколько echo в консоль в кач-ве дебага скрипта и наконец смерть скрипта от того что не может сделать insert в базу потому что функция ему значения не возвращает.
Может ли быть связано, что у мення скрипт в UTF? Но ведь из shell все работает.
Andrey_F (Apr 17 '15)editнаверно вам прийдется учится дебажить php скрипты. нет, скрипт разбирает php интерпретатор а не астериск. астериск передает инфу как написано.
meral (Apr 18 '15)editUTF тут не причем
Раз из shell все работает. то и попытайтесь понять где выпадает при вызове из *. Добавьте в свой скрипт дебага и потом смотрите в лог и двигайтесь поэтапно.
virus_net (Apr 18 '15)editспросите это на форуме php а лучше на неком форуме "программистов". чего вы от нас хотите? чтоб мы нашли где у вас в непоказанном скрипте ошибка?
meral (Apr 22 '15)editОказалось, что он добавляет последнюю запись в queue log со статусом звонка только после того как весь h extension отработает, а скрипт вызывался как раз из него и соотвественно записи добавлялись после того как скрипт заканчивал работу ничего не найдя.
Andrey_F (Apr 22 '15)edit