AGI в *
пмогите с AGI
Сообщений: 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);
}}}}
#
#
Помгите пожалуйста, оращаться больше не куда...
|
Откуда: Уфа
Сообщений: 5856
|
Re: AGI в *
у вас запятая не там стоит, потому и не получается
|
Откуда: 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)
|
Сообщений: 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 , т.е просто присваиваю слышу цыфру, вроде как арефметическая операция обнуляет какимто образом переменную :(
в чем загвоздка не пойму...
|
Откуда: 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() берет только целую часть от того что получилось после деления
|
Сообщений: 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
А вот что в консоли....
Сам не понимаю...
|
Откуда: 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
|
Сообщений: 55
|
Re: AGI в *
Спасибо, я уже заметил...
Проверил, заработало....
|
Сообщений: 55
|
Re: AGI в *
еще один вопрос: Как передать значения переменных из скрипта в диалплан?
|
Откуда: Odessa
Сообщений: 20
|
Re: AGI в *
$agi -> exec('Set',"Chanel=$peer");
и сответственно в extensions.conf
exten => 2000,n,NoOp(Chanel --> ${Chanel})
|
|