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

Azure 通信服务体系结构设计

Azure 通信服务
Microsoft Entra ID
Azure Functions

本指南提供了 Azure 通信服务的数据流关系图。 使用这些关系图来了解客户端和服务如何与 Azure 交互,以保证通信体验。

Azure 通信服务是具有 REST API 和客户端库 SDK 的云服务,可将通信集成到应用程序中。 Azure 通信服务支持多种通信格式:语音和视频通话、文本聊天、短信和自定义二进制数据。

可以向 Web 和移动应用添加通信、集成自定义服务和机器人,并通过编程方式访问公共交换电话网络 (PSTN)。 可以直接通过 Azure 通信服务 API 或 Microsoft Azure 门户获取电话号码,并将这些号码用于短信或语音呼叫应用程序。 使用 Azure 通信服务直接路由,可以通过会话启动协议 (SIP) 和会话边界控制器自带电话提供商。

以下组件用于这些数据流关系图:

  • 客户端应用程序。 供最终用户通信的网站或本机应用程序。 Azure 通信服务为多个浏览器和本机应用程序提供 SDK 客户端库。 基于这些 SDK 构建的开源 UI 库提供可编程 Web (React)、iOS 和 Android UI 组件。
  • 标识管理服务。 用于将用户和服务映射到 Azure 通信服务标识的服务。 当用户需要访问数据平面时,此服务还会为用户创建令牌。
  • 通信控制器服务。 用于控制聊天线程、语音和视频呼叫的服务。
  • 通信数据服务。 构建的服务功能可直接与通信内容交互,例如发送聊天和短信或在语音呼叫中播放音频。

通信的行业标准,如 WebRTC,将通信分开到控件和信号平面数据平面中。 通过使用 Azure 通信服务,无需了解服务的 WebRTC 内部实现,即可构建通信体验。 但是,这些概念可以帮助设计应用:

系统 功能 协议 访问模型
控制面板 治理通信对象、时间和方式 REST Microsoft Entra 服务凭据
数据平面 包含与人类和应用交互的通信内容、语音、视频、文本和数据 UDP、RTMP、WebSockets、REST 用户访问令牌 和 Microsoft Entra 服务凭据

当客户端应用程序通过从服务控制器请求控制信息来启动通信时,会发生常见的数据流:

  • 我今天要参加哪些会议?
  • 我给朋友约瑟夫打电话用哪个电话号码?
  • 我的队友叫什么名字? 我们拥有哪些正在进行的聊天线程?

控制服务通过向客户端提供 Azure 通信服务令牌、用户标识符、线程、电话号码和呼叫。 然后,客户端使用这些令牌和标识符与 Azure 数据平面交互。 Azure 通信服务 API 不会限制最终用户体验的设计或控制通信的进程。

在 WebRTC 标准中,客户端通过在称为信号的进程中发送控制消息,从服务请求控制信息。 Azure 通信服务标识符(如呼叫 ID)与 WebRTC 会话说明相当。

通过用户访问令牌进行身份验证的用户

Azure 通信服务客户端提供用户访问令牌,以便更安全地访问 Azure 通话和聊天数据屏幕。 应使用受信任的服务生成和管理用户访问令牌。 需要保护令牌和连接字符串或生成他们所需的 Microsoft Entra 机密。 如果无法适当管理访问令牌,则可能会因滥用资源而导致额外的费用。

用户访问令牌体系结构图。

下载此体系结构的 Visio 文件

数据流

  1. 用户启动客户端应用程序。
  2. 客户端应用程序与标识管理服务联系。 标识管理服务维护应用程序标识与 Azure 通信服务标识之间的映射。 (应用程序标识包括用户和其他可寻址对象,如服务或 bot。)
  3. 标识管理服务使用映射为适用的标识颁发用户访问令牌

Azure 应用服务或 Azure Functions 是运行标识管理服务的两种替代方法。 这些服务可以轻松缩放,并具有内置功能来对用户进行身份验证。 它们与 OpenID 和第三方标识提供者(如 Facebook)集成。

资源

用户调用应用或拨打电话号码

最简单的音视频呼叫场景是用户在没有推送通知的情况下在前台呼叫另一用户。 可以将 Azure 通信服务音视频通话集成到 Web、本机移动和 Windows 桌面应用中。 开源 UI 库可帮助加速开发。

无推送通知的 Azure 通信服务通话的关系图。

下载此体系结构的 Visio 文件

数据流

  1. 发起用户获取他们要呼叫的人员的 Azure 通信服务标识。 在典型方案中,用户从标识管理服务维护的朋友列表中获取标识。 该列表整理用户的朋友和关联的 Azure 通信服务标识。
  2. 发起用户启动“呼叫”客户端,呼叫远程用户。
  3. 通过呼叫 SDK 通知接受用户有来电。 若要接收传入呼叫,接受程序必须已初始化“呼叫”客户端。
  4. 用户之间通过语音和视频进行通话。

当用户拨打外部电话号码时,数据流几乎完全相同。 主要区别在于,若要访问传统电话,发起用户客户端必须从控制器服务请求源和目标电话号码,而不是请求用户标识。

在某些情况下,可能希望应用使用 Apple 推送通知等平台服务来接受后台呼叫。 可以通过将 Azure 通信服务与 Azure 通知中心集成来启用此功能。

资源

用户无邀请加入组呼叫

可能希望用户无明显邀请即可加入组呼叫。 应用可能会提供持久的社交空间俱乐部,其中包括一个视频通话频道,用户可以在他们想要时加入。 此数据流显示最初由客户端创建的呼叫,并允许远程客户端在没有明显邀请的情况下加入:

无邀请的通话的关系图。

下载此体系结构的 Visio 文件

数据流

  1. 发起用户初始化其通话客户端并创建群呼。
  2. 发起用户共享群呼 ID 和通信控制器业务。
  3. 通信控制器服务与其他用户共享呼叫 ID。 例如,如果应用程序提供用户俱乐部,则群呼 ID 是存储在 Azure Cosmos DB 中的俱乐部数据模型的属性。
  4. 其他用户使用群呼 ID 加入通话。
  5. 用户之间通过音视频进行通话。

Microsoft 365 和 Teams

许多组织使用 Microsoft 365 和 Teams 进行通信。 Azure 通信服务和 Teams 可互操作,可实现以下方案:

  • 生成自定义应用程序以允许外部用户加入 Teams 会议。 此方案非常适合虚拟访问方案,其中使用 Teams 的企业为使用自定义应用和自定义标识的外部使用者主持会议。 若要了解有关此方案的详细信息,请参阅虚拟访问教程和示例生成器
  • 使用 Teams/Microsoft Entra 凭据为内部用户生成自定义应用程序。 此方案旨在为员工生成自定义 Teams 客户端。

这些自定义应用程序方案使用 Microsoft Graph API 和 Azure 通信服务。 生成连接到 Teams 的外部应用和服务时,通常使用 Microsoft Graph 作为 Teams 控制平面。 使用此控制平面配置通信对象、通信方式以及何时使用 API 进行通信:

可以使用这些控件 API 中的信息(例如会议 URL 和线程标识符)将 Azure 通信服务呼叫和聊天客户端连接到 Teams 数据平面。

Teams 还提供 SDK,用于在 Teams 体验以及通过 Teams 应用商店(如选项卡、机器人和自动化)添加自定义功能。 这些方案超出了本文的范围。

Azure 通信服务不支持与 Teams 通道直接交互。 对于自定义应用程序,可以使用 Microsoft Graph 聊天频道 API 为访问频道的员工生成自定义客户端。

应用程序加入计划的 Teams 通话

Azure 通信服务应用程序可以加入 Teams 通话。 对于外部用户,应用程序需要指向 Teams 会议的链接。 链接检索通过 Microsoft Graph API 进行管理。 数据流如下所示:

显示加入 Teams 会议的通信服务体系结构的关系图。

下载此体系结构的 Visio 文件

数据流

  1. (1A) 通信控制器服务使用 Microsoft Graph API 安排群呼。 在另一个用例中,(1B),用户使用 Outlook 或 Teams 安排群呼。
  2. 通信控制器服务与 Azure 通信服务客户端共享 Teams 通话的详细信息。
  3. 通常情况下,Teams 用户必须通过 Teams UI 加入通话,并允许外部用户通过 Teams 通话前大厅。 但是,此要求取决于 Teams 租户的配置和特定的会议设置。
  4. Azure 通信服务用户使用步骤 2 中收到的详细信息初始化其通话客户端并加入 Teams 会议。
  5. 用户之间通过音视频进行通话。

资源

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者:

其他参与者:

要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。

后续步骤