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

如何解决Render部署的WhatsApp-web.js会话10分钟自动关闭问题

解决Render平台上WhatsApp-web.js会话10分钟关闭的问题

核心原因

Render的基础/免费实例会在10分钟无外部请求时自动休眠,导致WhatsApp-web.js依赖的Puppeteer页面被强制关闭,触发会话断开的报错。同时,会话持久化配置不当会加剧实例重启后的登录失效问题。

具体解决方法

1. 阻止Render实例休眠

  • 若使用付费实例:在Render服务设置中开启**"Always On"**选项,实例会持续运行,不会因闲置休眠。
  • 若使用免费实例:添加健康检查接口,并通过外部定时请求模拟活跃流量。示例代码:
    const express = require('express');
    const app = express();
    
    // 健康检查接口,供定时请求调用
    app.get('/health', (req, res) => {
      res.status(200).send('OK');
    });
    
    app.listen(process.env.PORT || 3000);
    
    用定时任务工具(如cron)每分钟向你的Render服务URL发送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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:32:14