从CiscoProvider.GetCall获取结果不稳定(int callLegID)

时间:2015-05-11 13:38:46

标签: jtapi cisco-jtapi

我有代码:

        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都不同吗?

1 个答案:

答案 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 ,如果您希望在振铃状态下拨打电话