如何将Google Assistant自定义操作与智能家居操作关联至同一后端服务器
双SDK绑定同一后端的实现方案
- 核心实现逻辑:两个SDK的请求来源互相独立,仅需在后端拆分不同路由分别承接即可,原有业务逻辑无需大幅修改。
- 第一步:服务端依赖安装与路由配置
以Express框架为例,先安装所需依赖:
服务端代码示例:npm install express @assistant/conversation actions-on-googleconst express = require('express'); const { conversation } = require('@assistant/conversation'); const { smarthome } = require('actions-on-google'); const app = express(); // 统一解析JSON请求体,两个SDK均可复用 app.use(express.json()); // 可在此处添加统一的鉴权中间件,两个路由的请求都会先经过校验,实现用户身份打通 app.use((req, res, next) => { // 你的统一鉴权逻辑,比如解析Authorization头验证用户身份 next(); }); // 初始化自定义对话操作实例,原有自定义操作逻辑直接复用即可 const conversationApp = conversation({debug: false}); conversationApp.handle('你的自定义意图名', conv => { conv.add('自定义操作返回内容'); }); // 初始化智能家居操作实例,原有智能家居逻辑直接复用即可 const smarthomeApp = smarthome({debug: false}); smarthomeApp.onSync(async (body, headers) => { return { requestId: body.requestId, payload: { agentUserId: '绑定的用户ID', devices: [] // 你的设备列表配置 } }; }); smarthomeApp.onExecute(async (body, headers) => { // 设备控制逻辑 }); smarthomeApp.onQuery(async (body, headers) => { // 设备状态查询逻辑 }); // 两个SDK分别挂载到不同路由 app.post('/webhook/conversation', conversationApp); app.post('/webhook/smarthome', smarthomeApp); // 启动服务,生产环境需要对外暴露HTTPS 443端口 app.listen(3000, () => { console.log('服务运行在端口3000'); }); - 第二步:Google Action控制台配置修改
分别找到两个操作对应的fulfillment配置项,填写对应的后端地址即可:自定义操作的webhook地址:
https://你的后端域名/webhook/conversation
智能家居操作的webhook地址:https://你的后端域名/webhook/smarthome - 注意事项:
- 后端必须支持HTTPS协议,Google官方不接受HTTP协议的webhook地址,本地调试可以用ngrok等工具临时生成HTTPS公网地址测试。
- 如果两个操作对应同一个Google Cloud项目,也可以在同一个Action控制台内配置不同的触发入口绑定对应路由,无需拆分项目管理。
内容的提问来源于stack exchange,提问作者mdeval
相关产品推荐
相关产品推荐

