Asterisk Perl AGI не будет продолжаться

Я могу получить вызов с AGI, но не могу продолжить extensions.conf план набора, пока мой Perl-скрипт выполняет свой цикл.

Поэтому мне нужно убрать этот 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);
}

мой extensions.conf абонентская группа:

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

1 ответ

Если

do{
}
until($linestatus == 6);

является дословной копией вашего кода, тогда цикл не может завершиться, если $linestatus начинается в неправильном состоянии, потому что его значение не изменяется в цикле.

Вместо этого используйте код в соответствии с

my $linestatus;
do {
    $linestatus = $agi->channel_status();
    sleep 1;  # or some other delay
} until (defined $linestatus && $linestatus == 6);
Другие вопросы по тегам