Bot Framework v4 中的等待方法

2024-04-14

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

context.Call(new MyHeroCardOptions(), MyResumeAfter);
  • Where 我的英雄卡选项是 HeroCard 类型的卡并且我的简历之后是等待用户响应的方法。

有人可以指导我如何在 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://learn.microsoft.com/bot-framework"),
                },
            };
            var reply = context.Activity.CreateReply();
            reply.AttachmentLayout = AttachmentLayoutTypes.Carousel;
            reply.Attachments.Add(heroCard.ToAttachment());
            await context.SendActivityAsync(reply);
        }
    }

我目前使用“TextPrompt”和“Waterfall”来生成等待,但我不知道它是否合适。

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

如果你只是想让你的选择自动变成英雄卡,你可以使用ListStyle.HeroCard https://learn.microsoft.com/en-us/dotnet/api/microsoft.bot.builder.dialogs.choices.liststyle#Microsoft_Bot_Builder_Dialogs_Choices_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://learn.microsoft.com/bot-framework"))
            .ToList(),
    };

    return MessageFactory.Attachment(heroCard.ToAttachment()) as Activity;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Bot Framework v4 中的等待方法 的相关文章

随机推荐