You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何借助Bot Framework与Graph API录制Teams会议音频?

解决Teams机器人自动启动会议录制的方案

核心结论

机器人无需依赖.NET专属的音视频SDK,直接通过Microsoft Graph REST API就能触发Teams会议录制,Node.js环境完全支持。以下是具体实现步骤:


1. 配置Azure AD应用权限

机器人需要具备启动录制的应用权限,在Azure AD应用注册中添加以下权限(选择应用权限,并完成管理员同意):

  • OnlineMeetingRecording.ReadWrite:允许启动/停止录制并访问录制文件
  • 或更宽泛的OnlineMeeting.ReadWrite.All:包含会议管理的全部权限

2. 获取会议ID

机器人加入会议后,可从Teams事件中提取Graph认可的会议ID:

  • 在meetingStart或conversationUpdate事件中,通过turnContext.activity.meeting.id直接获取(该ID就是Graph API所需的onlineMeetingId)

3. Node.js调用Graph API启动录制

使用官方Graph客户端库和MSAL令牌工具实现,步骤如下:

安装依赖

npm install @microsoft/microsoft-graph-client @azure/msal-node

实现启动录制的代码

const { Client } = require('@microsoft/microsoft-graph-client');
const { ClientCredentialProvider } = require('@microsoft/microsoft-graph-client/authProviders/azureTokenCredentials');
const { ConfidentialClientApplication } = require('@azure/msal-node');

// 替换为你的Azure AD应用信息
const azureADConfig = {
  auth: {
    clientId: '你的应用ID',
    authority: 'https://login.microsoftonline.com/你的租户ID',
    clientSecret: '你的应用密钥'
  }
};

// 初始化MSAL客户端和Graph认证提供者
const confidentialClient = new ConfidentialClientApplication(azureADConfig);
const authProvider = new ClientCredentialProvider(confidentialClient, {
  scopes: ['https://graph.microsoft.com/.default']
});

const graphClient = Client.initWithMiddleware({ authProvider });

// 启动录制的异步函数
async function triggerMeetingRecording(meetingId) {
  try {
    await graphClient
      .api(`/communications/onlineMeetings/${meetingId}/startRecording`)
      .post();
    console.log('会议录制已成功启动');
  } catch (err) {
    console.error('启动录制失败:', err.responseBody || err.message);
  }
}

// 在机器人的会议事件处理中调用
// 示例:处理meetingStart事件
async function handleMeetingStart(context) {
  const meetingId = context.activity.meeting.id;
  await triggerMeetingRecording(meetingId);
}

关键注意事项

  • 录制只能在会议已启动后触发,建议在meetingStart事件回调中调用接口,避免提前触发导致失败
  • 若需要停止录制,可调用Graph API的POST /communications/onlineMeetings/{meetingId}/stopRecording接口,逻辑与启动一致
  • 录制完成后,可通过GET /communications/onlineMeetings/{meetingId}/recordings接口获取录制文件的详情和下载链接

内容的提问来源于stack exchange,提问作者maxwtd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 23:35:19