Можем ли мы программно устанавливать и удалять контексты с помощью библиотеки выполнения Node Dialogflow без использования пользовательского интерфейса? - PullRequest
0 голосов
/ 03 декабря 2018

Используя Dialogflow Node Fulfillment SDK , я думал, что можно программно устанавливать и удалять контексты и извлекать из них параметры.

Я пытаюсь собрать значения для нескольких параметров, и они могут входить в несколько проходов с одним и тем же намерением.Следующий код выполняется в обработчике намерений:

contextParams = agent.context.get("seek-create-params-context").parameters;
currentParams = agent.parameters;

// merge will look for required params from both current and context
newParameters = merge(currentParams, contextParams); 

agent.context.set({
 name: "seek-create-params-context",
 lifespan: 1,
 parameters: newParameters
});

Он извлекает параметры, которые были переданы в предыдущем взаимодействии, объединяет его с вновь доступными параметрами и сбрасывает контекст с новым набором доступных параметров,

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

Нужно ли вообще манипулировать пользовательским интерфейсом Dialogflow для отправки контекстных параметров?

Пример взаимодействия на основе реальных журналов (несущественные параметры удалены):

/* 
  First pass:
  User msg doesn't contain any of params `value` or `product`
*/  

// agent.parameters: 
{}
// agent.context.get('seeking-params-expense-create').parameters:
undefined
// outgoing 'seeking-params-expense-create' params (lifespan 1)
{ value: '', product: '' }

/*
  Second pass:
  So far, so good.
  Next pass, we receive `value`, but not `product`.
*/

// agent.parameters:
{ value: 50, product: '' }
// agent.context.get('seeking-params-expense-create').parameters:
{ 
  'value.original': '50',
  'product.original': '', 
   value: 50,
   product: ''  
  }
// outgoing 'seeking-params-expense-create' params (lifespan 1):
{ value: 50, product: '' }


/*     
  Third pass: 
  This time, we want to use `value` from context since we
  stored in last pass and seek `product` from user.
  User only supplies `product` this time.
*/

// agent.parameters:
{ value: '', product: 'MRT' }
// agent.context.get('seeking-params-expense-create').parameters:
{ 
  'value.original': '', 
  'product.original': '',
   product: 'MRT', 
   value: ''
}
// outgoing 'seeking-params-expense-create' params (lifespan 1):
{ value: '', product: 'MRT' }

1 Ответ

0 голосов
/ 04 декабря 2018

Вы не показываете свои намерения, но похоже, что и второй, и третий проходы запускаются намерениями, которые имеют и , value и product параметры.

Если параметр задан Намерением, он передаст что-то, возможно, пустую строку, в веб-крючок.

Он также установит этот параметр в каждом контексте, который активен в это время, и передаст этиКонтексты для веб-крючка также.Даже если для контекста ранее было задано значение для этого параметра.

Чтобы убедиться, что ваши значения не попираются текущими намерениями, вы должны сохранить их как параметры в контексте под именами параметров, которые не являютсяиспользуется любым из ваших имен параметров Intent.

...