Java 当另一方挂断时如何停止AGI脚本
我有一个Java程序,它发起对客户机的调用,并在应答时将其连接到拨号计划中的一个扩展。该扩展反过来运行一个AGI脚本来与客户机进行一些交互。 如果客户坚持到最后,一切都是完美的。但是如果他挂在中间,AGI脚本继续运行。我希望它在客户挂断电话时停止 以下是原始java程序的摘录:Java 当另一方挂断时如何停止AGI脚本,java,asterisk,terminate,agi,Java,Asterisk,Terminate,Agi,我有一个Java程序,它发起对客户机的调用,并在应答时将其连接到拨号计划中的一个扩展。该扩展反过来运行一个AGI脚本来与客户机进行一些交互。 如果客户坚持到最后,一切都是完美的。但是如果他挂在中间,AGI脚本继续运行。我希望它在客户挂断电话时停止 以下是原始java程序的摘录: OriginateAction originateAction; ManagerResponse originateResponse; originateAction=new OriginateAction(); ori
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);
计划的摘录
exten =>700,1,Agi(agi://localhost/message.agi,${var1},${var2},${var3},${var4}); script to play
和agi脚本的摘录
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();
正如你所看到的,我试图在脚本中保留一个变量来跟踪演变,我想保留这个变量以将其存储在调用日志中。正如您所看到的,我添加了一些详细的调试命令,在控制台上看到,“missedSteps”变量从4一直前进到0,无论客户端是否挂断。您可以检查CHANNEL(checkhangup)变量。意外地找到了解决方案。
事实上,AGI脚本在“streamFile”执行失败时停止。因此,在更新跟踪变量之前,我只是在每个关键步骤之前加入了一些“streamFile(“silene/1”)。AGI脚本将在到达该指令时停止,变量将不会更新。您能再解释一下吗?我在星号文档中找不到通道挂起变量。它确实尝试在Dialplan中创建一个变量,该变量在通道挂起时设置为1,并在Agi脚本的每个关键步骤进行检查。但它同样不起作用。事实上,Asterisk似乎只在AGI脚本完成运行后才运行“h”扩展名。它称为checkhangup now。使用“星号-rx”核心显示功能通道“”查看文件。