First time here? Check out the FAQ!

Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

В какой кодировке передаются аргументы в Agi/System

0

Здравствуйте!

Не отрабатывает 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

анонимный пользователь

Аноним

обновил Apr 17 '15

Comments

а как вы собственно его передаете ?

komrad123 (Apr 16 '15)edit

same => 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)edit

echo добавьте в свой скрипт вначале. Вы уверенны что в момеент парсинга в 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)edit

UTF тут не причем

Раз из shell все работает. то и попытайтесь понять где выпадает при вызове из *. Добавьте в свой скрипт дебага и потом смотрите в лог и двигайтесь поэтапно.

virus_net (Apr 18 '15)edit

спросите это на форуме php а лучше на неком форуме "программистов". чего вы от нас хотите? чтоб мы нашли где у вас в непоказанном скрипте ошибка?

meral (Apr 22 '15)edit

Оказалось, что он добавляет последнюю запись в queue log со статусом звонка только после того как весь h extension отработает, а скрипт вызывался как раз из него и соотвественно записи добавлялись после того как скрипт заканчивал работу ничего не найдя.

Andrey_F (Apr 22 '15)edit

2 Ответа

0

А сам скрипт парсит queue.log который в ASCII

Как именно он это делает ? cat + awk ? Пути до cat + awk в скрипте полные ? Скорее всего нет.

ссылка удалить спам редактировать

ответил Apr 17 '15

virus_net Gravatar virus_net flag of Russian Federation
302 1 6
http://www.mega-net.ru/

Comments

как бы задавать вопосы в поле ответ не совсем то что требуется,не? для этого коментарии есть

meral (Apr 17 '15)edit

как бы после вопросов как раз есть "ванговый" ответ.

virus_net (Apr 17 '15)edit
0

используйте phpagi клас.

также всегда используйте логи, выводите в них информацию которую вы получили.

ссылка удалить спам редактировать

ответил Apr 16 '15

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: Apr 16 '15

Просмотрен: 358 раз

Обновлен: Apr 17 '15

Похожие вопросы:

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.