Cisco JTAPI для CUCM
Мне было поручено написать приложение, которое позволяет пользователям совершать звонки в Cisco Unified Callmanager 8.6. Список контактов не будет предоставлен UCM. Это будет предоставлено в другом месте.
Я считаю, что и документация, и примеры, предоставленные Cisco, отсутствуют и нежелательны. Я также считаю, что не хватает рабочих примеров от третьих лиц.
Я надеюсь, что кто-то еще сделал что-то подобное до меня.
Приложение получает номера для вызова из базы данных, а затем позволяет пользователю щелкнуть контакт, которому он или она хочет позвонить. Номер адресата должен быть затем отправлен на телефон. По сути, вместо того, чтобы набирать номер, приложение отправляет пункт назначения на телефон или UCM, и в этот момент пользователь вступает во владение.
Глядя на Cisco makecall.java и используя его, кажется, что на самом деле просто сделать вызов с помощью этого API.
Я начал с использования примера, найденного на http://blog.nominet.org.uk/tech/2008/01/25/experiments-with-jtapi-part-1-making-a-call/ но я верю в это кусок кода будет недостаточным для совершения звонка. Однако я могу ошибаться.
Может ли кто-нибудь указать мне правильное направление, так как я считаю, что мои спецификации просты и должны быть легко реализуемы. Если потребуется дополнительная информация, я буду рад предоставить ее.
2 ответа
Я использовал этот код в своем проекте, работает правильно:
final Condition inService = new Condition();
provider.addObserver(new ProviderObserver() {
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();
Address srcAddr = provider.getAddress(src);
co = new CallObserver() {
public void callChangedEvent(CallEv[] eventList) {
}
};
srcAddr.addCallObserver(co);
call = provider.createCall();
call.connect(srcAddr.getTerminals()[0], srcAddr, dst);
- src - телефон, с которого вы звоните
- dest - телефон, по которому вы звоните
Это было несколько месяцев назад, но это все еще может вам чем-то помочь. Мне удалось создать тестовый сценарий:
protected CiscoJtapiPeer peer;
protected CiscoProvider provider;
// ...
peer = (CiscoJtapiPeer) JtapiPeerFactory.getJtapiPeer(null);
provider = (CiscoProvider) peer.getProvider(cucmURL);
/* cucmURL has the format:
"192.168.0.20;login=myuser;passwd=mypasswd"
whereas the username is an Application User in Cisco Unified Communications
Manager. On my system, it has the following permissions. I don't know whether all
of them are required:
Standard AXL Users
Standard Audit Users
Standard CCM End Users
Standard CCM Phone Administration
Standard CCM Phone and Users Administration
Standard CCM Read Only
Standard CCM Super Users
Standard CTI Allow Call Monitoring
Standard CTI Allow Call Park Monitoring
Standard CTI Allow Control of All Devices
Standard CTI Allow Control of Phone supporting Connected Xfer and...
Standard CTI Enabled
Standard CTI Secure Connection
Standard RealtimeAndTraceCollection
Standard TabSyncUser
You then add an observer to the provider in order to know when the provider
object is read for further interaction. You'll receive a "ProvInServiceEv" Event in the event list.
*/
provider.addObserver(providerObserver);
/* Wait until the event has come up */
// Create a sample call:
CiscoTerminal term = provider.createTerminal("your_sep_id_here");
Call call = provider.createCall();
call.connect(term, term.getAddresses()[0], "your_phone_number_to_call");
term
используется в качестве "источника", с которого начинается вызов. term.getAddresses()[0]
просто получает первый номер телефона, связанный с "исходным" телефоном. "your_phone_number_to_call"
затем называется.
Другая информация: Это не работает наоборот: Вы не можете позвонить provider.getAddress("phonenumber")
во-первых, потому что каким-то образом телефонные номера не загружаются классом провайдера до того, как к нему подключится какой-либо терминал.
Это было проверено на CUCM 8.6.2 и Java 7.