星号Perl AGI-won’;我不能继续

星号Perl AGI-won’;我不能继续,perl,asterisk,agi,Perl,Asterisk,Agi,我可以通过AGI获得调用,但是当Perl脚本运行循环时,我无法继续运行extensions.conf拨号计划 所以我需要在拨号时在后台运行这个AGI 我的AGI中出错的部分: { my $linestatus = $agi->channel_status(); ###THIS PART NEEDS TO LOOP UNTIL $linestatus == 6 ###But It is also stopping the number from dialling.

我可以通过AGI获得调用,但是当Perl脚本运行循环时,我无法继续运行
extensions.conf
拨号计划

所以我需要在拨号时在后台运行这个AGI

我的AGI中出错的部分:

{
    my $linestatus = $agi->channel_status();

    ###THIS PART NEEDS TO LOOP UNTIL $linestatus == 6
    ###But It is also stopping the number from dialling.
    do{
    }
    until($linestatus == 6);

    my $query  = $collection->insert({
        caller     => $num,
        callername => $name,
        linestatus => $linestatus,
        extension  => $ext,
        call_start => $time }, {safe => 1});

    $agi->verbose("ANSWERED\n", 1);
}
My
extensions.conf
拨号计划:

exten => _08.,1,AGI(bTel.agi)
exten => _08.,n,Dial(SIP/61${EXTEN:1}@SIPINTERNAL,,tTor)
exten => _08.,n,Hungup
如果

是代码的逐字复制,如果
$linestatus
在错误状态下开始,则循环无法终止,因为其值在循环中没有更改

相反,请按照以下方式使用代码:

my $linestatus;
do {
    $linestatus = $agi->channel_status();
    sleep 1;  # or some other delay
} until (defined $linestatus && $linestatus == 6);
如果

是代码的逐字复制,如果
$linestatus
在错误状态下开始,则循环无法终止,因为其值在循环中没有更改

相反,请按照以下方式使用代码:

my $linestatus;
do {
    $linestatus = $agi->channel_status();
    sleep 1;  # or some other delay
} until (defined $linestatus && $linestatus == 6);

此外,您还需要对“(!defined$linestatus)”进行加载项循环检查,因为如果使用星号连接松动,它将是未定义的。@arheops谢谢!已更新。您还需要对“(!defined$linestatus)”进行外接程序循环检查,因为如果使用星号连接松动,则它将是未定义的。@arheops谢谢!更新。