3

我的任务是编写一个应用程序,让用户可以拨打 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/中的示例,但我相信这一点一段代码不足以拨打电话。然而,我可能是错的。

谁能在这里指出我正确的方向,因为我相信我的规范很简单,应该很容易实现。如果需要更多信息,我很乐意提供。

4

2 回答 2

4

这是几个月前的事了,但它仍然可能对您有所帮助。我能够创建一个测试场景:

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 上测试的。

于 2013-05-10T10:00:19.310 回答
3

我在我的项目中使用了这个代码,工作正常:

            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 - 您呼叫的电话
于 2014-08-11T14:37:46.130 回答