{"id":743,"date":"2026-10-29T13:21:12","date_gmt":"2026-10-29T13:21:12","guid":{"rendered":"https:\/\/vectalk.com.br\/blog\/enviar-plantilla-api-whatsapp\/"},"modified":"2026-10-29T13:21:41","modified_gmt":"2026-10-29T13:21:41","slug":"enviar-plantilla-api-whatsapp","status":"publish","type":"post","link":"https:\/\/vectalk.com.br\/blog\/es\/enviar-plantilla-api-whatsapp\/","title":{"rendered":"C\u00f3mo enviar una plantilla por la API de WhatsApp: variables, multimedia en el encabezado y botones (JSON completo)"},"content":{"rendered":"\n<p><em>Actualizado el 29\/10\/2026<\/em><\/p>\n\n\n\n<p>Para enviar una plantilla (template) por la API de WhatsApp, haz un <code>POST<\/code> a <code>\/{phone-number-id}\/messages<\/code> con <code>\"type\": \"template\"<\/code>, el <code>name<\/code> exacto de la plantilla aprobada, el <code>language.code<\/code> con el que se cre\u00f3 y un arreglo <code>components<\/code> con los valores de las variables del encabezado, del cuerpo y de los botones. El texto fijo no se env\u00eda: solo mandas los par\u00e1metros, y deben coincidir en cantidad, formato y orden con lo aprobado.<\/p>\n\n\n\n<p>Esta gu\u00eda trae un payload listo para cada caso: solo texto con variables posicionales y nombradas, encabezado con imagen, video o documento (por <code>link<\/code> y por <code>id<\/code>), bot\u00f3n de URL din\u00e1mica, respuesta r\u00e1pida con <code>payload<\/code>, c\u00f3digo de cup\u00f3n y un ejemplo combinado. Al final, la tabla de errores de par\u00e1metros m\u00e1s comunes y c\u00f3mo hacer el mismo env\u00edo con Vectalk.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Anatom\u00eda de un env\u00edo de plantilla<\/h2>\n\n\n\n<p>Las plantillas usan el mismo endpoint de la <a href=\"https:\/\/vectalk.com.br\/blog\/es\/api-oficial-de-whatsapp\/\">Cloud API<\/a> que los dem\u00e1s mensajes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">POST https:\/\/graph.facebook.com\/v26.0\/{PHONE_NUMBER_ID}\/messages\nAuthorization: Bearer {ACCESS_TOKEN}\nContent-Type: application\/json<\/code><\/pre>\n\n\n\n<p>El cuerpo siempre tiene la misma estructura base:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"recipient_type\": \"individual\",\n  \"to\": \"573001234567\",\n  \"type\": \"template\",\n  \"template\": {\n    \"name\": \"nombre_de_la_plantilla\",\n    \"language\": { \"code\": \"es_MX\" },\n    \"components\": []\n  }\n}<\/code><\/pre>\n\n\n\n<p>Dentro de <code>components<\/code>, cada objeto tiene un <code>type<\/code> que apunta a una parte de la plantilla:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th><code>type<\/code> del componente<\/th><th>Cu\u00e1ndo incluirlo<\/th><th>Qu\u00e9 va en <code>parameters<\/code><\/th><\/tr><\/thead><tbody><tr><td><code>header<\/code><\/td><td>Encabezado con variable de texto o multimedia<\/td><td><code>text<\/code>, <code>image<\/code>, <code>video<\/code>, <code>document<\/code> o <code>location<\/code><\/td><\/tr><tr><td><code>body<\/code><\/td><td>Cuerpo con variables<\/td><td><code>text<\/code> (y tambi\u00e9n <code>currency<\/code> y <code>date_time<\/code>)<\/td><\/tr><tr><td><code>button<\/code><\/td><td>Bot\u00f3n con valor din\u00e1mico<\/td><td>Depende del <code>sub_type<\/code>: <code>url<\/code>, <code>quick_reply<\/code>, <code>copy_code<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Si la plantilla no tiene ninguna variable, puedes omitir <code>components<\/code>. El pie (<code>footer<\/code>) nunca aparece en el env\u00edo, porque no admite variables. Si todav\u00eda no enviaste ning\u00fan mensaje por la API, empieza por <a href=\"https:\/\/vectalk.com.br\/blog\/es\/enviar-mensaje-api-whatsapp-ejemplos\/\">c\u00f3mo enviar un mensaje por la API de WhatsApp con cURL, Node.js y Python<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Plantilla de texto con variables posicionales<\/h2>\n\n\n\n<p>Es el formato predeterminado: si nadie eligi\u00f3 otro formato al crearla, la plantilla usa variables posicionales, <code>{{1}}<\/code>, <code>{{2}}<\/code> y as\u00ed sucesivamente. Seg\u00fan la <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">documentaci\u00f3n de plantillas de Meta<\/a>, los valores deben enviarse <strong>en el mismo orden<\/strong> en que aparecen los marcadores en el texto.<\/p>\n\n\n\n<p>Plantilla aprobada (cuerpo):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u00a1Hola {{1}}! Tu pedido {{2}} est\u00e1 confirmado y llega en {{3}} d\u00edas h\u00e1biles.<\/code><\/pre>\n\n\n\n<p>Env\u00edo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST \"https:\/\/graph.facebook.com\/v26.0\/$PHONE_NUMBER_ID\/messages\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"messaging_product\": \"whatsapp\",\n    \"recipient_type\": \"individual\",\n    \"to\": \"573001234567\",\n    \"type\": \"template\",\n    \"template\": {\n      \"name\": \"pedido_confirmado\",\n      \"language\": { \"code\": \"es_MX\" },\n      \"components\": [\n        {\n          \"type\": \"body\",\n          \"parameters\": [\n            { \"type\": \"text\", \"text\": \"Mariana\" },\n            { \"type\": \"text\", \"text\": \"#48213\" },\n            { \"type\": \"text\", \"text\": \"3\" }\n          ]\n        }\n      ]\n    }\n  }'<\/code><\/pre>\n\n\n\n<p>Tres marcadores, tres objetos <code>text<\/code>, en orden. Si falta uno, sobra uno o cambia el tipo, el env\u00edo falla (mira la tabla de errores m\u00e1s abajo).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Plantilla con variables nombradas (<code>parameter_name<\/code>)<\/h2>\n\n\n\n<p>Al crearla, la plantilla puede declarar <code>\"parameter_format\": \"named\"<\/code>. Las variables pasan a ser nombres como <code>{{first_name}}<\/code>, que deben ser \u00fanicos y usar solo min\u00fasculas y guion bajo. En el env\u00edo, cada par\u00e1metro lleva un <code>parameter_name<\/code> y, seg\u00fan Meta, <strong>el orden deja de importar<\/strong>.<\/p>\n\n\n\n<p>Plantilla aprobada (cuerpo):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u00a1Gracias, {{first_name}}! El n\u00famero de tu pedido es {{order_number}}.<\/code><\/pre>\n\n\n\n<p>Env\u00edo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"recipient_type\": \"individual\",\n  \"to\": \"573001234567\",\n  \"type\": \"template\",\n  \"template\": {\n    \"name\": \"confirmacion_pedido\",\n    \"language\": { \"code\": \"es_MX\" },\n    \"components\": [\n      {\n        \"type\": \"body\",\n        \"parameters\": [\n          { \"type\": \"text\", \"parameter_name\": \"order_number\", \"text\": \"SKBUP2-4CPIG9\" },\n          { \"type\": \"text\", \"parameter_name\": \"first_name\", \"text\": \"J\u00e9ssica\" }\n        ]\n      }\n    ]\n  }\n}<\/code><\/pre>\n\n\n\n<p>Las variables nombradas hacen el c\u00f3digo m\u00e1s legible y evitan el error cl\u00e1sico de invertir dos valores. El formato se define al crear la plantilla, no al enviarla: mandar <code>parameter_name<\/code> a una plantilla posicional (o al rev\u00e9s) es un error de par\u00e1metro. C\u00f3mo definir el formato al crearla est\u00e1 en la gu\u00eda de <a href=\"https:\/\/vectalk.com.br\/blog\/es\/crear-plantilla-api-whatsapp\/\">crear, editar y eliminar plantillas por la API<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Variables de moneda y fecha<\/h3>\n\n\n\n<p>Adem\u00e1s de <code>text<\/code>, el cuerpo acepta par\u00e1metros <code>currency<\/code> (con <code>fallback_value<\/code>, <code>code<\/code> y <code>amount_1000<\/code>, el monto multiplicado por 1.000) y <code>date_time<\/code> (con <code>fallback_value<\/code>), como muestra la p\u00e1gina de <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/template-media\" target=\"_blank\" rel=\"noreferrer noopener\">multimedia en plantillas<\/a>. Enviar el valor ya formateado como <code>text<\/code> tambi\u00e9n funciona.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Encabezado con imagen, video o documento<\/h2>\n\n\n\n<p>Si la plantilla se aprob\u00f3 con encabezado multimedia, el env\u00edo <strong>debe<\/strong> incluir el archivo en un componente <code>header<\/code>. La imagen de ejemplo usada al crearla solo sirve para la revisi\u00f3n; no se le env\u00eda al cliente. El <code>type<\/code> del par\u00e1metro es <code>image<\/code>, <code>video<\/code> o <code>document<\/code>, y el objeto con el mismo nombre acepta <code>link<\/code> o <code>id<\/code>:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Opci\u00f3n<\/th><th>C\u00f3mo funciona<\/th><th>Cu\u00e1ndo usarla<\/th><\/tr><\/thead><tbody><tr><td><code>link<\/code><\/td><td>URL HTTPS p\u00fablica del archivo en tu servidor<\/td><td>Archivos que cambian en cada env\u00edo (facturas, comprobantes)<\/td><\/tr><tr><td><code>id<\/code><\/td><td>Media ID obtenido al subir el archivo a los servidores de Meta<\/td><td>El mismo archivo para muchos destinatarios (campa\u00f1as)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Meta recomienda <code>id<\/code>, para reducir errores y solicitudes a tu servidor, y advierte que el <code>link<\/code> debe estar en un servidor p\u00fablico o el mensaje fallar\u00e1. Cuando usas <code>link<\/code>, la Cloud API guarda el archivo en cach\u00e9 por 10 minutos y lo reutiliza si la misma URL vuelve a aparecer en ese lapso; para forzar otra descarga, agrega una query string aleatoria a la URL, seg\u00fan la <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/send-messages\" target=\"_blank\" rel=\"noreferrer noopener\">documentaci\u00f3n de env\u00edo<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Imagen por link<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"to\": \"573001234567\",\n  \"type\": \"template\",\n  \"template\": {\n    \"name\": \"promo_imagen\",\n    \"language\": { \"code\": \"es_MX\" },\n    \"components\": [\n      {\n        \"type\": \"header\",\n        \"parameters\": [\n          { \"type\": \"image\", \"image\": { \"link\": \"https:\/\/cdn.mitienda.com\/promo\/octubre.jpg\" } }\n        ]\n      },\n      {\n        \"type\": \"body\",\n        \"parameters\": [\n          { \"type\": \"text\", \"text\": \"20%\" }\n        ]\n      }\n    ]\n  }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Documento (PDF) por media ID<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"to\": \"573001234567\",\n  \"type\": \"template\",\n  \"template\": {\n    \"name\": \"factura_disponible\",\n    \"language\": { \"code\": \"es_MX\" },\n    \"components\": [\n      {\n        \"type\": \"header\",\n        \"parameters\": [\n          {\n            \"type\": \"document\",\n            \"document\": { \"id\": \"1013859600285441\", \"filename\": \"factura-octubre.pdf\" }\n          }\n        ]\n      },\n      {\n        \"type\": \"body\",\n        \"parameters\": [\n          { \"type\": \"text\", \"text\": \"Carlos\" },\n          { \"type\": \"text\", \"text\": \"10\/11\/2026\" }\n        ]\n      }\n    ]\n  }\n}<\/code><\/pre>\n\n\n\n<p><code>filename<\/code> es opcional y viene del objeto de documento de los <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/document-messages\" target=\"_blank\" rel=\"noreferrer noopener\">mensajes de documento<\/a>: la app usa la extensi\u00f3n para mostrar el \u00edcono correcto. En Brasil, este patr\u00f3n es com\u00fan para enviar el <em>boleto<\/em> (un comprobante bancario de pago) como PDF en el encabezado.<\/p>\n\n\n\n<p>Para video, la estructura es la misma: <code>\"type\": \"video\"<\/code> y un objeto <code>video<\/code> con <code>link<\/code> o <code>id<\/code>.<\/p>\n\n\n\n<p>Para obtener el media ID, sube el archivo con <code>POST \/{PHONE_NUMBER_ID}\/media<\/code>. L\u00edmites de tama\u00f1o, formatos aceptados y el paso a paso de la subida est\u00e1n en <a href=\"https:\/\/vectalk.com.br\/blog\/es\/enviar-multimedia-api-whatsapp\/\">c\u00f3mo enviar imagen, PDF, audio y video por la API de WhatsApp<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Bot\u00f3n de URL din\u00e1mica<\/h2>\n\n\n\n<p>Un bot\u00f3n de URL puede tener <strong>una<\/strong> variable, siempre al final de la URL. Al crearlo, algo como <code>https:\/\/mitienda.com\/pedido\/{{1}}<\/code>. En el env\u00edo, solo mandas el sufijo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"to\": \"573001234567\",\n  \"type\": \"template\",\n  \"template\": {\n    \"name\": \"rastreo_pedido\",\n    \"language\": { \"code\": \"es_MX\" },\n    \"components\": [\n      {\n        \"type\": \"body\",\n        \"parameters\": [\n          { \"type\": \"text\", \"text\": \"#48213\" }\n        ]\n      },\n      {\n        \"type\": \"button\",\n        \"sub_type\": \"url\",\n        \"index\": \"0\",\n        \"parameters\": [\n          { \"type\": \"text\", \"text\": \"48213?utm_source=whatsapp\" }\n        ]\n      }\n    ]\n  }\n}<\/code><\/pre>\n\n\n\n<p>Tres reglas que rompen muchas integraciones:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>index<\/code> es la posici\u00f3n del bot\u00f3n en la plantilla<\/strong>, empezando en 0. Si el bot\u00f3n de URL es el segundo bot\u00f3n aprobado, el <code>index<\/code> es <code>1<\/code>. Meta explica que, cuando hay botones con variable, el tipo y el orden deben coincidir con la plantilla; un \u00edndice equivocado genera un error como &#8220;Parameter value for URL was expected but was not found&#8221;.<\/li>\n\n\n<li><strong>Codifica los caracteres especiales<\/strong> antes de enviar. La <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/components\" target=\"_blank\" rel=\"noreferrer noopener\">p\u00e1gina de componentes<\/a> menciona espacio (<code>%20<\/code>), dos puntos (<code>%3A<\/code>), barra vertical (<code>%7C<\/code>) y letras con tilde: <code>Pe\u00f1a<\/code> se convierte en <code>Pe%C3%B1a<\/code>. Un valor sin codificar puede invalidar la URL y hacer fallar el env\u00edo.<\/li>\n\n\n<li><strong>Un bot\u00f3n de URL sin variable no entra en el env\u00edo.<\/strong> Solo incluye el componente <code>button<\/code> si ese bot\u00f3n tiene una parte din\u00e1mica.<\/li>\n\n<\/ul>\n\n\n\n<p>Los ejemplos de Meta usan <code>index<\/code> a veces como texto (<code>\"0\"<\/code>) y a veces como n\u00famero (<code>0<\/code>). Elige uno y estandar\u00edzalo en tu c\u00f3digo. Si quieres medir el clic en GA4 con UTM en ese sufijo, mira la gu\u00eda de <a href=\"https:\/\/vectalk.com.br\/blog\/es\/utm-plantilla-whatsapp\/\">bot\u00f3n de URL din\u00e1mica con UTM<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Respuesta r\u00e1pida con payload<\/h2>\n\n\n\n<p>Los botones de respuesta r\u00e1pida se definen al crear la plantilla con un texto fijo (hasta 25 caracteres) y no necesitan nada en el env\u00edo. Lo que s\u00ed puedes mandar es un <strong>payload<\/strong> propio, que vuelve en el webhook cuando el cliente toca el bot\u00f3n. As\u00ed sabes exactamente qu\u00e9 campa\u00f1a, pedido u oferta gener\u00f3 la respuesta.<\/p>\n\n\n\n<p>La sintaxis aparece en la documentaci\u00f3n de <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/marketing-templates\/media-card-carousel-templates\" target=\"_blank\" rel=\"noreferrer noopener\">plantillas de carrusel<\/a>, donde Meta describe el <code>payload<\/code> como opcional y entregado en <code>messages.button.payload<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"to\": \"573001234567\",\n  \"type\": \"template\",\n  \"template\": {\n    \"name\": \"confirmar_cita\",\n    \"language\": { \"code\": \"es_MX\" },\n    \"components\": [\n      {\n        \"type\": \"body\",\n        \"parameters\": [\n          { \"type\": \"text\", \"text\": \"Ana\" },\n          { \"type\": \"text\", \"text\": \"5\/11 a las 14 h\" }\n        ]\n      },\n      {\n        \"type\": \"button\",\n        \"sub_type\": \"quick_reply\",\n        \"index\": 0,\n        \"parameters\": [\n          { \"type\": \"payload\", \"payload\": \"confirmar:cita:98765\" }\n        ]\n      },\n      {\n        \"type\": \"button\",\n        \"sub_type\": \"quick_reply\",\n        \"index\": 1,\n        \"parameters\": [\n          { \"type\": \"payload\", \"payload\": \"reprogramar:cita:98765\" }\n        ]\n      }\n    ]\n  }\n}<\/code><\/pre>\n\n\n\n<p>Cuando la clienta toca &#8220;Confirmar&#8221;, llega al webhook un mensaje con <code>\"type\": \"button\"<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"context\": { \"from\": \"5215550000000\", \"id\": \"wamid.HBgLNTUx...\" },\n  \"from\": \"573001234567\",\n  \"id\": \"wamid.HBgLNTUy...\",\n  \"timestamp\": \"1761750000\",\n  \"type\": \"button\",\n  \"button\": { \"payload\": \"confirmar:cita:98765\", \"text\": \"Confirmar\" }\n}<\/code><\/pre>\n\n\n\n<p><code>context.id<\/code> es el <code>wamid<\/code> de la plantilla enviada, y <code>button.payload<\/code> trae tu clave. En el ejemplo de la <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/webhooks\/reference\/messages\/button\" target=\"_blank\" rel=\"noreferrer noopener\">referencia del webhook de bot\u00f3n<\/a>, sin payload propio, <code>payload<\/code> y <code>text<\/code> traen la misma etiqueta del bot\u00f3n. Recuerda que, al crearla, los botones de respuesta r\u00e1pida deben ir agrupados (todos antes o todos despu\u00e9s de los dem\u00e1s tipos), y la plantilla admite hasta 10.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. C\u00f3digo de cup\u00f3n (copy_code)<\/h2>\n\n\n\n<p>Las plantillas de marketing pueden tener un bot\u00f3n &#8220;copiar c\u00f3digo&#8221;, que copia un texto de hasta 20 caracteres al portapapeles del celular. En el env\u00edo, el bot\u00f3n lleva <code>sub_type: \"copy_code\"<\/code> y un par\u00e1metro <code>coupon_code<\/code>, seg\u00fan la p\u00e1gina de <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/marketing-templates\/coupon-templates\" target=\"_blank\" rel=\"noreferrer noopener\">plantillas de cup\u00f3n<\/a>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"to\": \"573001234567\",\n  \"type\": \"template\",\n  \"template\": {\n    \"name\": \"cupon_buen_fin\",\n    \"language\": { \"code\": \"es_MX\" },\n    \"components\": [\n      {\n        \"type\": \"body\",\n        \"parameters\": [\n          { \"type\": \"text\", \"parameter_name\": \"coupon_code\", \"text\": \"BUENFIN25\" },\n          { \"type\": \"text\", \"parameter_name\": \"discount\", \"text\": \"25%\" }\n        ]\n      },\n      {\n        \"type\": \"button\",\n        \"sub_type\": \"copy_code\",\n        \"index\": 0,\n        \"parameters\": [\n          { \"type\": \"coupon_code\", \"coupon_code\": \"BUENFIN25\" }\n        ]\n      }\n    ]\n  }\n}<\/code><\/pre>\n\n\n\n<p>Como en la p\u00e1gina de Meta, el ejemplo usa una plantilla con variables nombradas en el cuerpo; en una plantilla posicional, quita <code>parameter_name<\/code>. F\u00edjate que el c\u00f3digo aparece dos veces: una en el cuerpo (para que el cliente lo lea) y otra en el bot\u00f3n (para copiar). Son campos independientes; si generas cupones \u00fanicos por cliente, llena los dos con el mismo valor. La plantilla admite un bot\u00f3n de copiar c\u00f3digo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. Ejemplo combinado: imagen, variables nombradas, URL y respuesta r\u00e1pida<\/h2>\n\n\n\n<p>En la vida real, una plantilla de marketing suele combinar varias piezas. Sup\u00f3n una plantilla aprobada con encabezado de imagen, cuerpo <code>Hola {{first_name}}, \u00a1lleg\u00f3 la colecci\u00f3n {{collection}}!<\/code>, bot\u00f3n 0 de URL din\u00e1mica y bot\u00f3n 1 de respuesta r\u00e1pida &#8220;No quiero recibir&#8221;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST \"https:\/\/graph.facebook.com\/v26.0\/$PHONE_NUMBER_ID\/messages\" \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"messaging_product\": \"whatsapp\",\n    \"recipient_type\": \"individual\",\n    \"to\": \"573001234567\",\n    \"type\": \"template\",\n    \"template\": {\n      \"name\": \"coleccion_nueva\",\n      \"language\": { \"code\": \"es_MX\" },\n      \"components\": [\n        {\n          \"type\": \"header\",\n          \"parameters\": [\n            { \"type\": \"image\", \"image\": { \"id\": \"1339522734477770\" } }\n          ]\n        },\n        {\n          \"type\": \"body\",\n          \"parameters\": [\n            { \"type\": \"text\", \"parameter_name\": \"first_name\", \"text\": \"Bruna\" },\n            { \"type\": \"text\", \"parameter_name\": \"collection\", \"text\": \"Verano 2027\" }\n          ]\n        },\n        {\n          \"type\": \"button\",\n          \"sub_type\": \"url\",\n          \"index\": \"0\",\n          \"parameters\": [\n            { \"type\": \"text\", \"parameter_name\": \"slug\", \"text\": \"verano-2027\" }\n          ]\n        },\n        {\n          \"type\": \"button\",\n          \"sub_type\": \"quick_reply\",\n          \"index\": \"1\",\n          \"parameters\": [\n            { \"type\": \"payload\", \"payload\": \"optout:campana_verano\" }\n          ]\n        }\n      ]\n    }\n  }'<\/code><\/pre>\n\n\n\n<p>El <code>parameter_name<\/code> en el bot\u00f3n de URL solo aplica si la plantilla es nombrada y la URL usa <code>{{slug}}<\/code>; en una plantilla posicional, quita esa clave. Para tarjetas con imagen y bot\u00f3n por tarjeta, la estructura cambia (componente <code>carousel<\/code>), y est\u00e1 en la gu\u00eda de <a href=\"https:\/\/vectalk.com.br\/blog\/es\/plantilla-carrusel-whatsapp\/\">plantilla carrusel<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">El campo <code>language<\/code><\/h2>\n\n\n\n<p><code>language.code<\/code> debe ser <strong>exactamente<\/strong> el c\u00f3digo con el que se cre\u00f3 la plantilla. Una plantilla llamada <code>pedido_confirmado<\/code> en <code>es_MX<\/code> y otra con el mismo nombre en <code>es_AR<\/code> son dos plantillas distintas. Algunos c\u00f3digos de la <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/supported-languages\" target=\"_blank\" rel=\"noreferrer noopener\">lista de idiomas admitidos<\/a>:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Idioma<\/th><th>C\u00f3digo<\/th><\/tr><\/thead><tbody><tr><td>Espa\u00f1ol<\/td><td><code>es<\/code><\/td><\/tr><tr><td>Espa\u00f1ol (M\u00e9xico)<\/td><td><code>es_MX<\/code><\/td><\/tr><tr><td>Espa\u00f1ol (Argentina)<\/td><td><code>es_AR<\/code><\/td><\/tr><tr><td>Espa\u00f1ol (Colombia)<\/td><td><code>es_CO<\/code><\/td><\/tr><tr><td>Espa\u00f1ol (Chile)<\/td><td><code>es_CL<\/code><\/td><\/tr><tr><td>Espa\u00f1ol (Per\u00fa)<\/td><td><code>es_PE<\/code><\/td><\/tr><tr><td>Espa\u00f1ol (Espa\u00f1a)<\/td><td><code>es_ES<\/code><\/td><\/tr><tr><td>Portugu\u00e9s (Brasil)<\/td><td><code>pt_BR<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>\u00bfEnviaste <code>es<\/code> para una plantilla creada en <code>es_MX<\/code>? El resultado es el error 132001, como si la plantilla no existiera.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">La respuesta de la API<\/h2>\n\n\n\n<p>Cuando el env\u00edo es aceptado, la API devuelve:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-json\">{\n  \"messaging_product\": \"whatsapp\",\n  \"contacts\": [{ \"input\": \"573001234567\", \"wa_id\": \"573001234567\" }],\n  \"messages\": [{ \"id\": \"wamid.HBgLMTY1MDM4Nzk0MzkVAgARGBJBRkJENzEx...\", \"message_status\": \"accepted\" }]\n}<\/code><\/pre>\n\n\n\n<p>Guarda el <code>id<\/code> (el <code>wamid<\/code>): es el que aparece en los webhooks de estado (<code>sent<\/code>, <code>delivered<\/code>, <code>read<\/code>, <code>failed<\/code>). El campo <code>message_status<\/code> solo aparece cuando la plantilla est\u00e1 bajo <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/template-pacing\" target=\"_blank\" rel=\"noreferrer noopener\">pacing<\/a>. Un 200 significa &#8220;aceptado&#8221;, no &#8220;entregado&#8221;; algunos errores solo aparecen despu\u00e9s, en el webhook con <code>status: failed<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Errores comunes de par\u00e1metros<\/h2>\n\n\n\n<p>Estos son los c\u00f3digos que m\u00e1s aparecen al enviar plantillas, con la descripci\u00f3n de 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>:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>C\u00f3digo<\/th><th>Qu\u00e9 significa<\/th><th>Causa t\u00edpica<\/th><\/tr><\/thead><tbody><tr><td><code>132000<\/code><\/td><td>La cantidad de par\u00e1metros no coincide con la plantilla<\/td><td>Falta o sobra un <code>text<\/code> en el cuerpo; olvidaste el componente del bot\u00f3n de URL din\u00e1mica<\/td><\/tr><tr><td><code>132001<\/code><\/td><td>La plantilla no existe en ese idioma o no est\u00e1 aprobada<\/td><td><code>language.code<\/code> incorrecto, error en el nombre, plantilla todav\u00eda <code>PENDING<\/code><\/td><\/tr><tr><td><code>132005<\/code><\/td><td>Texto traducido demasiado largo<\/td><td>Revisa en el WhatsApp Manager que la traducci\u00f3n de la plantilla est\u00e9 completa<\/td><\/tr><tr><td><code>132007<\/code><\/td><td>El contenido de la plantilla viola una pol\u00edtica de WhatsApp<\/td><td>Revisa el contenido seg\u00fan las reglas de revisi\u00f3n<\/td><\/tr><tr><td><code>132012<\/code><\/td><td>Par\u00e1metros con un formato distinto al de la plantilla<\/td><td><code>parameter_name<\/code> en plantilla posicional (o al rev\u00e9s); <code>text<\/code> donde se esperaba <code>image<\/code><\/td><\/tr><tr><td><code>132015<\/code><\/td><td>Plantilla pausada por baja calidad<\/td><td>Edita la plantilla y espera la nueva aprobaci\u00f3n<\/td><\/tr><tr><td><code>132016<\/code><\/td><td>Plantilla pausada demasiadas veces y desactivada para siempre<\/td><td>Crea una plantilla nueva con otro contenido<\/td><\/tr><tr><td><code>131008<\/code><\/td><td>Falta un par\u00e1metro obligatorio<\/td><td>Campo obligatorio ausente, como <code>language<\/code> o <code>name<\/code><\/td><\/tr><tr><td><code>131009<\/code><\/td><td>Valor de par\u00e1metro inv\u00e1lido<\/td><td>Un valor fuera del formato aceptado en alg\u00fan campo<\/td><\/tr><tr><td><code>100<\/code><\/td><td>Par\u00e1metro no admitido o mal escrito<\/td><td>Error de tipeo en una clave (<code>paramters<\/code>, <code>lenguage<\/code>)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Los errores 132000 y 132012 tienen su propio an\u00e1lisis: <a href=\"https:\/\/vectalk.com.br\/blog\/es\/error-132000-plantilla-whatsapp\/\">errores 132000 y 132012<\/a>. Para los dem\u00e1s c\u00f3digos, consulta la gu\u00eda de <a href=\"https:\/\/vectalk.com.br\/blog\/es\/errores-api-whatsapp\/\">errores de la API de WhatsApp<\/a>.<\/p>\n\n\n\n<p>Un checklist r\u00e1pido antes de abrir un ticket:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Abre la plantilla en el WhatsApp Manager (o cons\u00faltala por la API de plantillas) y confirma <code>status: APPROVED<\/code>, el idioma y el <code>parameter_format<\/code>.<\/li>\n\n\n<li>Cuenta los marcadores de cada componente y comp\u00e1ralos con los <code>parameters<\/code> enviados.<\/li>\n\n\n<li>Verifica que cada bot\u00f3n con variable tenga un componente <code>button<\/code> con el <code>index<\/code> correcto.<\/li>\n\n\n<li>Abre la URL del archivo en una ventana privada y codifica los valores de URL din\u00e1mica.<\/li>\n\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Cu\u00e1nto cuesta enviar una plantilla<\/h2>\n\n\n\n<p>El precio depende de la categor\u00eda de la plantilla y del pa\u00eds del destinatario. Para destinatarios en Brasil, desde el 1\/10\/2026 Meta cobra R$ 0,3217 (reales brasile\u00f1os) por plantilla de marketing y R$ 0,0350 por plantilla de utilidad o autenticaci\u00f3n. Tambi\u00e9n desde el 1\/10\/2026, las plantillas de utilidad enviadas dentro de la ventana de atenci\u00f3n se cobran. C\u00f3mo Meta decide la categor\u00eda est\u00e1 en <a href=\"https:\/\/vectalk.com.br\/blog\/es\/categorias-plantillas-whatsapp\/\">marketing, utilidad o autenticaci\u00f3n<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo enviar plantillas con Vectalk<\/h2>\n\n\n\n<p>Vectalk es un proxy de la Cloud API oficial: el cuerpo de la solicitud es el mismo de Meta, solo cambian la URL y el token. Todos los payloads de este art\u00edculo funcionan en <code>POST https:\/\/apis.vectalk.com.br\/api\/messages<\/code>; basta con guardar el JSON en un archivo y enviarlo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"language-bash\">curl -X POST https:\/\/apis.vectalk.com.br\/api\/messages \\\n  -H \"Authorization: Bearer $VECTALK_TOKEN\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d @plantilla.json<\/code><\/pre>\n\n\n\n<p>Con un <strong>token de instancia<\/strong>, el <code>phone_number_id<\/code> se resuelve autom\u00e1ticamente. Con un <strong>token de organizaci\u00f3n<\/strong>, incluye <code>\"phone_number_id\"<\/code> en el cuerpo para indicar desde qu\u00e9 n\u00famero sale, seg\u00fan la <a href=\"https:\/\/docs.vectalk.com.br\/authentication\">documentaci\u00f3n de autenticaci\u00f3n<\/a>. La referencia del env\u00edo est\u00e1 en <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/messages\/send-template\">Plantilla en la API de Vectalk<\/a>.<\/p>\n\n\n\n<p>Las plantillas en s\u00ed las creas y sigues en el panel (Templates, con la Biblioteca de Modelos) o por la API de plantillas, con token de instancia. En la facturaci\u00f3n, cada mensaje entregado se descuenta del saldo prepago de tu cuenta, y no necesitas registrar una tarjeta en Meta. Crea tu cuenta en <a href=\"https:\/\/apps.vectalk.com.br\/register\">apps.vectalk.com.br\/register<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Preguntas frecuentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfTengo que enviar el texto de la plantilla en la solicitud?<\/h3>\n\n\n\n<p>No. El texto fijo ya est\u00e1 aprobado por Meta. En el env\u00edo van solo el nombre, el idioma y los valores de las variables, del archivo del encabezado y de los botones din\u00e1micos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfQu\u00e9 diferencia hay entre variable posicional y nombrada?<\/h3>\n\n\n\n<p>La posicional usa <code>{{1}}<\/code>, <code>{{2}}<\/code> y exige los valores en el orden del texto. La nombrada usa <code>{{first_name}}<\/code> y cada valor lleva <code>parameter_name<\/code>, en cualquier orden. El formato se elige al crear la plantilla; si nadie lo elige, se usa el posicional.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPuedo cambiar la imagen del encabezado en cada env\u00edo?<\/h3>\n\n\n\n<p>S\u00ed. La imagen aprobada es solo un ejemplo para la revisi\u00f3n. En cada env\u00edo mandas el archivo que quieras en el componente <code>header<\/code>, por <code>link<\/code> o <code>id<\/code>, siempre que sea del mismo tipo definido en la plantilla (imagen, video o documento).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPor qu\u00e9 recibo un 200 y el mensaje no llega?<\/h3>\n\n\n\n<p>El 200 solo confirma que la API acept\u00f3 la solicitud. Los errores de plantilla, de n\u00famero o de l\u00edmite pueden llegar despu\u00e9s, en el webhook de estado con <code>failed<\/code> y el c\u00f3digo del error. Monitorea los webhooks, no solo la respuesta HTTP.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>Fuentes oficiales consultadas el 29\/10\/2026:<\/strong> <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">Template fundamentals (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/components\" target=\"_blank\" rel=\"noreferrer noopener\">Template components (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/template-media\" target=\"_blank\" rel=\"noreferrer noopener\">Template media (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/utility-templates\/utility-templates\" target=\"_blank\" rel=\"noreferrer noopener\">Utility templates (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/marketing-templates\/custom-marketing-templates\" target=\"_blank\" rel=\"noreferrer noopener\">Custom marketing templates (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/marketing-templates\/coupon-templates\" target=\"_blank\" rel=\"noreferrer noopener\">Coupon code templates (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/marketing-templates\/media-card-carousel-templates\" target=\"_blank\" rel=\"noreferrer noopener\">Media card carousel templates (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/templates\/supported-languages\" target=\"_blank\" rel=\"noreferrer noopener\">Supported languages (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/send-messages\" target=\"_blank\" rel=\"noreferrer noopener\">Send messages (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/messages\/document-messages\" target=\"_blank\" rel=\"noreferrer noopener\">Document messages (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/webhooks\/reference\/messages\/button\" target=\"_blank\" rel=\"noreferrer noopener\">Button messages webhook (Meta)<\/a>, <a href=\"https:\/\/developers.facebook.com\/documentation\/business-messaging\/whatsapp\/support\/error-codes\" target=\"_blank\" rel=\"noreferrer noopener\">Error codes (Meta)<\/a>, <a href=\"https:\/\/docs.vectalk.com.br\/api-reference\/messages\/send-template\">Env\u00edo de plantillas en la API de Vectalk<\/a>, <a href=\"https:\/\/docs.vectalk.com.br\/authentication\">Autenticaci\u00f3n en la API de Vectalk<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Payloads completos para enviar plantillas por la API de WhatsApp: variables posicionales y nombradas, encabezado con imagen, video o PDF, bot\u00f3n de URL din\u00e1mica, respuesta r\u00e1pida y cup\u00f3n.<\/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-743","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>Enviar plantilla por la API de WhatsApp: JSON | Vectalk<\/title>\n<meta name=\"description\" content=\"C\u00f3mo enviar una plantilla por la API de WhatsApp: payloads cURL y JSON con variables posicionales y nombradas, multimedia, botones, cup\u00f3n y errores.\" \/>\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\/enviar-plantilla-api-whatsapp\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Enviar plantilla por la API de WhatsApp: JSON | Vectalk\" \/>\n<meta property=\"og:description\" content=\"C\u00f3mo enviar una plantilla por la API de WhatsApp: payloads cURL y JSON con variables posicionales y nombradas, multimedia, botones, cup\u00f3n y errores.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vectalk.com.br\/blog\/es\/enviar-plantilla-api-whatsapp\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Vectalk\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-29T13:21:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-29T13:21:41+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=\"15 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\\\/enviar-plantilla-api-whatsapp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/enviar-plantilla-api-whatsapp\\\/\"},\"author\":{\"name\":\"wanderleyfcunha\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"headline\":\"C\u00f3mo enviar una plantilla por la API de WhatsApp: variables, multimedia en el encabezado y botones (JSON completo)\",\"datePublished\":\"2026-10-29T13:21:12+00:00\",\"dateModified\":\"2026-10-29T13:21:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/enviar-plantilla-api-whatsapp\\\/\"},\"wordCount\":2331,\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/enviar-plantilla-api-whatsapp\\\/\",\"url\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/enviar-plantilla-api-whatsapp\\\/\",\"name\":\"Enviar plantilla por la API de WhatsApp: JSON | Vectalk\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-29T13:21:12+00:00\",\"dateModified\":\"2026-10-29T13:21:41+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/ff36ecd9d8257856f227f8e5d639db2b\"},\"description\":\"C\u00f3mo enviar una plantilla por la API de WhatsApp: payloads cURL y JSON con variables posicionales y nombradas, multimedia, botones, cup\u00f3n y errores.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/enviar-plantilla-api-whatsapp\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/enviar-plantilla-api-whatsapp\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/es\\\/enviar-plantilla-api-whatsapp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vectalk.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"C\u00f3mo enviar una plantilla por la API de WhatsApp: variables, multimedia en el encabezado y botones (JSON completo)\"}]},{\"@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":"Enviar plantilla por la API de WhatsApp: JSON | Vectalk","description":"C\u00f3mo enviar una plantilla por la API de WhatsApp: payloads cURL y JSON con variables posicionales y nombradas, multimedia, botones, cup\u00f3n y errores.","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\/enviar-plantilla-api-whatsapp\/","og_locale":"en_US","og_type":"article","og_title":"Enviar plantilla por la API de WhatsApp: JSON | Vectalk","og_description":"C\u00f3mo enviar una plantilla por la API de WhatsApp: payloads cURL y JSON con variables posicionales y nombradas, multimedia, botones, cup\u00f3n y errores.","og_url":"https:\/\/vectalk.com.br\/blog\/es\/enviar-plantilla-api-whatsapp\/","og_site_name":"Blog Vectalk","article_published_time":"2026-10-29T13:21:12+00:00","article_modified_time":"2026-10-29T13:21:41+00:00","author":"wanderleyfcunha","twitter_card":"summary_large_image","twitter_misc":{"Written by":"wanderleyfcunha","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vectalk.com.br\/blog\/es\/enviar-plantilla-api-whatsapp\/#article","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/enviar-plantilla-api-whatsapp\/"},"author":{"name":"wanderleyfcunha","@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"headline":"C\u00f3mo enviar una plantilla por la API de WhatsApp: variables, multimedia en el encabezado y botones (JSON completo)","datePublished":"2026-10-29T13:21:12+00:00","dateModified":"2026-10-29T13:21:41+00:00","mainEntityOfPage":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/enviar-plantilla-api-whatsapp\/"},"wordCount":2331,"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/vectalk.com.br\/blog\/es\/enviar-plantilla-api-whatsapp\/","url":"https:\/\/vectalk.com.br\/blog\/es\/enviar-plantilla-api-whatsapp\/","name":"Enviar plantilla por la API de WhatsApp: JSON | Vectalk","isPartOf":{"@id":"https:\/\/vectalk.com.br\/blog\/#website"},"datePublished":"2026-10-29T13:21:12+00:00","dateModified":"2026-10-29T13:21:41+00:00","author":{"@id":"https:\/\/vectalk.com.br\/blog\/#\/schema\/person\/ff36ecd9d8257856f227f8e5d639db2b"},"description":"C\u00f3mo enviar una plantilla por la API de WhatsApp: payloads cURL y JSON con variables posicionales y nombradas, multimedia, botones, cup\u00f3n y errores.","breadcrumb":{"@id":"https:\/\/vectalk.com.br\/blog\/es\/enviar-plantilla-api-whatsapp\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vectalk.com.br\/blog\/es\/enviar-plantilla-api-whatsapp\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vectalk.com.br\/blog\/es\/enviar-plantilla-api-whatsapp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vectalk.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"C\u00f3mo enviar una plantilla por la API de WhatsApp: variables, multimedia en el encabezado y botones (JSON completo)"}]},{"@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\/743","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=743"}],"version-history":[{"count":1,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/743\/revisions"}],"predecessor-version":[{"id":746,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/posts\/743\/revisions\/746"}],"wp:attachment":[{"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/media?parent=743"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/categories?post=743"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vectalk.com.br\/blog\/wp-json\/wp\/v2\/tags?post=743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}