JTAPI 入门 (二)

  (接前面 JTAPI  入门(一))

  • CallObserver

     ○ Call 事件侦听接口,实现此接口。我们可以侦听到 Call 所发出的所有事件。在实际开发中,必须要实现此接口,或者其子接口。因为,这是介入进行处理操作的基础。

       ConnAlertingEv  : 这是振铃事件

       ConnDisconnectedEv : 这是挂机事件

       ConnFailedEv : 这是拨号失败的事件,使用这个事件,可以在拨号失败之后处理后事。。

     ○ Call Control Extension 扩展接口: CallControlCallObserver   --- 在实际开发当中,我们会实现这个接口,而不是 CallObserver 。因为可以得到更完整的事件。


       CallCtlConnAlertingEv: 振铃事件。。要注意,CallObserver 虽然也有 ConnAlertingEv ,但是这个事件能够得到更多的状态和数据信息,自然也就更好。

       CallCtlConnDisconnectedEv: 这是挂机事件。。。不过,如果不需要更多信息,用 ConnDisconnectedEv 可以少输入几个字母。。^-^

       CallCtlConnDialingEv: 就是按键输入事件,可以使用方法 getDigits() 来获取输入的按键。这是一次性的获取,有时不是很靠谱,所以在用时,最好先试一下好不好使。

                   在 Cisco JTAPI 中,提供另外的一些事件来处理按键,在后面有说

       CallCtlConnEstalishedEv: 拿起话筒事件。。。这个事件,在一些处理中非常有用。不过,由于拨号双方都会拿起话筒,所以会有两个这样的事件,在用时要分清楚。

       CallCtlConnOfferedEv:  在使用 Cisco CTI Port 和 CTI RoutePoint 这样的逻辑话机时,就要在这个事件进行 accept 操作。

       .... 更多

  • Terminal

     ○ 表示一个终端设备,包括逻辑终端和物理终端。如物理话机,SoftPhone,手机。。甚至对讲机等

     ○ 主要方法包括:

        addObserver() : 添加 Terminal 层面的事件侦听器

        addCallObserver() : 添加  Call 事件侦听器 (见 CallObserver)

        getAddresses() : 获取此话机的所有 Address (即号码对象),一台可用话机,通常会有一或多个号码

        getName():话机的唯一名称,在 Cisco 中。物理话机通常是一个 MAC 地址,而在逻辑话机,会是一个由字母数字组成的名称。

        getProvider() : 获取 Provider

     ○ Cisco 实现类: CiscoTerminal   --- 同样将提供更多丰富的功能

        getIPV4Address() : 获得 Terminal 的 IP 地址。。。这个地址也可以通过 AXL API 获取

        pickup():呼叫代答

        sendData() : 推送信息到 Phone 中显示,可以用来推送一些即时提示信息

     ○ Cisco 的虚拟逻辑话机: CtiPort   -- 可以作为一台物理话机使用

        ◆ 是 CCM 内部的一台虚拟话机

        ◆ 每个 CtiPort 只能起一个 Call

        ◆ 通常用来播放语音提示。例如,控制一个 CtiPort 拨打某个指定号码,然后播放一段已经录制好的语音。

        ◆ CtiPort 对应的类: CiscoMediaTerminal

          register() : 注册使用 CtiPort  --- 要指定语音编码协议等

          setRTPParams() : 设置 RTP 语音流的参数(如端口等)

     ○ Cisco 虚拟逻辑总机:  Cti RoutePoint   --- 可以作为一台总机使用,同时接入多个呼叫请求

        ◆ 是 CCM 内部的虚拟话机

        ◆ 能够并发接入多路呼叫。。。CCM 8.x 以上,每个 CTI RoutePoint 可以并发接入多达 4 千个呼叫 (服务器物理性能允许的情况下)

        ◆ 可以实现语音呼叫处理逻辑。。。例如,简单的 Call Center 的语音流程。。实际上 Cisco Call Center Server 就是使用 CTI RoutePoint 来实现语音流程

        ◆ Cti RoutePoint 对应的类: CiscoRouteTerminal            

          register() : 注册使用 CtiPort  --- 要指定语音编码协议等

          setRTPParams() : 设置 RTP 语音流的参数(如端口等)

        ◆  在方法提供上,似乎没什么特别之外,其他差异是在事件处理上。当使用 accept 接入时,呼叫将进入一个内部队列,排队等待处理。所以 RoutePoint 能够处理多个呼叫。


  • TerminalObserver

     ○ Terminal 层面的事件侦听接口。。能够接收到 Terminal 层面的事件,例如语音流方面。不过,由于 Terminal 与底层实现的相关性较强,所以标准并没有太多内容

     ○ Cisco 实现类: CiscoTermEv     --- Cisco 提供了比较多的底层事件支持,并且如果要使用 CTIPort 或 CTI RoutePoint 的话,就必须用到这些事件。

       CiscoMediaOpenLogicalChannelEv :   为 CTIPort 或 CTI RoutePoint 设置语音参数,例如  RTP URL ( IP + 端口号)

       CiscoRTPInputStartedEv : 开始接收对方的语音输入(语音流),在本事件中,可以得到 RTP URL,这样我们可以将语音流定向到其他目地的,例如文件。

       CiscoRTPInputStoppedEv: 停止语音输入事件,可能是挂机,又或者转接,会议之类的操作,停止了语音输入。

       CiscoRTPOutputStartedEv: 开始向对方输出语音流

       CiscoRTPOutputStoppedEv: 停止向对方输出语音流。

       在使用上述事件时,要留意: CiscoRTPInputStartedEv 与 CiscoRTPOutputStartedEv 的触发,并没有顺序。也就是,不要假设顺序。

  • Connection

     ○ Connection 是连接 Call 与 Address 的连接对象。

       disconnect() : 断开连接,相当于挂机

       getCall(): 获得所关联的 Call

       getAddress(): 获得所关联的 Address

     ○ Call Control Extension 扩展:  CallControlConnection  --- 提供更多的方法

       accept() : 接入来电。对于一些特殊的 Terminal 有特定的用途。例如 Cisco CTIPort & CTI RoutePoint ,就必须明确使用本方法来接入来电。当然,新版本

            的 Cisco CCM (如 8.x 之后),可以在 CCM 配置层面,进行 auto accept 操作。不过,编程的灵活性就没了。

       reject():  拒绝接入来电。

       redirect() : 重定向到另一个地址。。。例如,判断是某些特定的号码,然后转向到另一些号码(类似号码自动分派)

     ○ Cisco 的扩展: CiscoConnection 

       CiscoConnection 是对 CallControlConnection 进行扩展。最重要的功能,就是提供更丰富 redirect() 方法功能,例如配合 CCM 中 CSS 进行更加细致的分隔和重定向

      也就是说,可以制定更加丰富和复杂的呼叫路由。

  • TerminalConnection 

     ○ TerminalConnection 是连接 Connection 与 Terminal 的连接对象。意味着 TerminalConnection 不能单独存在,必须依附于 Connection

       answer() :  接听来电。特别是对于 Cisco CTIPort & CTI RoutePoint 这样的逻辑话机,必须使用本方法来接听来电。

       getTerminal(): 获取关联的 Terminal

       getConnection() : 获取关联的 Connection

     ○ Call Control Extension 扩展: CallControlTerminalConnection

       hold(): 暂时  “hold”住通话

     ○ Cisco 的扩展/实现:  CiscoTerminalConnection --- 提供一些较底层或特有的方法,例如:  startRecording() 。。启动 Cisco CCM 的 BIB 方式录音功能。

  2.4 开发过程常用事件

  由于我们要靠事件来介入整个呼叫流程,所以了解和研究事件,就成为开发学习的主要任务。如果不清楚有那些事件,在某个阶段会触发那些事件,那就意味着你什么也做不了。下面列出开发常用事件,以供参考:

         JTAPI 入门 (二)_第1张图片

  如果是 Cisco CTi Port & CTI RoutePoint 的编程,用到的事件还会多。例如: CallCtlConnOfferedEv 事件,我们的 CTI Port & CTI RoutePoint 必须在这个事件中进行一个 accept() 动作,用来接受拨打入来的电话,否则对方就无法拨入而听到忙音。

(待续...)








你可能感兴趣的:(JTAPI 入门 (二))