我在一个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语法问题绊倒了。
表达式
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"]
应该可以。