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

部署DialogFlow CX webhook到Google Cloud Functions报EADDRINUSE:8080错误

问题原因

你使用的代码是面向本地运行、普通Node.js服务环境编写的,不符合Google Cloud Function的代码规范:
Google Cloud Function运行时会自动处理HTTP请求监听、端口分配,你代码里的app.listen(port, ...)主动监听8080端口,会和云函数平台本身已经占用的8080端口冲突,因此触发EADDRINUSE报错。同时你package.json中的start脚本也是普通Node服务的启动配置,云函数无需该配置。

修复方案

1. 替换index.js代码

不需要自行初始化express服务、配置bodyParser、监听端口,直接按照云函数规范导出HTTP处理函数即可:

'use strict';

exports.bmiWebhook = (req, res) => {
  const params = req.body.sessionInfo.parameters;
    
  var heightnumber = params["height.number"];
  var weightnumber = params["weight.number"];
  var heightunit = params["height.unit-height"]
  var weightunit = params["weight.unit-weight"]
  var computedBMI;

  if (heightunit == "cm" && weightunit == "kg") { //使用公制单位
    computedBMI = ((weightnumber/heightnumber/heightnumber )) * 10000;
  } else if (heightunit == "in" && weightunit == "lb") { //使用英制单位
    computedBMI = ((weightnumber/heightnumber/heightnumber )) * 703;
  }

  const replyBMI = {
    'fulfillmentResponse': {
      'messages': [
        {
          'text': {
            'text': [
              'This is a response from webhook! BMI is ' + computedBMI
            ]
          }
        }
      ]
    }
  }
  res.send(replyBMI);
};

2. 替换package.json配置

删除不必要的start脚本,更新Node版本到兼容版本,也不需要额外引入express和body-parser依赖,云函数运行环境已经内置了请求解析能力:

{
  "name": "cx-test-functions",
  "version": "0.0.1",
  "author": "Google Inc.",
  "main": "index.js",
  "engines": {
    "node": "16.x"
  },
  "dependencies": {}
}

3. 调整云函数配置

部署前在云函数的「运行时、构建、连接」设置页,找到「入口点」配置项,将值修改为你导出的函数名bmiWebhook,再重新部署即可解决端口占用报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 23:21:02