我在对话流代理的意图中使用系统实体@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
,这会导致错误,因为正如错误所说,没有定义"位置"的"区域"属性。
在这里,agent.parameters.location
是一个对象,JavaScript提供了两种访问对象属性的方法。
- 可以使用括号表示法
[expression]
其中括号内的表达式应计算为对象的属性名称。通常这需要是一个字符串。 - 在某些情况下,可以使用点表示法
.name
其中名称是属性的名称。但这假设该名称没有其他 JavaScript 语法使用的字符。
请注意"表达式"和"名称"之间的区别。第一个允许您使用包含字符串的变量,或者您计算的其他内容。第二个需要你对其进行硬编码。
在您的情况下,您可以使用括号表示法来获取所需的值。所以像
agent.parameters.location["admin-area"]
应该工作。