Я пытаюсь создать бота WhatsApp, используя electron
и whatsapp-web.js
. Бот отлично работает с отправкой обычных сообщений, таких как текст, но когда я пытаюсь передать изображение, он выдает эту ошибку:
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.info(media);
await client.sendMessage(groups[0]._serialized, media, {
caption: message,
});
Я отладил свой код, и ничего не произошло. я отправляю изображения, позволяя пользователю выбрать изображение и преобразовать его в base64 в html. когда он нажимает кнопку «Отправить», base64 повторно преобразуется обратно в изображение по локальному пути, например project/data/image.jpg
, а затем этот путь используется в методе MessageMedia.fromFilePath
. Я убедился, что изображение сохранено и путь правильный. также groups[0] возвращает первую общую группу между этим номером и аутентифицированным номером, и это работает нормально. Кто-нибудь может мне помочь?
Обновлено:
Я обнаружил, что таким образом не передается параметр данных в объекте MessageMedia, поэтому я попытался создать его вручную, например 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
это линия await client.sendMessage(groups[0]._serialized, media, {
@DiegoD
Я действительно нашел проблему. Я вернусь к коду, воспроизведу больше и опубликую решение.
ок, спасибо за разъяснения. Говоря о более подробной ошибке, которой вы поделились, atop
— это функция js для декодирования строки base64… и она выдает ошибку, поскольку строка недействительна. Может быть, что-то не так на этапе создания строки base64?
на самом деле это происходит при загрузке изображения после его создания, как я уже сказал, я использую base64 для создания копии изображения, но по известному мне пути, чтобы я мог передать этот путь в MessageMedia. Проблема была в том, что при создании MessageMedia он не принимал никакого значения в параметре data, поэтому
Я считаю, что это потому, что я создаю изображение быстрее, чем MessageMedia может прочитать.
и ты решил это тогда? или вам все еще нужно найти способ синхронизировать операции? может быть, решением было создание медиафайла с помощью await
? Прошу прощения, если я просто даю предложения, которые больше не нужны.
нашел другой способ, напишу
Решение состоит в том, чтобы использовать сам MessageMedia
, а не .fromFilePath()
, я до сих пор не знаю, почему данные ничего не содержат при использовании .fromFilePath()
, но я пробовал использовать
var media = new MessageMedia(
`image/${fileExtension}`,
encoded_image, // => base64
fileName
);
и теперь все работало нормально. поэтому основная причина в том, что я пытался отправить пустое изображение
Evaluation failed
кажется, это связано с оценкой javascript.. вы уверены, что это связано с той частью вашего кода, которую вы показали? В любом случае выдается ошибкаat async D:\Projects\Web\Projects\Whatsapp Sender\server\script.js:167:17
.. 167... эту строку вы включили в вопрос?