Dialogflow系统.实体位置:在线编辑器中没有定义location.admin-area。

问题描述 投票:0回答:1

我在一个Dialogflow代理的意图中使用了系统实体@sys.location。在履行部分,我在在线代码编辑器里有这个函数。

function testLocation(agent) {
    //check object location
    console.log(' location is ' +  JSON.stringify(agent.parameters.location));
    if(agent.parameters.location.city) {

        //do smthing 
    }
    else if (agent.parameters.location.admin-area){
      agent.add(`this is not recognized ` +agent.parameters.location.admin-area); 
    }else{
     //....
    }
  }

关键是,我在编辑器中收到一个警告标志,说 "区域未定义",但我可以从Firebase控制台看到它的值。

{"country":"","city":"","admin-area":"Piemonte","business-name":"","street-address":"","zip-code":"","shortcut":"","island":"","subadmin-area":""}

有什么线索吗?

javascript dialogflow
1个回答
0
投票

你被一个JavaScript语法问题绊倒了。

表达式

agent.parameters.location.admin-area

正在评估为

agent.parameters.location.admin - area

即是说 agent.parameters.location.admin 减去 area导致错误的原因是,正如错误所说,"location "的 "区域 "属性没有定义。

在这个。agent.parameters.location 是一个对象,JavaScript提供了两种方式来访问对象的属性。

  • 您可以使用括号符号 [expression] 其中,括号内的表达式应该评估为对象的一个属性名称。通常这需要是一个字符串。
  • 在某些情况下,你可以使用点符号。.name 其中name是属性的名称。但这是假设名称中没有其他JavaScript语法使用的字符。

请注意 "expression "和 "name "之间的区别。第一个可以让你使用一个带有字符串的变量,或者其他你计算出来的东西。第二种需要你硬编码。

在你的例子中,你可以使用括号符号来获得你想要的值。所以像这样

agent.parameters.location["admin-area"]

应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.