我正在使用Asterisk :: AGI模块与Asterisk 1.8进行交互,但是我没有看到使用perl子例程的示例。我想连接一个Web服务并更好地组织AGI,使用子例程代替在if-else块中执行所有代码,从Dialplan发送args并返回这些子例程是一个好主意。
我知道此模块的获取和设置变量,但我想知道是否有这样的事情:
use Asterisk::AGI;
my $AGI = new Asterisk::AGI;
sub some_subroutine {
my ($param1, $param2, param3) = @ARGV;
# do something with parameters
$agi_data = something_done_with_parameters;
return $AGI->set_variable("agi_data", $agi_data);
}
在拨号计划中:
[simple_interact]
exten = s,1,AGI(script.pl, some_subroutine, param1, param2, param3)
same = n,NoOp(${agi_data})
似乎没有本机调用传递函数名称作为参数的函数的方法。因此,我发现与Perl o PHP一起使用AGI的方法之一是,不是使用具有各种功能的文件,而是必须定义一个函数,以生成通过这些函数的标识符和参数传递给这些函数的动态调用需要通过拨号计划。