javascript - 如何从参数中获取参数值?
问题描述
我正在尝试将参数值从谷歌操作传递给我的履行。但是,我无法仅获取参数值。我应该如何才能newName
从论点中仅获得“Asda”?我必须从conv
(如conv.inputs.arguments[1].rawText
)中提取它吗?如果是这样,那么为参数命名的目的是什么?
从 Google 操作请求 JSON:
{
"user": {
"userId": "ABwppHEAPgcgb2yFUFURYFEJGg4VdAVcL9UKO9cS7a7rVfAMr9ht67LzgrmMseTvb5mmJjbjj7UV",
"locale": "en-US",
"lastSeen": "2018-05-15T01:08:55Z",
"userStorage": "{\"data\":{}}"
},
"conversation": {
"conversationId": "1526346570079",
"type": "NEW"
},
"inputs": [
{
"intent": "com.example.test.RENAME",
"rawInputs": [
{
"inputType": "KEYBOARD",
"query": "Talk to GoTestApp to rename Asda"
}
],
"arguments": [
{
"name": "trigger_query",
"rawText": "rename Asda",
"textValue": "rename Asda"
},
{
"name": "newName",
"rawText": "Asda",
"textValue": "Asda"
}
]
}
],
"surface": {
"capabilities": [
{
"name": "actions.capability.MEDIA_RESPONSE_AUDIO"
},
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
},
{
"name": "actions.capability.WEB_BROWSER"
}
]
},
"isInSandbox": true,
"availableSurfaces": [
{
"capabilities": [
{
"name": "actions.capability.SCREEN_OUTPUT"
},
{
"name": "actions.capability.AUDIO_OUTPUT"
}
]
}
]
}
我的履行方面的代码:
app.intent('com.example.test.RENAME', (conv, input, arg) => {
console.log(input); //print Talk to GoTestApp to rename Asda
console.log(arg); //only print "rename Asda"
console.log(arg[1]) //only print "e"
}
行动包行动:
"name": "RENAME",
"intent": {
"name": "com.example.test.RENAME",
"parameters": [{
"name": "newName",
"type": "SchemaOrg_Text"
}],
"trigger": {
"queryPatterns": [
"rename $SchemaOrg_Text:newName"
]
}
},
"fulfillment": {
"conversationName": "example"
}
}
解决方案
看起来您想按名称获取Actions SDK 参数,然后您可以使用:
const newName = conv.arguments.get('newName')
这将返回rawText
参数的。
参数检索非常复杂,因此实际上有 4 种方法可以按名称或按列表检索参数。
conv.arguments.get
(它是 的快捷方式conv.arguments.parsed.get
)将按名称获取参数,返回推断的属性,排除name
和status
并textValue
以最后优先级返回。
conv.arguments.status.get
可用于status
按名称获取参数。
最常见的用例是只有一个参数时,因此有一个快捷方式可以通过您提到的意图处理程序检索单个参数。
app.intent('intent.name', (conv, input, arg, status) => {
console.log(arg); // print the parsed single argument like `rawText` if exists
console.log(status) // print the single argument status if exists
}
要在不进行任何推断解析的情况下按名称获取原始参数,您可以使用conv.arguments.raw.get
. 然后你可以手动提取出类似rawText
或textValue
你自己的属性。
对于这些参数中的每一个 getter,都有一种相应的方法可以使用数组按顺序检索:conv.arguments.parsed.list
、conv.arguments.status.list
和conv.arguments.raw.list
。
conv.arguments
对于原始值也是可迭代的,所以如果你想遍历原始参数,只需执行以下操作:
for (const arg of conv.arguments) {
const value = arg.rawText;
}
推荐阅读
- python - 无法使用 pip 安装 python-krb5
- c# - 在列表视图中搜索后如何重新加载项目
- javascript - 如何随机化 div 中按钮的顺序?
- nativescript-angular - 使用 Nativescript RadDataForm:“typeof com”类型上不存在属性“telerik”
- c# - An item with the same key has already been added - Visual Studio Stops Responding
- java - 尝试在空对象引用 RecyclerView 适配器错误上调用虚拟方法“int java.util.ArrayList.size()”
- java - 合并排序无法正常工作。数组中的数字未排序
- javascript - 在 mouseover/mouseout 上更新布尔值
- python - 将预训练的词嵌入添加到编码器解码器中
- android - 如何添加网址
在network-security-config.xml文件Android中动态