0

私はコードを持っています:

        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 はコールごとに異なりますか?

4

1 に答える 1

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 の通話を受信して​​います。記録された通話のみを受け取ります。それがあなたの機能が安定していない理由です。CiscoTermConnRecordingEndEvの代わりにすべてのコールを取得する場合は、アクティブ状態でコールを取得する場合はTermConnActiveEvを使用し、呼び出し状態でコールを取得する場合はTermConnRingingEvを使用します。

于 2015-05-29T12:50:47.757 に答える