【问题标题】:How to receive date values using Microsoft Bot Framework (chatbot programming)如何使用 Microsoft Bot Framework(聊天机器人编程)接收日期值
【发布时间】:2021-05-10 19:27:17
【问题描述】:

screen capture of code + directory

我正在使用 Visual Studio 上的 Microsoft Bot Framework 创建美容院预约聊天机器人。使用的语言是C#;请注意,我正在学习,因此对所有这些都是新手。这也是我第一次在 stackoverflow 上发帖,所以如果我的问题有点无益或不清楚,我深表歉意:(

我在这里尝试做的是接收一个日期输入值,请求一个时间输入值,然后接收一个名称输入值。当我运行此代码时,机器人在日期输入后没有响应。我知道这段代码首先是可悲且功能失调的,但我的大脑正在溢出 - 我被卡住并且没有想法。任何潜在的修复将不胜感激。谢谢:)

private async Task ReservationDateMessageAsync(IDialogContext context, IAwaitable<object> beforeActivity)
{
    await context.PostAsync($"예약하실 날짜를 입력해주세요~ \n\n 예)12월 31일");
    context.Wait(ResolvationTime);
}

private async Task ResolvationTime(IDialogContext context, IAwaitable<object> result)
{
    var activity = await result as Activity;
    memberReservation.Date = activity.Text; // Save reservation date value

    //2.1 시간 선택 (Time selection)
    if (activity.Text.Equals("") == false || !activity.Text.Equals(""))
    {
        List<CardAction> salon_Button = new List<CardAction>();
        salon_Button.Add(new CardAction()
        {
            Title = "10시 ~ 13시",
            Value = "10시 ~ 13시",
            Type = ActionTypes.ImBack
        });
        salon_Button.Add(new CardAction()
        {
            Title = "14시 ~ 17시",
            Value = "14시 ~ 17시",
            Type = ActionTypes.ImBack
        });
        salon_Button.Add(new CardAction()
        {
            Title = "17시 ~ 20시",
            Value = "17시 ~ 20시",
            Type = ActionTypes.ImBack
        });
        salon_Button.Add(new CardAction()
        {
            Title = "이전으로", // Previous stage
            Value = "이전으로",
            Type = ActionTypes.ImBack
        });

        HeroCard salon_Card = new HeroCard()
        {
            Title = activity.Text,
            Subtitle = "원하시는 시간을 선택해주세요 ^^", // Please select the desired time
            Buttons = salon_Button
        };

        var message = context.MakeMessage();
        message.Attachments.Add(salon_Card.ToAttachment());
        context.Wait(this.OnReservationTimeSelected);
    }
    else
    {

        //다시 이전(날짜부터 다시 묻기) 질문하기 (Return to previous question)

        await this.ReservationDateMessageAsync(context, null);

    }

}

/// <summary>
/// 예약시간 선택완료 (Reservation time selection done)
/// </summary>

/// <param name="context"></param>
/// <param name="result"></param>
/// <returns></returns>

private async Task OnReservationTimeSelected(IDialogContext context, IAwaitable<IMessageActivity> result)
{
    var message = await result;
    memberReservation.Time = message.Text;

    if (message.Text == "10시 ~ 13시" || message.Text == "1")
    {
    // Display reservation time and ask for name input
        await context.PostAsync($" { memberReservation.Date} { memberReservation.Time}에 예약하셨습니다.\n\n 성함을 입력해주세요.\n\n "); 
        context.Wait(this.GetUserNameAsync);
    }
    else if (message.Text == "14시 ~ 17시" || message.Text == "2")
    {
        await context.PostAsync($" { memberReservation.Date}에 { memberReservation.Time}에 예약하셨습니다.\n\n 성함을 입력해주세요.\n\n ");
        context.Wait(this.GetUserNameAsync);
    }

    else if (message.Text == "17시 ~ 20시" || message.Text == "3")
    {
        await context.PostAsync($" { memberReservation.Date}에 { memberReservation.Time}에 예약하셨습니다.\n\n 성함을 입력해주세요.\n\n  ");
        context.Wait(this.GetUserNameAsync);
    }
    else if (message.Text == "이전으로")
    {
        await this.ResolvationTime(context, result);
    }
    else
    { // Error message
        await this.StartOverAsync(context, "죄송합니다. 요청사항을 이해하지 못했습니다.^^; ");
    }

【问题讨论】:

    标签: c# botframework chatbot


    【解决方案1】:

    在 Bot Framework 中处理日期通常涉及使用DateTime 识别器并分析多个可能的DateTime 分辨率。它不是非常复杂,但也不是微不足道的。

    这里有很多概念要解释,但我会尝试综合。

    当您获得DateTimeResolution 时,您可以获得四种类型的结果:

    • 单个日期时间
    • 几个可能的日期时间
    • 单个日期时间范围
    • 多个日期时间范围

    因此,您必须处理这些可能性并决定是否可以从中获得有用的东西。

    例如,如果用户说“周一”,您将获得上周一和下周一的日期,因此,根据您的上下文,您决定哪个是有效日期或请求进一步细化。

    考虑到你刚刚开始,我建议你看看这个 Bot Framework 示例项目:https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/csharp_dotnetcore/44.prompt-users-for-input

    无论如何,您可能还想看看Bot Framework Composer,以防万一您想通过低代码解决方案更快地找到工作机器人。

    【讨论】:

      猜你喜欢
      • 2019-01-02
      • 2018-06-23
      • 2017-05-31
      • 2020-10-07
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2018-12-17
      • 1970-01-01
      相关资源
      最近更新 更多