是否有扩展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
相关产品推荐
相关产品推荐

