我正在使用Asterisk和asterisk-java构建简单的外发IVR。我在同一网络中的两台不同的计算机(A和B)上安装了Xlite软件电话,并将它们设置在asterisk上,我可以成功地呼叫它们。这是我的asterisk-java代码
public class PhoneUtility {
private static ManagerConnection instanceManagerConnection;
private static ManagerConnection getManagerConnectionInstance() {
if (instanceManagerConnection == null) {
ManagerConnectionFactory factory = new
ManagerConnectionFactory("192.132.0.01", "admin", "amp111");
instanceManagerConnection = factory.createManagerConnection();
}
return instanceManagerConnection;
}
public static boolean phoneCall() {
try {
ManagerConnection managerConnection = getManagerConnectionInstance();
OriginateAction originateAction;
ManagerResponse originateResponse;
originateAction = new OriginateAction();
originateAction.setChannel("SIP/ivan");
originateAction.setCallerId("1234");
originateAction.setContext("ivr-ext");
originateAction.setExten("1235");
originateAction.setPriority(new Integer(1));
originateAction.setActionId("2");
originateAction.setTimeout(300000l);
originateAction.setAsync(new Boolean(false));
// connect to Asterisk and log in
managerConnection.login();
AsteriskServerImpl asteriskServer = new AsteriskServerImpl(managerConnection);
AsteriskChannel asteriskChannel = asteriskServer.originate(originateAction);
// Play a prompt by text to speach
Character dtmf = asteriskChannel.getDtmfSent();
if (dtmf.equals("1")) {
managerConnection.logoff();
return true;
} else {
managerConnection.logoff();
return false;
}
} catch (Exception e) {
System.out.println(e);
return false;
}
}
}我在计算机A中执行代码(调用phoneCall() )来调用计算机B,当代码在计算机A中执行时,我的软电话首先在计算机A中振铃,我必须在计算机A上应答,然后计算机B软电话振铃,我如何通过编码自动为计算机A打开通道(我根本不想在计算机A中有软电话)
发布于 2014-04-24 08:12:39
您可以先使电话B振铃,如果应答,则电话A振铃( IVR -分机将由IVR应用程序取代,它将自动应答)为:
交换扩展名为CallerID,如下所示:
originateAction = new OriginateAction();
originateAction.setChannel("SIP/1235");
originateAction.setCallerId("1235");//put the target extension here
originateAction.setContext("ivr-ext");
originateAction.setExten("1234"); //put IVR-extension here
originateAction.setPriority(new Integer(1));
originateAction.setActionId("2");
originateAction.setTimeout(300000l);
originateAction.setAsync(new Boolean(false));https://stackoverflow.com/questions/23236760
复制相似问题