Нестабильное получение результатов от 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 отличается для каждого звонка?
1 ответ
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, если вы хотите получить вызов в состоянии вызова.