frameworks - 在 Microsoft Bot Framework 中取消或退出 PromptDialog.Choice 流
问题描述
我有一个带有 4 个选项的提示,最后一个选项是用户可以退出提示,我想实现一些代码以便机器人退出提示
PromptDialog.Choice(context, this.OnOptionSelected, new List<string>() { FlightsOption, HotelsOption, TrainOption, GobackOption }, "Sure..! Tell me what booking would like to make..?", "Not a valid option", 3);
在上图中,我已经实现了退出选项,如果用户选择退出,它将转到切换退出的情况。
我也尝试过 context.quit 但它会引发错误
private async Task OnOptionSelected(IDialogContext context, IAwaitable<string> result)
{
try
{
string optionSelected = await result;
switch (optionSelected)
{
case FlightsOption:
context.Call(new FlightDialog(), this.ResumeAfterOptionDialog);
break;
case HotelsOption:
context.Call(new HotelsDialog(), this.ResumeAfterOptionDialog);
break;
case TrainOption:
context.Call(new TrainDialog(), this.ResumeAfterOptionDialog);
break;
case GobackOption:
//want some code here to quit the form
break;
}
}
解决方案
首先,这不是表单流。这是及时的。现在您可以执行类似的操作,或者像这样从堆栈中退出对话框
try
{
string optionSelected = await result;
switch (optionSelected)
{
case FlightsOption:
context.Call(new FlightDialog(), this.ResumeAfterOptionDialog);
break;
case HotelsOption:
context.Call(new HotelsDialog(), this.ResumeAfterOptionDialog);
break;
case TrainOption:
context.Call(new TrainDialog(), this.ResumeAfterOptionDialog);
break;
case GobackOption:
context.Done<object>(null);
break;
}
}
或者,你可以告诉一些事情,然后在同一个对话框中等待其他消息,就像这样
try
{
string optionSelected = await result;
switch (optionSelected)
{
case FlightsOption:
context.Call(new FlightDialog(), this.ResumeAfterOptionDialog);
break;
case HotelsOption:
context.Call(new HotelsDialog(), this.ResumeAfterOptionDialog);
break;
case TrainOption:
context.Call(new TrainDialog(), this.ResumeAfterOptionDialog);
break;
case GobackOption:
await context.PostAsync("Ok, you came back. Now tell something new.");
context.Wait(MessageReceivedAsync);
break;
}
}
下一条消息会在这里
public virtual async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> result)
{
var message = await result;
context.Wait(MessageReceivedAsync);
}
推荐阅读
- computer-vision - 微软认知服务 API 中名人检测的置信度是否最低?
- extjs - Ext JS 中的多个覆盖
- python - Tensorflow Python LSTM 理解多个输入
- sequelpro - 在 SQLPro 中插入数据
- angular - 角度模板可以是可变的吗?
- android - MySql - java.Lang.ClassNotFoundException:com.mysql.jdbc.Driver (React Native, Android)
- typescript - ionic 3 NGRX - 在单个状态更改时多次调用状态更改的订阅功能
- php - 无法使用php从数据库mysql中删除整行
- ios - 如何使用 CocoaPods 分发测试替身?
- javascript - 如何仅删除初始字符后的点而不删除后面的空格字符