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

Dialogflow Webhook添加HTTP请求后报错:'final_response'必须设置

解决Dialogflow Webhook添加HTTP请求后出现的MalformedResponse错误

嘿,我之前在Dialogflow开发Webhook的时候也踩过这个一模一样的坑!你遇到的MalformedResponse 'final_response' must be set错误,核心问题其实是你的Webhook没有返回Dialogflow要求的正确响应结构,再加上异步HTTP请求的错误处理没做全,导致Dialogflow收不到符合规范的最终响应。

问题出在哪?

看你的代码,你在http.get的end事件里resolve("OK"),但Dialogflow的Webhook响应不能只是简单的字符串——它需要一个包含特定字段的JSON对象,用来告诉Dialogflow该给用户返回什么内容。另外,你的代码里没有处理HTTP请求可能出现的错误(比如网络问题、API返回错误),如果请求失败,Promise会一直处于pending状态,Dialogflow等不到响应也会抛出这个错误。

修正方案

我给你改一下代码,重点做两个调整:

  1. 构造符合Dialogflow要求的响应结构
  2. 完善异步请求的错误处理
function askMovie(response) {
  return new Promise((resolve, reject) => {
    http.get('http://www.omdbapi.com/?apikey=[MY_HIDDEN_API_KEY]&s=lego', res => {
      let raw = '';
      
      res.on('data', chunk => raw += chunk);
      
      res.on('end', () => {
        // 这里构造Dialogflow期望的响应格式,用fulfillmentMessages返回文本
        const finalResponse = {
          fulfillmentMessages: [
            {
              text: {
                text: ["OK, 我已经获取到乐高相关的电影数据啦!"]
              }
            }
          ]
        };
        resolve(finalResponse);
      });
      
      // 处理HTTP响应过程中的错误
      res.on('error', (err) => {
        console.error('响应错误:', err);
        reject(err);
      });
    }).on('error', (err) => {
      // 处理HTTP请求发起时的错误
      console.error('请求错误:', err);
      reject(err);
    });
  });
}

额外注意事项

  • 如果你的Dialogflow用的是v3版本,响应结构可以参考官方的最新规范,但核心都是要返回包含fulfillmentMessages或fulfillmentText的对象,不能直接返回字符串。
  • 确保你的Webhook最终返回的是JSON格式,并且HTTP响应的Content-Type头设置为application/json,不然Dialogflow也会解析失败。
  • 如果请求OMDB API后需要处理返回的电影数据,你可以在end事件里把raw转成JSON,然后根据数据生成更个性化的响应内容。

内容的提问来源于stack exchange,提问作者Alex R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:44:46