Google Assistant SDK自定义动作无法被识别,求问题排查
我帮你排查了这份Action配置文件,发现几个关键问题导致Assistant无法识别你的自定义查询,下面逐一说明并给出修正方案:
1. 自定义类型命名错误
你在types里把类型名写成了$actname,这是参数变量,不是合法的类型名称。自定义类型需要一个唯一的命名空间格式名称(比如com.example.types.ActName),这样才能和intent参数正确关联。
修正后的types部分:
"types": [ { "name": "com.example.types.ActName", "entities": [ { "key": "games", "synonyms": ["fun", "time killer"] } ] } ]
2. Intent参数类型未关联自定义实体
你的intent参数actname指定的类型是SchemaOrg_Text,但你定义了自定义实体类型,应该把参数类型指向刚创建的自定义类型,这样Assistant才能识别你设置的同义词映射。
修正后的intent.parameters部分:
"parameters": [ { "name": "actname", "type": "com.example.types.ActName" } ]
3. 设备执行命令的参数名不匹配
在deviceExecution.params里你写的是testname,但intent参数名是actname,这会导致设备端无法正确接收参数值,需要统一参数名称。
修正后的deviceExecution部分:
{ "deviceExecution": { "command": "com.example.commands.StartSomething", "params": { "actname": "$actname" } } }
4. 触发查询需包含Invocation Name
自定义Action必须通过Invocation Name唤起,你不能直接说"start games",正确的查询格式应该是:
Hey Google, ask Start Something to start games
或者
Hey Google, tell Start Something to start fun online
如果想省略Invocation Name,需要将你的intent关联到Google的内置intent(比如actions.intent.DO_SOMETHING),但对于自定义设备命令,推荐保留Invocation Name来避免冲突。
完整修正后的配置文件
{ "manifest": { "displayName": "Start Something", "invocationName": "Start Something", "category": "PRODUCTIVITY" }, "actions": [ { "name": "com.example.actions.StartSomething", "availability": { "deviceClasses": [ { "assistantSdkDevice": {} } ] }, "intent": { "name": "com.example.intents.StartSomething", "parameters": [ { "name": "actname", "type": "com.example.types.ActName" } ], "trigger": { "queryPatterns": [ "start ($com.example.types.ActName:actname)?", "start this ($com.example.types.ActName:actname)? online" ] } }, "fulfillment": { "staticFulfillment": { "templatedResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Starting $actname online" } }, { "deviceExecution": { "command": "com.example.commands.StartSomething", "params": { "actname": "$actname" } } } ] } } } } ], "types": [ { "name": "com.example.types.ActName", "entities": [ { "key": "games", "synonyms": ["fun", "time killer"] } ] } ] }
最后验证步骤
- 重新部署修正后的配置文件到你的Assistant项目
- 重启本地的Assistant SDK服务
- 使用包含Invocation Name的查询测试,比如"Hey Google, ask Start Something to start time killer online"
内容的提问来源于stack exchange,提问作者unholy_me

