你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍如何实现 Azure 通信服务通话 SDK 的反应。 此功能使群组通话或会议的参与者能够针对 Azure 通信服务和 Microsoft Teams 中的参与者发送和接收反应。
Microsoft Teams 中的配置和策略设置控制 Teams 会议中用户的反应。 有关详细信息,请参阅管理 Teams 会议和网络研讨会中的反应以及 Microsoft Teams 中的会议选项。
先决条件
- 具有活动订阅的 Azure 帐户。 免费创建帐户。
- 已部署的通信服务资源。 创建通信服务资源。
- 用于启用通话客户端的用户访问令牌。 有关详细信息,请参阅创建和管理访问令牌。
- 可选:完成向应用程序添加语音呼叫的快速入门。
反应限制
系统会定期分批拉取反应。 当前批次限制为每 3 秒拉取 20,000 个反应。
如果反应数量超出限制,剩余的反应将在下一批次中发送。
支持
下表定义了对 Azure 通信服务中的反应功能的支持。
Teams 会议支持基于 Teams 策略。
标识和通话类型
下表显示了对不同通话和标识类型的反应支持。
| 标识 | Teams 互操作会议 | 会议室 | 1 对 1 通话 | 组呼叫 | Teams 互操作群组通话 |
|---|---|---|---|---|---|
| 通信服务用户 | ✔️ | ✔️ | ✔️ | ✔️ | |
| Microsoft 365 用户 | ✔️ | ✔️ | ✔️ |
操作
下表显示了 Calling SDK 对不同身份类型的反应支持。
| 操作 | 通信服务用户 | Microsoft 365 用户 |
|---|---|---|
| 发送具体反应(例如喜爱、大笑、掌声、惊讶) | ✔️ | ✔️ |
| 接收具体反应(例如喜爱、大笑、掌声、惊讶) | ✔️ | ✔️ |
SDK
下表显示了单个 Azure 通信服务 SDK 的“共同模式”功能支持。
| 平台 | Web | 网页用户界面 | iOS | iOS 用户界面 | Android | 安卓用户界面 | Windows操作系统 |
|---|---|---|---|---|---|---|---|
| 是否支持 | ✔️ | ✔️ |
安装 SDK
使用 npm install 命令安装适用于 JavaScript 的 Azure 通信服务通用 SDK 和通话 SDK:
npm install @azure/communication-common --save
npm install @azure/communication-calling --save
初始化所需的对象
大多数通话操作需要 CallClient 实例。 创建新的 CallClient 实例时,可以使用自定义选项(如 Logger 实例)对其进行配置。
有了 CallClient 实例后,可以通过调用 CallAgent 创建 createCallAgent 实例。 此方法将异步返回 CallAgent 实例对象。
createCallAgent 方法使用 CommunicationTokenCredential 作为参数。 它接受用户访问令牌。
可在 getDeviceManager 实例上使用 CallClient 方法来访问 deviceManager。
const { CallClient } = require('@azure/communication-calling');
const { AzureCommunicationTokenCredential} = require('@azure/communication-common');
const { AzureLogger, setLogLevel } = require("@azure/logger");
// Set the logger's log level
setLogLevel('verbose');
// Redirect log output to console, file, buffer, REST API, or whatever location you want
AzureLogger.log = (...args) => {
console.log(...args); // Redirect log output to console
};
const userToken = '<USER_TOKEN>';
callClient = new CallClient(options);
const tokenCredential = new AzureCommunicationTokenCredential(userToken);
const callAgent = await callClient.createCallAgent(tokenCredential, {displayName: 'optional Azure Communication Services user name'});
const deviceManager = await callClient.getDeviceManager()
管理与Microsoft基础结构的 SDK 连接
Call Agent 实例可帮助你管理通话(以加入或启动通话)。 通话 SDK 需要连接到 Microsoft 基础结构以获取传入通话通知并协调其他通话详细信息,否则无法工作。 你的 Call Agent 有两种可能的状态:
已连接 - Call Agent connectionStatue 值为 Connected 表示客户端 SDK 已连接,能够接收来自 Microsoft 基础结构的通知。
已断开连接 - Call Agent connectionStatue 值为 Disconnected 表示存在阻止 SDK 正确连接的问题。
应重新创建 Call Agent。
-
invalidToken:如果令牌已过期或无效,Call Agent实例会断开连接并出现此错误。 -
connectionIssue:如果客户端在连接到 Microsoft 基础结构时出现问题,则在多次重试后,Call Agent会显示connectionIssue错误。
可以通过检查 Call Agent 属性的当前值来检查本地 connectionState 是否已连接到 Microsoft 基础结构。 在通话过程中,可以侦听 connectionStateChanged 事件,以确定 Call Agent 是否从“已连接”状态更改为“已断开连接”状态。
const connectionState = callAgentInstance.connectionState;
console.log(connectionState); // it may return either of 'Connected' | 'Disconnected'
const connectionStateCallback = (args) => {
console.log(args); // it will return an object with oldState and newState, each of having a value of either of 'Connected' | 'Disconnected'
// it will also return reason, either of 'invalidToken' | 'connectionIssue'
}
callAgentInstance.on('connectionStateChanged', connectionStateCallback);
实现会议参与者的反应
在 Azure 通信服务中,参与者可以在群组通话期间发送和接收反应:
- 赞
- 爱
- 鼓掌
- 大笑
- 惊讶
若要发送反应,请使用 sendReaction(reactionMessage)。 为了收到反应,消息将使用类型 ReactionMessage 进行生成,并使用 Reaction 枚举作为属性。
你需要订阅提供订阅者事件数据的事件:
export interface ReactionEventPayload {
/**
* identifier for a participant
*/
identifier: CommunicationUserIdentifier | MicrosoftTeamsUserIdentifier;
/**
* reaction type received
*/
reactionMessage: ReactionMessage;
}
可以使用 identifier 属性确定哪个反应来自哪个参与者,并从 ReactionMessage 获取反应类型。
演示如何在会议中发送反应的示例
const reaction = call.feature(SDK.Features.Reaction);
const reactionMessage: SDK.ReactionMessage = {
reactionType: 'like'
};
await reaction.sendReaction(reactionMessage);
演示如何在会议中接收反应的示例
const reaction = call.feature(SDK.Features.Reaction);
reaction.on('reaction', event => {
// user identifier
console.log("User Mri - " + event.identifier);
// received reaction
console.log("User Mri - " + event.reactionMessage.reactionType);
// reaction message
console.log("reaction message - " + JSON.stringify(event.reactionMessage));
}
使用反应时的要点
- Microsoft Teams 互操作性方案支持反应。 支持基于 Teams 策略。
- Web 通话 SDK 支持反应。
- 本机 SDK 目前不支持反应。