1

我如何跟踪 LUIS 意图是否已被触发?
使用渠道:脸书

场景
用户:Audi TT details
机器人:[汽车详细信息....]
用户:谢谢
机器人:您希望我们与您联系吗?(提供是或否提示)
用户:[选择选项(是或否)]...
下次同一用户聊天...或稍后在同一对话中
用户:您有奥迪 TT 的零件吗?
机器人:是的,我们有以下可用部件
用户:非常感谢!
机器人:很高兴提供帮助 -> 机器人不得提供“您希望我们与您联系吗?” 再次提示

我正在使用 LUIS 意图来检测用户是否在说“谢谢”,然后触发提示。如何跟踪意图是否已被触发

[LuisIntent ("Gratitude")]  
public async Task Gratitude(IDialogContext context, IAwaitable<IMessageActivity> message, LuisResult result)  
{               
    if( intent_has_not_been_triggered_for_user)
       PromptDialog.Choice(context,
             ResumeAfterGratitude,
             new[] { "Yes", "No"},
             "Thank you. Would you like us to contact you?",
             promptStyle: PromptStyle.Keyboard, attempts: 4
           );

   else  
      await context.PostAsync("Glad to help");  
}
4

1 回答 1

2

您可以使用context.UserData来存储与用户关联的数据。

UserData在您的情况下,您可以使用诸如 之类的键来设置该值以防该值不存在GratitudeTriggered,并且每次检查该键是否存在于用户数据中。您还可以根据需要自定义逻辑,例如匹配特定值、值的存在等。

示例代码:

[LuisIntent("Gratitude")]
public async Task Gratitude(IDialogContext context, IAwaitable<IMessageActivity> message, LuisResult result)
{
    if (context.UserData.TryGetValue("GratitudeTriggered", out bool gratitudeTriggered))
    {
        //Triggered for the first time, store it in UserData that the Gratitude is triggered
        context.UserData.SetValue("GratitudeTriggered", "yes");

        PromptDialog.Choice(context,
              ResumeAfterGratitude,
              new[] { "Yes", "No" },
              "Thank you. Would you like us to contact you?",
              promptStyle: PromptStyle.Keyboard, attempts: 4
            );
    }
    else
        await context.PostAsync("Glad to help");
}
于 2018-05-10T21:03:27.627 回答