Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

461
Vistas
Error al cargar archivos multimedia en la API de Whatsapp Cloud

actualmente estoy tratando de hacer un envoltorio delgado alrededor de la API de Whatsapp Cloud. Uno de los problemas que estoy enfrentando actualmente es que la carga de archivos multimedia no funciona.

Mirando a través de la documentación para cargar archivos , parece que espera una carga útil multipart/form-data en el punto final.

Aquí está mi implementación actual

 import FormData from 'form-data'; import fs from 'fs'; import axios from 'axios'; const formData = new FormData(); formData.append('file', fs.createReadStream('path/to/my/file.jpg')); formData.append('messaging_product', 'whatsapp'); formData.append('type', 'image/jpeg'); await axios.post('https://graph.facebook.com/v14.0/PHONE_NO_ID/media', formData, { headers: { 'Authorization': ACCESS_TOKEN } });

Mirando el error que devuelve, parece que de alguna manera me falta el campo messaging_product a pesar de que lo agregué correctamente en formData.

 { "error": { "message": "(#100) The parameter messaging_product is required.", "type": "OAuthException", "code": 100, "fbtrace_id": "FBTRACE_ID" } }

La colección Postman funciona para cargar archivos multimedia, por lo que creo que el problema es el campo de file de formData. ¿Es fs.createReadStream en un archivo equivalente a cómo Postman maneja la carga de archivos?

EDITAR: La pregunta se resolvió, los problemas no se agregaban en los encabezados generados por formData, ¡Gracias Phil a continuación!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Me encanta la documentación... dicen que el type es un parámetro obligatorio y luego muestran un ejemplo de curl sin él 🤦.

Además, file no es el...

Ruta al archivo almacenado en su directorio local

sino un binario codificado en mime.

En cualquier caso, el type debe ser parte de la codificación MIME a través de los metadatos content-type y luego debe reenviar el encabezado del tipo de contenido generado por FormData .

También es posible que te falte el esquema de token de autenticación de Bearer .

 const PHONE_NO_ID = "something"; const ACCESS_TOKEN = "something"; const formData = new FormData(); formData.append("file", fs.createReadStream("path/to/my/file.jpg"), { contentType: "image/jpeg", }); formData.append("messaging_product", "whatsapp"); try { const { data: { id: mediaId }, } = await axios.post( `https://graph.facebook.com/v14.0/${PHONE_NO_ID}/media`, formData, { headers: { Authorization: `Bearer ${ACCESS_TOKEN}`, // "Bearer" prefix ...formData.getHeaders(), // merge in FormData headers }, } ); console.log("media ID", mediaId); } catch (err) { console.error("upload", err.toJSON()); }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda