{"id":518,"date":"2026-10-28T16:05:49","date_gmt":"2026-10-28T16:05:49","guid":{"rendered":"https:\/\/vectalk.com.br\/blog\/descargar-multimedia-webhook-whatsapp\/"},"modified":"2026-10-28T16:06:08","modified_gmt":"2026-10-28T16:06:08","slug":"descargar-multimedia-webhook-whatsapp","status":"publish","type":"post","link":"https:\/\/vectalk.com.br\/blog\/es\/descargar-multimedia-webhook-whatsapp\/","title":{"rendered":"C\u00f3mo recibir y descargar los archivos que el cliente env\u00eda por la API de WhatsApp"},"content":{"rendered":"\n<p><em>Actualizado el 28\/10\/2026<\/em><\/p>\n\n\n\n<p>Cuando el cliente env\u00eda una foto, un PDF, un audio o un video, el webhook de la API de WhatsApp no trae el archivo: trae un <strong>media id<\/strong>. Para descargarlo, haces <code>GET \/{media-id}<\/code> para obtener una URL temporal, que <strong>expira en 5 minutos<\/strong>, y luego un <code>GET<\/code> a esa URL con tu token de acceso en el encabezado <code>Authorization<\/code>. Como el media id recibido por webhook vale solo <strong>7 d\u00edas<\/strong>, lo correcto es descargarlo enseguida y guardar el archivo en tu propio almacenamiento.<\/p>\n\n\n\n<p>Esta gu\u00eda muestra el flujo completo, los campos de cada tipo de archivo, los l\u00edmites de tama\u00f1o, c\u00f3mo verificar la integridad y ejemplos en cURL, Node.js y Python, incluido el env\u00edo a Amazon S3.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">El flujo en 4 pasos<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Webhook<\/strong>: llega un mensaje con <code>type<\/code> igual a <code>image<\/code>, <code>document<\/code>, <code>audio<\/code>, <code>video<\/code> o <code>sticker<\/code>, con el <code>id<\/code> del archivo.<\/li>\n\n\n<li><strong>URL temporal<\/strong>: <code>GET https:\/\/graph.facebook.com\/v26.0\/{media-id}<\/code> devuelve <code>url<\/code>, <code>mime_type<\/code>, <code>sha256<\/code> y <code>file_size<\/code>.<\/li>\n\n\n<li><strong>Descarga<\/strong>: <code>GET<\/code> a la <code>url<\/code> con <code>Authorization: Bearer &lt;token&gt;<\/code>. Sin el token, la solicitud falla.<\/li>\n\n\n<li><strong>Almacenamiento<\/strong>: guarda el archivo en tu storage (S3, GCS, disco) y registra en la base de datos su ruta, nunca la URL de Meta.<\/li>\n\n<\/ol>\n\n\n\n<p>Los plazos vienen de la <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/business-phone-numbers\/media\" target=\"_blank\" rel=\"noreferrer noopener\">documentaci\u00f3n de multimedia de Meta<\/a>: las URL expiran en 5 minutos (despu\u00e9s basta con consultar el media id otra vez para generar una nueva), los media id que llegan por webhook expiran en 7 d\u00edas y los generados por carga (upload) expiran en 30 d\u00edas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 llega en el webhook<\/h2>\n\n\n\n<p>Este es el formato de una imagen recibida, seg\u00fan la <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/webhooks\/reference\/messages\/image\" target=\"_blank\" rel=\"noreferrer noopener\">referencia del webhook de im\u00e1genes<\/a> (valores de ejemplo):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"object\": \"whatsapp_business_account\",\n  \"entry\": [{\n    \"id\": \"WABA_ID\",\n    \"changes\": [{\n      \"field\": \"messages\",\n      \"value\": {\n        \"messaging_product\": \"whatsapp\",\n        \"metadata\": {\n          \"display_phone_number\": \"5215512345678\",\n          \"phone_number_id\": \"PHONE_NUMBER_ID\"\n        },\n        \"contacts\": [{ \"profile\": { \"name\": \"Mar\u00eda\" }, \"wa_id\": \"5215598765432\" }],\n        \"messages\": [{\n          \"from\": \"5215598765432\",\n          \"id\": \"wamid.HBgNNTIx...\",\n          \"timestamp\": \"1761650000\",\n          \"type\": \"image\",\n          \"image\": {\n            \"caption\": \"Comprobante\",\n            \"mime_type\": \"image\/jpeg\",\n            \"sha256\": \"SfInY0gGKTsJlUWbwxC1k+FAD0FZHvzwfpvO0zX0GUI=\",\n            \"id\": \"1003383421387256\",\n            \"url\": \"https:\/\/lookaside.fbsbx.com\/whatsapp_business\/attachments\/?mid=...\"\n          }\n        }]\n      }\n    }]\n  }]\n}<\/code><\/pre>\n\n\n\n<p>El objeto cambia de nombre seg\u00fan el tipo (<code>image<\/code>, <code>document<\/code>, <code>audio<\/code>, <code>video<\/code>, <code>sticker<\/code>), pero la estructura es parecida. Los documentos tambi\u00e9n traen <code>filename<\/code>, \u00fatil para guardar con el nombre original.<\/p>\n\n\n\n<p>F\u00edjate en el campo <code>url<\/code>. Meta empez\u00f3 a habilitarlo en el propio webhook de forma gradual desde el 12\/11\/2025, lo que permite saltar el paso 2 y descargar directamente con el token. Como la habilitaci\u00f3n es gradual, tu c\u00f3digo debe funcionar con y sin \u00e9l: usa la <code>url<\/code> si viene y, si no viene o la descarga falla, consulta el media id.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Campo<\/th><th>Para qu\u00e9 sirve<\/th><\/tr><\/thead><tbody><tr><td><code>id<\/code><\/td><td>Media id; \u00fasalo para generar la URL de descarga<\/td><\/tr><tr><td><code>mime_type<\/code><\/td><td>Tipo de archivo (<code>image\/jpeg<\/code>, <code>application\/pdf<\/code>, <code>audio\/ogg<\/code>&#8230;)<\/td><\/tr><tr><td><code>sha256<\/code><\/td><td>Hash del archivo, para verificar integridad<\/td><\/tr><tr><td><code>caption<\/code><\/td><td>Texto que envi\u00f3 el cliente con el archivo, si lo hay<\/td><\/tr><tr><td><code>filename<\/code><\/td><td>Nombre original (documentos)<\/td><\/tr><tr><td><code>url<\/code><\/td><td>URL de descarga directa, en habilitaci\u00f3n gradual<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Tipos y l\u00edmites de tama\u00f1o<\/h2>\n\n\n\n<p>La tabla resume los tipos admitidos y los tama\u00f1os m\u00e1ximos de la p\u00e1gina de multimedia de Meta. Sirve para dimensionar el almacenamiento y el tiempo l\u00edmite de descarga:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Tipo<\/th><th>Formatos<\/th><th>Tama\u00f1o m\u00e1ximo<\/th><\/tr><\/thead><tbody><tr><td>Audio<\/td><td>AAC, AMR, MP3, M4A, OGG (solo c\u00f3dec OPUS, mono)<\/td><td>16 MB<\/td><\/tr><tr><td>Documento<\/td><td>TXT, XLS, XLSX, DOC, DOCX, PPT, PPTX, PDF<\/td><td>100 MB<\/td><\/tr><tr><td>Imagen<\/td><td>JPEG, PNG (8 bits, RGB o RGBA)<\/td><td>5 MB<\/td><\/tr><tr><td>Sticker<\/td><td>WebP<\/td><td>500 KB animado, 100 KB est\u00e1tico<\/td><\/tr><tr><td>Video<\/td><td>3GP, MP4 (H.264 y AAC)<\/td><td>16 MB<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Las notas de voz llegan como mensajes de tipo <code>audio<\/code>. Si vas a pasar el audio a un servicio de transcripci\u00f3n, revisa el <code>mime_type<\/code> recibido y si el servicio acepta ese formato; si no, convi\u00e9rtelo antes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ejemplo con cURL<\/h2>\n\n\n\n<p>Paso 2, obtener la URL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl \"https:\/\/graph.facebook.com\/v26.0\/1003383421387256\" \\\n  -H \"Authorization: Bearer $TOKEN\"<\/code><\/pre>\n\n\n\n<p>Respuesta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"url\": \"https:\/\/lookaside.fbsbx.com\/whatsapp_business\/attachments\/?mid=...\",\n  \"mime_type\": \"image\/jpeg\",\n  \"sha256\": \"SfInY0gGKTsJlUWbwxC1k+FAD0FZHvzwfpvO0zX0GUI=\",\n  \"file_size\": 303833,\n  \"id\": \"1003383421387256\"\n}<\/code><\/pre>\n\n\n\n<p>Paso 3, descargar:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -L \"URL_DEVUELTA\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -o comprobante.jpg<\/code><\/pre>\n\n\n\n<p>Opcionalmente, env\u00eda <code>phone_number_id<\/code> como par\u00e1metro de consulta en el paso 2: as\u00ed Meta solo procesa la solicitud si el archivo pertenece a ese n\u00famero, una protecci\u00f3n \u00fatil cuando la misma aplicaci\u00f3n atiende varios n\u00fameros.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ejemplo en Node.js<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-js\">import crypto from 'node:crypto';\nimport { S3Client, PutObjectCommand } from '@aws-sdk\/client-s3';\n\nconst GRAPH = 'https:\/\/graph.facebook.com\/v26.0';\nconst TOKEN = process.env.WHATSAPP_TOKEN;\nconst s3 = new S3Client({ region: process.env.AWS_REGION });\n\nasync function obtenerUrl(mediaId) {\n  const res = await fetch(`${GRAPH}\/${mediaId}`, {\n    headers: { Authorization: `Bearer ${TOKEN}` },\n  });\n  if (!res.ok) throw new Error(`media ${mediaId}: HTTP ${res.status}`);\n  return res.json(); \/\/ { url, mime_type, sha256, file_size, id }\n}\n\nasync function descargar(url) {\n  const res = await fetch(url, { headers: { Authorization: `Bearer ${TOKEN}` } });\n  if (!res.ok) throw Object.assign(new Error('descarga fallida'), { status: res.status });\n  return Buffer.from(await res.arrayBuffer());\n}\n\nexport async function guardarArchivo(media, clave) {\n  let info = { url: media.url, sha256: media.sha256, mime_type: media.mime_type };\n  let archivo;\n  try {\n    if (!info.url) throw new Error('sin url en el webhook');\n    archivo = await descargar(info.url);\n  } catch {\n    info = await obtenerUrl(media.id); \/\/ genera una URL nueva\n    archivo = await descargar(info.url);\n  }\n\n  const hash = crypto.createHash('sha256').update(archivo).digest('base64');\n  if (info.sha256 &amp;&amp; hash !== info.sha256) throw new Error('el hash no coincide');\n\n  await s3.send(new PutObjectCommand({\n    Bucket: process.env.BUCKET,\n    Key: clave,\n    Body: archivo,\n    ContentType: info.mime_type,\n  }));\n  return clave;\n}<\/code><\/pre>\n\n\n\n<p>En los ejemplos de Meta, el <code>sha256<\/code> viene en base64; por eso la comparaci\u00f3n usa <code>digest('base64')<\/code>. Si en tu caso ves otro formato, registra ambos valores antes de activar la verificaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ejemplo en Python<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-python\">import base64\nimport hashlib\nimport os\n\nimport boto3\nimport httpx\n\nGRAPH = \"https:\/\/graph.facebook.com\/v26.0\"\nTOKEN = os.environ[\"WHATSAPP_TOKEN\"]\nHEADERS = {\"Authorization\": f\"Bearer {TOKEN}\"}\ns3 = boto3.client(\"s3\")\n\n\ndef obtener_url(client: httpx.Client, media_id: str) -&gt; dict:\n    r = client.get(f\"{GRAPH}\/{media_id}\", headers=HEADERS)\n    r.raise_for_status()\n    return r.json()\n\n\ndef guardar_archivo(media: dict, clave: str) -&gt; str:\n    with httpx.Client(timeout=60, follow_redirects=True) as client:\n        info = obtener_url(client, media[\"id\"])\n        r = client.get(info[\"url\"], headers=HEADERS)\n        if r.status_code == 404:  # URL vencida: genera otra y reintenta\n            info = obtener_url(client, media[\"id\"])\n            r = client.get(info[\"url\"], headers=HEADERS)\n        r.raise_for_status()\n\n    calculado = base64.b64encode(hashlib.sha256(r.content).digest()).decode()\n    if info.get(\"sha256\") and calculado != info[\"sha256\"]:\n        raise ValueError(\"el hash no coincide\")\n\n    s3.put_object(\n        Bucket=os.environ[\"BUCKET\"],\n        Key=clave,\n        Body=r.content,\n        ContentType=info[\"mime_type\"],\n    )\n    return clave<\/code><\/pre>\n\n\n\n<p>Para documentos de hasta 100 MB, cargar todo en memoria puede pesar. En ese caso, descarga en <em>stream<\/em> a un archivo temporal y usa <code>upload_fileobj<\/code> de boto3, o <code>Upload<\/code> del paquete <code>@aws-sdk\/lib-storage<\/code> en Node, que suben por partes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">D\u00f3nde va esto en la arquitectura<\/h2>\n\n\n\n<p>No descargues el archivo dentro de la solicitud del webhook. El endpoint debe validar la firma, encolar el evento y responder <code>200<\/code> r\u00e1pido; un worker aparte hace la descarga y la carga. As\u00ed, un video grande no bloquea el webhook ni provoca reintentos de Meta. Sobre la validaci\u00f3n, consulta <a href=\"https:\/\/vectalk.com.br\/blog\/es\/validar-firma-webhook-whatsapp\/\">c\u00f3mo validar la firma del webhook<\/a>.<\/p>\n\n\n\n<p>Algunas buenas pr\u00e1cticas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Clave de almacenamiento predecible<\/strong>, por ejemplo <code>whatsapp\/{phone_number_id}\/{wa_id}\/{wamid}.{ext}<\/code>, para encontrar el archivo a partir del mensaje.<\/li>\n\n\n<li><strong>Idempotencia<\/strong>: antes de descargar, verifica si ese mensaje ya se proces\u00f3; el webhook puede llegar repetido.<\/li>\n\n\n<li><strong>Bucket privado<\/strong> y enlaces firmados para quien necesite ver el archivo, ya que comprobantes y documentos contienen datos personales. Aplica la ley de protecci\u00f3n de datos de tu pa\u00eds (en Brasil, la LGPD, Ley 13.709\/2018) en seguridad y tiempo de retenci\u00f3n. Esto no sustituye la orientaci\u00f3n de un abogado.<\/li>\n\n\n<li><strong>Reintento con plazo<\/strong>: si la descarga falla, tienes los 7 d\u00edas de validez del media id para volver a intentarlo.<\/li>\n\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Errores comunes<\/h2>\n\n\n\n<p><strong>404 al descargar.<\/strong> La p\u00e1gina de multimedia de Meta indica solicitar una nueva URL y reintentar; si sigue fallando, renueva el token de acceso. En la pr\u00e1ctica, la causa m\u00e1s com\u00fan es usar una URL guardada hace m\u00e1s de 5 minutos.<\/p>\n\n\n\n<p><strong>401 o 403 en la descarga.<\/strong> El <code>GET<\/code> a la URL se hizo sin el encabezado <code>Authorization<\/code>, o con un token sin acceso a la cuenta. Usa un token permanente de usuario del sistema; consulta <a href=\"https:\/\/vectalk.com.br\/blog\/es\/token-permanente-api-whatsapp-es\/\">token permanente de la API de WhatsApp<\/a>.<\/p>\n\n\n\n<p><strong>Error 131052 en el webhook.<\/strong> La <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/support\/error-codes\" target=\"_blank\" rel=\"noreferrer noopener\">tabla de errores de Meta<\/a> lo define como &#8220;no se pudo descargar el archivo enviado por el usuario&#8221;. Lee el campo <code>error_data.details<\/code> del webhook y pide al cliente que reenv\u00ede el archivo por otro medio.<\/p>\n\n\n\n<p><strong>Media id vencido.<\/strong> Despu\u00e9s de 7 d\u00edas no hay forma de recuperar el archivo por la API. Por eso la descarga debe ocurrir justo despu\u00e9s del webhook.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo hacerlo con Vectalk<\/h2>\n\n\n\n<p>En Vectalk, los webhooks son los mismos de Meta, as\u00ed que el media id llega en el mismo campo. Para multimedia, la <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/media\/get-url\">API de Vectalk<\/a> ofrece <code>GET https:\/\/apis.vectalk.com.br\/api\/media\/{mediaId}<\/code>, que devuelve la URL temporal (v\u00e1lida por unos 5 minutos), y <code>GET https:\/\/apis.vectalk.com.br\/api\/media\/{mediaId}\/download<\/code>, que devuelve directamente el archivo binario con el <code>Content-Type<\/code> correcto, eliminando el segundo paso. Ambas rutas usan el token de instancia. Crea tu cuenta en <a href=\"https:\/\/apps.vectalk.com.br\/register\">apps.vectalk.com.br\/register<\/a>.<\/p>\n\n\n\n<p>Para el camino inverso, enviar archivos al cliente, consulta <a href=\"https:\/\/vectalk.com.br\/blog\/es\/enviar-multimedia-api-whatsapp\/\">c\u00f3mo enviar multimedia por la API de WhatsApp<\/a>. Si tu bot recibe muchos archivos, los ejemplos completos est\u00e1n en los tutoriales de <a href=\"https:\/\/vectalk.com.br\/blog\/es\/bot-whatsapp-python-fastapi\/\">bot en Python<\/a> y <a href=\"https:\/\/vectalk.com.br\/blog\/es\/bot-whatsapp-nodejs-express\/\">bot en Node.js<\/a>. El panorama general est\u00e1 en nuestra <a href=\"https:\/\/vectalk.com.br\/blog\/es\/whatsapp-cloud-api-es\/\">gu\u00eda de WhatsApp Cloud API<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Preguntas frecuentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfCu\u00e1nto tiempo es v\u00e1lida la URL del archivo?<\/h3>\n\n\n\n<p>5 minutos. Despu\u00e9s, consulta el media id otra vez para generar una nueva URL. El media id recibido por webhook vale 7 d\u00edas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPuedo guardar la URL de Meta en la base de datos y abrirla despu\u00e9s?<\/h3>\n\n\n\n<p>No. La URL expira en 5 minutos y exige el token para descargar. Guarda el archivo en tu almacenamiento y registra su ruta en la base de datos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfNecesito el token para descargar desde la URL?<\/h3>\n\n\n\n<p>S\u00ed. La documentaci\u00f3n de Meta indica que la solicitud falla si omites el token. Env\u00eda <code>Authorization: Bearer &lt;token&gt;<\/code> tanto al consultar el media id como al descargar.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfCu\u00e1l es el tama\u00f1o m\u00e1ximo de un archivo recibido?<\/h3>\n\n\n\n<p>Seg\u00fan la tabla de tipos admitidos de Meta, las im\u00e1genes llegan hasta 5 MB, audio y video hasta 16 MB y documentos hasta 100 MB. Los stickers tienen l\u00edmites menores.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfC\u00f3mo s\u00e9 si el archivo descargado est\u00e1 \u00edntegro?<\/h3>\n\n\n\n<p>Calcula el SHA-256 del contenido y comp\u00e1ralo con el <code>sha256<\/code> del webhook o de la respuesta del media id. En los ejemplos de Meta, el valor viene en base64.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Fuentes oficiales consultadas el 28\/10\/2026:<\/strong> <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/business-phone-numbers\/media\" target=\"_blank\" rel=\"noreferrer noopener\">Media (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/webhooks\/reference\/messages\/image\" target=\"_blank\" rel=\"noreferrer noopener\">Webhook de mensajes de imagen (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/webhooks\/reference\/messages\/document\" target=\"_blank\" rel=\"noreferrer noopener\">Webhook de mensajes de documento (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/support\/error-codes\" target=\"_blank\" rel=\"noreferrer noopener\">C\u00f3digos de error (Meta)<\/a>, <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/media\/get-url\">Multimedia en la API de Vectalk<\/a>, <a href=\"https:\/\/docs.aws.amazon.com\/AWSJavaScriptSDK\/v3\/latest\/client\/s3\/command\/PutObjectCommand\/\" target=\"_blank\" rel=\"noreferrer noopener\">PutObjectCommand (AWS SDK for JavaScript v3)<\/a>, <a href=\"https:\/\/boto3.amazonaws.com\/v1\/documentation\/api\/latest\/reference\/services\/s3\/client\/upload_fileobj.html\" target=\"_blank\" rel=\"noreferrer noopener\">upload_fileobj (boto3)<\/a>, <a href=\"https:\/\/www.planalto.gov.br\/ccivil_03\/_ato2015-2018\/2018\/lei\/l13709.htm\" target=\"_blank\" rel=\"noreferrer noopener\">LGPD, Ley 13.709\/2018 (en portugu\u00e9s)<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Del webhook a tu almacenamiento: c\u00f3mo convertir el media id que env\u00eda la Cloud API en un archivo guardado, con URL temporal, token, l\u00edmites de tama\u00f1o y c\u00f3digo en cURL, Node y Python.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[12],"tags":[],"class_list":["post-518","post","type-post","status-publish","format-standard","hentry","category-uncategorized-es"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Descargar multimedia del webhook de WhatsApp con c\u00f3digo<\/title>\n<meta name=\"description\" content=\"C\u00f3mo descargar multimedia del webhook de WhatsApp: media id, URL temporal de 5 minutos, descarga con token y S3. Ejemplos en cURL, Node y Python.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vectalk.com.br\/blog\/es\/descargar-multimedia-webhook-whatsapp\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Descargar multimedia del webhook de WhatsApp con c\u00f3digo\" \/>\n<meta property=\"og:description\" content=\"C\u00f3mo descargar multimedia del webhook de WhatsApp: media id, URL temporal de 5 minutos, descarga con token y S3. Ejemplos en cURL, Node y Python.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vectalk.com.br\/blog\/es\/descargar-multimedia-webhook-whatsapp\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Vectalk\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-28T16:05:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-28T16:06:08+00:00\" \/>\n<meta name=\"author\" content=\"wanderleyfcunha\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"wanderleyfcunha\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/descargar-multimedia-webhook-whatsapp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/descargar-multimedia-webhook-whatsapp\\\/\"},\"author\":{\"name\":\"wanderleyfcunha\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"headline\":\"C\u00f3mo recibir y descargar los archivos que el cliente env\u00eda por la API de WhatsApp\",\"datePublished\":\"2026-10-28T16:05:49+00:00\",\"dateModified\":\"2026-10-28T16:06:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/descargar-multimedia-webhook-whatsapp\\\/\"},\"wordCount\":1326,\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/descargar-multimedia-webhook-whatsapp\\\/\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/descargar-multimedia-webhook-whatsapp\\\/\",\"name\":\"Descargar multimedia del webhook de WhatsApp con c\u00f3digo\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-28T16:05:49+00:00\",\"dateModified\":\"2026-10-28T16:06:08+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"description\":\"C\u00f3mo descargar multimedia del webhook de WhatsApp: media id, URL temporal de 5 minutos, descarga con token y S3. Ejemplos en cURL, Node y Python.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/descargar-multimedia-webhook-whatsapp\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/descargar-multimedia-webhook-whatsapp\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/descargar-multimedia-webhook-whatsapp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C\u00f3mo recibir y descargar los archivos que el cliente env\u00eda por la API de WhatsApp\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\",\"name\":\"Blog Vectalk\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\",\"name\":\"wanderleyfcunha\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g\",\"caption\":\"wanderleyfcunha\"},\"sameAs\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Descargar multimedia del webhook de WhatsApp con c\u00f3digo","description":"C\u00f3mo descargar multimedia del webhook de WhatsApp: media id, URL temporal de 5 minutos, descarga con token y S3. Ejemplos en cURL, Node y Python.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vectalk.com.br\/blog\/es\/descargar-multimedia-webhook-whatsapp\/","og_locale":"en_US","og_type":"article","og_title":"Descargar multimedia del webhook de WhatsApp con c\u00f3digo","og_description":"C\u00f3mo descargar multimedia del webhook de WhatsApp: media id, URL temporal de 5 minutos, descarga con token y S3. Ejemplos en cURL, Node y Python.","og_url":"https:\/\/vectalk.com.br\/blog\/es\/descargar-multimedia-webhook-whatsapp\/","og_site_name":"Blog Vectalk","article_published_time":"2026-10-28T16:05:49+00:00","article_modified_time":"2026-10-28T16:06:08+00:00","author":"wanderleyfcunha","twitter_card":"summary_large_image","twitter_misc":{"Written by":"wanderleyfcunha","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vectalk.com.br\/blog\/es\/descargar-multimedia-webhook-whatsapp\/#article","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/descargar-multimedia-webhook-whatsapp\/"},"author":{"name":"wanderleyfcunha","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"headline":"C\u00f3mo recibir y descargar los archivos que el cliente env\u00eda por la API de WhatsApp","datePublished":"2026-10-28T16:05:49+00:00","dateModified":"2026-10-28T16:06:08+00:00","mainEntityOfPage":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/descargar-multimedia-webhook-whatsapp\/"},"wordCount":1326,"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/vectalk.com.br\/blog\/es\/descargar-multimedia-webhook-whatsapp\/","url":"https:\/\/vectalk.com.br\/blog\/es\/descargar-multimedia-webhook-whatsapp\/","name":"Descargar multimedia del webhook de WhatsApp con c\u00f3digo","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/#website"},"datePublished":"2026-10-28T16:05:49+00:00","dateModified":"2026-10-28T16:06:08+00:00","author":{"@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"description":"C\u00f3mo descargar multimedia del webhook de WhatsApp: media id, URL temporal de 5 minutos, descarga con token y S3. Ejemplos en cURL, Node y Python.","breadcrumb":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/descargar-multimedia-webhook-whatsapp\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vectalk.com.br\/blog\/es\/descargar-multimedia-webhook-whatsapp\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vectalk.com.br\/blog\/es\/descargar-multimedia-webhook-whatsapp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vectalk.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"C\u00f3mo recibir y descargar los archivos que el cliente env\u00eda por la API de WhatsApp"}]},{"@type":"WebSite","@id":"https:\/\/vectalk.com.br\/blog\/#website","url":"https:\/\/vectalk.com.br\/blog\/","name":"Blog Vectalk","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vectalk.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b","name":"wanderleyfcunha","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/21c37077f1731eb558973f27a7b647d55f72fde5200a843ac5f5345b247ea725?s=96&d=mm&r=g","caption":"wanderleyfcunha"},"sameAs":["https:\/\/vectalk.com.br\/blog"]}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/518","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/comments?post=518"}],"version-history":[{"count":1,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/518\/revisions"}],"predecessor-version":[{"id":521,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/518\/revisions\/521"}],"wp:attachment":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/media?parent=518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/categories?post=518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/tags?post=518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}