开发应用时自定义Google Home交互及Dialogflow非Intent输入处理咨询
Hey there! Let's tackle your two questions about Google Home and Dialogflow— I’ve spent plenty of time messing around with these, so I’ve got you covered.
1. 自定义Google Home的交互表达内容
在开发应用时,你有几种灵活的方式来调整Google Home的回复内容和交互方式:
- Dialogflow Intent内置响应:最简单的方法就是在Intent编辑器的「Responses」标签页里直接配置。你可以添加纯文本回复、切换多语言版本,甚至用参数占位符(比如
$userName)插入动态内容。比如捕捉到用户名字后,设置回复为“很高兴认识你,$userName”,就能让对话更个性化。 - Webhook生成动态响应:如果需要更复杂的逻辑(比如从数据库拉取数据、根据用户历史调整回复),可以给Intent启用Webhook。写一个后端服务(Node.js、Python都行),让它返回包含
fulfillmentText字段的响应,Google Home会读取这个字段作为播报内容。 - 用SSML控制语音细节:要是想调整语调、停顿甚至添加音效,可以用SSML(语音合成标记语言)。比如写
<speak>很高兴认识你,<break time="500ms"/>约翰</speak>,Google Home播报时会在名字前停顿半秒。Dialogflow允许直接在响应框里输入SSML内容。
2. 处理非Intent形式的输入并存储变量
你的场景(询问名字并捕捉回复)非常常见,在Dialogflow里可以这样实现,不用为回复单独创建Intent:
- 创建主Intent + 后续Intent:
先建一个主Intent(比如AskUserName),设置回复为“你叫什么名字?”。然后给它创建一个后续Intent,选择「User says」类型——这个后续Intent会自动捕捉用户对主Intent问题的即时回复。 - 用实体识别输入内容:
去Dialogflow的「Entities」页面创建一个自定义实体(比如@userName),添加一些常见名字作为示例,开启「Allow automated expansion」让系统能识别列表外的名字。接着在后续Intent的「Action and Parameters」里,添加一个名为userName的参数,把参数类型设为你创建的@userName实体,标记为必填项,还可以设置当用户没说清楚时的提示语。 - 存储并使用变量:
用户回复后,Dialogflow会自动把识别到的名字存入userName参数:- 在Dialogflow响应中直接使用:在回复里用占位符
$userName就行(比如“很高兴认识你,$userName”),Google Home播报时会自动替换成实际名字。 - 在Webhook中处理存储:参数会通过请求体的
queryResult.parameters传到后端,举个Node.js的例子:app.post('/webhook', (req, res) => { const userName = req.body.queryResult.parameters.userName; // 这里可以把userName存入数据库、会话存储等 res.json({ fulfillmentText: `很高兴认识你,${userName}` }); });
- 在Dialogflow响应中直接使用:在回复里用占位符
- 额外技巧:用上下文维持变量生命周期:
如果后续Intent还需要用到userName参数,在后续Intent里设置一个输出上下文(比如name_provided),让其他依赖这个上下文的Intent能继续使用该参数,这样变量就能在会话中保留。
内容的提问来源于stack exchange,提问作者Victor Attila Breelle
相关产品推荐
相关产品推荐

