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

Microsoft Teams 会议音频会议

本文介绍如何使用 Azure 通信服务通话 SDK 来检索 Microsoft Teams 会议音频会议详细信息。 借助此功能,已连接到 Microsoft Teams 会议的用户将能够获取会议 ID 并拨入与会议关联的电话号码。 Teams 会议音频会议功能可返回所有收费和免费号码的集合。 该集合包括相邻的国家/地区名称和市/县名称,以支持用户控制要使用的 Teams 会议拨入详细信息。

先决条件

支持

本部分介绍对 Azure 通信服务中音频会议的支持。

标识和通话类型

下表显示了支持的通话类型和身份类型。

标识 Teams 会议 房间 1 对 1 通话 组呼叫 1:1 Teams 互操作通话 小组 Teams 互操作通话
通信服务用户 ✔️
Microsoft 365 用户 ✔️

Operations

下表显示了各身份类型对通话 SDK 中各 API 的支持情况。

Operations 通信服务用户 Microsoft 365 用户
获取音频会议的详细信息 ✔️ ✔️

SDK

下表显示了各个 Azure 通信服务 SDK 中对音频会议功能的支持情况。

平台 Web Web UI iOS iOS UI Android Android UI Windows
支持 ✔️

安装 SDK

使用 npm install 命令安装适用于 JavaScript 的 Azure 通信服务通用 SDK 和通话 SDK:

npm install @azure/communication-common --save
npm install @azure/communication-calling --save

初始化所需的对象

大多数通话操作需要 CallClient 实例。 创建新的 CallClient 实例时,可以使用自定义选项(如 Logger 实例)对其进行配置。

有了 CallClient 实例后,可以通过调用 createCallAgent 创建 CallAgent 实例。 此方法将异步返回 CallAgent 实例对象。

createCallAgent 方法使用 CommunicationTokenCredential 作为参数。 它接受用户访问令牌

可在 CallClient 实例上使用 getDeviceManager 方法来访问 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()

如何最好地管理 SDK 与 Microsoft 基础结构的连接性

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 错误。

可以通过检查 connectionState 属性的当前值来检查本地 Call Agent 是否已连接到 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);

Microsoft Teams 会议音频会议是核心 Call API 的扩展功能。 首先,需要从通话 SDK 导入通话功能:

import { Features} from "@azure/communication-calling";

然后,可从通话实例获取功能 API 对象:

const audioConferencingFeature = call.feature(Features.TeamsMeetingAudioConferencing);

获取会议的音频会议详细信息

使用以下 API 获取会议的音频会议详细信息

try {
     const details: SDK.TeamsMeetingAudioConferencingDetails = audioConferencingFeature.getTeamsMeetingAudioConferencingDetails();
     console.log(`Microsoft Teams Meeting Conference Id: ${details.phoneConferenceId}`);
     details.phoneNumbers.forEach(dialInPhoneNumber => {
        if (dialInPhoneNumber.tollPhoneNumber) { 
            console.log(`Dial-In Toll PhoneNumber: ${dialInPhoneNumber.tollPhoneNumber.phoneNumber}`);
        }
        else if (dialInPhoneNumber.tollFreePhoneNumber) { 
            console.log(`Dial-In TollFree PhoneNumber: ${dialInPhoneNumber.tollFreePhoneNumber.phoneNumber}`);
        } 
        else if (dialInPhoneNumber.countryName) {
            console.log(`Dial-In Country Name: ${dialInPhoneNumber.countryName}`);
        }
        else if (dialInPhoneNumber.cityName) {
            console.log(`Dial-In City Name: ${dialInPhoneNumber.cityName}`);
        }
    })
} catch (e) {
    console.error(e);
}

故障排除

代码 子代码 结果类别 Reason 解决方法
400 45950 ExpectedError 音频会议功能只能在 Teams 会议中使用 通过配置好的音频会议加入 Teams 会议
405 45951 ExpectedError ACS 服务禁用了音频会议 创建 Azure 支持工单以请求帮助
403 45952 ExpectedError 加入会议之前无法查看音频会议的详细信息 在调用 API 检索音频会议详细信息之前,请确保呼叫对象处于 connected 状态
403 45953 ExpectedError 无法在大厅中查看音频会议详细信息 在调用 API 检索音频会议详细信息之前,请确保呼叫对象处于 connected 状态

后续步骤