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

使用Microsoft Bot Connector发送消息后如何获取Activity.Id

嘿,我之前在开发Teams机器人的时候也碰到过这个问题,刚好能给你解答~

首先得弄明白为什么会出现Id格式不一致的情况:你用的普通ConnectorClient返回的是Bot Framework服务生成的内部消息Id,而Teams平台会为每条发送成功的消息分配一个自己格式的Activity.Id——这俩本来就是不同的标识,所以格式自然对不上。

不过别担心,完全可以拿到和接收消息时一致的那个正确Activity.Id,给你两个可行的方案:

方案1:换成Teams专用的ConnectorClient

首先安装Microsoft.Bot.Connector.Teams NuGet包,然后把你的普通ConnectorClient替换成TeamsConnectorClient,它是专门针对Teams渠道做了适配的,发送消息后返回的ResourceResponse.Id就是Teams平台的真实消息Id,格式和你接收消息时拿到的完全一致:

// 初始化Teams专用的ConnectorClient
var teamsConnector = new TeamsConnectorClient(
    new Uri(activity.ServiceUrl),
    new MicrosoftAppCredentials("<你的机器人AppId>", "<你的机器人App密码>")
);

// 发送消息并获取正确的Teams Activity.Id
var response = teamsConnector.Conversations.SendToConversation((Activity)activity);
var correctActivityId = response.Id;

方案2:通过活动日志捕获真实Id

如果你不想替换现有的ConnectorClient,可以通过注册IActivityLogger来监听发送完成的活动——当Bot Framework把消息成功发送到Teams后,会收到Teams返回的真实Id,此时日志器里拿到的活动对象就已经带上了这个正确的Id:

  1. 先实现IActivityLogger接口:
public class TeamsMessageLogger : IActivityLogger
{
    public async Task LogAsync(IActivity activity)
    {
        // 只关注发送出去的消息活动
        if (activity.Type == ActivityTypes.Message && !string.IsNullOrEmpty(activity.Id))
        {
            // 这里的activity.Id就是Teams平台的真实消息Id
            Console.WriteLine($"已发送消息的Teams Activity.Id: {activity.Id}");
            // 你可以在这里把Id存到数据库或者用于后续逻辑
        }
    }
}
  1. 在Bot初始化时注册这个日志器:
var containerBuilder = new ContainerBuilder();
// 注册自定义的日志器
containerBuilder.RegisterType<TeamsMessageLogger>()
               .As<IActivityLogger>()
               .InstancePerDependency();
// 更新Bot的依赖注入容器
containerBuilder.Update(Conversation.Container);

这样每次发送消息后,日志器都会自动捕获到正确的Activity.Id,完全符合你的需求。

补充小知识

Teams的Activity.Id格式一般是标准的UUID(比如169876543210-1234-5678-90ab-cdef01234567),而Bot Framework的内部Id通常是更短的字符串,这也是你一眼就能看出差异的原因~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:00:03