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

如何在JavaScript中创建会话存储WhatsApp二维码以避免重复扫码?

解决WhatsApp聊天机器人重复扫描二维码的问题

核心思路

会话数据是whatsapp-web.js用来验证已登录状态的凭证,我们需要把首次登录后的会话数据保存到本地文件,下次启动时加载这个文件,就能跳过扫码步骤。

完整实现代码

先确保安装必要依赖:

npm install whatsapp-web.js qrcode-terminal dotenv fs

替换你的初始代码为以下内容:

const { Client } = require('whatsapp-web.js');
const qrcode = require('qrcode-terminal');
const fs = require('fs');
require('dotenv').config();

// 定义会话数据存储的本地文件路径
const SESSION_FILE_PATH = './session.json';

// 尝试读取已保存的会话数据
let sessionData;
try {
    sessionData = require(SESSION_FILE_PATH);
} catch (err) {
    // 文件不存在时会话数据为undefined
    sessionData = undefined;
}

// 初始化客户端,传入会话数据(如果有)
const client = new Client({
    session: sessionData,
    multidevice: true // 必须启用,适配新版WhatsApp多设备协议
});

// 监听认证成功事件,保存会话数据到本地文件
client.on('authenticated', (session) => {
    sessionData = session;
    fs.writeFile(SESSION_FILE_PATH, JSON.stringify(session), (err) => {
        if (err) {
            console.error('保存会话数据失败:', err);
        } else {
            console.log('会话数据已保存,下次启动无需扫码');
        }
    });
});

// 监听二维码生成事件,输出到终端
client.on('qr', (qr) => {
    qrcode.generate(qr, { small: true });
    console.log('请扫描上方二维码完成登录');
});

// 监听认证失败事件,删除失效的会话文件
client.on('auth_failure', () => {
    console.log('会话已过期或无效,请重新扫码登录');
    if (fs.existsSync(SESSION_FILE_PATH)) {
        fs.unlinkSync(SESSION_FILE_PATH);
    }
});

// 客户端就绪提示
client.on('ready', () => {
    console.log('客户端已就绪!');
});

// 启动客户端
client.initialize();

代码说明

  • 会话数据读取:启动时自动读取本地session.json文件,若文件存在则直接复用会话,跳过扫码流程。
  • 会话持久化:首次登录成功后,authenticated事件会返回有效会话数据,我们将其写入本地文件保存。
  • 失效处理:若会话过期或无效,auth_failure事件触发时自动删除旧会话文件,下次启动会重新生成二维码。
  • 多设备支持:multidevice: true是必填配置,适配新版WhatsApp的多设备协议,否则会话存储功能会失效。

你之前代码的问题

你使用的create({session: ...})并非whatsapp-web.js的正确用法,正确方式是在实例化Client时,通过构造函数传入session配置项,而非调用create方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:40:03