我有代码:
CiscoJtapiPeer peer = (CiscoJtapiPeer) JtapiPeerFactory.getJtapiPeer(null);
CiscoProvider provider = (CiscoProvider) peer.getProvider(host+";login="+ login +";passwd=" + pass);
provider.addObserver(new ProviderObserver() {
@Override
public void providerChangedEvent (ProvEv [] eventList) {
if (eventList == null) return;
for (int i = 0; i < eventList.length; ++i) {
if (eventList[i] instanceof ProvInServiceEv) {
inService.set();
}
}
}
});
inService.waitTrue();
System.out.println("In servise.");
CiscoAddress srcAddr = (CiscoAddress) provider.getAddress(dn);
srcAddr.addCallObserver(new MyCallControlCallObserver(dn, provider))
和地址观察员:
@Override
public void callChangedEvent(CallEv[] evlist)throws Exception{
for (CallEv evlist1 : evlist) {
if (evlist1.getID() == CiscoTermConnRecordingEndEv.ID) {
call = provider.getCall(callid);
if (call != null) {
System.out.println("From: " + call.getCallingAddress() + " To: " + call.getCalledAddress());
}
else {System.out.println("Call is null");}
}
}
}
函数provider.getCall(callid)返回对象不稳定。像这样 -
From: 4403 To: 5215
Call is null
Call is null
From: 4403 To: 5215
From: 4403 To: 5215
Call is null
Call is null
From: 4403 To: 5215
通话间隔5 - 15秒,持续时间3 - 7秒。我试图改变以处理事件 - 相同的结果。 我究竟做错了什么?也许这是因为CUCM是一个集群?每次通话时CiscoProvider都不同吗?
答案 0 :(得分:0)
if (evlist1.getID() == CiscoTermConnRecordingEndEv.ID) {
call = provider.getCall(callid);
if (call != null) {
System.out.println("From: " + call.getCallingAddress() + " To: " + call.getCalledAddress());
}
else {System.out.println("Call is null");}
}
您正在接听记录选项为true的电话。您只能获得 RECORDED 电话。这就是为什么你的功能不稳定。如果您希望获取所有呼叫而不是 CiscoTermConnRecordingEndEv ,请使用 TermConnActiveEv ,如果您希望呼叫处于活动状态,或者 TermConnRingingEv ,如果您希望在振铃状态下拨打电话