如何从INTENT中提取参数以将其传递给webhook?

时间:2018-04-07 12:02:23

标签: webhooks actions-on-google dialogflow

假设 Dialogflow 中的意图名为“ intent.direction ”。此意图包含以下短语:“指向PLACE_NAME的方向”或“导航至PLACE_NAME ”等。此处“ PLACE_NAME ”是用户想要去的任何地方名称。

意图 触发时,我希望“ PLACE_NAME ”即地名,传递到我的 WEBHOOK (index.js)。

有没有办法做到这一点?

-------------------更新后的反应------------------ < / p>

function makeDirection(app)
{
  if (!hasScreen)
  {
      app.ask('Sorry, try this on a screen device');
  }    
  else
  {
      //-----variables----
      var body2="";

      var placeName = app.getArgument( 'PLACE_NAME' );
      app.ask(placeName);

下面是一些测试图片,我得到了最后一句话,即“ PLACE_NAME ”,但......

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:3)

我认为你的Intent看起来像这样:

Screen shot

有关Intent设置的重要注意事项是:

  • 我们选择了每个培训短语中指示PLACE_NAME的部分
  • 我们已将它们设置为@sys.any的实体类型。这将匹配任何东西。如果我们有其他有意义的实体类型(我们定义的类型或类似@sys.address@sys.street-address),我们可以使用它们。
  • 我们已将参数名称更改为PLACE_NAME
  • 我们已将字段设置为必填字段。

我们还完成了将动作名称设置为某些内容并通过webhook启用履行的功能。

在我们的webhook中,我们将获得此Intent设置的参数值。我们如何做到这将取决于我们使用的库,如果有的话。

由于您已经表明这是针对Google上的操作,因此您可能正在使用AoG node.js库。如果是这样,我们可以使用类似

的方式获取参数
var placeName = app.getArgument( 'PLACE_NAME' );

如果您正在阅读JSON并使用Dialogflow V1,您可以使用以下内容从body对象中获取值:

var placeName = body.result.parameters['PLACE_NAME'];

如果你使用的是Dialogflow V2,它的路径会略有不同:

var placeName = body.queryResult.parameters['PLACE_NAME'];

答案 1 :(得分:0)

这是另一种方法:

const functions = require('firebase-functions');
const yourClientId = 'xxxxx-xxxxxx.apps.googleusercontent.com';
const app = dialogflow({clientId: yourClientId}, {debug: true});

app.intent('intent.direction', (conv,params) => {
    ...
    let placeName=params.PLACE_NAME
}