当用户回答他们的问题时,机器人会创建一个带有两个按钮的富卡:“是”和“否”,如果答案是好的,则为“是”,如果答案是错误则为“否”。如果用户决定不单击任何按钮并决定提出另一个问题,我该如何将它们返回到根对话框?任何建议都会很棒!
public async Task CreateSurvey(IDialogContext context, IMessageActivity activity)
{
var reply = context.MakeMessage();
reply.Text = activity.Text;
reply.Attachments = new List<Attachment>();
var actions = new List<CardAction>();
actions.Add(new CardAction { Title = $"Yes", Value = $"Yes" });
actions.Add(new CardAction { Title = $"No", Value = $"No" });
var card = new HeroCard() { Title = "My Survey", Buttons = actions };
reply.Attachments.Add(card.ToAttachment());
reply.AttachmentLayout = AttachmentLayoutTypes.Carousel;
await context.PostAsync(reply);
context.Wait<IMessageActivity>(GetSurveyResponse);
}
private async Task GetSurveyResponse(IDialogContext context, IMessageActivity activity)
{
if (activity.Text == "Yes")
{
context.Done("Good answer!");
}
else if (activity.Text == "No")
{
context.Done("Bad answer!");
}
else
{
// Continue to root dialog
}
}
答案 0 :(得分:0)
创建一个新对话框 - SurveyDialog,将代码放在此对话框中。从RootDialog调用SurveyDialog。在else的情况下标记context.Done()。您的对话框控件将在RootDialog中传递的方法中恢复。如果这没有帮助,或者您的要求是其他原因,请告诉我。
答案 1 :(得分:0)
作为官方网站上的参考:
在C#中,您可以使用
context.Wait()
指定在下次用户发送消息时调用的回调。要关闭对话框并将其从堆栈中删除(从而将用户发送回堆栈中的先前对话框),请使用context.Done()
。您必须使用context.Wait()
,context.Fail()
,context.Done()
或某些重定向指令(例如context.Forward()
或context.Call()
)结束每个对话方法。不以其中一个结尾的对话方法将导致错误(因为框架不知道下次用户发送消息时要采取的操作)。
此外,如果需要,您可以利用状态数据存储以前的数据:
var selectedCard = await result;
context.UserData.SetValue("selection", selectedCard.Text);