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

передача переменной в agi-скрипт и обратно [закрыт]

0

Привет! Есть скрипт на php, который по какой то входной переменной(например ${enter}) возвращает в астериск другую переменную(например ${result}). Для передачи переменной в пхп-скрипт в диалплане пишу Read(enter), AGI(1.php,${enter}). Как сделать чтобы скрипт понял эту переменную и вернул в астериск ${result}?

    #!/usr/bin/php -q
<?php
ob_implicit_flush(false);
set_time_limit(5);
error_reporting(0);
$agivars = array();
while (!feof(STDIN)) {
    $agivar = trim(fgets(STDIN));
    if ($agivar === '') {
        break;
    }
    else {
        $agivar = explode(':', $agivar);
        $agivars[$agivar[0]] = trim($agivar[1]);
    }
}
foreach($agivars as $k=>$v) {
    log_agi("Got $k=$v");
}
extract($agivars);

$id=$agivars[1];
$ip = "localhost";
$user = "root";
$pass = "";
$db = "DB";
mysql_connect($ip, $user, $pass)
 or die("Could not connect:".mysql_error());
mysql_select_db($db)
 or die("Could not select".mysql_error());
$r = mysql_query("SELECT number FROM tbl WHERE id='$id';")
    or die("Invalid query: ".mysql_error());
$a=mysql_fetch_assoc($result);
$res=$a['number'];
fputs($stdout,"SET VARIABLE result $res");
fflush($stdout);
?>
удалить переоткрыть спам изменить тег редактировать

спросил 2011-01-13 19:10:12 +0400

blkang Gravatar blkang
71 9 6 14

обновил 2011-01-14 22:46:39 +0400

7 Ответов

1

а если не секрет, почему вы класс phpagi.php не используете? или вы джедай?

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

ответил 2011-01-21 21:31:30 +0400

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

Comments

Я использовал phpagi и понял, что реально был джедаем))) Все работает, всем спасибо за внимание! blkang ( 2011-01-23 11:25:39 +0400 )редактировать
ну так другим джедаям, отметь вопрос как отвеченый... кстати у пхпаги свои глюки. но их меньше чем в твоем коде(ибо много народу наступало на грабли - грабли почти кончилися) meral ( 2011-01-23 12:06:44 +0400 )редактировать
1

Диалплан

exten => 200,1,Answer
exten => 200,n,Read(id)
exten => 200,n,AGI(1.php,${id})
exten => 200,n,Verbose(${result})
ссылка удалить спам редактировать

ответил 2011-01-15 19:21:19 +0400

blkang Gravatar blkang
71 9 6 14
1

Ну для PHP это первый аргумент. Из PHP с аргументами командной строки умеем работать?

AGI Execution Environment

You can pass arguments to an AGI script, like so: 
 AGI(script.agi|arg1|arg2|...) 

and then in PHP, for example, retrieve these arguments with the help of 

$argv[1]
$argv[2]

А вернуть можно двумя способами:

  1. Через exit code. В Астериске будет доступна переменная AGISTATUS .
  2. Через установление переменной Asterisk в AGI скрипте. Вы точно AGI скрипт пишете или просто скрипт, который можно вызвать через System?
ссылка удалить спам редактировать

ответил 2011-01-13 19:36:43 +0400

litnimax Gravatar litnimax
1453 11 8 29
http://www.pbxware.ru/

Comments

Спасибо! Так, про вход я понял, а про выход нет. Объясните, пожалуйста, подробнее. blkang ( 2011-01-14 13:30:24 +0400 )редактировать
Скрипт свой покажите. Для этого просто отредактируйте свой вопрос и ниже добавьте код скрипта. litnimax ( 2011-01-14 17:24:09 +0400 )редактировать
0

формат форума возвращается;)

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

ответил 2011-01-17 11:37:57 +0400

svoy Gravatar svoy
1603 1 4 20
http://svoy.in.ua/

Comments

Не хотелось бы. Будем думать. litnimax ( 2011-01-17 11:48:51 +0400 )редактировать
для сервисов вопросов есть более крупные площадки c большей аудиторией, может быть стоило с ними партнерствовать? svoy ( 2011-01-17 18:00:43 +0400 )редактировать
0

Вам надо из скипта установить переменную dialplan'a, и после выхода из скрипта работать с ней далее.

fputs($stdout,"SET VARIABLE myvar  123");

http://www.voip-info.org/wiki/view/set+variable

Пример:

exten => _X.,n,Verbose(${myvar})
ссылка удалить спам редактировать

ответил 2011-01-14 21:36:28 +0400

litnimax Gravatar litnimax
1453 11 8 29
http://www.pbxware.ru/

Comments

Сделал, как вы сказали (в коде изменил 2 последние строки), но в консоли пишется следующее: -- <SIP/3542261-00000009>AGI Script 1.php completed, returning 0 -- Executing [200@dial-out:4] Verbose("SIP/3542261-00000009", "") in new stack -т.е. 0, вместо того, что нужно :( blkang ( 2011-01-14 22:49:33 +0400 )редактировать
Да, комментарии в текущей реализации не лучшее место для кода. Ладно, пробуем пока как получается, в ответах. litnimax ( 2011-01-15 07:33:26 +0400 )редактировать
Согласен. А что со скриптом в моей ситуации может быть не так? Мне бы очень хотелось разобраться с аги. blkang ( 2011-01-15 17:37:45 +0400 )редактировать
Так а дилалплан покажите. Видимо в ответе новом. litnimax ( 2011-01-15 18:04:31 +0400 )редактировать
0

вот тут

http://lynks.ru/blog/iaxmodem-hylafax-i-ldap

есть пример AGI с блекджеком и шлюхами (с возвратом переменной)

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

ответил 2011-01-22 07:55:55 +0400

switch Gravatar switch
8334 11 7 92
http://lynks.ru/
0

Может пора заканчивать с низкоуровневыми операциями и начать использовать PHPAGI?

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

ответил 2011-01-16 10:14:22 +0400

litnimax Gravatar litnimax
1453 11 8 29
http://www.pbxware.ru/

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

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

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

Статистика

Задан: 2011-01-13 19:10:12 +0400

Просмотрен: 12,535 раз

Обновлен: Jan 22 '11

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