你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

呼叫自动化概述

开发人员可通过 Azure 通信服务通话自动化为语音和公共交换电话网络 (PSTN) 通道生成基于服务器的智能呼叫工作流和通话记录。 SDK 在 C#、Java、JavaScript 和 Python 中可用,它们使用操作事件模型来帮助构建个性化的客户交互。 通信应用程序可以侦听实时呼叫事件并执行控制平面操作(如接听、转接、播放音频、开始录制等),以根据业务逻辑引导和控制呼叫。

常见用例

可以使用呼叫自动化生成的一些常见用例包括:

  • 为事务工作流(例如点击呼叫和约会提醒)计划 VoIP 或 PSTN 呼叫,以改进客户服务。
  • 使用播放(音频 URL、文本转语音和 SSML)和识别(DTMF 和语音)操作,生成交互式交互工作流,以便自助服务客户使用订单预订和更新等用例。
  • 使用直接路由将通信应用程序与联系中心和专用电话网络集成。
  • 通过构建数字掩码服务,让买家与卖家或让用户与平台上的合作伙伴供应商连接,从而保护客户的身份。
  • 通过构建用于营销和客户服务的自动化客户推广计划来提高参与度。
  • 出于质量保证的目的,会在通话后处理中分析你的未混合音频记录。

使用 Azure 通信服务呼叫自动化为客户服务场景生成通话工作流,如概要体系结构所示。 你可以接听入站呼叫或拨打出站呼叫。 执行播放欢迎消息、将客户连接到 Azure 通信服务通话 SDK 客户端应用上的实时代理来接听来电请求等操作。 借助对 Azure 通信服务 PSTN 或直接路由的支持,可以将此工作流连接回联系中心。

针对客户服务场景的通话流示意图。

功能

Azure 通信服务呼叫自动化 SDK 中当前提供以下功能。

功能区域 功能 .NET Java JavaScript Python
呼叫前方案 接听一对一呼叫 ✔️ ✔️ ✔️ ✔️
接听群组呼叫 ✔️ ✔️ ✔️ ✔️
对一个或多个终结点发出新的出站呼叫 ✔️ ✔️ ✔️ ✔️
将呼叫重定向*(转发)到一个或多个终结点 ✔️ ✔️ ✔️ ✔️
拒绝来电 ✔️ ✔️ ✔️ ✔️
连接到正在进行的呼叫或会议室(预览版) ✔️ ✔️ ✔️ ✔️
呼叫中方案 将一个或多个终结点添加到现有呼叫 ✔️ ✔️ ✔️ ✔️
取消向现有通话添加终结点 ✔️ ✔️ ✔️ ✔️
从音频文件播放音频 ✔️ ✔️ ✔️ ✔️
使用文本转语音功能播放音频 ✔️ ✔️ ✔️ ✔️
通过 DTMF 识别用户输入 ✔️ ✔️ ✔️ ✔️
识别用户语音输入 ✔️ ✔️ ✔️ ✔️
开始连续 DTMF 识别 ✔️ ✔️ ✔️ ✔️
停止连续 DTMF 识别 ✔️ ✔️ ✔️ ✔️
发送 DTMF ✔️ ✔️ ✔️ ✔️
将参与者静音 ✔️ ✔️ ✔️ ✔️
从现有呼叫中移除一个或多个终结点 ✔️ ✔️ ✔️ ✔️
将一对一通话盲接到另一个终结点 ✔️ ✔️ ✔️ ✔️
将来自群组通话的参与者盲转到另一个终结点 ✔️ ✔️ ✔️ ✔️
挂断呼叫(移除呼叫段) ✔️ ✔️ ✔️ ✔️
终止呼叫(移除所有参与者并结束呼叫) ✔️ ✔️ ✔️ ✔️
取消媒体操作 ✔️ ✔️ ✔️ ✔️
向呼叫添加终结点或将呼叫转接到终结点时,(通过 VOIP 或 SIP 标头)与这些终结点共享自定义信息 ✔️ ✔️ ✔️ ✔️
查询方案 获取呼叫状态 ✔️ ✔️ ✔️ ✔️
获取呼叫参与者 ✔️ ✔️ ✔️ ✔️
列出呼叫中的所有参与者 ✔️ ✔️ ✔️ ✔️
通话记录 开始/暂停/恢复/停止录制 ✔️ ✔️ ✔️ ✔️

* 目前不支持将 VoIP 呼叫转接或重定向到电话号码。

体系结构

呼叫自动化使用 REST API 接口接收请求并对服务内执行的所有操作提供响应。 由于通话的异步性,大多数操作将在操作成功完成或失败时触发相应的事件。

Azure 通信服务使用事件网格为所有呼叫中操作回调传递 IncomingCall 事件和 HTTPS Webhook。

来电和操作流的屏幕截图。

呼叫操作

呼叫前操作

这些操作在 IncomingCall 事件通知中列出的目标终结点连接之前执行。 Webhook 回叫事件仅传达 answer 预呼叫操作,而不传达 rejectredirect 操作。

接听 - 使用事件网格和呼叫自动化 SDK 中的 IncomingCall 事件,应用程序可以接听呼叫。 在 IVR 场景中使用此操作,在这些场景中,应用程序可以编程方式接听入站 PSTN 呼叫。 其他场景包括代表用户接听呼叫。

拒接 - 拒接呼叫意味着应用程序可以接收 IncomingCall 事件并阻止呼叫连接到目标终结点。

重定向 - 使用事件网格中的 IncomingCall 事件,可以将呼叫重定向到一个或多个终结点,从而创建单独或同时响铃 (sim-ring) 场景。 重定向操作不接听呼叫。 呼叫将重定向或转发到要接听的另一个目标终结点。

创建呼叫 - 使用创建呼叫操作向电话号码和其他通信用户发出出站呼叫。 用例包括应用程序发出出站呼叫来主动通知用户中断或通知订单更新。

连接呼叫(预览版)- 使用连接呼叫操作连接到正在进行的呼叫并对其执行呼叫操作。 还可以使用此操作以编程方式连接和管理会议室呼叫,例如使用服务为会议室执行 PSTN 拨出。

呼叫中操作

应用程序可以对使用呼叫自动化 SDK 接听或发出的呼叫执行这些操作。 每个呼叫中操作都有相应的成功或失败 Webhook 回叫事件。

添加/移除参与者 - 可以在单个请求中添加一个或多个参与者,每个参与者都是支持的目标终结点的变体。 为成功添加到呼叫的每个参与者发送一个 Webhook 回叫。

播放 - 当应用程序接听呼叫或发出出站呼叫时,可以为呼叫者播放音频提示。 如果需要,可以在一些场景(例如播放等待音乐)中循环播放此音频。 若要了解详细信息,请参阅在呼叫中播放音频使用播放操作自定义发给用户的语音提示

识别输入 - 在你的应用程序播放音频提示后,可以请求用户输入以驱动应用程序中的业务逻辑和导航。 若要了解详细信息,请参阅收集用户输入使用识别操作收集用户输入操作指南。

连续 DTMF 识别 - 当应用程序需要能够在呼叫中的任何时间点接收 DTMF 音调,而无需应用程序触发特定的识别操作时。 如果代理正在通话中并需要用户输入某种类型的 ID 或跟踪号码,此功能非常有用。 若要了解详细信息,请参阅如何控制呼叫中的媒体操作

发送 DTMF – 当应用程序需要向外部参与者发送 DTMF 音时。 使用此操作可拨出到外部代理并提供分机号码,或导航外部 IVR 菜单。

静音 - 应用程序可以根据业务逻辑将某些用户静音。 然后,如果用户想要说话,需要手动取消静音。

转移 - 当应用程序接听呼叫或向某个终结点发出出站呼叫时,该呼叫可以转移到另一个目标终结点。 转接一对一呼叫时,应用程序无法使用呼叫自动化 SDK 控制呼叫。

录制 - 根据应用程序业务逻辑决定何时开始/暂停/恢复/停止录制,或者可以授予最终用户触发这些操作的控制权。 要了解更多信息,请查看我们的概念快速入门

挂断 - 当应用程序接听了一对一呼叫时,挂断操作将移除呼叫段并终止对另一终结点的呼叫。 如果呼叫(群组呼叫)中有两个以上的参与者,执行“挂断”操作时,会从群组呼叫中移除应用程序的终结点。

终止 - 无论应用程序是否接听了一对一呼叫或群组呼叫,或者是否对一个或多个参与者发出了出站呼叫,此操作都会移除所有参与者并结束呼叫。 通过在挂断呼叫操作中将 forEveryOne 属性设置为 true,可触发此操作。

取消媒体操作 - 根据业务逻辑,应用程序可能需要取消正在进行和已排队的媒体操作。 根据已取消的媒体操作和队列中的媒体操作,应用程序可能会收到一个 Webhook 事件,指示该操作已取消。

查询方案

列出参与者 - 返回呼叫中所有参与者的列表。 从此列表中省略录制和听录机器人。

事件

下表概述了 Azure 通信服务发出的当前事件。 下面的两个表描述了事件网格发出的事件和通过呼叫自动化发出的事件(作为 Webhook 事件)。

事件网格事件

事件网格发送的大多数事件与平台无关。 无论是什么 SDK(通话或呼叫自动化),都会发送它们。 虽然可以为任何事件创建订阅,但建议对所有要以编程方式控制呼叫的呼叫自动化用例使用 IncomingCall 事件。 将其他事件用于报告/遥测目的。

事件 说明
IncomingCall 对通信用户或电话号码的呼叫通知。
CallStarted 已建立呼叫(入站或出站)。
CallEnded 已终止呼叫并移除所有参与者。
ParticipantAdded 已向呼叫添加参与者。
ParticipantRemoved 已从呼叫中移除参与者。
RecordingFileStatusUpdated 录制文件可用。

详细了解 Azure 通信服务 - 语音和视频通话事件中的这些事件和有效负载架构

呼叫自动化 Webhook 事件

当接听或发出新的出站呼叫时,呼叫自动化事件将发送到指定的 Webhook 回叫 URI。

事件 说明
CallConnected 呼叫已成功启动(使用 AnswerCreate 操作时),或者应用程序已成功连接到正在进行的呼叫(使用 Connect 操作时)。
CallDisconnected 应用程序已与呼叫断开连接。
ConnectFailed 应用程序未能连接到呼叫(仅适用于 Connect 呼叫操作)。
CallTransferAccepted 转接操作已成功完成,被转接方已连接到目标参与者。
CallTransferFailed 转接操作失败。
AddParticipantSucceeded 应用程序已成功将参与者添加到呼叫。
AddParticipantFailed 应用程序无法将参与者添加到呼叫(由于错误或参与者未接受邀请)
CancelAddParticipantSucceeded 应用程序已成功取消 AddParticipant 请求(参与者未被添加到呼叫)。
CancelAddParticipantFailed 应用程序无法取消 AddParticipant 请求(这可能是因为请求已被处理)。
RemoveParticipantSucceeded 应用程序已成功从呼叫中移除参与者。
RemoveParticipantFailed 应用程序未能从呼叫中删除参与者。
ParticipantsUpdated 应用程序连接到呼叫时参与者的状态已更改。
PlayCompleted 应用程序已成功播放提供的音频文件。
PlayFailed 应用程序未能播放音频。
PlayCanceled 请求的播放操作已被取消。
RecognizeCompleted 已成功完成用户输入的识别。
RecognizeCanceled 请求的 Recognize 操作已被取消。
RecognizeFailed 用户输入识别失败。
有关识别操作事件的详细信息,请参阅收集用户输入的操作指南。
RecordingStateChanged 录制操作的状态已从“活动”更改为“非活动”,或反之。
ContinuousDtmfRecognitionToneReceived StartContinuousDtmfRecognition 成功完成,并且已收到参与者的 DTMF 音。
ContinuousDtmfRecognitionToneFailed StartContinuousDtmfRecognition 已完成,但在处理参与者的 DTMF 音时出错。
ContinuousDtmfRecognitionStopped 已成功执行 StopContinuousRecognition
SendDtmfCompleted SendDTMF 成功完成,并向目标参与者发送了 DTMF 音。
SendDtmfFailed 发送 DTMF 音时出错。

若要了解为不同操作发布的事件,请参阅用于通话控制的操作。 本文提供了各种通话控制流的代码示例和序列图。

确认回叫事件时,最佳做法是使用标准 HTTP 状态代码(如 200 正常)进行响应。 不需要详细的信息,更适合你的调试过程。

若要了解如何保护回叫事件传递,请参阅如何保护 Webhook 终结点

操作回叫 URI

操作回叫 URI 是某些呼叫中 API 中的可选参数,这些 API 使用事件作为其异步响应。 默认情况下,当用户建立呼叫时,所有事件都会发送到 CreateCall / AnswerCall API 事件设置的默认回叫 URI。 使用操作回叫 URI 时,API 会将此单个(仅限一次)请求的相应事件发送到新 URI。

支持的 API 相应的事件
AddParticipant AddParticipantSucceed / AddParticipantFailed
RemoveParticipant RemoveParticipantSucceed / RemoveParticipantFailed
TransferCall CallTransferAccepted / CallTransferFailed
CancelAddParticipant CancelAddParticipantSucceeded / CancelAddParticipantFailed
Play PlayCompleted / PlayFailed / PlayCanceled
PlayToAll PlayCompleted / PlayFailed / PlayCanceled
Recognize RecognizeCompleted / RecognizeFailed / RecognizeCanceled
StopContinuousDTMFRecognition ContinuousDtmfRecognitionStopped
SendDTMF ContinuousDtmfRecognitionToneReceived / ContinuousDtmfRecognitionToneFailed

后续步骤