使用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
相关产品推荐
相关产品推荐

