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

传入呼叫概念

Azure 通信服务呼叫自动化使开发人员能够创建可以拨打和接听呼叫的应用程序。 它利用事件网格订阅来传递 IncomingCall 事件,使配置环境以有效地接收应用程序重定向或应答呼叫的通知至关重要。 因此,了解传入呼叫的基础知识对于充分利用Azure 通信服务呼叫自动化的全部潜力至关重要。

呼叫方案

在设置环境之前,请务必了解可以触发 IncomingCall 事件的方案。 若要触发IncomingCall事件,必须对Azure 通信服务标识或与Azure 通信服务资源关联的公用电话交换网(PSTN)号码进行呼叫。 下面是这些资源的示例:

  1. Azure 通信服务标识
  2. 你的 Azure 通信服务资源拥有的 PSTN 电话号码

根据这些示例,以下方案触发 IncomingCall 发送到事件网格的事件:

目标 方案
Azure 通信服务标识 Azure 通信服务标识 呼叫、重定向、添加参与者、转移
Azure 通信服务标识 你的 Azure 通信服务资源拥有的 PSTN 号码 呼叫、重定向、添加参与者、转移
公共 PSTN 你的 Azure 通信服务资源拥有的 PSTN 号码 呼叫、重定向、添加参与者、转移

注意

请务必了解Azure 通信服务标识可以表示用户或应用程序。 虽然平台没有用于向用户或应用程序显式分配标识的内置功能,但应用程序或支持基础结构可以实现此目的。 若要了解有关本主题的详细信息,请参阅 标识概念指南

注册事件网格资源提供程序

如果以前未在 Azure 订阅中使用过事件网格,则可能需要注册事件网格资源提供程序。 要注册提供程序,请按照下列步骤操作:

  1. 转到 Azure 门户。
  2. 在左侧菜单中选择“订阅”。
  3. 选择用于事件网格的订阅。
  4. 在左侧菜单中的“设置”下,选择“资源提供程序”。
  5. 找到 Microsoft.EventGrid
  6. 如果未注册资源提供程序,请选择“注册”。

从事件网格接收来电通知

在Azure 通信服务中,可以通过事件网格订阅接收IncomingCall通知。 作为通知的接收方,你可以灵活地选择如何处理通知。 由于调用自动化 API 利用事件的 Webhook 回调,因此通常使用“Webhook”事件网格订阅。 但是,该服务提供各种订阅类型,你可以自由选择最适合自己的订阅类型。

此体系结构有以下好处:

  • 使用事件网格订阅筛选器,可以将 IncomingCall 通知路由到特定的应用程序。
  • PSTN 号码分配和路由逻辑可以存在于你的应用程序中,而不是通过在线静态配置。
  • 如通话 方案 部分中所述,即使用户彼此之间发出呼叫,应用程序也可以收到通知。 然后,可以将此方案与通话记录 API 组合在一起,以满足合规性需求。

有关事件的示例有效负载以及有关发布到事件网格的其他调用事件的详细信息,请参阅本指南

下面是事件网格 Webhook 订阅的示例,其中事件类型筛选器仅侦听事件 IncomingCall

Image showing IncomingCall subscription.

呼叫自动化和事件网格的呼叫路由选项

在呼叫自动化和事件网格中,呼叫路由可以根据特定需求进行定制。 通过使用事件网格订阅中的高级筛选器,可以订阅IncomingCall与特定源/目标电话号码或Azure 通信服务标识相关的通知。 然后,可以将此通知定向到终结点,例如 Webhook 订阅。 然后,使用呼叫自动化 SDK,终结点应用程序可以决定将呼叫重定向到另一个Azure 通信服务标识或 PSTN。

注意

若要确保应用程序仅接收必要的事件,建议在事件网格中配置筛选。 这在生成IncomingCall事件的情况下尤其重要,例如将入站 PSTN 呼叫重定向到Azure 通信服务终结点。 如果未使用筛选器,则事件网格订阅会收到两IncomingCall个事件-一个用于 PSTN 呼叫,一个用于Azure 通信服务用户-即使你只接收第一个通知。 忽略在应用程序中使用筛选器或其他机制处理此类方案可能会导致无限循环和其他不良行为。

下面是事件网格订阅上的高级筛选器示例,该筛选器以 data.to.PhoneNumber.Value PSTN 电话号码“+18005551212”开头的字符串。

Image showing Event Grid advanced filter.

编号分配

在Azure 通信服务中使用IncomingCall通知时,可以自由地将任何特定号码与任何终结点相关联。 例如,如果获取了 PSTN 电话号码 +14255551212 ,并且希望将其分配给应用程序中具有标识的用户 375f0e2f-e8db-4449-9bf7-2054b02e42b4 ,则应维护该号码与标识的映射。 发送与IncomingCall字段中电话号码匹配的通知时,可以调用 Redirect API 并提供用户的标识。 换句话说,可以在应用程序中管理号码分配,并在运行时路由或接听呼叫。

最佳方案

  1. 为了确保事件网格将事件传送到 Webhook 终结点,并防止恶意用户将终结点充斥事件,需要证明终结点的所有权。 若要解决接收事件的任何问题,请确认配置的 Webhook 已通过处理 SubscriptionValidationEvent进行验证。 有关详细信息,请参阅本指南

  2. 收到传入调用事件时,如果应用程序在所需时间范围内无法响应事件网格的 200Ok 状态代码,则事件网格会利用指数退避重试再次发送事件。 但是,传入呼叫仅响铃 30 秒,并在该时间后响应呼叫将无效。 若要防止重试过期或过时的调用,建议将重试策略设置为“最大事件传送尝试 2”,将事件生存时间设置为 1 分钟。 可以在事件订阅的“其他功能”选项卡下找到这些设置。 在此处了解有关重试的详细信息。

  3. 建议为事件网格资源启用日志记录,以监视无法传递的事件。 为此,请导航到通信资源的“事件”选项卡下的系统主题,并从诊断设置启用日志记录。 故障日志可以在“AegDeliveryFailureLogs”表中找到。

    AegDeliveryFailureLogs
    | limit 10 
    | where Message has "incomingCall"
    

后续步骤