如何制作富卡可选机器人框架

时间:2017-11-07 01:54:46

标签: botframework

当用户回答他们的问题时,机器人会创建一个带有两个按钮的富卡:“是”和“否”,如果答案是好的,则为“是”,如果答案是错误则为“否”。如果用户决定不单击任何按钮并决定提出另一个问题,我该如何将它们返回到根对话框?任何建议都会很棒!

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
    }
}

2 个答案:

答案 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);