Отслеживание, если намерение LUIS уже было запущено - PullRequest
0 голосов
/ 10 мая 2018

Как я могу отслеживать, если намерение LUIS уже было запущено ??
Используемый канал: Facebook

Сценарий
Пользователь: Audi TT подробнее
Бот: [детали машины ....]
Пользователь: Спасибо
Бот: Хотите, чтобы мы связались с вами? (укажите «да» или «нет»)
Пользователь: [выбрать опции (да или нет)] ...
В следующий раз тот же пользователь чаты ... или позже в том же разговоре
Пользователь: у вас есть запчасти для Audi 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");  
}

1 Ответ

0 голосов
/ 11 мая 2018

Вы можете использовать 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");
}
...