Bot Framework Composer消息发送后仍显示打字指示器问题求助
Bot Framework Composer打字指示器异常问题解决方案
方案1:原生运行时中间件改造(无部署兼容问题,优先推荐)
该方案修复你之前SDK方案未生效的问题,核心原因是你之前修改的Startup.cs已不适用于新版Composer导出的.NET运行时,且默认中间件优先级设置错误。
操作步骤
- 关闭appsettings.json中原有的
showTyping配置,设为false,避免默认中间件与自定义中间件冲突 - 新建
CustomShowTypingMiddleware.cs文件,代码如下:
using Microsoft.Bot.Builder; using Microsoft.Bot.Schema; using System.Threading; using System.Threading.Tasks; public class CustomShowTypingMiddleware : IMiddleware { public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken = default) { // 仅响应用户消息类活动时发送打字指示器 if (turnContext.Activity.Type == ActivityTypes.Message) { var typingActivity = Activity.CreateTypingActivity(); // 强制等待打字指示器发送完成,再执行后续业务逻辑,避免后显问题 await turnContext.SendActivityAsync(typingActivity, cancellationToken); } await next(cancellationToken); } }
- 修改
AdapterWithErrorHandler.cs,在构造函数最顶部添加自定义中间件,确保优先级最高:
// 其他引用保持不变 public AdapterWithErrorHandler(/* 原有构造函数参数保持不变 */) : base(/* 原有基类参数保持不变 */) { // 第一行就添加自定义打字中间件,放在所有其他中间件前面 Use(new CustomShowTypingMiddleware()); // 原有其他中间件、错误处理逻辑保持不变 }
- 修改
Program.cs,确保适配器注册逻辑使用你修改后的AdapterWithErrorHandler,不要用默认适配器:
// 找到服务注册的代码段,替换为以下逻辑 builder.Services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>();
- 重新发布即可,该方案不会引入额外权限问题,Azure部署后不需要额外配置。
方案2:自定义组件部署502/500错误修复
如果要继续使用自定义组件方案,本地正常但部署报错的核心原因是Azure配置与组件权限逻辑冲突,按以下步骤修复:
- 检查Azure机器人服务「配置」页的
MicrosoftAppId、MicrosoftAppPassword值,与你运行时的appsettings.json对应值完全一致,无多余空格或特殊字符 - 删除自定义组件中你自己添加的所有身份验证校验逻辑,组件的身份验证需完全继承Composer官方组件的基类实现,不要自行拦截请求校验Authorization头
- 在Azure应用服务的「配置」-「应用程序设置」中,新增配置项
COMPONENT_FEATURES_ENABLED,值设为true - 发布时确认自定义组件的dll文件已包含在发布包中,不要遗漏组件依赖文件
方案3:无代码可视化配置方案(零开发成本,100%兼容)
如果不想修改运行时代码,可以直接在Composer可视化界面配置:
- 在所有需要发送回复的触发节点最前面,新增「发送响应」动作,活动类型选择
typing - 在发送打字动作后添加100ms的延迟动作,再添加你原本要发送的消息内容
- 可将该逻辑封装为通用模板,所有回复节点直接复用即可
内容的提问来源于stack exchange,提问作者owenpww
相关产品推荐
相关产品推荐

