你当前正在访问 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 回叫事件仅传达“接听”呼叫前操作,而不用于拒绝或重定向操作。

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

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

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

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

呼叫中操作

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

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

播放:当应用程序接听呼叫或发出出站呼叫时,可以为呼叫者播放音频提示。 如果需要,可以在一些场景(例如播放等待音乐)中循环播放此音频。 若要了解更多信息,请查看有关使用播放操作为用户自定义语音提示概念和操作指南。

识别输入:在你的应用程序播放音频提示后,可以请求用户进行输入以驱动应用程序中的业务逻辑和导航。 若要了解详细信息,请查看有关收集用户输入概念和操作指南。

连续 DTMF 识别:当应用程序需要能够在呼叫中的任何时间点接收 DTMF 音调,而无需应用程序触发特定的识别操作时。 如果代理正在通话中并需要用户输入某种类型的 ID 或跟踪号码,这非常有用。 若要详细了解如何使用此功能,请查看我们的指南

发送 DTMF:当应用程序需要向外部参与者发送 DTMF 音调时,这样做可能是为了拨出号码连接外部代理并提供分机号码,或者执行导航外部 IVR 菜单等操作。

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

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

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

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

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

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

查询方案

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

事件

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

事件网格事件

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

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

此处阅读有关这些事件和有效负载架构的更多信息

呼叫自动化 Webhook 事件

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

事件 说明
CallConnected 应用程序的呼叫段已连接(入站或出站)
CallDisconnected 应用程序的呼叫段已断开连接
CallTransferAccepted 应用程序的呼叫段已转移到另一个终结点
CallTransferFailed 应用程序的呼叫段转移失败
AddParticipantSucceeded 应用程序已添加参与者
AddParticipantFailed 应用程序未能添加参与者
CancelAddParticipantSucceeded 应用程序已取消添加参与者
CancelAddParticipantFailed 应用程序未能取消添加参与者
RemoveParticipantSucceeded 应用程序已成功从呼叫中删除参与者。
RemoveParticipantFailed 应用程序未能从呼叫中删除参与者。
ParticipantsUpdated 当应用程序的呼叫段连接到某呼叫时,参与者状态发生更改
PlayCompleted 应用程序已成功播放提供的音频文件
PlayFailed 应用程序未能播放音频
PlayCanceled 请求的播放操作已被取消
RecognizeCompleted 成功完成用户输入识别
RecognizeCanceled 请求的识别操作已被取消
RecognizeFailed 用户输入识别失败
了解有关识别操作事件的更多信息,请查看收集用户输入的操作指南
RecordingStateChanged 录制操作的状态已从“活动”更改为“非活动”,反之亦然
ContinuousDtmfRecognitionToneReceived StartContinuousDtmfRecognition 已成功完成,并从参与者处收到 DTMF 音调
ContinuousDtmfRecognitionToneFailed StartContinuousDtmfRecognition 已完成,但在处理参与者的 DTMF 音调时出错
ContinuousDtmfRecognitionStopped 已成功执行 StopContinuousRecognition
SendDtmfCompleted SendDTMF 已成功完成,DTMF 音调已发送到目标参与者
SendDtmfFailed 发送 DTMF 音调时出错

若要了解为不同操作发布了哪些事件,请查看此指南,了解各种呼叫控制流程的代码示例和序列图。

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

若要了解如何保护回叫事件传递,请查看此指南

操作回叫 URI

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

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

后续步骤

下面是一些你可能感兴趣的文章: