如何使用Microsoft Bot Framework(聊天机器人编程)接收日期值



代码+目录的屏幕截图

我正在Visual Studio上使用Microsoft Bot Framework创建一个美容院预订聊天机器人。使用的语言是C#;请注意,我正在学习中,因此对这一切都是陌生的。这也是我第一次在stackoverflow上发帖,所以如果我的问题有点帮助或不清楚,我道歉:(

我在这里要做的是接收一个日期输入值,请求一个时间输入值,然后接收一个名称输入值。当我运行此代码时,机器人在输入日期后不会做出响应。我知道这个代码一开始很可怜,功能失调,但我的大脑已经崩溃了——我陷入了困境,没有想法。任何可能的解决方案都将不胜感激。谢谢:(

private async Task ReservationDateMessageAsync(IDialogContext context, IAwaitable<object> beforeActivity)
{
await context.PostAsync($"예약하실 날짜를 입력해주세요~ nn 예)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}에 예약하셨습니다.nn 성함을 입력해주세요.nn "); 
context.Wait(this.GetUserNameAsync);
}
else if (message.Text == "14시 ~ 17시" || message.Text == "2")
{
await context.PostAsync($" { memberReservation.Date}에 { memberReservation.Time}에 예약하셨습니다.nn 성함을 입력해주세요.nn ");
context.Wait(this.GetUserNameAsync);
}
else if (message.Text == "17시 ~ 20시" || message.Text == "3")
{
await context.PostAsync($" { memberReservation.Date}에 { memberReservation.Time}에 예약하셨습니다.nn 성함을 입력해주세요.nn  ");
context.Wait(this.GetUserNameAsync);
}
else if (message.Text == "이전으로")
{
await this.ResolvationTime(context, result);
}
else
{ // Error message
await this.StartOverAsync(context, "죄송합니다. 요청사항을 이해하지 못했습니다.^^; ");
}

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

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

当你得到DateTimeResolution时,你可以得到四种类型的结果:

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

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

例如,如果用户说";"星期一";你会得到上周一和下周一的日期,所以,根据你的上下文,你可以决定哪一个是有效的,或者要求进一步细化。

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

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

最新更新