как бы задавать вопосы в поле ответ не совсем то что требуется,не? для этого коментарии есть
meral ( 2015-04-17 12:18:58 +0400 )редактироватькак бы после вопросов как раз есть "ванговый" ответ.
virus_net ( 2015-04-17 12:59:59 +0400 )редактироватьЗдравствуйте!
Не отрабатывает 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;
спросил 2015-04-16 15:48:51 +0400
Аноним
А сам скрипт парсит queue.log который в ASCII
Как именно он это делает ? cat + awk ? Пути до cat + awk в скрипте полные ? Скорее всего нет.
как бы задавать вопосы в поле ответ не совсем то что требуется,не? для этого коментарии есть
meral ( 2015-04-17 12:18:58 +0400 )редактироватькак бы после вопросов как раз есть "ванговый" ответ.
virus_net ( 2015-04-17 12:59:59 +0400 )редактироватьиспользуйте phpagi клас.
также всегда используйте логи, выводите в них информацию которую вы получили.
Задан: 2015-04-16 15:48:51 +0400
Просмотрен: 355 раз
Обновлен: Apr 17 '15
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
а как вы собственно его передаете ?
komrad123 ( 2015-04-16 17:16:10 +0400 )редактироватьsame => n,Agi(test.php,${UNIQUEID}) либо: same => n,System(php /var/lib/asterisk/agi-bin/test.php ${UNIQUEID})
Andrey_F ( 2015-04-16 17:29:10 +0400 )редактироватьА сам скрипт парсит queue.log который в ASCII
Andrey_F ( 2015-04-16 17:44:45 +0400 )редактироватьecho добавьте в свой скрипт вначале. Вы уверенны что в момеент парсинга в queue.log уже есть нужная инфа. ?
телепатия все это без скрипта и консоли астериска с дебагом.
komrad123 ( 2015-04-16 19:16:36 +0400 )редактироватьаги тоже ASCII. можете сделать в консоли agi set debug on и посмотреть протокол обмена.
meral ( 2015-04-16 21:10:03 +0400 )редактироватьпрошу заметить, AGI протокол не передает вам парметры так как у вас в system. agi протокол использует stdin для передачи параметров.
meral ( 2015-04-16 21:11:02 +0400 )редактироватьВсе же не совсем так. В STDIN передаются парамы от самого астериска, там же содержится agi_uniqueid и собственно абсолютно не зачем отдавать её как отдельный парам.
http://www.voip-info.org/wiki/view/Asterisk+AGI+php
Парамы для скрипта php скрипта находятся в массиве $argv.
virus_net ( 2015-04-17 09:19:43 +0400 )редактироватьДанные в логах уже есть. Я ставил usleep на 10 сек чтобы подождать Ловлю их в $argv чтобы можно было и из shell и из agi передавать аргументы
Приложил сверху код. Может кто что посоветует
Andrey_F ( 2015-04-17 11:55:06 +0400 )редактироватьучли, что пользователь у запущенного астериска может быть не root?
meral ( 2015-04-17 12:23:27 +0400 )редактировать+1 к meral, проверьте права
вы смотрели что показывает agi set debug on в CLI ?
virus_net ( 2015-04-17 13:01:46 +0400 )редактироватьДа астериск от рута работает, хоть и не рекомендуют. В дебаге все ровно : <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 ( 2015-04-17 13:58:22 +0400 )редактироватьнаверно вам прийдется учится дебажить php скрипты. нет, скрипт разбирает php интерпретатор а не астериск. астериск передает инфу как написано.
meral ( 2015-04-18 05:41:11 +0400 )редактироватьUTF тут не причем
Раз из shell все работает. то и попытайтесь понять где выпадает при вызове из *. Добавьте в свой скрипт дебага и потом смотрите в лог и двигайтесь поэтапно.
virus_net ( 2015-04-18 09:18:36 +0400 )редактироватьспросите это на форуме php а лучше на неком форуме "программистов". чего вы от нас хотите? чтоб мы нашли где у вас в непоказанном скрипте ошибка?
meral ( 2015-04-22 18:37:22 +0400 )редактироватьОказалось, что он добавляет последнюю запись в queue log со статусом звонка только после того как весь h extension отработает, а скрипт вызывался как раз из него и соотвественно записи добавлялись после того как скрипт заканчивал работу ничего не найдя.
Andrey_F ( 2015-04-22 19:57:31 +0400 )редактировать