You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Microsoft Bot Node SDK在Microsoft Teams中提及用户的问题

解决Teams Node.js SDK提及用户无效的问题

看起来你踩了两个常见的坑——找错了要提及的用户对象,同时消息文本和提及实体的匹配没做好。咱们一步步来修正:

核心问题1:用错了要提及的用户对象

当你通过保存的对话引用恢复会话时,context.activity.from对应的是机器人自身,而不是你要@的目标用户!你需要从保存的conversation对象里获取用户信息——也就是原对话中的recipient字段(因为你存的对话引用里,recipient就是和机器人对话的用户)。

核心问题2:消息文本必须包含匹配的<at>标签

Teams要求消息文本里明确写出<at>用户名</at>,并且这段文本要和Mention实体的text字段完全一致,这样才能触发高亮和提醒效果。

修正后的完整代码

const message = "Konnichi wa";
const conversation = await .... // 从数据库恢复,确保conversation包含recipient字段
await adapter.continueConversation(conversation, async (context) => {
  // 从保存的对话引用中获取要提及的目标用户
  const targetUser = conversation.recipient;
  
  // 构造正确的Mention实体
  const mention = {
    type: "mention", // 注意这里是小写的"mention"
    mentioned: targetUser, // 传入包含id和name的正确用户对象
    text: `<at>${targetUser.name}</at>`, // 这段文本要和消息中的标签完全一致
  };

  // 消息文本必须包含对应的<at>标签
  const fullMessageText = `${mention.text} ${message}`;
  const topLevelMessage = MessageFactory.text(fullMessageText);
  
  topLevelMessage.entities = [mention];
  await context.sendActivity(topLevelMessage);
});

为什么之前的尝试无效?

  • 第一次尝试:你用context.activity.from作为提及对象,本质是@了机器人自己,自然不会显示用户提及效果;同时消息文本里没有包含<at>标签,Teams无法识别要高亮的内容。
  • 第二次尝试:错误地对用户名进行编码,导致<at>标签里的内容和实际用户名不匹配,而且同样没用到正确的用户对象。

额外注意事项

  • 确保保存到数据库的对话引用conversation里的recipient字段完整,必须包含用户的idname属性,缺少任何一个都会导致提及失效。
  • 如果用户名称包含特殊字符,不需要手动转义,SDK会自动处理成Teams能识别的格式。

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

火山引擎 最新活动