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

使用whatsapp-web.js批量发消息时出现wid无效错误求助

解决whatsapp-web.js批量发送消息时的"invalid wid"错误

问题根源

  1. forEach的异步并发陷阱:forEach不会等待内部async函数执行完成,所有发送请求会同时发起,干扰WhatsApp Web的Puppeteer上下文,导致生成无效的wid(WhatsApp内部用户ID)。
  2. 批量号码存在无效值:拆分后的号码可能混入空字符串、长度不足的无效号码,触发格式错误。
  3. 频率限制触发:短时间内大量请求触发WhatsApp的反爬机制,导致接口返回异常。

修复方案

1. 改用顺序执行的循环(替代forEach)

用for...of循环替代forEach,确保每个异步操作完成后再执行下一个,避免并发冲突:

app.post("/send", async (req, res) => {
    const numbersBox = req.body.mobiles;
    // 拆分后过滤空号码,避免无效处理
    const numbers = numbersBox.split(",").map(num => num.trim()).filter(num => num);
    const message = req.body.message;

    // 顺序处理每个号码
    for (const eachNumber of numbers) {
        try {
            const sanitized_number = eachNumber.toString().replace(/[- )(]/g, "");
            // 提前检查号码长度,避免生成无效格式
            if (sanitized_number.length < 10) {
                console.log(`无效号码:${eachNumber},长度不足`);
                continue;
            }
            const final_number = `91${sanitized_number.substring(sanitized_number.length - 10)}`;
            
            const number_details = await client.getNumberId(final_number);
            if (number_details) {
                // 使用WhatsWeb认可的标准格式发送,避免wid错误
                const sendMessageData = await client.sendMessage(number_details._serialized, message);
                console.log(`消息发送成功:${final_number}`);
            } else {
                console.log(`${final_number} 未注册WhatsApp`);
            }
            // 添加延迟,降低频率限制风险,可根据情况调整时长
            await new Promise(resolve => setTimeout(resolve, 1000));
        } catch (error) {
            console.error(`发送失败 ${eachNumber}:`, error.message);
        }
    }
    res.status(200).send("批量发送任务已启动");
});

2. 关键优化点

  • 过滤无效号码:拆分后先去除空格、过滤空字符串,避免处理无效值。
  • 使用标准格式发送:number_details._serialized是WhatsApp Web内部认可的用户ID格式(如91xxxxxxxxx@c.us),比直接拼接号码更可靠。
  • 添加请求延迟:每个请求后加1秒左右的延迟,降低触发频率限制的概率。
  • 单个错误隔离:用try/catch包裹每个号码的处理逻辑,避免单个失败导致整个批量任务中断。

3. 额外检查项

  • 确保client实例已完全初始化(需在ready事件触发后再处理发送请求)。
  • 验证传入的mobiles参数格式,避免多余分隔符或无效字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:55:20