使用Node.js+Express调用WhatsApp Cloud API发消息遇read ECONNRESET错误求助
解决WhatsApp Cloud API调用时的read ECONNRESET错误
我用Node.js的Express框架开发一个需要发送WhatsApp消息的项目,这是第一次接触WhatsApp Cloud API,虽然已经读了官方文档并写了实现代码,但运行时遇到了read ECONNRESET错误,代码如下:
axios({ method: 'POST', url: 'https://graph.facebook.com/v14.0/Phone Number ID/messages', data: { message_product: 'whatsapp', to: 'client number', type: "template", template: { name: "hello_world", language: { code: "en_US" } }, }, headers: { "Authorization": "Bearer + token", "Content-Type": "application/json" } }).then(result => { console.log(result) }).catch(err => { console.log(err.message) })
问题分析与修复方案
read ECONNRESET一般是请求连接被对方重置导致的,结合代码来看,主要有几个明显问题需要修正:
URL占位符未替换
代码里的Phone Number ID是占位符,必须替换成Meta后台里实际的WhatsApp电话号码ID(一串数字),比如10XXXXXXXXX。Authorization头语法错误
头里的"Bearer + token"写法错误,正确的应该是把Bearer和实际访问令牌拼接,比如用模板字符串:"Authorization": `Bearer ${yourAccessToken}`或者字符串拼接:
"Authorization": "Bearer " + yourAccessToken注意
Bearer后面有一个空格,令牌要确保有效且拥有发送消息的权限。接收号码格式错误
to字段的client number需要替换成带国家码的完整手机号,比如+12345678900;如果是沙箱环境,这个号码必须是你在Meta后台添加的已验证测试号码。API版本过旧
v14.0版本较老,Meta可能已停止对旧版本的部分支持,建议升级到较新的版本(比如v18.0),URL改成https://graph.facebook.com/v18.0/你的号码ID/messages。
额外检查点
- 确认网络可以正常访问
graph.facebook.com,没有被防火墙或代理拦截; - 检查
hello_world模板是否在你的WhatsApp业务账户中存在,且语言代码en_US正确; - 确保访问令牌未过期,且拥有
whatsapp_business_messaging相关权限。
修复后的示例代码:
const yourPhoneNumberId = '10XXXXXXXXX'; // 替换成实际的号码ID const yourAccessToken = 'EAABXXXXXXXXX'; // 替换成实际的访问令牌 const clientPhoneNumber = '+12345678900'; // 替换成实际的客户号码 axios({ method: 'POST', url: `https://graph.facebook.com/v18.0/${yourPhoneNumberId}/messages`, data: { message_product: 'whatsapp', to: clientPhoneNumber, type: "template", template: { name: "hello_world", language: { code: "en_US" } } }, headers: { "Authorization": `Bearer ${yourAccessToken}`, "Content-Type": "application/json" } }).then(result => { console.log('消息发送成功:', result.data) }).catch(err => { console.error('发送失败:', err.response?.data || err.message) })
内容的提问来源于stack exchange,提问作者djibril mugisho
相关产品推荐
相关产品推荐

