Bot Framework-等待用户在瀑布对话框中单击Hero Card操作

时间:2018-12-15 15:35:01

标签: c# botframework

我一直在尝试找出如何在显示轮播的步骤上“暂停”瀑布并等待用户输入。

我有一个可行的实现方式,但是我完全相信有更好的方法可以做到这一点。

在瀑布步骤中,我有以下代码:

if (search.Result != null && search.Result.Properties.Any())
{
    var carousel = CarouselBuilder.BuildCarousel(search.Result);
    await stepContext.Context.SendActivityAsync(carousel);
    //return await stepContext.ContinueDialogAsync(cancellationToken);
    return await stepContext.PromptAsync("propertySelected", new PromptOptions
    {

    }, cancellationToken);
}

我的propertySelected对话框是这样的:

public class EventActivityPrompt : ActivityPrompt
{
    public EventActivityPrompt(string dialogId, PromptValidator<Activity> validator)
        : base(dialogId, validator)
    {
    }
}

需要这样的验证器:

public static class ActivityPromptValidator
{
    public static async Task<bool> ActivityValidator(
        PromptValidatorContext<Activity> promptContext,
        CancellationToken cancellationToken)
    {
        return true;
    }
}

这会将值传递到下一步确定

AddStep(async (stepContext, cancellationToken) =>
{
    botState.InterestedPropertyIdentifier = stepContext.Result.ToString();

    return await stepContext.BeginDialogAsync(MyNextDialog.Id, cancellationToken);
});

所有这些空块和一个仅返回true的验证器表明,这不是使此功能正常运行的最佳方法,但目前我对Bot Framework的经验不足,无法对此进行改进。我似乎也没有找到讨论此内容的文档。

如何最好地等待用户输入?

我认为BF v3中曾经有一种.Wait()方法,这是我在该主题上可以找到的,但我已经在v4中找到了。

1 个答案:

答案 0 :(得分:0)

问了这个问题已经有一段时间了,但是对于任何正在寻找一种实现的人,机器人会在该实现中为机器人提供一个带有(可能)按钮的英雄卡供您选择,而您希望在用户选择之前暂停一下(或文字),请使用

返回新的DialogTurnResult(DialogTurnStatus.Waiting);

示例:

    var heroCard = new HeroCard
    {
        Title = "some title",
        Subtitle = "some subtitle",
        Text = "Please select one of the mentioned",
        Buttons = cardObject
    };

    await stepContext.Context.SendActivityAsync(MessageFactory.Attachment(heroCard.ToAttachment()));

    return new DialogTurnResult(DialogTurnStatus.Waiting);
相关问题