【问题标题】:Waiting method in Bot Framework v4Bot Framework v4 中的等待方法
【发布时间】:2020-04-13 11:51:05
【问题描述】:

在 Bot Framework 版本 3 中,我可以调用卡片并等待用户的响应:

context.Call(new MyHeroCardOptions(), MyResumeAfter);
  • 其中 MyHeroCardOptions 是 HeroCard 类型的卡片,MyResumeAfter 是等待用户响应的方法。

有人可以指导我如何在 Bot Framework V4 中做到这一点。请不要包含“ChoicePrompt”,我的目标是使用 HeroCard,因为它是一个附件。

我正在使用这个表格:

private static async Task<DialogTurnResult> TransportStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            await OptionHeroCard.GetHeroCard(stepContext.Context);
            return await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions());
        }

public static class OptionHeroCard
    {
        public static async Task GetHeroCard(ITurnContext context)
        {
            var heroCard = new HeroCard
            {
                Title = "Documentation",
                Subtitle = "Microsoft Bot Framework Documentation",
                Images = new List<CardImage> { new CardImage("https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg") },
                Buttons = new List<CardAction> { 
                    new CardAction(ActionTypes.ImBack, title: "Opción 1", value: "Opción 1"),
                    new CardAction(ActionTypes.ImBack, title: "Opción 2", value: "Opción 2"),
                    new CardAction(ActionTypes.OpenUrl, "Ir a a web", value: "https://docs.microsoft.com/bot-framework"),
                },
            };
            var reply = context.Activity.CreateReply();
            reply.AttachmentLayout = AttachmentLayoutTypes.Carousel;
            reply.Attachments.Add(heroCard.ToAttachment());
            await context.SendActivityAsync(reply);
        }
    }

我目前使用带有“瀑布”的“TextPrompt”来生成等待,但我不知道它是否合适。

  1. 我不知道我可以在“选择提示”中包含 HeroCard。举个例子就好了。

【问题讨论】:

  • 你是说你想让用户点击英雄卡上的按钮来提示他们吗?你能提供你正在使用的实际英雄卡吗?你知道选择提示可以使用英雄卡吗?
  • 你还在做这个吗?
  • 嗨@KyleDelaney,1。没错,我点击了,我可以得到点击的结果。 2.代码:-private static async Task&lt;DialogTurnResult&gt; TransportStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken) { await OptionHeroCard.GetHeroCard(stepContext.Context); return await stepContext.PromptAsync(nameof(TextPrompt), new PromptOptions()); }我目前使用的是带有“瀑布”的“TextPrompt”,但不知道是否合适。
  • 请不要将代码放入 cmets。始终编​​辑您的问题,以便您可以提供 格式化 代码。此外,您还没有回答有关您是否知道英雄卡可用于选择提示的问题。你为什么要求我们不要包含ChoicePrompt
  • @KyleDelaney 已编辑

标签: c# botframework


【解决方案1】:

如果你只是想让你的选择自动变成英雄卡,你可以使用ListStyle.HeroCard

new ChoicePrompt(nameof(ChoicePrompt)) { Style = ListStyle.HeroCard }

如果你想使用自己的自定义英雄卡,你可以这样做:

private static async Task<DialogTurnResult> TransportStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
    string[] options = new[] { "Opción 1", "Opción 2" };
    return await stepContext.PromptAsync(nameof(ChoicePrompt), new PromptOptions
    {
        Choices = ChoiceFactory.ToChoices(options),
        Prompt = CreateHeroCardActivity(options),
        Style = ListStyle.None, // We're displaying the choices ourselves so we don't want ChoicePrompt to do it for us
    });
}

private static Activity CreateHeroCardActivity(IEnumerable<string> options)
{
    var heroCard = new HeroCard
    {
        Title = "Documentation",
        Subtitle = "Microsoft Bot Framework Documentation",
        Images = new List<CardImage>
        {
            new CardImage("https://sec.ch9.ms/ch9/7ff5/e07cfef0-aa3b-40bb-9baa-7c9ef8ff7ff5/buildreactionbotframework_960.jpg"),
        },
        Buttons = options.Select(option => new CardAction(ActionTypes.ImBack, title: option, value: option))
            .Append(new CardAction(ActionTypes.OpenUrl, "Ir a a web", value: "https://docs.microsoft.com/bot-framework"))
            .ToList(),
    };

    return MessageFactory.Attachment(heroCard.ToAttachment()) as Activity;
}

【讨论】:

    【解决方案2】:

    对于机器人框架 4.7 预览版,我通过调用 2 个操作来完成

     new SendActivity("@{YourHeroCardTemplate()}"),
     new TextInput()
            {
                    Property = "dialog.heroCardResponse",
                    Prompt = new ActivityTemplate("Please select an option"),
            },
    

    希望它可以帮助您了解其他版本的机器人框架

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多