Bot框架对话框错误处理

时间:2017-07-19 00:14:25

标签: c# botframework

我需要处理机器人框架对话框中的错误,我有IDialogContext发送消息或调用另一个对话框。 目前我有

try
{
    await Conversation.SendAsync();
}
catch (Exception e)
{
    HandleExceptions(e, activity);
}
在MessagesController中

,但在此级别,Microsoft.Bot.Builder.Dialogs.DefaultIfException已将错误消息发送回用户。 在DefaultIfException之前可以在何处以及如何拦截错误,处理它并将未处理的传播传播到DefaultIfException。

1 个答案:

答案 0 :(得分:0)

您可以使用异常图层来捕获僵尸程序异常。下面的代码将帮助您进一步指导。我正在使用它,它工作正常。

try 
   {
      // your code
   }
   catch (Exception ex)
   {
      await BotException.GenerateBotException(message.From.Name, ex);
   }

之后,您需要创建一个Exception类来捕获自定义数据库中的日志,或者发送包含异常详细信息的电子邮件通知。

using System;
using GPP.Bot.DataAccessLayer;
using System.Collections.Generic;
using System.Net.Mail;
using System.Threading.Tasks;
using System.Web.Configuration;
using Microsoft.SharePoint.Client;
using Microsoft.SharePoint.Client.Utilities;

namespace Gpp.Bot.ExceptionHandling
{
    public class BotException
    {
        public static List<ErrorLogProperties> BOTErrorLog(string Environment, string exceptionStack, string exceptionSource, string fullException, string loggedInUser, string exceptionDateTime)
        {
            // this code to capture data in Cutome DB
            return DbHelper.ExecuteList<ErrorLogProperties>(
                new Command { ComandText = "Your Stored Procedure" },
                new Parameter<string, object>("Environment", Environment),
                new Parameter<string, object>("exceptionStack", exceptionStack),
                new Parameter<string, object>("exceptionSource", exceptionSource),
                new Parameter<string, object>("fullException", fullException),
                new Parameter<string, object>("loggedInUser", loggedInUser),
                new Parameter<string, object>("exceptionDateTime", exceptionDateTime)
                );

        }

        public static async Task GenerateBotException(string LLID, Exception ex)
        {
           BotExceptionNotification(LLID.Split('*')[1], ex.StackTrace, ex.Source, ex.Message,LLID.Split('*')[0], DateTime.Now.ToString());   
           BOTErrorLog(LLID.Split('*')[1], ex.StackTrace, ex.Source, ex.Message,LLID.Split('*')[0], DateTime.Now.ToString());
        }

        public static void BotExceptionNotification(string Environment, string exceptionStack, string exceptionSource,
            string fullException, string loggedInUser, string exceptionDateTime)
        {
          // Send email code goes here using above peramaeters in you html
        }

    }
}

如果您需要更多帮助,请告诉我