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

В какой кодировке передаются аргументы в 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;
удалить закрыть спам изменить тег редактировать

спросил 2015-04-16 15:48:51 +0400

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

Аноним

обновил 2015-04-17 11:47:52 +0400

Comments

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

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 )редактировать

2 Ответа

0

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

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

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

ответил 2015-04-17 09:15:16 +0400

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

Comments

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

meral ( 2015-04-17 12:18:58 +0400 )редактировать

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

virus_net ( 2015-04-17 12:59:59 +0400 )редактировать
0

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

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

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

ответил 2015-04-16 21:09:08 +0400

meral Gravatar meral flag of Ukraine
21228 24 19 169
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 ленту новостей

Статистика

Задан: 2015-04-16 15:48:51 +0400

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

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

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

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