codigoencasa / bot-whatsapp

🤖 Crear Chatbot WhatsApp en minutos. Únete a este proyecto OpenSource (Typescript Version Pronto)

Home Page:https://bot-whatsapp.netlify.app

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[🐬]Da error "UnhandledPromiseRejection" al envía un pdf con el proveedor Meta, con número de prueba que te brinda.

jhonlcp1997 opened this issue · comments

¿Cual proveedor usaste?

Meta

¿Cual base de datos usaste?

MySQL

Conclusion de la prueba

Describe tu caso

Útilizo el proveedor Meta, este me da un número de pruebas, me permite envíar imagen y audio, pero no me permite envíar pdfs.
He hecho la prueba con pdf de 1mb :

================== código ==========================

.addAnswer('💿 pdf', null, async (ctx, { flowDynamic}) => {
        try {

            

            await flowDynamic([
                {
                    body:'pdf',
                    media:  __dirname + '/public/pdfs/2024.pdf',
                }
            ])
        } catch (error) {
            console.log(error)
        }
    });

=================================================

¿Logs Importantes?

node:internal/process/promises:289
            triggerUncaughtException(err, true /* fromPromise */);
            ^

[UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "undefined".] {
  code: 'ERR_UNHANDLED_REJECTION'
}

Información Adicional

No response

¿Quieres que te mencionemos?

No response

Subiéndolo a la nube un proyecto de prueba, se puede enviar otros tipos archivos como: video, imagen y sonido pero cuando se trata de pdfs, en consola siempre me arroja 'undefined' capturando el error, eso con el proveedor de Meta, si alguien tiene una solución muchas gracias de antemano.

Debes usar una función del provider, con sendFile puedes hacerlo, para ver la función visita node_modules/@bot-whatsapp/provider/lib/meta

Buenas caballero, si eh hecho lo de traer el 'sendFile', pero lo que se encuentra para manejar ello es 'sendMedia'.
En el archivo principal al que se hace referencia, el provider 'node_modules/@bot-whatsapp/provider/lib/meta',
el mismo senMedia después de verificar que no sea una image, video o audio, llama al método 'sendFile' del provider, pero este no se encuentra.

en los node_modules el provider de meta 'node_modules/@bot-whatsapp/provider/lib/meta', no contiene dicho método

sendMedia = async (number, text = '', mediaInput) => {
    const fileDownloaded = await generalDownload(mediaInput);
    const mimeType = mime.lookup(fileDownloaded);
    mediaInput = fileDownloaded;
    if (mimeType.includes('image')) return this.sendImage(number, mediaInput)
    if (mimeType.includes('video')) return this.sendVideo(number, fileDownloaded)
    if (mimeType.includes('audio')) {
      const fileOpus = await convertAudio(mediaInput);
      return this.sendAudio(number, fileOpus, text)
    }

    return this.sendFile(number, mediaInput)
  }

El problema que considero que existe es que falta ese método.

Eh Recreado el posible método llamado 'senFile' que me mencione que faltaba:

sendFile = async (number, pathFile = null) => {
    if (!pathFile) throw new Error(`MEDIA_INPUT_NULL_: ${pathFile}`);

    const formData = new FormData();
    const mimeType = mime.lookup(pathFile);
    formData.append('file', createReadStream(pathFile), {
      contentType: mimeType,
    });
    formData.append('messaging_product', 'whatsapp');

    const nameOriginal = path.basename(pathFile);

    const {
      data: { id: mediaId },
    } = await axios.post(`${URL$1}/${this.version}/${this.numberId}/media`, formData, {
      headers: {
        Authorization: `Bearer ${this.jwtToken}`,
        ...formData.getHeaders(),
      },
    });

    const body = {
      messaging_product: 'whatsapp',
      to: number,
      type: 'document',
      document: {
        id: mediaId,
        filename: nameOriginal,
      },
    };
    return this.sendMessageMeta(body)
  }

Lo eh agregado en los paquetes de node_modules del provider de Meta y funciona bien, quizá esto les pueda ayudar a implementarlo, gracias.

@jhonlcp1997 me disculpo no mandé el pr del método, hare el pr para que se agregue, me alegra que haya podido solucionar su problema, procedo a cerrar el issue.