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

使用electron+whatsapp-web.js开发WhatsApp机器人发送图片报错求助

解决WhatsApp机器人发送图片的报错问题

第一个报错:Error: Evaluation failed: a(使用MessageMedia.fromFilePath时)

这个报错通常和文件路径、权限或库版本相关,按以下步骤排查修复:

  • 强制使用绝对路径
    相对路径在Electron环境中容易出现解析异常,用Node.js的path模块生成绝对路径:

    const path = require('path');
    // 替换为你的图片实际相对路径
    const absoluteImagePath = path.resolve(__dirname, 'project/data/image.jpg');
    const media = MessageMedia.fromFilePath(absoluteImagePath);
    console.log(media); // 确认media对象的data属性不为空值
    await client.sendMessage(groups[0]._serialized, media, { caption: message });
    
  • 检查文件状态与权限

    • 手动打开图片文件,确认文件未损坏
    • 避免将图片存放在系统权限严格的目录(如C盘根目录),开发模式下优先用项目内的相对目录
  • 修复库版本兼容问题
    部分旧版本whatsapp-web.js对本地文件读取存在bug,尝试升级到最新稳定版:

    npm install whatsapp-web.js@latest
    

第二个报错:DOMException: Failed to execute 'atob' on 'Window'(手动创建MessageMedia时)

这个问题是base64字符串格式错误导致的,前端传来的base64通常带前缀,必须先清理干净:

// 假设前端传来的base64存储在image变量中
// 1. 移除base64前缀(如data:image/png;base64,)
const cleanBase64 = image.replace(/^data:image\/(png|jpeg|jpg);base64,/, '');
// 2. 清除所有空格、换行等无效字符
const pureBase64 = cleanBase64.trim().replace(/\s+/g, '');
// 3. 匹配实际图片类型创建对象(jpg用image/jpeg,png用image/png)
const media = new MessageMedia('image/png', pureBase64, 'image.png');
await client.sendMessage(groups[0]._serialized, media, { caption: message });

注意:图片的MIME类型必须和实际文件格式一致,不要硬写固定值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:35:58