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

Teams可配置标签固定App ID及动态取值生成Deeplink问题

问题解答

一、如何保证App ID固定

你遇到的App ID变化问题,是因为未提前注册固定的应用标识,使用了Teams侧加载时自动生成的临时ID,按以下步骤操作即可固定:

  • 先到Azure Active Directory中注册多租户类型的应用,注册完成后会拿到固定的应用程序(客户端) ID,这个就是后续要使用的固定App ID
  • 打开Teams项目中的manifest.json文件,将根节点下的id字段值替换为上述拿到的固定App ID
  • 重新打包应用,后续不管将这个应用包上传到哪个租户安装,对应的App ID都会保持固定

注意:如果你的应用只需要在单个租户内使用,注册Azure AD应用时选择单租户类型即可。

二、如何在标签内部动态获取App ID和Tab ID

你调用的microsoftTeams.getContext接口返回的上下文对象本身就包含需要的两个参数,不需要硬编码:

  • 动态获取App ID:直接读取context.appId(v1版本SDK)或context.app.appId(v2版本SDK)即可
  • 动态获取Tab ID:直接读取context.entityId即可,这个值就是当前标签的唯一标识

三、修改后的代码示例

microsoftTeams.getContext((context) => {
      const teamId = context.groupId;
      const tenantid = context.tid;
      const channelId = context.channelId;
      // 动态获取App ID,不需要硬编码
      const appId = context.appId || context.app?.appId;
      // 动态获取Tab ID
      const tabId = context.entityId;

      const entityId =
     "_djb2_msteams_prefix_" +
     Util.djb2_hash(appId + ":" + tabId.replace(/\+/g, " "));
     
      let ctx ;

     if (context.subEntityId ||  context.channelId) {
       ctx = encodeURIComponent(JSON.stringify({
         subEntityId: context.subEntityId,
         channelId: context.channelId
       }));
     };

     // 直接用动态拿到的App ID拼链接
     linkUrl=`https://teams.microsoft.com/l/entity/${appId}/${entityId}/&context=${ctx}&groupId=${context.groupId}&tenantId=${context.tid}`;
});

更推荐直接使用Teams JS SDK内置的microsoftTeams.generateDeepLink()接口生成链接,不需要手动拼接参数,兼容性更高。

参考示意图

示意图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:36:04