2013-08-02 4 views
0

AGI를 호출 할 수 있지만 Perl 스크립트가 루프를 실행하는 동안 extensions.conf 다이얼 플랜을 계속 실행할 수 없습니다.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

의 라인을 따라 코드를 사용 또한 당신은 경우 정의되지 않습니다 becuase, "(! 정의 $의 linestatus)"에 대한 루프 검사에 추가해야 할 별표 느슨한 연결. – arheops

+0

@arheops 감사합니다. 업데이트 됨. –