Perl AGI中的Asterisk get_variable

时间:2015-04-08 08:14:13

标签: perl asterisk

我对Asterisk AGI并不陌生。我使用perl和星号agi。

我需要使用Perl asterisk agi设计IVR解决方案。

我写了一些代码并且执行正常。

Perl代码: -

#!/usr/bin/perl -w
use strict;
use warnings;
  use Asterisk::AGI;
  my $agi = new Asterisk::AGI;
  my $option1 = "";
  my $option2 = "";

$agi->exec("Read","option1,recording-201503252343,1,,,");
$option2 = $agi->get_variable("$option1");
$agi->exec("NoOp","$option1");

if($option2 == 1)
{
  $agi->exec("Playback","hello-world");
  $agi->exec("Goto","English,s,1");
}

Asterisk拨号方案: -

exten => 12345,1,Answer()
exten => 12345,2,AGI(agi_new-new.pl)
exten => 12345,n,NoOP(${AGISTATUS})
exten => 12345,n,Hangup()

实际上我在代码中所做的是我希望用户通过IVR拨打分机负责人,其中提示2个选项,当他/她输入我想要存储的选项时,他必须在2个选项之间进行选择将数字转换为变量,以便我对该变量使用条件。 我使用get_variable来获取变量,但当我按下所需的选项时,它会获得该dtmf输入,但它不会通过命令get_variable存储在变量中。

请对此我一点帮助。

如果有人能提供帮助,我们将非常感激。

1 个答案:

答案 0 :(得分:0)

$AGI->get_variable()将变量存储在频道数据中。捕获的DTMF数字不存储在当前通道的数据中。对于您的情况,您需要使用 $AGI->get_data()

# Wait 3 seconds for press button
my $option1 = $agi->get_data('recording-201503252343',3000,1);
if ($option1 == 1) {
  # do something
}

在你的例子中,你有错误。定义的$option1为空。您在Read中执行捕获DTMF的命令option1,接下来要获取$option1的值(空)。要么是Read命令中的示例中的拼写错误(option1而不是$option1),要么它是错误的代码,按预期工作。