Вход | Регистрация
Вы здесь: Главная / Форум / Главный форум по Asterisk / Конфигурация и настройка / AGI + “WAIT FOR DIGIT”, result = 0

AGI + “WAIT FOR DIGIT”, result = 0

Сообщений: 21

AGI + “WAIT FOR DIGIT”, result = 0

Добрый день. Не могу поймать нажатые цифры. Есть скрипт на php, вызывается через AGI:
#!/usr/bin/php -q
<?php

if (!defined('STDIN'))
{
define('STDIN', fopen('php://stdin', 'r'));
}
if (!defined('STDOUT'))
{
define('STDOUT', fopen('php://stdout', 'w'));
}
if (!defined('STDERR'))
{
define('STDERR', fopen('php://stderr', 'w'));
}
# retrieve all AGI variables from Asterisk
# not used in this script, but not unuseful
while (!feof(STDIN))
{
$temp = trim(fgets(STDIN,4096));
if (($temp == "") || ($temp == "\n"))
{
break;
}
$s = split(":",$temp);
$name = str_replace("agi_","",$s[0]);
$agi[$name] = trim($s[1]);
}

set_time_limit(60);
ob_implicit_flush(false);

# turn off error reporting, as it will most likely interfere with
# the AGI interface
error_reporting(0);


// получаем $agivar массив служебных значений
while (!feof($stdin)) {
$temp = fgets($stdin);
$temp = str_replace("\n","",$temp);
$s = explode(":",$temp);
$agivar[$s[0]] = trim($s[1]);
if (($temp == "") || ($temp == "\n")) {
break;
}
}



SLEEP(1);


fwrite(STDOUT, "exec playback /var/lib/asterisk/sounds/beep \"\"\n");
fflush(STDOUT);
$result = fgets(STDIN,4096);
$result = trim($result);
checkresult($result);



fwrite(STDOUT, "WAIT FOR DIGIT 10000\n"); // Command and timeout of 10 seconds
fflush(STDOUT);
$result = fgets(STDIN,4096);
$result = trim($result);
$result = checkresult($result);


$ascii = $result;
fwrite(STDOUT, "SAY NUMBER " . $ascii . " \"\"\n");
fflush(STDOUT);
$result = fgets(STDIN,4096);
$result = trim($result);
checkresult($result);


fwrite(STDOUT, "exec playback /var/lib/asterisk/sounds/goodbye \"\"\n");
fflush(STDOUT);
$result = trim(fgets(STDIN,4096));




// Function to check the result of an AGI command
function checkresult($res)
{
trim($res);
if (preg_match('/^200/',$res))
{
if (! preg_match('/result=(-?\d+)/',$res,$matches))
{
fwrite(STDERR,"FAIL ($res)\n");
fflush(STDERR);
return 0;
}
else
{
fwrite(STDERR,"PASS (".$matches[1].")\n");
fflush(STDERR);
return $matches[1];
}
}
else
{
fwrite(STDERR,"FAIL (unexpected result '$res')\n");
fflush(STDERR);
return -1;
}
}


?>

При выполнении происходит следующее:
1. Asterisk пикает в трубку (fwrite(STDOUT, "exec playback /var/lib/asterisk/sounds/beep \"\"\n");)
2. Ждет 10 секунд (fwrite(STDOUT, "WAIT FOR DIGIT 10000\n"); )
3. Говорит «ноль» (т.к. $result= «0»)
4. Говорит гудбай (fwrite(STDOUT, "exec playback /var/lib/asterisk/sounds/goodbye \"\"\n");)
5. Вешает трубку.


А нужно чтобы он сказал цифры которые набирались на телефоне в момент (fwrite(STDOUT, "WAIT FOR DIGIT 10000\n");

Если выполнять скрипт как есть, то перед fwrite(STDOUT, "SAY NUMBER " . $ascii . " \"\"\n");
переменная $result = 0

Если не делать $result = checkresult($result); т.е. не парсить полученное значение, то переменная $result = «200 result=0» (для инфы что прилетает в принципе).

Что я делаю не так?

2010-12-20 10:23

Откуда: NiNo
Сообщений: 112

Re: AGI + “WAIT FOR DIGIT”, result = 0

vdscout:

Что я делаю не так?
Не пользуете готовые модули ?

http://www.voip-info.org/wiki/view/Asterisk+AGI#PHP
http://code.google.com/p/virtual-pbx - я не червонец, чтобы нравиться всем....
2010-12-20 10:36

Сообщений: 21

Re: AGI + “WAIT FOR DIGIT”, result = 0

не понял вопроса.
использую только этот скрипт.
2010-12-20 10:55

Добавить страницу в закладки:  Delicious Google Slashdot Yahoo Yandex.ru Reddit Digg Technorati Bobrdobr.ru Newsland.ru Smi2.ru Rumarkz.ru Vaau.ru Memori.ru Rucity.com Moemesto.ru News2.ru Mister-Wong.ru Myscoop.ru 100zakladok.ru