Оценка не удалась: a при отправке носителя

Я пытаюсь создать бота 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
Evaluation failed кажется, это связано с оценкой javascript.. вы уверены, что это связано с той частью вашего кода, которую вы показали? В любом случае выдается ошибка at async D:\Projects\Web\Projects\Whatsapp Sender\server\script.js:167:17 .. 167... эту строку вы включили в вопрос?
Diego D 08.04.2024 14:49

это линия await client.sendMessage(groups[0]._serialized, media, { @DiegoD

Omar Yacop 08.04.2024 14:52

Я действительно нашел проблему. Я вернусь к коду, воспроизведу больше и опубликую решение.

Omar Yacop 08.04.2024 14:57

ок, спасибо за разъяснения. Говоря о более подробной ошибке, которой вы поделились, atop — это функция js для декодирования строки base64… и она выдает ошибку, поскольку строка недействительна. Может быть, что-то не так на этапе создания строки base64?

Diego D 08.04.2024 14:57

на самом деле это происходит при загрузке изображения после его создания, как я уже сказал, я использую base64 для создания копии изображения, но по известному мне пути, чтобы я мог передать этот путь в MessageMedia. Проблема была в том, что при создании MessageMedia он не принимал никакого значения в параметре data, поэтому

Omar Yacop 08.04.2024 15:10

Я считаю, что это потому, что я создаю изображение быстрее, чем MessageMedia может прочитать.

Omar Yacop 08.04.2024 15:11

и ты решил это тогда? или вам все еще нужно найти способ синхронизировать операции? может быть, решением было создание медиафайла с помощью await? Прошу прощения, если я просто даю предложения, которые больше не нужны.

Diego D 08.04.2024 15:15

нашел другой способ, напишу

Omar Yacop 08.04.2024 18:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
8
181
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решение состоит в том, чтобы использовать сам MessageMedia, а не .fromFilePath(), я до сих пор не знаю, почему данные ничего не содержат при использовании .fromFilePath(), но я пробовал использовать

var media = new MessageMedia(
    `image/${fileExtension}`,
    encoded_image, // => base64
    fileName
);

и теперь все работало нормально. поэтому основная причина в том, что я пытался отправить пустое изображение

Другие вопросы по теме