В некоторых целях в диалоговом потоке я хочу оценить некоторые параметры (которые требуются), а затем, если они не удовлетворяют некоторым критериям, запросить их снова.Более конкретно, я спрашиваю пользователя дату, когда произошло событие, и в случае, если он просто предоставляет мне, например, "june", сущность @ sys.date-period, которая связана с параметром, переводит это на "с 01.06.2009 по 30/6/ 2019 ", дата, которая еще не прошла и не может быть принята.Поэтому я хочу проверить, является ли дата действительной, и если нет, попросить пользователя снова предоставить ее (стереть предыдущий параметр и «reprompt»).
Дата может иметь много форм, месяц, год,Период определяется датами начала и окончания, поэтому автоматические объекты Google действительно полезны.Вначале я пытался создать свои собственные объекты (например, месяцы, сезоны), но, поскольку эту процедуру необходимо реализовать для нескольких разных целей в проекте, я не хочу в конечном итоге иметь более 100 намерений исключительно для получения даты.По той же причине я хочу сделать это через мой веб-крюк, а не через намерения, которые могут быть вызваны, если дата недействительна и т. Д. Поэтому я хочу сказать пользователю: «Ваша дата недействительна, повторите попытку».а затем дождитесь даты, которая будет оценена, и в зависимости от результата оценки процедура либо продолжится, либо снова запросит допустимый параметр.
Я читал об этом и ничего не нашелчтобы указать, что это можно сделать (если кто-нибудь знает способ, пожалуйста, поделитесь им со мной).Итак, теперь я пытаюсь вызвать событие (eventToTrigger), которое я ввел в это намерение (для которого требуется дата), но безуспешно.
var bool1=isDateInValid(startDate);
var bool2=isDateInValid(endDate);
if (bool1 && bool2) {
agent.add("This date is invalid: "+startDate+ " to "+endDate+". Please retry");
return {
"followupEventInput": {
"name": "eventToTrigger"
}
};
}
На нем напечатано «Эта дата недействительна: с 2019-01-01 по 2019-06-30. Пожалуйста, повторите», что и ожидалось, но больше ничего.Помимо вышеприведенного сообщения, я хотел также попросить пользователя «дать мне точку», которая является ответом бота при вводе в конкретном намерении, при этом пользователь не указал дату, которая требуется, как я уже говорил выше.Как я могу это сделать?Заранее спасибо!
Редактировать :
Я выполнил совет, который дал мне @ sid8491.Я сделал намерение с входным контекстом errorDate и добавил к своему коду выполнения следующее:
if (bool1 && bool2) {
agent.add("This date is invalid: "+startDate+ " to "+endDate+". Please retry");
const context=agent.session+"/contexts/wrongDate";
console.log("Follow up intent with context: "+context);
return {
"outputContexts": [
{
"name": context,
"lifespanCount": 1
}
]
};
}
Я также связал это новое намерение с той же функцией через intentMap.Когда я даю (как пользователь) неверную дату (например, «может»), бот отвечает: «Эта дата недействительна: с 2019-05-01 по 2019-05-31. Пожалуйста, повторите».После этого я набираю «может» или «может 2018», и бот вводит резервное намерение, как если бы я не отправлял контекст вывода (что похоже на мою проблему с событием, я не мог быть уверен, было ли сообщение простоигнорируется или если я не отправил его в правильной форме / пути).