如何在ChoicePrompt上运行Luis Recogniser

时间:2019-10-24 15:11:53

标签: node.js typescript botframework

我有一个ChoicePrompt,有两个选项。

[    {
        value: 'credit',
        synonyms: ['titanium', 'world', 'credit', 'mastercard'],
    },
    {
        value: 'visaPrepaid',
        synonyms: ['platinium', 'visa', 'prepaid', 'prepaid card', 'visa prepaid']
    },]

用户可以单击建议的操作,也可以直接在文本机器人上输入“我要信用卡”

我希望在此文本上进行Luis查询识别,并提取用户是否需要信用卡或预付卡。但是,我不知道该如何插入字符串。

我使用WaterfallDialog来显示提示

1 个答案:

答案 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();
  }
}

enter image description here