我正在尝试将参数值从Google操作传递到我的履行。
但是,我无法获得参数值。我怎么能只得到" Asda"在论证的newName
字段下?我是否必须从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"
}
}
答案 0 :(得分:1)
您希望按名称获取Actions SDK argument,然后您可以使用:
const newName = conv.arguments.get('newName')
这将返回参数的rawText
。
参数检索非常复杂,因此实际上有4种方法可以通过名称或列表来检索参数。
conv.arguments.get
(这是conv.arguments.parsed.get
的快捷方式)将按名称获取参数,返回推断的属性,不包括name
和status
,并返回textValue
最后的优先事项。
conv.arguments.status.get
可用于按名称获取status
参数。
最常见的用例是只有一个参数,所以有一个快捷方式可以通过你提到的intent处理程序检索单个参数。
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;
}
答案 1 :(得分:0)
如果你的'newName'是在dialogflow中定义的参数,那么你可以像这样使用conv轻松访问它:
let newN = conv.parameters['newName'];