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

MS Teams长期未交互用户主动通知失败:会话ID失效问题问询

关于MS Teams机器人主动通知会话ID失效的问题

我们使用Microsoft Bot Framework SDK v4构建了一款机器人,实现了通过MS Teams向用户发送主动通知(Proactive notifications)的功能。按照微软建议,我们将用户的会话ID(conversation ID)存储在数据库中,触发通知时取出该ID执行发送操作。

一切运行正常,但部分长期(6-10个月)未与机器人聊天的用户无法接收通知。排查发现这类用户的Teams聊天记录已消失,让用户重新发消息给机器人后,以下代码会生成新的会话引用(Conversation Reference)对象存入数据库,此时就能正常发送通知:

protected override async Task OnMembersAddedAsync(IList<ChannelAccount> membersAdded, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken)
{
    foreach (var member in membersAdded)
    {
        if (member.Id != turnContext.Activity.Recipient.Id && !(turnContext.Activity.ChannelId == "directline"))
        {
            var userProfile = await _userStateAccessors.GetAsync(turnContext, () => new UserProfile());
            var reply = await GenerateWelcomeMessage(turnContext);
            await turnContext.SendActivityAsync(reply);

            if (turnContext.Activity.ChannelId == "msteams")
            {
                //-- if the user email is not identified or its value is null, call AAD to set the email in the user profile
                if (string.IsNullOrEmpty(userProfile.Email))
                {
                    bool isAuthorized = await authorization.Authorize(turnContext?.Activity?.From?.AadObjectId, turnContext, null);
                }
                Task.Run(() => _pushNotification.AddConversationReferenceToDB(turnContext.Activity as Activity, userProfile.Email));
            }                   
        }
    }
}

咨询问题

  1. 为何用户长期未与机器人交互时,会话ID会失效?
  2. 会话ID失效的具体时长(天/小时)是多少?
  3. 是否有方法可以预防会话ID失效?

问题解答

1. 会话ID失效原因

Teams会自动清理长期处于非活跃状态的一对一聊天会话。当用户超过一定时间不与机器人交互,对应的会话会被标记为废弃,关联的会话ID也随之失效,此时用旧ID发起主动通知自然无法送达。

2. 会话失效时长

微软官方并未公布固定的失效时长,但从实际案例来看,非活跃会话通常会在6-12个月左右被清理,这和你遇到的6-10个月的情况吻合。这个时长可能会根据Teams的后台策略微调,没有绝对固定的数值。

3. 预防会话ID失效的方法

  • 定期发起轻量交互:每隔几个月给用户发送一条非打扰式的消息(如“需要帮助随时找我”),维持会话的活跃状态,避免被系统自动清理。
  • 存储用户AAD对象ID替代会话ID:当需要发送通知时,通过用户的AAD对象ID调用Teams API重新创建会话。这种方式不依赖旧会话ID,只要用户在租户内存在,就能发起新的会话通知。
  • 处理通知失败场景:在主动通知发送失败时,标记对应的用户记录,后续可以通过Teams标签、企业邮件等渠道提示用户重新给机器人发消息,生成新的会话ID后更新数据库记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 21:37:38