создайте ответ с помощью HeroCard или любого типа карточки внутри PromptOptions

#c# #botframework

#c# #botframework

Вопрос:

Есть ли способ настроить расположение моих вариантов внутри promptoptions? Я хочу преобразовать его в card. HeroCard или SuggestedCard. Есть ли какие-либо способы? Макет по умолчанию всегда карусельный.

Кроме того, если я добавлю пробел в свой текст, это изменит форму. 1-е изображение без пробелов, 2-е — с пробелами. посмотрите на разницу. введите описание изображения здесь
введите описание изображения здесьСпасибо!

 var options = new PromptOptions()
{
Prompt = MessageFactory.Text("Please choose a location."),
RetryPrompt = MessageFactory.Text("Sorry, please choose a location from the list."),
Choices = ChoiceFactory.ToChoices(new List<string> { "Redmond", "Bellevue", "Seattle" }),
};
return await stepContext.PromptAsync("second", options, cancellationToken);
  

Ответ №1:

Вы можете создать новый ответ, добавить к нему вложение HeroCard с предлагаемыми действиями и добавить ответ в параметры запроса в качестве атрибута запроса. Смотрите фрагмент кода ниже.

 private static async Task<DialogTurnResult> PromptForLocation(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
    Activity reply = stepContext.Context.Activity.CreateReply();

        var heroCard = new HeroCard
    {
        Title = "Please choose a location.",
        Buttons = new List<CardAction> { new CardAction(ActionTypes.PostBack, "Redmond", value: "Redmond"), 
                                            new CardAction(ActionTypes.PostBack, "Bellevue", value: "Bellevue"), 
                                            new CardAction(ActionTypes.PostBack, "Seattle", value: "Seattle") },
    };

    reply.Attachments = new List<Attachment>() { heroCard.ToAttachment() };

    var options = new PromptOptions()
        {
        Prompt = reply,
        RetryPrompt = MessageFactory.Text("Sorry, please choose a location from the list.")
        };

    return await stepContext.PromptAsync("name", options, cancellationToken);
}
  

Надеюсь, это поможет!

Комментарии:

1. привет @tdurnford, я уже пробовал это, но когда я выбираю варианты, он продолжает возвращать запрос на повторную попытку. он никогда не переходит к следующему шагу.

2. Какой тип приглашения вы используете?

3. Выберите Prompt. должен ли я использовать другое приглашение?

4. Я бы рекомендовал использовать TextPrompt с пользовательским средством проверки. Если вы хотите использовать приглашение выбора, вам нужно либо включить свойство Choices в параметры приглашения, либо использовать пользовательский валидатор.