whatsapp-web.js调用sendMessage无法发送视频问题求助
解决whatsapp-web.js无法发送视频的问题
问题背景
使用whatsapp-web.js的sendMessage方法发送媒体时,图片链接、GIF链接(以图片形式)均可正常发送,但传入视频链接或本地5MB视频时无任何反应。环境为2020款MacBook Pro M1,已尝试配置Puppeteer的executablePath,问题仍未解决。测试代码如下:
import pkg from 'whatsapp-web.js'; const { Client, LocalAuth, MessageMedia } = pkg; import qrcode from 'qrcode-terminal'; const client = new Client({ puppeteer: { executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', }, authStrategy: new LocalAuth({ dataPath: "sessions" }), webVersionCache: { type: 'remote', remotePath: 'https://raw.githubusercontent.com/wppconnect-team/wa-version/main/html/2.2412.54.html', } }); client.on('qr', qr => { qrcode.generate(qr, {small: true}); }); client.on('ready', async () => { console.log('Pret'); const media = await MessageMedia.fromUrl('https://runex-fitness.com/wp-content/uploads/2024/05/Elegant-Beige-Launching-Soon-Instagram-Reel-2-1.mp4'); await client.sendMessage("120363276528243349@g.us", media); }); client.on('message_ack', (message, ack) => { console.log(`Message ack received: ${ack}`); }); client.initialize();
解决方案
1. 捕获错误信息定位问题
首先在代码中添加try-catch块,捕获MessageMedia.fromUrl和sendMessage过程中的具体错误,这是排查问题的核心步骤:
client.on('ready', async () => { console.log('Pret'); try { const media = await MessageMedia.fromUrl('https://runex-fitness.com/wp-content/uploads/2024/05/Elegant-Beige-Launching-Soon-Instagram-Reel-2-1.mp4'); console.log('媒体加载成功,MIME类型:', media.mimetype); const sendResult = await client.sendMessage("120363276528243349@g.us", media); console.log('消息发送结果:', sendResult); } catch (error) { console.error('视频发送错误:', error); } });
通过错误信息可直接定位是视频格式不兼容、网络问题还是库的内部错误。
2. 确保视频符合WhatsApp格式要求
WhatsApp仅支持特定编码的MP4视频:
- 视频编码:H.264
- 音频编码:AAC
- 分辨率:建议不超过1080p
使用ffmpeg命令检查视频编码:
ffmpeg -i 你的视频文件.mp4
若编码不符合,用ffmpeg转码:
ffmpeg -i 原视频.mp4 -c:v libx264 -c:a aac 转码后视频.mp4
3. 调整Puppeteer配置适配M1芯片
M1 Mac的Puppeteer可能需要额外的启动参数,修改客户端配置:
const client = new Client({ puppeteer: { executablePath: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--single-process', // 适配M1架构的关键参数 '--disable-gpu' ] }, // 其他配置... });
4. 本地视频使用MessageMedia.fromFilePath方法
发送本地视频时,改用同步的fromFilePath方法(无需await),避免路径或异步加载问题:
client.on('ready', async () => { console.log('Pret'); try { // 本地视频路径 const media = MessageMedia.fromFilePath('/Users/你的用户名/Desktop/test.mp4'); await client.sendMessage("120363276528243349@g.us", media); } catch (error) { console.error('本地视频发送错误:', error); } });
5. 验证WhatsApp Web手动发送可行性
先在浏览器打开WhatsApp Web,手动尝试发送目标视频:
- 若手动发送失败:说明视频本身不符合WhatsApp要求,转码或更换视频即可。
- 若手动发送成功:则问题出在whatsapp-web.js的配置或版本,可尝试更换web版本缓存的链接,使用更稳定的WhatsApp Web版本。
内容的提问来源于stack exchange,提问作者Abdel
相关产品推荐
相关产品推荐

