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

Bot Framework Composer自定义错误消息与异常处理实现咨询

Bot Framework Composer自定义异常与错误消息实现方案

方案一:修复自定义Adapter的注册与逻辑

你继承CloudAdapter的思路本身可行,大概率是依赖注入或初始化环节出了问题,可按以下步骤调整:

  1. 修正构造函数参数匹配
    自定义运行时中,BotFrameworkAuthentication通常使用ConfigurationBotFrameworkAuthentication类型,显式指定后可避免依赖注入匹配错误:

    public class AdapterWithErrorHandler : CloudAdapter
    {
        public AdapterWithErrorHandler(ConfigurationBotFrameworkAuthentication auth, ILogger<CloudAdapter> logger, ConversationState conversationState = default)
            : base(auth, logger)
        {
            OnTurnError = async (turnContext, exception) =>
            {
                // 记录异常日志
                logger.LogError(exception, $"[OnTurnError] 未处理错误: {exception.Message}");
    
                // 发送自定义错误消息给用户
                var errorMsg = MessageFactory.Text("抱歉,机器人遇到了一点小问题,请稍后再试~", null, InputHints.IgnoringInput);
                await turnContext.SendActivityAsync(errorMsg);
    
                if (conversationState != null)
                {
                    try
                    {
                        // 删除当前对话状态,避免陷入错误循环
                        await conversationState.DeleteAsync(turnContext);
                    }
                    catch (Exception e)
                    {
                        logger.LogError(e, "删除对话状态时出错: {e.Message}");
                    }
                }
    
                // 发送追踪活动到模拟器
                await turnContext.TraceActivityAsync("OnTurnError 追踪", exception.Message, "https://www.botframework.com/schemas/error", "TurnError");
            };
        }
    }
    
  2. 确保服务注册完整
    在Startup.cs的ConfigureServices方法中,先确认对话状态已注册,再替换默认适配器:

    // 注册对话状态(未注册时添加)
    services.AddSingleton<ConversationState>(sp =>
    {
        var storage = sp.GetRequiredService<IStorage>();
        return new ConversationState(storage);
    });
    
    // 注册自定义Adapter
    services.AddSingleton<IBotFrameworkHttpAdapter, AdapterWithErrorHandler>();
    

方案二:添加自定义异常处理中间件

如果Adapter方式仍不生效,可通过Bot Framework的中间件管道全局捕获异常:

  1. 创建异常处理中间件

    public class ExceptionHandlerMiddleware : IMiddleware
    {
        private readonly ILogger<ExceptionHandlerMiddleware> _logger;
        private readonly ConversationState _conversationState;
    
        public ExceptionHandlerMiddleware(ILogger<ExceptionHandlerMiddleware> logger, ConversationState conversationState)
        {
            _logger = logger;
            _conversationState = conversationState;
        }
    
        public async Task OnTurnAsync(ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken = default)
        {
            try
            {
                await next(cancellationToken);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "中间件捕获未处理异常: {ex.Message}");
    
                // 发送自定义错误消息
                var errorMsg = MessageFactory.Text("哎呀,出问题了,请稍候再尝试哦~", null, InputHints.IgnoringInput);
                await turnContext.SendActivityAsync(errorMsg, cancellationToken);
    
                try
                {
                    // 重置对话状态
                    await _conversationState.DeleteAsync(turnContext, cancellationToken);
                }
                catch (Exception e)
                {
                    _logger.LogError(e, "重置对话状态失败: {e.Message}");
                }
            }
        }
    }
    
  2. 注册中间件到管道
    在Startup.cs中完成中间件的注册与挂载:

    services.AddSingleton<ExceptionHandlerMiddleware>();
    
    // 在Configure方法中(基于WebApplication模式)
    app.UseBotFramework();
    var botAdapter = app.Services.GetRequiredService<IBotFrameworkHttpAdapter>();
    if (botAdapter is CloudAdapter adapter)
    {
        adapter.Use(app.Services.GetRequiredService<ExceptionHandlerMiddleware>());
    }
    

方案三:利用Composer内置配置(无需代码修改)

如果不需要复杂的异常处理逻辑,可直接在Composer中配置全局错误消息:

  • 打开Composer进入项目,点击Settings -> Runtime Settings
  • 找到Error Messages配置项,直接设置自定义的错误提示文本即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 12:05:18