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

使用WhatsApp-WebJS单条消息发送多张图片失败求助

使用whatsapp-web.js发送单条多图消息成功但对方未收到的解决方法

我尝试用whatsapp-web.js库在单条WhatsApp消息中发送多张图片,代码执行无报错且提示“发送成功”,但对方WhatsApp端完全看不到这条消息和图片,求解决办法确保图片能成功传输。

代码示例

const { Client, MessageMedia } = require('whatsapp-web.js');
const qrcode = require('qrcode-terminal');
const client = new Client();

client.on('qr', (qr) => {
    console.log('扫描下方二维码登录:');
    qrcode.generate(qr, { small: true });
});

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

client.initialize();

async function sendMultipleImagesFromURLs() {
    const phoneNumber = '91XXXXXXXXXX@c.us';
    const imageUrls = [
        'https://example.com/image1.jpg',
        'https://example.com/image2.jpg',
        'https://example.com/image3.jpg',
    ];

    try {
        const mediaArray = [];
        for (const imageUrl of imageUrls) {
            const media = await MessageMedia.fromUrl(imageUrl);
            mediaArray.push(media);
        }

        const msg = await client.sendMessage(phoneNumber, mediaArray);
        console.log('多张图片发送成功。');
    } catch (error) {
        console.error('发送多张图片出错:', error);
    }
}

问题细节

  • 控制台无任何错误或异常输出
  • 已确认所有图片URL可正常访问,文件存在
  • 期望实现:单条消息附带所有图片并成功送达对方WhatsApp

补充信息

  • whatsapp-web.js版本:jkr_hotfix_7分支
  • Node.js版本:v18.17.0

解决方法

1. 修正sendMessage的参数格式

这是最可能的核心问题:whatsapp-web.js发送多附件时,不能直接把媒体数组作为第二个参数传入。正确的做法是将媒体数组放在options的attachments字段中,第二个参数填消息文本(可空):

// 替换原sendMessage调用
const msg = await client.sendMessage(phoneNumber, '', {
    attachments: mediaArray
});

2. 验证媒体对象有效性

在生成MessageMedia对象时,添加日志确认每个对象是否正常生成,避免因URL获取失败导致空媒体对象:

for (const imageUrl of imageUrls) {
    const media = await MessageMedia.fromUrl(imageUrl);
    // 检查媒体对象的关键属性
    if (!media.mimetype || !media.data) {
        console.error(`获取图片失败:${imageUrl}`);
        continue;
    }
    console.log(`已加载图片:${imageUrl},MIME类型:${media.mimetype}`);
    mediaArray.push(media);
}

3. 确认目标号码有效性

发送前先验证目标号码是否已注册WhatsApp,避免因号码格式错误导致消息丢失:

async function sendMultipleImagesFromURLs() {
    const phoneNumber = '91XXXXXXXXXX@c.us';
    // 先验证号码
    const isRegistered = await client.isRegisteredUser(phoneNumber);
    if (!isRegistered) {
        console.error('目标号码未注册WhatsApp');
        return;
    }
    // 后续代码...
}

4. 延迟发送避免初始化不完整

ready事件触发时,客户端可能还未完全初始化完成,添加短暂延迟再执行发送操作:

client.on('ready', () => {
    console.log('客户端已就绪!');
    setTimeout(sendMultipleImagesFromURLs, 3000); // 延迟3秒发送
});

5. 切换到稳定版库

你使用的jkr_hotfix_7分支可能存在多附件发送的bug,建议切换到官方稳定版:

npm uninstall whatsapp-web.js
npm install whatsapp-web.js@latest

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:15:54