You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dialogflow&Google Actions中设置final_response?解决MediaObject报错

解决Dialogflow中"final_response must be set"错误的正确姿势

看起来你踩了Actions on Google客户端库的一个常见坑——同时混用了conv.ask()和conv.close(),这俩方法是互斥的,直接导致系统搞不清你到底要结束对话还是继续等用户回复,所以才抛出这个错误。下面给你拆解正确的处理方式:

核心错误原因

你代码里同时写了conv.ask(new Suggestions(...))和conv.close(new Medi...),这就矛盾了:

  • conv.ask()是告诉系统「我要继续对话,等用户回复」
  • conv.close()是告诉系统「这是最后一条响应,对话结束」
    同时调用这俩,系统就懵了,自然会报错说"final_response must be set"。

正确的MediaObject使用代码

首先要明确你的需求:是播放音频后结束对话,还是播放后继续和用户交互?

场景1:播放音频后结束对话

这时候要完全移除conv.ask()的调用,用conv.close()发送包装好的MediaResponse(注意MediaObject不能直接发,必须包在MediaResponse里):

// 先确保导入了必要的类
const { MediaObject, MediaResponse } = require('actions-on-google');

function yourFunctionHandler(agent) {
  // 获取conv对象
  let conv = agent.conv();

  // 构造你的MediaObject
  const audioFile = new MediaObject({
    name: '我的音频',
    url: 'https://your-domain.com/your-audio.mp3', // 必须是HTTPS可访问的链接
    description: '一段测试音频',
    // 可选:添加音频图标
    icon: {
      url: 'https://your-domain.com/audio-icon.png',
      alt: '音频图标'
    }
  });

  // 把MediaObject包装成MediaResponse
  const mediaResponse = new MediaResponse({
    mediaObjects: [audioFile],
    type: 'AUDIO'
  });

  // 用conv.close发送最终响应
  conv.close(mediaResponse);

  // 别忘了把conv添加到agent的响应里
  agent.add(conv);
}

场景2:播放音频后继续对话

如果播放音频后还要让用户继续操作(比如点击建议芯片),那应该用conv.ask()替代conv.close(),并且确保后续对话有对应的处理逻辑:

const { MediaObject, MediaResponse, Suggestions } = require('actions-on-google');

function yourFunctionHandler(agent) {
  let conv = agent.conv();

  const audioFile = new MediaObject({
    name: '我的音频',
    url: 'https://your-domain.com/your-audio.mp3',
    description: '一段测试音频'
  });

  const mediaResponse = new MediaResponse({
    mediaObjects: [audioFile],
    type: 'AUDIO'
  });

  // 用conv.ask发送响应,同时附加建议芯片
  conv.ask(mediaResponse);
  conv.ask(new Suggestions('再来一段', '返回主页'));

  agent.add(conv);
}

额外注意点

  • 音频URL必须是公开可访问的HTTPS链接,Actions on Google不支持HTTP或者需要权限的资源
  • 如果你用的是Dialogflow ES,要确保已经在控制台启用了Actions on Google集成
  • 代码里的类导入不能漏,否则会出现未定义的错误

内容的提问来源于stack exchange,提问作者digi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:35:38