Google Assistant技能开发:自定义Payload能否播放音频及JS调用欢迎意图
嘿,我来帮你解决Google Assistant动作开发里的这几个问题,结合我做这类开发的经验给你梳理清楚~
1. 能否用自定义Payload播放音频?
当然可以!Google Assistant支持通过自定义Payload返回媒体响应,只要你的Payload符合它的规范就行。下面是一个完整的音频播放Payload示例,你可以直接在Webhook里返回这个结构:
// 自定义音频播放Payload const audioPayload = { "payload": { "google": { "expectUserResponse": false, // 播放音频后如果不需要用户后续响应,设为false即可 "richResponse": { "items": [ { "mediaResponse": { "mediaType": "AUDIO", "mediaObjects": [ { "name": "欢迎音频", "contentUrl": "https://your-audio-url.mp3", // 替换成你的公开HTTPS音频地址 "description": "欢迎语音频", "icon": { "url": "https://your-icon-url.png" // 可选,音频封面图 } } ], "supportsPlaybackControls": true // 是否显示播放/暂停控件 } } ] } } } };
你只需要把contentUrl替换成公开可访问的HTTPS音频地址(MP3格式最佳),然后在对应的意图处理函数里返回这个Payload就可以了。
2. 让欢迎意图返回音频响应
有两种简单的实现方式,推荐第二种更简洁的官方库方案:
方式一:用自定义Payload直接返回
在欢迎意图的Webhook处理函数里,直接返回上面的audioPayload:
function welcomeIntent(agent) { agent.add(audioPayload); } // 绑定意图到处理函数 let intentMap = new Map(); intentMap.set('Welcome Intent', welcomeIntent); agent.handleRequest(intentMap);
方式二:用Actions on Google客户端库(更清晰易维护)
如果你用actions-on-google这个npm包,不用自己写全Payload,直接调用封装好的方法:
const { dialogflow, Media } = require('actions-on-google'); const app = dialogflow(); app.intent('Welcome Intent', (conv) => { conv.close(new Media({ name: '欢迎音频', url: 'https://your-audio-url.mp3', description: '欢迎语音频', icon: { url: 'https://your-icon-url.png' } })); }); // 导出给Webhook使用 exports.yourFulfillment = app;
官方库会帮你处理Payload的格式细节,减少出错概率,代码也更清爽。
3. 在JS中调用欢迎意图(触发另一个意图)
如果你想在某个意图的逻辑里触发欢迎意图,直接调用函数不是正确的做法——因为Google Assistant的意图触发是由Dialogflow的会话流程控制的。正确的方式是返回一个跟进事件(followup event),让Dialogflow自动触发对应的欢迎意图。
步骤如下:
- 先在Dialogflow的欢迎意图里添加一个触发事件(比如命名为
welcome_event); - 在其他意图的处理函数里,用代码返回这个事件:
function someOtherIntent(agent) { // 返回跟进事件,触发欢迎意图 agent.setFollowupEvent('welcome_event'); // 这里的名称要和你在Dialogflow里设置的事件名一致 }
这样Dialogflow就会自动跳转到欢迎意图的处理逻辑,执行对应的音频返回逻辑。
最后提醒下:音频文件必须是HTTPS的,而且格式要支持(MP3、AAC等),不然Google Assistant会无法播放哦。
内容的提问来源于stack exchange,提问作者Mariette Edel
相关产品推荐
相关产品推荐

