Запрос параметра у пользователя или запуск события из выполнения - PullRequest
1 голос
/ 04 апреля 2019

В некоторых целях в диалоговом потоке я хочу оценить некоторые параметры (которые требуются), а затем, если они не удовлетворяют некоторым критериям, запросить их снова.Более конкретно, я спрашиваю пользователя дату, когда произошло событие, и в случае, если он просто предоставляет мне, например, "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», и бот вводит резервное намерение, как если бы я не отправлял контекст вывода (что похоже на мою проблему с событием, я не мог быть уверен, было ли сообщение простоигнорируется или если я не отправил его в правильной форме / пути).

1 Ответ

2 голосов
/ 04 апреля 2019

В вашем состоянии, когда дата неверна, вместо вызова события вы можете просто вернуть сообщение с сообщением об ошибке вместе с дополнительным контекстом.
Вот что вам нужно сделать:

  • Оцените условие для неправильной даты
  • Если дата неправильная, установите ответное сообщение.В вашем случае это This date is invalid: "+startDate+ " to "+endDate+". Please retry
  • Установить выходной контекст с некоторым сроком службы.Например, wrong-date Создайте еще одно намерение, которое будет обрабатывать ввод даты, и установите для input-context значение wrong-date
  • . В разделе параметров этого намерения задайте все ожидаемые параметры и установите значение по умолчанию #output-context.parameter_name (заменить выходной контекст с неправильной датой, а имя_параметра на точное имя параметра)
  • Не устанавливать значение по умолчанию для параметра даты, для которого вы ожидаете правильный ответ от пользователя, чтобы он непримите более старое значение
  • Дайте несколько примеров высказываний для этого намерения, т.е. даты

Надеюсь, это поможет.

...