跟踪 LUIS 意图是否已被触发

Track if LUIS intent has already been triggered

我如何跟踪 LUIS 意图是否已被触发??
使用频道:Facebook

场景
用户:奥迪 TT 详情
机器人:[汽车详情....]
用户:谢谢
机器人:你想让我们联系你吗? (提供是或否提示)
用户:[select 选项(是或否)]...
下次同一用户聊天...或稍后在同一对话中
用户:你们有奥迪 TT 的零件吗?
Bot : 是的,我们有以下零件可用
用户:非常感谢!
Bot : 乐于助人 -> Bot 不得再次提供 "Would you like us to contact you?" 提示

我正在使用 LUIS 意图检测用户是否在说 'thank you' 然后触发提示。我如何跟踪意图是否已被触发

[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");  
}

您可以使用 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");
}