- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
什么是 JTAPI,什么是 CTI,什么是 Cisco 统一调用管理器?我如何将 sip 调用或 voip 调用与这种情况集成?
最佳答案
这是一个非常开放的广泛问题,在您准备好运行之前,您需要进行大量基础研究。入门指南:CTI 代表“计算机电话集成”,是使用 API 控制或监视电话系统(例如 PBX)的通用术语。 CTI Descrption at Wikipedia . Cisco Unified Call Manager 是 Cisco 现在对他们的 PBX 产品的称呼。它基本上是一个看起来有点像路由器的盒子,您可以通过以太网端口将基于 VoIP 的电话机连接到它,它可以使用 SIP 或 Skinny(Cisco 的专有信号协议(protocol))以及 RTP 连接到电话。如果企业使用 Cisco 技术,则 CUCM 是企业电话系统的核心组件。
CTI 有两种基本类型 - 第一方调用控制和第三方调用控制。第一方是您的应用程序的行为类似于或与单个电话分机相关联,并且可以发送命令以获取有关该电话正在做什么的信息和控制。例如,您的程序可以判断电话是否在响铃、摘机、拨号码等。这通常用于地址簿集成之类的事情,用户可以在其中使用程序单击屏幕上的联系人,然后让他们的电话拨那个联系人。第一方调用控制的两个最常见的协议(protocol)是 TAPI 和 JTAPI。 (JTAPI 还支持一些第 3 方调用控制功能,尽管许多提供 JTAPI API 的系统不提供这些功能)
Cisco CUCM 同时提供 TAPI 和 JTAPI,尽管我经常听说他们的 TAPI 实现被描述为古怪和不可取的,因此 JTAPI 更常被使用。 JTAPI 提供了一个 API,用于从 Java 程序与电话系统进行交互。 JTAPI Description and Links .用于第三方调用控制的更全面的 API 是 TSAPI,但 Cisco CUCM 不提供 TSAPI 样式的 API,除非您还具有可选的统一联络中心模块,该模块价格昂贵,而且即使那样 API 也相当粗糙(基本上只是规范通过套接字和提供 TSAPI 样式调用状态模型的 API 的二进制 IO)。
至于如何使用 JTAPI 集成 SIP 或 Voip 调用,这取决于您想要做什么。例如,可以在最新一代的 Cisco 电话机上使用称为“Built in Bridge”的功能,提供终止于您的程序的 SIP 中继,并发送每个电话机或每个电话机的每个调用的 SIP 传输。由您实时控制的程序调用的子集。这样您就可以为每个对话接收 2 个 RTP 提要——本地端和远端。这对于监控或录音等被动应用很有用。
对于更活跃的应用程序,您可以使用 Cisco 的 JTAPI 和其他 API 来远程监控甚至控制系统上的物理 IP 电话或软电话,甚至可以将您的应用程序注册为虚拟分机并接听电话、加入 session 、强制转接调用第三方等。
有关详细信息,请参阅:http://developer.cisco.com/web/jtapi
关于linux - 带有 CTI 端口的 JTAPI 可与 Cisco Unified Call Manager 8.5 版集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5837381/
我在stackoverflow上查过很多类似的问题,比如call.call 1 , call.call 2 ,但我是新人,无法发表任何评论。我希望我能找到关于 JavaScript 解释器如何执行这些
“strace 是一个系统调用跟踪器,即一个调试工具,它打印出另一个进程/程序进行的所有系统调用的跟踪。”如果系统调用递归工作或一个系统调用调用另一个系统调用怎么办。我怎样才能得到这些信息? 可能的解
我的问题很简单:我正在将一个函数传递给其他一些稍后调用的函数(示例回调函数),问题是何时、为何以及最佳做法是什么。 样本:我有 xxx() 函数,我必须传递它,如下面的 window.onload 事
我是 Java 新手,我正在尝试学习 ScheduledExecutorService 接口(interface)。我在网上看到了下面的代码。 我没有看到任何对 Callable.call() 方法的
这是我的调用过程: System.out.println
在 typescript 中,我有一个 DataAccess 类,以便所有 Ajax 调用都通过单个对象进行路由,以节省应用程序中许多地方的代码重复。 在使用这种方法时,我需要使用回调将响应返回到调用
如何使用模拟来计算通过 call 或 apply 进行的函数调用 // mylib.js module.exports = { requestInfo: function(model, id) {
每次我尝试roxygenize 一个包我都会得到这个错误: Error: is.call(call) is not TRUE traceback() 的结果: 11: stop(sprintf(nge
这里如果我有一个记录“调用我的函数”的函数 function myFunction() { console.log('called my function') } Function.prototy
在 Javascript 中,Function.call() 可以在给定 this 值和零个或多个参数的情况下调用 Function。 Function.call 本身就是一个函数。所以理论上,Fun
这个问题已经有答案了: "object is not a function" when saving function.call to a variable (3 个回答) a is a functi
在调用 UITableView 上的 reloadData 方法后,我曾多次遇到此问题,但我不明白为什么? 这是一个问题,因为如果更新 TableView 的数据,tableview将不必要地查询不存
我继承了大约 400 行写得非常奇怪的 Fortran 77 代码,我正在尝试逐步分析它以使其在我的脑海中清晰。 无论如何,我有一个类似 header 的文件(实际上是一个 .h,但其中的代码是 fo
这是我的代码 class AuthAction(callbackUri:String) extends ActionBuilder[UserRequest] with ActionRefiner[
我继承了大约 400 行写得非常奇怪的 Fortran 77 代码,我正在尝试逐步分析它以使其在我的脑海中清晰。 无论如何,我有一个类似 header 的文件(实际上是一个 .h,但其中的代码是 fo
我知道这个问题之前在这里被问过 iOS 6 shouldAutorotate: is NOT being called .但我的情况有点不同。 最初,在应用程序启动时,我加载了一个 viewContr
我是 headfirst 设计模式的读者,我注意到了这一点。 “好莱坞原则,别叫我们,我们叫你” 这意味着高级组件告诉低级组件“不要调用我们,我们调用你” High-Level Component 是
这个问题在这里已经有了答案: Why does passing variables to subprocess.Popen not work despite passing a list of ar
我刚找到一个覆盖 OnPaintBackground 的表单。奇怪的是它从来没有被调用过!就像,完全一样。为什么是这样?表单被刷新、移动、调整大小等等,所以它应该一些重新绘制,对吧? 最佳答案 是否设
调用函数的方式 考虑这个简单的函数: function my(p) { console.log(p) } 我可以这样调用它: my("Hello"); 也像这样: my.call(this, "Hel
我是一名优秀的程序员,十分优秀!