javascript - 我们是否可以使用 Dialogflow 的 Node 实现库以编程方式设置和删除上下文,而不涉及 UI?

标签 javascript dialogflow-es dialogflow-es-fulfillment

使用 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 的 UI 来发送上下文参数?

基于真实日志的交互示例(删除了不相关的参数):

/* 
  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' }

最佳答案

您没有显示您的意图是什么,但看起来第二次和第三次传递都是由同时具有的意图触发的。产品参数。

如果参数由 Intent 指定,它将向 Webhook 传递一些内容(可能是空字符串)。

它还会在当时处于事件状态的每个上下文中设置该参数,并将这些上下文传递给 webhook。即使上下文之前已为该参数设置了值。

为了确保您的值不会被当前 Intent 践踏,您应该将它们作为参数存储在 Context 中,且其参数名称不会被任何 Intent 参数名称使用。

关于javascript - 我们是否可以使用 Dialogflow 的 Node 实现库以编程方式设置和删除上下文,而不涉及 UI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53587277/

相关文章:

javascript - `nyc mocha`没有覆盖率数据

javascript - 读取 URL 查询参数值 (Vue.js)

dialogflow-es - 在 Actions on Google 上取消帐户关联

dialogflow-es - 意图未显示在谷歌操作控制台中

actions-on-google - 将 "speechBiasingHints"与 Dialogflow Webhook 结合使用

dialogflow-es - Google Assistant 在 Dialogflow 中重复之前的消息时遇到问题

javascript - 编辑表中的字段时更新数据库

google-cloud-firestore - agent.add 不工作但 console.log 工作

node.js - 如何使用 Dialogflow 执行 Firebase 身份验证

php - 创建客户端数组