交接

当应用程序拥有通信会话的所有者 特权 时,应用程序可以选择将所有权移交给另一个应用程序。 切换作通常用于允许更改呼叫的媒体类型。 新媒体类型的最高优先级应用程序应采用并处理呼叫。 媒体类型更改通常因以下原因之一而发生。

User 命令: 通过用户界面或窗口消息,应用程序将了解本地用户想要更改媒体类型。 例如,用户已告诉新的目标应用程序(尚不是所有者),以获取用于传输数据的现有语音呼叫。 目标应用程序现在必须控制调用。 在这种情况下,当前所有者会注意到所有者数量增加,然后放弃对呼叫的控制。 或者,用户可以指示调用的当前所有者将其移交给可以处理新媒体类型的应用程序。

媒体类型更改: 服务提供商可以检测媒体类型更改。 例如,本地应用程序正在向呼叫方播放录制的语音消息。 在此消息中,呼叫者自发决定传输传真呼叫音,本地应用程序可以通过将媒体类型更改为传真做出相应响应,如有必要,将呼叫移交给传真应用程序。 另一种方法是监视应用程序启用媒体类型监视,当在呼叫中检测到它感兴趣的媒体类型时,它可以请求呼叫的所有权。 此机制使每个应用程序都不需要监视每个媒体类型的每次调用。

远程方命令: 远程方可以在现有调用期间以交互方式指示媒体类型更改,例如本地应用程序是否监视远程调用方的 DTMF 输入。 通过此监视,呼叫方指示即将发送传真。 调用方可以控制本地应用程序的其他方式是通过其他数据连接以及 ISDN 用户信息消息接收的命令。

呼叫交接将具有以下结果之一:

  • 该调用将提供给另一个应用程序(SUCCESS)。
  • 移交应用程序本身是目标(TARGETSELF)。
  • 切换失败(TARGETNOTFOUND)。

如果接收移交呼叫的应用程序已具有调用的调用句柄,则使用此旧的调用句柄。 否则,将创建新的调用句柄。 在任一情况下,应用程序最终都具有调用的所有者权限。 每当交接应用程序与目标应用程序不同时,目标将通知会话状态消息中的切换情况,就好像接收新调用一样。

如果当前所有者应用程序被告知要更改媒体类型,则通过向用于目标媒体类型的应用程序发出调用来执行此作。 定向接接媒体类型讲义中介绍了两种类型的呼叫接接。

并非所有服务提供商都支持使用此作。

TAPI 2.x: 请参阅 lineHandofflpszFileName 设置为直接交接的应用程序名称,或者 dwMediaMode 设置为间接交接的一种媒体类型。

TAPI 3.x: 请参阅 ITBasicCallControl::HandoffDirectITBasicCallControl::HandoffIndirect

定向交接

当目标应用程序按名称向原始应用程序命名时,将发生 定向交接。 例如,这种情况发生在同一供应商编写的一组应用程序之间。 用户通常可以配置对定向移交的控制。 如果调用打开了该调用所在的行,则会向指定应用程序发出此调用。 应用程序打开行时指定的媒体类型将被忽略。 一个常见示例是语音呼叫,后接同一呼叫中的传真传输。 定向交接通常由来自其他方式链接的同一开发人员的应用程序使用。

在未来版本中,还可以使用定向切换,作为仲裁多个应用程序等待同一媒体类型的传入调用的过程的一部分,选择应用程序来处理基于数据链接或更高级别的协议检测(而不是媒体类型)的调用。 其用法示例是传入数据调制解调器线路,其中包含远程接管、公告板、远程网络访问和远程电子邮件访问等应用程序,这些应用程序同时等待呼叫。

媒体类型切换

当存在新的目标媒体类型时,媒体类型交接 通常会在拥有应用程序确定调用所需的媒体类型不存在或即将更改时发生。

如果媒体类型 UNKNOWN 位处于打开状态,则依赖于媒体的切换过程可以是探测过程。 拥有应用程序负责循环访问媒体类型以查找优先级最高的应用程序。 TAPI 仅在初始传入呼叫中执行此循环以查找第一个所有者。 它不适用于移交作。 否则,对应用程序的调用的初始分配与切换几乎相同。 区别在于,只能为间接(媒体类型)交接设置一个媒体类型。

由于只能指定单个媒体类型位,因此该媒体类型的最高优先级应用程序调用。 但是,可以考虑多个媒体类型进行交接。 在这种情况下,移交应用程序应将可能媒体类型的最高优先级指定为参数。

如果应用程序在执行媒体类型交接时指定 UNKNOWN 位,并且切换失败,这意味着无法执行媒体类型确定的未知应用程序当前未运行。 然后,要移交的应用程序应尝试将调用移交给为下一个更高媒体类型注册的最高优先级应用程序。

接收应用程序现在负责呼叫。 它现在探测调用的实际媒体类型。 如果应用程序可以处理调用的媒体类型,则必须确保它是为该媒体类型注册的最高优先级应用程序。 如果是这样,它会保留调用并正常处理它。 否则,它会将调用移交给为该媒体类型注册的另一个应用程序。

但是,如果该媒体类型的探测失败,应用程序会再次探测,并尝试剩余的媒体模式可能性。 它必须首先关闭当前媒体类型位,然后尝试另一个具有不同类型的切换。

这一探测和移交过程仍在继续,其余媒体类型逐个消除。 在此过程中,其中一个应用程序可能会看到它处理的媒体类型正在调用中,并且接接成功。

然后,应用程序应设置正确的媒体类型并清除所有其他媒体类型位。 这会通知其他感兴趣的应用程序正确的媒体类型。 这些其他应用程序会收到一条事件通知消息,指出呼叫的媒体类型已更改。