如何从参数中获取参数值?
How do I get parameter value from arguments?
我正在尝试将 google 操作的参数值传递给我的 fulfillment。
但是,我不能只获取参数值。我应该如何才能从参数中获得 newName
字段下的 "Asda"?我是否必须从 conv
(如 conv.inputs.arguments[1].rawText
)中提取它?如果是这样,那么给参数命名的目的是什么?
请求 JSON 来自 Google 操作:
{
"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"
}
}
如果您的 'newName' 是在 dialogflow 中定义的参数,那么您可以像这样使用 conv 轻松访问它:
let newN = conv.parameters['newName'];
您似乎想按名称获取 Actions SDK argument,然后您可以使用:
const newName = conv.arguments.get('newName')
这将 return 参数的 rawText
。
参数检索非常复杂,因此实际上有 4 种方法可以通过名称或列表检索参数。
conv.arguments.get
(这是 conv.arguments.parsed.get
的快捷方式)将根据名称 return 推断 属性 排除 name
和 status
和 returning 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;
}
我正在尝试将 google 操作的参数值传递给我的 fulfillment。
但是,我不能只获取参数值。我应该如何才能从参数中获得 newName
字段下的 "Asda"?我是否必须从 conv
(如 conv.inputs.arguments[1].rawText
)中提取它?如果是这样,那么给参数命名的目的是什么?
请求 JSON 来自 Google 操作:
{
"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"
}
}
如果您的 'newName' 是在 dialogflow 中定义的参数,那么您可以像这样使用 conv 轻松访问它:
let newN = conv.parameters['newName'];
您似乎想按名称获取 Actions SDK argument,然后您可以使用:
const newName = conv.arguments.get('newName')
这将 return 参数的 rawText
。
参数检索非常复杂,因此实际上有 4 种方法可以通过名称或列表检索参数。
conv.arguments.get
(这是 conv.arguments.parsed.get
的快捷方式)将根据名称 return 推断 属性 排除 name
和 status
和 returning 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;
}