我们正在基于Java的客户端中使用 TAPI技术连接到 PBX硬件,以使用CTI操作(启动呼叫,处理接听电话等)。
要连接到TAPI,我们使用 gjtapi 项目。我们从客户端gui发起呼叫,我们可以监视事件,并在连接到客户端的电话设备上看到事件。

作为替代方案,我尝试了 SIP协议,我们也可以启动呼叫,但是当我们使用SIP协议进行连接时,电话设备被旁路了,但设备上看不到任何东西。例如,当使用TAPI并收到电话时,我们会在电话和gui上看到来电,它们会同步工作。但是,当我使用SIP连接并接听电话时,电话设备上没有任何反应。这是错误的设置/实现,还是SIP的行为,它提供了某种软电话?

最佳答案

TAPI是第三方技术:意味着您的应用程序不执行“工作”,它向PBX发送命令以代表您执行“工作”。

在SIP中,您必须自己做所有事情:您可以建立到某个地方的呼叫,但是在告诉其他事情该怎么做方面非常有限。

您可以从SIP获得与TAPI类似的功能,但是涉及的更多。您需要将自己定位为“中间人”。例如,您希望从设备拨打电话到外部:

  • 首先(从您的应用程序)调用设备
  • 其次(通过您的应用程序)呼叫外部方
  • 第三个连接两端

  • 但是,如果此后想要类似TAPI的控件,则需要将应用程序“置于循环中”。 SIP只能控制您直接参与的 Activity 。这意味着您需要:
  • 将电话长号(音频通过您的应用程序传递)
  • 使用媒体旁路(音频在2个参与者之间进行),但您保留信令

  • 这也可能很危险,因为这意味着您的应用程序在所有调用之间“处于中间”:这意味着如果崩溃,所有调用都将丢失!

    我建议您不要低估使这种工作正常进行所需的工作量。还有其他替代方案,例如CSTA,许多PBX支持它们自己的专有接口来进行这种控制。但是我认为TAPI可能是第三方呼叫控制的更好选择(尤其是如果您想支持1个以上的PBX供应商)

    10-04 19:56