2014-01-15 1 views
0

클라이언트 호출을 시작한 Java 프로그램이 응답시 전화 플랜의 내선 번호에 연결됩니다. 그 확장은 차례로 클라이언트와의 몇 가지 상호 작용을하기 위해 AGI 스크립트를 실행합니다. 클라이언트가 끝까지 줄을 유지하면 모든 것이 완벽합니다. 그러나 그가 중간에 전화를 끊으면 AGI 스크립트가 계속 실행됩니다. 클라이언트가 전화를 끊은 순간에 멈추고 싶습니다.상대방이 전화를 끊었을 때 AGI 스크립트를 중지하는 방법

OriginateAction originateAction; 
ManagerResponse originateResponse; 
originateAction=new OriginateAction(); 
originateAction.setChannel(phoneNumber); 
originateAction.setExten("700"); 
originateAction.setContext("users"); 
originateAction.setPriority(new Integer(1)); 

//connect to Asterisk and login 
ManagerConnectionFactory factory = new ManagerConnectionFactory("localhost","******","******"); 
managerConnection = factory.createManagerConnection(); 
managerConnection.login(); 
//send the originate action and wait for a maximum of 30 seconds to get a response 
originateResponse=managerConnection.sendAction(originateAction, 30000); 

dialplan을

exten =>700,1,Agi(agi://localhost/message.agi,${var1},${var2},${var3},${var4}); script to play 

에서 발췌 그리고 당신 같은

public void service(AgiRequest arg0, AgiChannel arg1) throws AgiException { 
     setVariable("missedSteps","4"); 
     verbose(" -------------- missed steps: 4 ----------------", 3); 
     // Answer the channel and welcome 
     answer(); 
     streamFile("silence/1"); 
     streamFile("welcome"); 
     setVariable("missedSteps","3"); 
     verbose(" -------------- missed steps: 3 ----------------", 3); 
     //Read the file 
     streamFile(fileName); 
     setVariable("missedSteps","2"); 
     verbose(" -------------- missed steps: 2 ----------------", 3); 
      .......... 
      .......... 
     setVariable("missedSteps","1"); 
     verbose(" -------------- missed steps: 1 ----------------", 3); 
      .......... 
      .......... 
     setVariable("missedSteps","0"); 
     verbose(" -------------- missed steps: 0 ----------------", 3); 
     //hangup 
     hangup(); 

그래서 AGI 스크립트의 추출물 : 여기

는 원래 자바 프로그램의 추출물 내가 스크립트 내에서 진화를 추적하는 변수를 유지하려고하는 것을 볼 수 있으며, 그 변수를 t o 호출 로그에 저장하십시오. 보시다시피 디버깅에 대한 자세한 명령을 추가했으며 콘솔에서 볼 수있는 것은 클라이언트가 끊었는지 여부에 관계없이 "missedSteps"변수가 4에서 0으로 계속 진행된다는 것입니다.

답변

0

CHANNEL (checkhangup) 변수를 확인할 수 있습니다.

+0

좀 더 설명 할 수 있습니까? 별표 (Asterisk) 문서에서 CHANNEL hangup 된 변수를 찾을 수 없습니다. 채널이 끊어 질 때마다 1로 설정된 변수를 Dialplan에 생성하려고 시도했습니다.이 변수는 Agi 스크립트의 각 중요 단계에서 검사됩니다. 하지만 다시는 효과가 없습니다. 실제로 AGI 스크립트가 끝나면 Asterisk는 "h"확장 만 실행합니다. –

+0

지금 checkhangup을 호출했습니다. "별표 -rx"코어 쇼 기능 CHANNEL ""을 사용하여 doc을 봅니다. – arheops

0

우연히 해결책을 찾았습니다. 사실 "streamFile"을 성공적으로 실행하지 않으면 AGI 스크립트가 중지됩니다. 추적 변수를 업데이트하기 전에 각 중요한 단계 전에 몇 개의 "streamFile ("silence/1 ")"을 포함 시켰습니다. AGI 스크립트는 해당 명령에 도달하면 중지되고 변수는 업데이트되지 않습니다.

관련 문제