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

是否有扩展May2022 Teams JS SDK的示例支持HTTP机器人调用MS Graph API

May 2022版本Microsoft Teams JavaScript SDK扩展调用MS Graph实现HTTP触发写入Teams选项卡电子表格方案

May 2022发布的Teams JS SDK(即v2.0初始正式分支)本身没有封装服务端MS Graph调用能力,你可以按以下分层逻辑实现需求,所有代码均适配该版本SDK的接口规范:

前置准备

  • 在Azure AD完成应用注册,为应用分配Files.ReadWrite.All应用级权限,完成管理员同意,用于服务端调用MS Graph时的鉴权
  • 给你的外部HTTP端点配置客户端凭证流获取Graph令牌的逻辑,不要在前端选项卡代码里暴露应用密钥、Graph令牌
  • 注意该版本SDK废弃了旧版的全局getContext接口,所有上下文获取必须走app命名空间下的方法

选项卡侧代码(基于May 2022版Teams JS SDK)

选项卡初始化时拿到当前绑定的电子表格资源标识,上报到你的外部服务存储,供后续写入接口定位文件:

// 引入对应2022年5月发布的2.0.0版本SDK
import * as microsoftTeams from "@microsoft/teams-js@2.0.0";

// 初始化SDK
await microsoftTeams.app.initialize();
// 获取当前Teams上下文
const context = await microsoftTeams.app.getContext();
// 提取当前选项卡关联的团队、频道、绑定文件信息
const tabConfig = {
  teamGroupId: context.team.groupId,
  channelId: context.channel.id,
  tabId: context.tab.id,
  // 你在配置选项卡关联Excel时存入entityId的文件信息,包含driveId、itemId
  excelFileInfo: JSON.parse(context.tab.entityId)
};
// 将配置信息上报到你的外部HTTP服务端存储
await fetch("/api/teams/tab/config/save", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify(tabConfig)
});

外部HTTP端点侧写入逻辑

你的HTTP触发入口不需要依赖Teams JS SDK,拿到触发参数后直接调用MS Graph接口写入数值即可:

// 服务端写入逻辑示例(Node.js环境)
const axios = require('axios');

async function writeExcelValue(req, res) {
  try {
    // 1. 获取MS Graph访问令牌
    const tokenResp = await axios.post(
      `https://login.microsoftonline.com/${process.env.TENANT_ID}/oauth2/v2.0/token`,
      new URLSearchParams({
        client_id: process.env.AAD_CLIENT_ID,
        client_secret: process.env.AAD_CLIENT_SECRET,
        scope: "https://graph.microsoft.com/.default",
        grant_type: "client_credentials"
      })
    );
    const accessToken = tokenResp.data.access_token;

    // 2. 从请求参数中拿到目标文件位置、写入位置、写入值
    const { driveId, itemId, worksheetName, cellAddress, writeValue } = req.body;
    
    // 3. 调用Graph接口写入单元格
    await axios.patch(
      `https://graph.microsoft.com/v1.0/drives/${driveId}/items/${itemId}/workbook/worksheets/${worksheetName}/range(address='${cellAddress}')`,
      { values: [[writeValue]] },
      { headers: { Authorization: `Bearer ${accessToken}` } }
    );

    res.status(200).json({ success: true });
  } catch (err) {
    res.status(500).json({ success: false, error: err.message });
  }
}

常见踩坑点

  • 不要尝试在前端选项卡侧直接调用MS Graph写入文件,前端令牌权限不足且容易出现跨域、鉴权失效问题,所有写入逻辑必须收敛到你自己部署的外部HTTP服务端
  • 如果电子表格是上传到Teams频道文件选项卡的,文件实际存储在对应团队关联的SharePoint站点文档库中,拿到driveId和itemId即可直接调用Graph接口,不需要额外做文件共享授权
  • May 2022版本SDK的app.initialize方法默认会做源校验,本地调试时需要在Teams管理中心的选项卡配置里把本地调试域名加入合法域名列表,否则初始化会失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:51:25