2015-05-11 16 views
0

У меня есть код:Нестабильные получение результатов от CiscoProvider.GetCall (INT callLegID)

 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

Я попытался использовать два поставщика (на каждом кластере узлов) - тот же результат. – Slot555

ответ

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 если вы хотите получить заехать в состоянии вызова.