Creación por API Catálogos

Los templates con botón de catálogo son mensajes pre-aprobados por Meta que permiten a los negocios mostrar su catálogo de productos directamente dentro de WhatsApp.

¿Qué es?

Los templates con botón de catálogo son mensajes pre-aprobados por Meta que permiten a los negocios mostrar su catálogo de productos directamente dentro de WhatsApp.\

Limitaciones Importantes

Creación del Catálogo desde Administrador de Ventas

⚠️ Requisito Previo: El catálogo de productos debe ser creado y configurado desde el Administrador de Ventas de Meta (Meta Commerce Manager) antes de poder crear templates con botones de catálogo.

Nota: Los templates con botones de catálogo SÍ pueden ser creados directamente a través de la API del BSP una vez que el catálogo esté configurado.

Otras Limitaciones

  1. Un solo botón de catálogo por template: Cada template puede contener únicamente un botón de tipo catálogo en el componente BUTTONS.
  1. Catálogo asociado requerido: El WhatsApp Business Account (WABA) debe tener un catálogo de productos asociado y configurado en Meta Commerce Manager antes de crear el template.
  1. Estado del template: El template debe estar en estado APPROVED antes de poder ser utilizado para enviar mensajes.
  1. Combinación con otros botones: El botón de catálogo no puede combinarse con otros tipos de botones (URL, QUICK_REPLY, FLOW, etc.) en el mismo componente BUTTONS.

Combinaciones Válidas de Componentes

Los templates de catálogo pueden incluir las siguientes combinaciones de componentes:

1. Body + Button (Catálogo)

Combinación mínima válida con solo el cuerpo del mensaje y el botón de catálogo.

{
  "name": "catalog_template",
  "language": "es",
  "components": [
    {
      "type": "BODY",
      "text": "Explora nuestro catálogo de productos:",
      "parameters": []
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "CATALOG",
          "text": "View catalog"
        }
      ]
    }
  ]
}

2. Body + Footer + Button (Catálogo)

Combinación completa con cuerpo, pie de página y botón de catálogo.

{
  "name": "catalog_template_full",
  "language": "es",
  "components": [
    {
      "type": "BODY",
      "text": "Descubre nuestra amplia selección de productos",
      "parameters": []
    },
    {
      "type": "FOOTER",
      "text": "Disponible 24/7"
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "CATALOG",
          "text": "View catalog"
        }
      ]
    }
  ]
}

3. Header + Body + Footer + Button (Catálogo)

Combinación con header de imagen, cuerpo, pie de página y botón de catálogo.

{
  "name": "catalog_template_with_header",
  "language": "es",
  "components": [
    {
      "type": "HEADER",
      "format": "IMAGE",
      "example": {
        "header_handle": ["https://example.com/image.jpg"]
      }
    },
    {
      "type": "BODY",
      "text": "Bienvenido a nuestra tienda. Explora nuestros productos:",
      "parameters": []
    },
    {
      "type": "FOOTER",
      "text": "Ofertas limitadas"
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "CATALOG",
          "text": "View catalog"
        }
      ]
    }
  ]
}

Combinaciones NO Válidas

❌ Body + Button (Catálogo) + Button (URL): No se pueden mezclar botones de catálogo con otros tipos de botones.

❌ Solo Button (Catálogo): El template debe incluir al menos un componente BODY.

❌ Body + Button (Catálogo) + Button (QUICK_REPLY): Solo un botón de catálogo por template.

Estructura del Botón de Catálogo

Propiedades

  • type: Siempre debe ser "CATALOG"
  • text: Texto del botón (por defecto: "View catalog" o "Ver catálogo")

Ejemplo de Botón

{
  "type": "CATALOG",
  "text": "View catalog"
}

Creación del Template desde BSP

Los templates con botones de catálogo pueden ser creados directamente a través de la API del BSP. Solo es necesario que el catálogo de productos esté previamente configurado en Meta Commerce Manager.

Endpoint para Crear Template

POST /api/v1/whatsapp_business_accounts/{waba_id}/message_templates

Headers

Authorization: Bearer <USER_TOKEN>
Content-Type: application/json

Request Body

{
  "name": "catalog_template",
  "language": "es",
  "category": "MARKETING",
  "components": [
    {
      "type": "BODY",
      "text": "Explora nuestro catálogo de productos:"
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "CATALOG",
          "text": "View catalog"
        }
      ]
    }
  ]
}

Ejemplo Completo con Footer

{
  "name": "catalog_template_full",
  "language": "es",
  "category": "MARKETING",
  "components": [
    {
      "type": "BODY",
      "text": "Descubre nuestra amplia selección de productos"
    },
    {
      "type": "FOOTER",
      "text": "Disponible 24/7"
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "CATALOG",
          "text": "View catalog"
        }
      ]
    }
  ]
}

Ejemplo con BODY con Variables Dinámicas

Cuando el componente BODY incluye variables dinámicas (usando {{1}}{{2}}, etc.), es necesario proporcionar un ejemplo que muestre cómo se verán los valores reemplazados:

{
  "name": "catalog_template_personalized",
  "language": "es",
  "category": "MARKETING",
  "components": [
    {
      "type": "BODY",
      "text": "Hola {{1}}, tenemos {{2}} productos nuevos disponibles. Explora nuestro catálogo:",
      "example": {
        "body_text": [
          [
            "María",
            "15"
          ]
        ]
      }
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "CATALOG",
          "text": "View catalog"
        }
      ]
    }
  ]
}

Explicación del ejemplo:

  • El texto del BODY contiene dos variables: {{1}} (nombre del cliente) y {{2}} (cantidad de productos)
  • El campo example.body_text es un array de arrays donde:
    • El array externo puede contener múltiples ejemplos (generalmente uno)
    • El array interno contiene los valores de ejemplo en el mismo orden que las variables ({{1}}{{2}}, etc.)
  • En este caso, {{1}} será reemplazado por "María" y {{2}} por "15"
  • El mensaje resultante será: "Hola María, tenemos 15 productos nuevos disponibles. Explora nuestro catálogo:"

Ejemplo con Múltiples Variables y Footer

{
  "name": "catalog_template_advanced",
  "language": "es",
  "category": "MARKETING",
  "components": [
    {
      "type": "BODY",
      "text": "¡Hola {{1}}! Tu pedido #{{2}} está listo. Tenemos {{3}} productos similares en nuestro catálogo.",
      "example": {
        "body_text": [
          [
            "Juan Pérez",
            "ORD-12345",
            "12"
          ]
        ]
      }
    },
    {
      "type": "FOOTER",
      "text": "Ofertas válidas hasta fin de mes"
    },
    {
      "type": "BUTTONS",
      "buttons": [
        {
          "type": "CATALOG",
          "text": "View catalog"
        }
      ]
    }
  ]
}

Nota importante: El número de valores en el array interno del ejemplo debe coincidir exactamente con el número de variables ({{1}}{{2}}{{3}}, etc.) en el texto del BODY.

Response

{
  "id": "template_id_123",
  "status": "PENDING",
  "category": "MARKETING"
}

Nota: El template quedará en estado PENDING hasta que Meta lo apruebe. Una vez aprobado, cambiará a estado APPROVED y podrá ser utilizado para enviar mensajes.

Consideraciones Adicionales

  1. Parámetros dinámicos: El componente BODY puede incluir parámetros dinámicos usando la sintaxis {{1}}{{2}}, etc., pero el botón de catálogo no admite parámetros dinámicos.
  1. Idioma del template: El template debe estar creado en el mismo idioma que se especifica en el request (language: "es").
  1. Validación: El sistema valida automáticamente que el template existe y está aprobado antes de enviar el mensaje.
  1. Manejo de errores: Si el template no existe o no está aprobado, el sistema retornará un error apropiado.

Referencias

Consideraciones Adicionales

  1. Parámetros dinámicos: El componente BODY puede incluir parámetros dinámicos usando la sintaxis {{1}}{{2}}, etc., pero el botón de catálogo no admite parámetros dinámicos.
  1. Idioma del template: El template debe estar creado en el mismo idioma que se especifica en el request (language: "es").
  1. Validación: El sistema valida automáticamente que el template existe y está aprobado antes de enviar el mensaje.
  1. Manejo de errores: Si el template no existe o no está aprobado, el sistema retornará un error apropiado.

Referencias

 
 
¿Esto respondió tu pregunta?
😞
😐
🤩