我有一个ChoicePrompt
,有两个选项。
[ {
value: 'credit',
synonyms: ['titanium', 'world', 'credit', 'mastercard'],
},
{
value: 'visaPrepaid',
synonyms: ['platinium', 'visa', 'prepaid', 'prepaid card', 'visa prepaid']
},]
用户可以单击建议的操作,也可以直接在文本机器人上输入“我要信用卡”
我希望在此文本上进行Luis查询识别,并提取用户是否需要信用卡或预付卡。但是,我不知道该如何插入字符串。
我使用WaterfallDialog
来显示提示
答案 0 :(得分:0)
有两种不同的方法来构建ChoicePrompt。我使用ChoiceFactory.forChannel()
来这样做。然后,我使用imBack
将该选择作为用户文本输入返回。另外,您可以执行postBack
,它可以充当更多触发器,并捕获发送的值。
在我的情况下,由于选择作为用户文本输入返回,因此我从活动中获取文本值并将其发送给LUIS。我在Greeting
意图上进行匹配,如果成功,则返回找到的意图。
希望有帮助!
async choiceStep ( stepContext ) {
const stepResult = stepContext.context.activity.text;
if ( stepResult ) {
const message = ChoiceFactory.forChannel(
stepContext.context, [
{ value: 'Hello', action: { type: 'imBack', title: 'Hello', value: 'Hello' } },
{ value: 'What is the date?', action: { type: 'imBack', title: 'What is the date?', value: 'What is the date?' } }
], `Which do you choose?`
);
await stepContext.context.sendActivity( message );
}
return { status: DialogTurnStatus.waiting };
}
async choiceLuisStep ( stepContext ) {
if ( stepContext.context.activity.text ) {
const stepResults = stepContext.context.activity.text;
await stepContext.context.sendActivity( `You said: ${ stepResults }` );
const recognizerResult = await this.recognizer.recognize( stepContext.context );
let intent = await LuisRecognizer.topIntent( recognizerResult );
if ( intent === 'Greeting' ) {
await stepContext.context.sendActivity( `Luis recognized: ${ intent }` );
return stepContext.next();
} else {
await stepContext.context.sendActivity( 'No LUIS intent was found.' );
return stepContext.next();
}
} else {
await stepContext.context.sendActivity( 'Thanks for visiting!' );
return stepContext.next();
}
}