Dialogflow Webhook установить значение параметра - PullRequest
0 голосов
/ 28 сентября 2018

Мое намерение отправляет веб-крюк как часть заполнения слота, если в пользовательском запросе отсутствует параметр.Мой webhook затем использует логику для оценки значения параметра.Как я могу вернуть этот параметр как часть объекта WebhookResponse?Я использую клиентскую библиотеку C # в приложении ASP.NET Core.

Мой код:

string fulfillmentText;
WebhookRequest request = null;
using (var reader = new StreamReader(Request.Body))
{
    request = jsonParser.Parse<WebhookRequest>(reader);
}
//If Parameter-1 has no value
if (request.QueryResult.Fields["Parameter-1].StringValue.Length == 0)
{
    fulfillmentText = "I have guessed the value of Parameter-1";
    //I apply some logic that is unimportant to this question
    //For the sake of simplicity, say I estimate the value of Parameter-1 to be "foobar"
    //I want to be able to give the parameter this value like this:
    parameter["Parameter-1"] = "foobar"

}

ОБНОВЛЕНИЕ

Итак, япочти все получилось, используя метод Prisoner.В какой-то момент я буду повторять sid8491.Мое намерение пытается получить адрес пользователя.Мне потребовались пользовательские объекты для получения номера улицы, названия улицы, пригорода и штата.

enter image description here

Без создания каких-либо контекстов сам следующий контекст автоматическигенерируется Dialogflow: projects/telebot-pianomoves-v1/agent/sessions/2b42cbc8-2418-4231-e4c0-bd3a175f2ea8/contexts/1320fe35-4329-4176-b136-9221dfaddd4e_id_dialog_context.Я получаю этот контекст в моем webhook, и затем могу ИЗМЕНИТЬ значение параметра.Давайте предположим, что $ Suburb_Entity не имеет значения в запросе webhook, и мой код возвратил вышеупомянутый контекст с новым значением для Suburb_Entity.Мой код успешно меняет Suburb_Entity с "" на aspendale, что видно по ответу webhook json:

enter image description here

Теперь нечетноеДело в том, что хотя я изменил Suburb_Entity на фактическое значение в outputContext моего ответа на веб-крючок, фактический параметр $Suburb_Entity изменится только на новое значение Suburb_Entity из outputContext в СЛЕДУЮЩЕМ запросе на обнаружение намерения.Итак, учитывая тот факт, что я возвратил новый Suburb_Entity в outputContext ответа webhook, это ответ об обнаружении намерения, который я получаю - отмечая, что $ Suburb_Entity еще предстоит изменить:

enter image description here

При следующем запросе обнаружения намерения параметр запроса веб-крючка Suburb_Entity устанавливается на aspendale, а $Suburb_Entity также равен aspendale.Важно отметить, что $Suburb_Entity изменено только на значение параметра outputContext в следующем запросе на обнаружение намерения, из-за которого мог бы сработать другой webhook.$Suburb_Entity не изменился во время того же запроса обнаружения намерения, что и при изменении параметра outputContext Suburb_Entity, но в следующем.Это приводит меня к мысли, что каким-то образом $Suburb_Entity наследует значения параметров из этого автоматически сгенерированного контекста.Проблема здесь в том, что когда мой webhook отвечает параметром outputContext Suburb_Entity, равным aspendale, $Suburb_Entity не изменяется на это значение до следующего запроса.Это означает, что если все остальные параметры имеют установленные значения, но $Suburb_Entity еще не изменило значение, то allRequiredParamsSet == false.Если я верну Suburb_Entity в outputContext, я хочу, чтобы он немедленно изменил значение $Suburb_Entity, не требуя другого запроса на обнаружение намерения, чтобы allRequiredParamsSet == true при таких обстоятельствах.Я попытался установить значение по умолчанию, выполнив это (это не сработало):

enter image description here

Альтернативой, конечно, был бы способ заставить меняallRequiredParamsSet = true.Я сохраняю значения параметров из этого параметра контекста, а не фактический ответ.Так что мне не нужно нужно $Suburb_Entity, я просто хочу, чтобы намерение подумало, что оно имеет значение.

Приветствия

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Есть несколько шагов, чтобы сделать это:

  1. Сначала дайте событие с намерением
  2. Проверьте ваше состояние в webhook
  3. Если ваше условие выполнено,вызовите намерение, вызвав событие из webhook, которое вы определили на шаге 1
  4. Передайте paylaod (в формате json) вместе с вызовом события, задайте параметры в полезной нагрузке
  5. В намеренииукажите значение параметра по умолчанию как #eventName.parameterName

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

0 голосов
/ 28 сентября 2018

Когда вы используете веб-крючок для «заполнения слотов», предполагается, что вы возвращаете приглашения, о которых вы хотите попросить пользователя, и продолжаете использовать то же намерение для обработки ответов.От вас самих не ожидают создания значений.

Если вы хотите «заполнить» некоторые ответы, которые используются в статическом разделе «ответ» намерения Dialogflow, или если вы просто хотите записать ответытак что вы можете использовать их позже, вы можете установить параметры контекста.В строке ответа вы можете ссылаться на это значение как #context-name.parameter-name.

Обновление

Я не знаю внутреннюю механику заполнения слотов, но это неМеня не удивляет, что установка значения во внутреннем контексте для входных параметров не «регистрируется» до следующего раунда обработки Intent.

Веб-крючок для заполнения слотов не предназначен для создания значений -он предназначен для обработки значений и создания приглашений для ответа пользователя.В основном, речь идет об обработке пользовательского ввода и веб-уловках об их обработке.

Мой обходной путь предложил, что если вы хотите это для вывода, вы используете контекст для вывода.

...