Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

459
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!