Вход | Регистрация
Вы здесь: Главная / Форум / Главный форум по Asterisk / Конфигурация и настройка / AGI в *

AGI в *

пмогите с AGI
1 2>
Сообщений: 55

AGI в *

Поставл Asterisk-perl-0.09
Пробую в первый раз писать скрипт..., что то не получается...
Задача произнести в канал балас...,
Вот часть extension.conf
[balans_1]
;
exten => 1,1,MYSQL(Connect connid localhost root 1707 taxi)
exten => 1,2,MYSQL(Query resultid ${connid} SELECT\ pin, finance\ FROM\ pin_finance\ WHERE\ pin=${pin1})
exten => 1,3,MYSQL(Fetch fetchid ${resultid} res1, finance1)
exten => 1,4,MYSQL(Clear ${resultid})
exten => 1,5,MYSQL(Disconnect ${connid})
exten => 1,6,AGI(balance.agi|finance1)
exten => 1,7,Goto(default,s,1)

А вот скрипт
#!/usr/bin/perl
# модуль проговаривания баланса
#
#
use Asterisk::AGI;

$AGI = new Asterisk::AGI;
my $AGI;my $finance=0;my $balance=0;my $null_balance=0;my $rub=0;my $kop=0;
#
my $balance=$AGI->get_data('finance');
$AGI->stream_file('uoy_balance');
my $null_balance = int($balance);
if ($null_balance >= 100000){
$AGI->stream_file('bolee_100000');
exit(0);
}else{
my $tis = int($null_balance/1000);
if ($tis != 0){
if ($tis == 1){
$AGI->say_number($tis);
$AGI->stream_file('tisacha');
}else{
if(($tis <= 4)&&($tis >= 2)){
$AGI->say_number($tis);
$AGI->stream_file('tisachi');
}else{
$AGI->say_number($tis);
$AGI->stream_file('tisach');
}}}
my $rub = ($null_balance - $tis);
if ($rub == 0){
$AGI->say_number($rub);
$AGI->stream_file('rubley');
}else{
if ($rub == 1){
$AGI->say_number($rub);
$AGI->stream_file('rubl');
}else{
if(($rub <= 4)&&($rub >= 2)){
$AGI->say_number($rub);
$AGI->stream_file('rubla');
}else{
$AGI->say_number($rub);
$AGI->stream_file('rubley');
}}}
my $kop = ($balance-$null_balance)*100;
if ($kop == 0){
$AGI->say_number($kop);
$AGI->stream_file('kopeek');
exit(0);
}else{
if ($kop == 1){
$AGI->say_number($kop);
$AGI->stream_file('kopeyka');
exit(0);
}else{
if(($rub <= 4)&&($rub >= 2)){
$AGI->say_number($kop);
$AGI->stream_file('kopeyki');
exit(0);
}else{
$AGI->say_number($kop);
$AGI->stream_file('kopeek');
exit(0);
}}}}
#
#

Помгите пожалуйста, оращаться больше не куда...
2009-01-06 15:41

Avatara of switch
Откуда: Уфа
Сообщений: 5856

Re: AGI в *

у вас запятая не там стоит, потому и не получается
http://www.lynks.ru - Решения телефонии, мини-АТС, VoIP на основе Trixbox и Asterisk
2009-01-06 20:01

Откуда: Odessa
Сообщений: 20

Re: AGI в *

переставить местами
my $AGI;my $finance=0;my $balance=0;my $null_balance=0;my $rub=0;my $kop=0;
$AGI = new Asterisk::AGI;

exten => 1,6,AGI(balance.agi|finance1)
в диалплане передаем finance1
а в agi finance
my $balance=$AGI->get_data('finance');

и принимать его нужно
my $finance = @ARGV[0];

и запятые тоже нужно экранировать темболее у Вас после нее пробел
exten => 1,2,MYSQL(Query resultid ${connid} SELECT\ pin, finance\ FROM\ pin_finance\ WHERE\ pin=${pin1})
должно быть
exten => 1,2,MYSQL(Query resultid ${connid} SELECT\ pin\,\ finance\ FROM\ pin_finance\ WHERE\ pin=${pin1})


exten => 1,1,MYSQL(Connect connid localhost root 1707 taxi)
exten => 1,2,MYSQL(Query resultid ${connid} SELECT\ pin\,\ finance\ FROM\ pin_finance\ WHERE\ pin=${pin1})
exten => 1,3,MYSQL(Fetch fetchid ${resultid} res1 finance1)
внимание выше запятая не нужна
exten => 1,4,MYSQL(Clear ${resultid})
exten => 1,5,MYSQL(Disconnect ${connid})
exten => 1,6,AGI(balance.agi|${finance1})
exten => 1,7,Goto(default,s,1)
2009-01-06 21:39

Сообщений: 55

Re: AGI в *

Спасибо за ответы, в скрипт тепер данные поступают, но арефметические операции присваивают переменным нулевое значение, уже стока всего перечитал и перепробовал...$AGI->stream_file('uoy_balance'); работает...
если после неё ставлю команду...$AGI->say_number($balance); цыфра произносится..., а вот если...послеmy $tis = int($balance/1000);
$AGI->say_number($tis); все время слышу ноль...
пробовал воспроизводить после $tis = $balance+1; тогда слышу один, тут же убирю +1 , т.е просто присваиваю слышу цыфру, вроде как арефметическая операция обнуляет какимто образом переменную :(
в чем загвоздка не пойму...
2009-01-08 14:32

Откуда: Odessa
Сообщений: 20

Re: AGI в *

kayn:

$tis = int($balance/1000);
$AGI->say_number($tis); все время слышу ноль...
пробовал воспроизводить после $tis = $balance+1; тогда слышу один, тут же убирю +1 , т.е просто присваиваю слышу цыфру,
есть такая замечательная команда
$AGI -> verbose("tis: $tis");
ну и в CLI смотрите чему у Вас получился равен $tis после деления и перед Say

думаю что после деления $tis = int($balance/1000) там и получается 0 потому как int() берет только целую часть от того что получилось после деления
2009-01-08 15:21

Сообщений: 55

Re: AGI в *

Вот что интересно...

#!/usr/bin/perl
# модуль проговаривания баланса
#
#
use Asterisk::AGI;
#use integer;

my $nbalance=0;my $rub=0;my $kop=0;
$AGI = new Asterisk::AGI;
#
my $finance = @ARGV[0];my $balance=$finance;
$AGI->stream_file('uoy_balance');
my $nbalance = ($balance);
$AGI -> verbose("nbalance: $nbalance");
#$AGI->send_text $nbalance;
#$AGI->say_number ($nbalance);
my $tis = ($balance+1);
$AGI -> verbose("tis: $tis");
$AGI->say_number ($tis);

Вот поубирал все..., для проверки...

-- Executing [1@balans_1:6] AGI("SIP/89184852989-0a18f220", "balance.agi|balance=55237") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/balance.agi
-- Playing 'uoy_balance' (escape_digits=) (sample_offset 0)
balance.agi|balance=55237: nbalance: balance=55237
balance.agi|balance=55237: tis: 1
-- <SIP/89184852989-0a18f220> Playing 'digits/1' (language 'en')
-- AGI Script balance.agi completed, returning 0

А вот что в консоли....
Сам не понимаю...
2009-01-08 15:44

Откуда: Odessa
Сообщений: 20

Re: AGI в *

kayn:

balance.agi|balance=55237: nbalance: balance=55237
у вас $nbalance = не 55237 а balance=55237 тоесть там у вас строчка
Вы неправильно в extensions.conf вызываете скрипт
[Jan 8 14:54:28] -- Executing [2000@testagi:1] NoOp("SIP/XX.XX.XX.77-08228aa0", "PODNYL TRUBKU---------------") in new stack
[Jan 8 14:54:28] -- Executing [2000@testagi:2] AGI("SIP/XX.XX.XX.77-08228aa0", "agi-t1.agi|55600") in new stack
[Jan 8 14:54:28] -- Launched AGI Script /var/lib/asterisk/agi-bin/agi-t1.agi
[Jan 8 14:54:28] WARNING[18142]: file.c:602 ast_openstream_full: File uoy_balance does not exist in any format
[Jan 8 14:54:28] agi-t1.agi|55600: nbalance: 55600
[Jan 8 14:54:28] agi-t1.agi|55600: tis: 55601
[Jan 8 14:54:28] -- <SIP/XX.XX.XX.77-08228aa0> Playing 'digits/50' (language 'en')
[Jan 8 14:54:29] -- <SIP/XX.XX.XX.77-08228aa0> Playing 'digits/5' (language 'en')
[Jan 8 14:54:30] -- <SIP/XX.XX.XX.77-08228aa0> Playing 'digits/thousand' (language 'en')
[Jan 8 14:54:31] -- <SIP/XX.XX.XX.77-08228aa0> Playing 'digits/6' (language 'en')
[Jan 8 14:54:31] -- <SIP/XX.XX.XX.77-08228aa0> Playing 'digits/hundred' (language 'en')
[Jan 8 14:54:32] -- <SIP/XX.XX.XX.77-08228aa0> Playing 'digits/1' (language 'en')
[Jan 8 14:54:33] -- AGI Script agi-t1.agi completed, returning 0
2009-01-08 15:59

Сообщений: 55

Re: AGI в *

Спасибо, я уже заметил...
Проверил, заработало....
2009-01-08 16:19

Сообщений: 55

Re: AGI в *

еще один вопрос: Как передать значения переменных из скрипта в диалплан?
2009-01-08 16:33

Откуда: Odessa
Сообщений: 20

Re: AGI в *

$agi -> exec('Set',"Chanel=$peer");
и сответственно в extensions.conf

exten => 2000,n,NoOp(Chanel --> ${Chanel})
2009-01-08 16:39

1 2>
Добавить страницу в закладки:  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