如何为非Google Smart Home SDK范畴的设备实现Google Home自定义动作?
实现Google Assistant自定义设备的语音指令与对话交互(以可移动机器人Roger为例)
刚好我之前折腾过类似的自定义设备集成,这种"Ok Google, ask [设备名] to [动作]"的模式其实不属于Google Smart Home SDK的范畴——Smart Home SDK主要是给灯、空调这类标准化设备用的,你的自定义机器人动作得用Actions on Google的对话代理来实现,和Logitech Harmony的逻辑完全一致,下面一步步给你拆解:
一、构建自定义Action实现"ask Roger to..."指令
核心是给你的机器人创建一个专属对话Agent(就是语音里喊的"Roger"),让Google Assistant能识别并转发自定义指令:
- 先去Google Actions Console创建新项目,把Agent命名为"Roger"(用户语音里的名字必须和这个一致)
- 用Actions Builder或者Dialogflow定义意图:比如创建
MoveForwardIntent和DanceIntent,分别对应"move forward"和"dance"这类动作指令 - 给每个意图加足够的训练短语:比如给
MoveForwardIntent补充"go straight"、"advance";给DanceIntent加"do a little dance"、"show me your moves",这样Google能更好识别不同表述 - 配置Fulfillment(执行逻辑):用Cloud Functions for Firebase或者自己搭的webhook,当意图被触发时,调用机器人的API(比如本地局域网的HTTP接口)执行对应动作——比如收到
MoveForwardIntent请求就给机器人发前进指令 - 测试时直接喊"Ok Google, ask Roger to move forward",Assistant会把请求转到你的自定义Action,触发对应的意图和执行逻辑
二、实现对话交互功能
要让机器人能和用户多轮对话,得利用上下文(Contexts)和动态回应:
- 给意图添加回应文本:比如
DanceIntent触发后,让Assistant回复"Got it! Roger's starting to dance 🕺",同时执行舞蹈动作 - 用上下文维护对话状态:比如用户说"ask Roger to dance"后,设置一个
DanceContext输出上下文,后续用户说"can you do it faster?",你可以创建AdjustDanceSpeedIntent,让这个意图只在DanceContext存在时触发,这样就能识别用户是在跟进之前的舞蹈请求 - 扩展实体(Entities):比如定义
Direction实体包含left/right/forward/backward,就能创建通用的MoveIntent,识别"ask Roger to move left"这类更灵活的指令
三、关键提醒
- 别死磕Smart Home SDK文档了!这种自定义对话式指令属于Actions on Google的对话代理体系,和Smart Home的标准化设备控制是两条线
- 设备访问要注意安全:如果机器人是本地设备,确保webhook能安全访问它,比如用API密钥验证,或者本地搭反向代理(记得做好权限管控)
- 发布前多测场景:在Actions Console的测试工具里模拟各种语音指令,确保意图识别准确、执行逻辑没问题,之后提交审核就能让用户正式使用了
内容的提问来源于stack exchange,提问作者vsky
相关产品推荐
相关产品推荐

