我正在尝试使用
electron
和 whatsapp-web.js
构建一个 Whatsapp 机器人。该机器人可以正常发送文本等普通消息,但是当我尝试传递图像时,它会抛出此错误:
Server stdout: Error: Evaluation failed: a
at ExecutionContext._ExecutionContext_evaluate (D:\Projects\Web\Projects\Whatsapp Sender\node_modules\puppeteer-core\lib\cjs\puppeteer\common\ExecutionContext.js:229:15)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async ExecutionContext.evaluate (D:\Projects\Web\Projects\Whatsapp Sender\node_modules\puppeteer-core\lib\cjs\puppeteer\common\ExecutionContext.js:107:16)
at async Client.sendMessage (D:\Projects\Web\Projects\Whatsapp Sender\node_modules\whatsapp-web.js\src\Client.js:938:28)
at async D:\Projects\Web\Projects\Whatsapp Sender\server\script.js:167:17
我的代码:
var media = MessageMedia.fromFilePath(image_path);
console.log(media);
await client.sendMessage(groups[0]._serialized, media, {
caption: message,
});
我调试了我的代码,什么也没有。我发送图像的方式是让用户选择图像并将其转换为 html 中的 base64。当他单击发送时,base64 会重新转换回本地路径(如
project/data/image.jpg
)中的图像,然后在 MessageMedia.fromFilePath
方法中使用该路径。我确保图像已保存且路径正确。 groups[0] 也返回该号码和经过身份验证的号码之间的第一个公共组,并且它工作得很好。有人可以帮助我吗?
编辑:
我发现这种方式没有传递MessageMedia对象中的data参数,所以我尝试像
new MessageMedia('image/png', image //base64, fileName)
一样手动创建它,现在它显示这个错误
Server stdout: Error: Evaluation failed: DOMException: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.
at window.WWebJS.mediaInfoToFile (pptr://__puppeteer_evaluation_script__:520:35)
at window.WWebJS.processMediaData (pptr://__puppeteer_evaluation_script__:317:36)
at window.WWebJS.sendMessage (pptr://__puppeteer_evaluation_script__:19:39)
at pptr://__puppeteer_evaluation_script__:10:45
at ExecutionContext._ExecutionContext_evaluate (D:\Projects\Web\Projects\Whatsapp Sender\node_modules\puppeteer-core\lib\cjs\puppeteer\common\ExecutionContext.js:229:15)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async ExecutionContext.evaluate (D:\Projects\Web\Projects\Whatsapp Sender\node_modules\puppeteer-core\lib\cjs\puppeteer\common\ExecutionContext.js:107:16)
at async Client.sendMessage (D:\Projects\Web\Projects\Whatsapp Sender\node_modules\whatsapp-web.js\src\Client.js:938:28)
at async D:\Projects\Web\Projects\Whatsapp Sender\server\script.js:167:17
解决方案是使用
MessageMedia
本身而不是.fromFilePath()
,我仍然不知道为什么使用.fromFilePath()
时数据不包含任何内容,但我尝试使用
var media = new MessageMedia(
`image/${fileExtension}`,
encoded_image, // => base64
fileName
);
现在效果很好。所以主要原因是我试图发送一张空图像