如何解决Render部署的WhatsApp-web.js会话10分钟自动关闭问题
解决Render平台上WhatsApp-web.js会话10分钟关闭的问题
核心原因
Render的基础/免费实例会在10分钟无外部请求时自动休眠,导致WhatsApp-web.js依赖的Puppeteer页面被强制关闭,触发会话断开的报错。同时,会话持久化配置不当会加剧实例重启后的登录失效问题。
具体解决方法
1. 阻止Render实例休眠
- 若使用付费实例:在Render服务设置中开启**"Always On"**选项,实例会持续运行,不会因闲置休眠。
- 若使用免费实例:添加健康检查接口,并通过外部定时请求模拟活跃流量。示例代码:
用定时任务工具(如cron)每分钟向你的Render服务URL发送const express = require('express'); const app = express(); // 健康检查接口,供定时请求调用 app.get('/health', (req, res) => { res.status(200).send('OK'); }); app.listen(process.env.PORT || 3000);GET /health请求,避免实例被判定为闲置。
2. 配置WhatsApp-web.js会话持久化
- 启用会话存储,避免实例重启后需重新扫码登录。示例代码:
const { Client, LocalAuth } = require('whatsapp-web.js'); const client = new Client({ authStrategy: new LocalAuth({ dataPath: './.wwebjs_auth' // 自定义会话存储路径 }) }); // 确保Render的存储目录持久化:在服务设置中配置Persistent Disk,将上述路径指向持久化磁盘
3. 添加断开重连逻辑
- 监听客户端断开事件,自动重启恢复连接:
client.on('disconnected', (reason) => { console.log('客户端断开:', reason); // 延迟5秒后重启客户端 setTimeout(() => client.initialize(), 5000); });
4. 优化Puppeteer启动参数
- 调整参数减少资源占用,避免页面被强制关闭:
const client = new Client({ authStrategy: new LocalAuth(), puppeteer: { args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--single-process', '--disable-gpu' ], headless: true, timeout: 0 // 取消超时限制 } });
内容的提问来源于stack exchange,提问作者Md Sahil Arts
相关产品推荐
相关产品推荐

