Мое намерение отправляет веб-крюк как часть заполнения слота, если в пользовательском запросе отсутствует параметр.Мой 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.Мое намерение пытается получить адрес пользователя.Мне потребовались пользовательские объекты для получения номера улицы, названия улицы, пригорода и штата.
Без создания каких-либо контекстов сам следующий контекст автоматическигенерируется 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:
Теперь нечетноеДело в том, что хотя я изменил Suburb_Entity
на фактическое значение в outputContext
моего ответа на веб-крючок, фактический параметр $Suburb_Entity
изменится только на новое значение Suburb_Entity
из outputContext в СЛЕДУЮЩЕМ запросе на обнаружение намерения.Итак, учитывая тот факт, что я возвратил новый Suburb_Entity
в outputContext
ответа webhook, это ответ об обнаружении намерения, который я получаю - отмечая, что $ Suburb_Entity еще предстоит изменить:
При следующем запросе обнаружения намерения параметр запроса веб-крючка 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
при таких обстоятельствах.Я попытался установить значение по умолчанию, выполнив это (это не сработало):
Альтернативой, конечно, был бы способ заставить меняallRequiredParamsSet = true
.Я сохраняю значения параметров из этого параметра контекста, а не фактический ответ.Так что мне не нужно нужно $Suburb_Entity
, я просто хочу, чтобы намерение подумало, что оно имеет значение.
Приветствия