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

Dialogflow Fulfillment报错Request can NOT be empty但请求非空求助

Dialogflow Fulfillment报错"Request can NOT be empty"排查与修复

你遇到的"Request can NOT be empty"报错并非因为req.body为空,而是代码中存在几个关键问题导致Webhook响应异常,被Dialogflow误判。结合你的请求日志和代码,核心问题及修复方案如下:


核心问题分析

  1. 未定义的变量触发运行时异常
    代码中使用了SELECTION_KEY_ONE、IMG_URL_AOG等常量但未声明,运行时会抛出ReferenceError,导致Webhook无法生成有效响应。

  2. 平台组件不兼容
    你使用了Actions on Google的Carousel组件,但请求来自Dialogflow Messenger(从session字段dfMessenger-73173927可判断),该组件仅适用于Google Assistant平台,无法在Dialogflow Messenger中正常渲染,同时会导致响应格式错误。

  3. WebhookClient使用方式错误
    同时调用agent.add(conv)和agent.send(conv)属于冗余操作,且非Google Assistant平台下使用conv对象会导致响应结构不符合Dialogflow要求。


修复方案

步骤1:补全未定义的常量

先声明所有用到的常量,避免运行时错误:

const SELECTION_KEY_ONE = 'menu_item_1';
const SELECTION_KEY_GOOGLE_HOME = 'menu_item_2';
const SELECTION_KEY_GOOGLE_PIXEL = 'menu_item_3';
const SELECTION_KEY_GOOGLE_ALLO = 'menu_item_4';
const IMG_URL_AOG = 'https://your-domain.com/image1.png';
const IMG_URL_GOOGLE_HOME = 'https://your-domain.com/image2.png';
const IMG_URL_GOOGLE_PIXEL = 'https://your-domain.com/image3.png';
const IMG_URL_GOOGLE_ALLO = 'https://your-domain.com/image4.png';

步骤2:使用Dialogflow Messenger兼容的Payload实现Carousel

替换Actions on Google的Carousel组件,改用Dialogflow支持的richContent格式Payload:

const { Pedido, buscaPedidos } = require('../models/PedidosModel');
const { WebhookClient, Payload } = require('dialogflow-fulfillment');

// 补全常量定义
const SELECTION_KEY_ONE = 'menu_item_1';
const SELECTION_KEY_GOOGLE_HOME = 'menu_item_2';
const SELECTION_KEY_GOOGLE_PIXEL = 'menu_item_3';
const SELECTION_KEY_GOOGLE_ALLO = 'menu_item_4';
const IMG_URL_AOG = 'https://your-domain.com/image1.png';
const IMG_URL_GOOGLE_HOME = 'https://your-domain.com/image2.png';
const IMG_URL_GOOGLE_PIXEL = 'https://your-domain.com/image3.png';
const IMG_URL_GOOGLE_ALLO = 'https://your-domain.com/image4.png';

exports.bot = async (req, res) => {  
  console.log(req.body);  
  const agent = new WebhookClient({ req, res });

  // 创建Dialogflow Messenger兼容的Carousel Payload
  const carouselPayload = new Payload(agent.UNSPECIFIED, {
    richContent: [
      [
        {
          "type": "carousel",
          "items": [
            {
              "title": "Title of First Carousel Item",
              "description": "This is a description of a carousel item.",
              "image": {
                "src": IMG_URL_AOG,
                "alt": "Image alternate text"
              },
              "button": {
                "text": "Selecionar",
                "postback": SELECTION_KEY_ONE
              }
            },
            {
              "title": "Google Home",
              "description": "Google Home is a voice-activated speaker powered by the Google Assistant.",
              "image": {
                "src": IMG_URL_GOOGLE_HOME,
                "alt": "Google Home"
              },
              "button": {
                "text": "Selecionar",
                "postback": SELECTION_KEY_GOOGLE_HOME
              }
            },
            {
              "title": "Google Pixel",
              "description": "Pixel. Phone by Google.",
              "image": {
                "src": IMG_URL_GOOGLE_PIXEL,
                "alt": "Google Pixel"
              },
              "button": {
                "text": "Selecionar",
                "postback": SELECTION_KEY_GOOGLE_PIXEL
              }
            },
            {
              "title": "Google Allo",
              "description": "Introducing Google Allo, a smart messaging app that helps you say more and do more.",
              "image": {
                "src": IMG_URL_GOOGLE_ALLO,
                "alt": "Google Allo Logo"
              },
              "button": {
                "text": "Selecionar",
                "postback": SELECTION_KEY_GOOGLE_ALLO
              }
            }
          ]
        }
      ]
    ]
  }, { sendAsMessage: true });

  agent.add(carouselPayload);
};

步骤3:验证Webhook响应

修复后,Webhook会返回符合Dialogflow要求的响应结构,避免因格式错误导致的"Request can NOT be empty"误报。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:43:14