2013-08-02 65 views
0

我可以接到運行AGI的呼叫,但我無法繼續運行extensions.conf撥號計劃,而我的Perl腳本運行其循環。Asterisk Perl AGI不會繼續

所以我需要在撥打電話時在後臺運行這個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 

回答

3

如果

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

是你的代碼的完整副本,然後如果$linestatus以錯誤的狀態開始,則循環無法終止,因爲其值在循環內不會改變。

相反,沿

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

線使用的代碼還需要在迴路校驗添加了「(!$定義linestatus)」,原因是其的時候,如果不確定與Asterisk連接鬆動。 – arheops

+0

@arheops謝謝!更新。 –