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

基于.NET Core 3.1的Bot发布生产后第二条SendActivityAsync消息未收到

排查及解决方法

排查步骤

  • 优先调取Bot的运行日志,重点查看第二次SendActivityAsync调用的执行状态:检查是否抛出未捕获异常、返回非200的HTTP状态码,若返回429状态码即可判定为触发限流。
  • 检查生产环境托管服务的请求日志,确认两次SendActivityAsync请求是否都成功发送到了Bot Framework服务端,有没有出现第二次请求未发出的情况。
  • 核对两次调用时的会话ID是否一致,排除会话上下文意外失效的问题。

常见问题及解决方案

场景1:触发生产环境消息限流

Bot Framework生产环境对单会话的消息发送频率有默认限制,本地模拟器没有该限制,因此会出现本地运行正常、生产环境第二条消息被拦截的情况。
解决方案:

  • 方案1:在两次发送调用之间增加100ms左右的延迟,错开发送时间:
await stepContext.Context.SendActivityAsync(replyText1).ConfigureAwait(false);
await Task.Delay(100).ConfigureAwait(false);
await stepContext.Context.SendActivityAsync(replyText2).ConfigureAwait(false);
  • 方案2(更推荐):使用批量发送接口一次性发送多条消息,框架会自动适配限流规则:
var activityList = new List<IActivity>
{
    MessageFactory.Text(replyText1),
    MessageFactory.Text(replyText2)
};
await stepContext.Context.SendActivitiesAsync(activityList.ToArray()).ConfigureAwait(false);

场景2:对话状态存储异常

如果生产环境使用分布式状态存储(如Redis、Azure存储),第一次消息发送后出现状态持久化失败,会导致第二次调用时上下文失效,消息无法正确路由。
解决方案:

  • 检查状态存储的连接配置、访问权限是否正常,开启状态存储操作日志,排查是否有写入失败的报错。
  • 确认对话流转逻辑没有在两次发送之间意外重置会话ID、修改上下文参数。

场景3:对接通道特有限制

部分对接通道(如Teams、第三方网页端、企业微信等)本身有消息推送频率限制,会主动丢弃短时间内收到的第二条同会话消息。
解决方案:

  • 优先使用批量发送接口发送多条消息,若通道不支持批量发送,可适当延长两次发送之间的延迟时长到500ms左右。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:24:03