Как добавить пользовательские данные в ChoicePrompt с ListStyle.heroCard - PullRequest
0 голосов
/ 11 октября 2019

У меня есть ChoicePrompt со стилем ListStyle.heroCard следующим образом:

import {ChoicePrompt, ListStyle} from 'botbuilder-dialogs';
import {PromptValidator} from 'botbuilder-dialogs/src/prompts/prompt';
import {FoundChoice} from 'botbuilder-dialogs/src/choices/findChoices';

export class HeroCardChoicePrompt extends ChoicePrompt{
    constructor(dialogId: string, validator?: PromptValidator<FoundChoice>, defaultLocale?: string){
        super(dialogId, validator, defaultLocale)
        this.style = ListStyle.heroCard
    }
}

Затем я добавил этот объект выбора:

choices.push({
    action: {

        text: 'Lolipop',
        displayText: 'Lolipop',
        channelData: 'Lolipop',

        type: 'postBack',
        title:  'Lolipop',
        value:  'Lolipop',

    },
    value: 'Can you please help me to manage...',
    synonyms: []
},)

Как мне получить данные 'Lolipop' в моем коде, когда пользователь нажимает на выбор?

Когда я проверяю объект JSON, полученный клиентом в эмуляторе бота, я вообще не вижу данных 'Lolipop'.

m

1 Ответ

0 голосов
/ 12 октября 2019

Использование ListStyle.heroCard заставляет использовать ChoiceFactory.heroCard для генерации карты. В исходном коде видно, что ChoiceFactory.heroCard не использует действия в выборе и вместо этого просто создает imBack действий:

const buttons: CardAction[] = choices.map(choice => ({
    title: choice.value,
    type: ActionTypes.ImBack,
    value: choice.value
} as CardAction));

Если вы хотите указать пользовательские действия в вашем приглашении, вам нужно будет создать свою собственную карту героя и указать ее в поле prompt опций вашего приглашения и использовать ListStyle.none. Неясно, почему вы хотите это сделать, потому что действия, сгенерированные ChoiceFactory, будут соответствовать доступным вариантам в приглашении выбора, поэтому нет необходимости, чтобы действие имело скрытое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...