Sign inGet Started

Plantillas de WhatsApp

Los envíos de WhatsApp iniciados por la empresa usan una plantilla preaprobada. Una plantilla contiene texto fijo y variables, así que un envío solo aporta valores como un código OTP o un número de pedido.
Bird incluye un catálogo gestionado, registra su contenido en WhatsApp y lo envía desde los números propios de Bird; sus slugs comienzan con bird_. Un espacio de trabajo que haya conectado un número propio también puede crear plantillas en su propia WhatsApp Business Account. La página Templates muestra todas las plantillas que el espacio de trabajo puede enviar y cómo se renderiza cada una.
La página de plantillas de WhatsApp en el panel de Bird, mostrando la lista de plantillas. Un cuadro de búsqueda con filtros de estado y categoría aparece sobre la tabla. Cada fila muestra el estado de una plantilla, que es Borrador o Activa, luego su nombre y slug, su categoría, los idiomas disponibles, la WABA que la contiene y cuándo se modificó por última vez.

Explorar plantillas en el panel

Abre Templates en WhatsApp > Templates. Your templates contiene las plantillas que creó este espacio de trabajo; All templates añade el catálogo gestionado por Bird. Busca por nombre o filtra por estado y categoría, y alterna entre la cuadrícula de tarjetas y la vista de lista con el botón junto a los filtros.
En la vista de lista, cada fila muestra los campos que necesitas para elegir y enviar una plantilla:
  • Status: indica si la plantilla se puede enviar en general. Las plantillas del catálogo gestionado muestran active; una plantilla propia muestra en qué punto está su aprobación. Revisa la lista de idiomas para confirmar que el idioma necesario está disponible.
  • Name: la etiqueta visible, con el slug de la plantilla debajo. Envía con el slug.
  • Languages: los idiomas en los que está registrada la plantilla, por ejemplo inglés y neerlandés.
  • Category: authentication, utility o marketing. La categoría determina cómo WhatsApp trata el mensaje, desde qué número Bird envía una plantilla gestionada y, junto con el país de destino, el precio.
  • WABA: Bird-managed para plantillas del catálogo. Una plantilla propia muestra la WhatsApp Business Account que la contiene y solo envía desde un número de esa misma cuenta.
  • Updated: cuándo cambió la plantilla por última vez.
Haz clic en una fila para abrir el detalle de la plantilla.

Qué contiene una plantilla

La vista de detalle renderiza el cuerpo del mensaje, las variables y los botones en una previsualización con estilo WhatsApp.
El detalle también incluye un ejemplo de cURL para POST /v1/whatsapp/messages, usando el host regional y los valores de ejemplo de la plantilla. Reemplaza la clave API, el destinatario y los valores de las variables antes de enviar.
El ejemplo es la forma más rápida de ver la estructura que un envío debe cumplir. A través de la API, el mismo contenido proviene de la versión de la plantilla (Leer el contenido de una plantilla).

Listar plantillas desde la API

GET /v1/whatsapp/templates devuelve un catálogo paginado por cursor. La solicitud requiere acceso de lectura a whatsapp_management. Usa HTTP o un método de solicitud directa de SDK.
type Templates = { data: Array<{ slug: string; status: string }> };

const templates = await bird.request<Templates>({
  method: "GET",
  path: "/v1/whatsapp/templates",
});
Cada entrada identifica la plantilla, su categoría y sus idiomas disponibles. Lee la versión activa por separado para obtener el contenido del mensaje.
Ejemplo de código
{
  "available_languages": ["en", "es", "pt-BR", "..."],
  "category": "authentication",
  "default_language": "en",
  "description": "One-time passcode",
  "id": "wat_01ky4x8e4genzb7way45txfkm1",
  "languages": {
    "en": { "status": "approved" },
    "es": { "status": "approved" },
    "pt-BR": { "status": "approved" },
    "...": "..."
  },
  "name": "bird_otp",
  "on_missing_language": "fail",
  "scope": "system",
  "slug": "bird_otp",
  "status": "active"
}
La respuesta de ejemplo abrevia las listas de idiomas de bird_otp.
Los campos de los que depende un envío:
  • slug: el identificador usado en un envío. Los slugs de plantillas gestionadas empiezan con bird_, un prefijo reservado para ellas.
  • waba: la WhatsApp Business Account que contiene los idiomas de la plantilla en Meta, y la cuenta a la que debe pertenecer el número del remitente. Ausente en una plantilla gestionada porque Bird administra su cuenta.
  • available_languages: idiomas que se pueden enviar. Un idioma en pausa, deshabilitado, archivado o limitado sale de esta lista.
  • on_missing_language: qué ocurre cuando el idioma solicitado no está disponible. Las plantillas WhatsApp gestionadas por Bird usan fail, que rechaza el envío en lugar de sustituir por otro idioma.

Estado y estado del idioma

Las plantillas gestionadas por Bird muestran status: active. languages.<tag>.status indica el estado en WhatsApp para un idioma, como approved, paused o disabled.
Una plantilla activa puede tener un idioma no disponible. Usa available_languages para decidir si un idioma se puede enviar.

Leer el contenido de una plantilla

El contenido del mensaje pertenece a un idioma en la versión activa. Lee live_version_id de la plantilla y luego solicita el idioma necesario:
const language = await bird.request({
  method: "GET",
  path: "/v1/whatsapp/templates/bird_order_confirmation/versions/{version_id}/languages/en",
});
La referencia de plantilla acepta un slug o un ID wat_. GET …/versions/{version_id}/languages lista los idiomas de la versión sin su contenido.
Ejemplo de código
{
  "category": "utility",
  "components": [
    {
      "example_parameters": [
        { "name": "ref", "text": "A1B2C3D4", "type": "text" },
        { "name": "amount", "text": "USD 49.99", "type": "text" }
      ],
      "text": "Your order {{ref}} has been confirmed for a total of {{amount}}. Thanks for shopping with us.",
      "type": "body"
    }
  ],
  "language": "en",
  "status": "approved"
}
El components del envío debe coincidir con la plantilla. example_parameters identifica cada marcador de posición. En este ejemplo, los parámetros del cuerpo usan name: "ref" y name: "amount". Una plantilla posicional omite name y toma valores en orden {{n}}. Los botones parametrizados tienen su propio example_parameters.
El category del idioma es la categoría de Meta usada para la tarificación. Puede diferir de la categoría registrada de la plantilla si Meta reclasifica el idioma.
La lista variables de la versión resume cada marcador de posición con su clave, tipo, indicador de obligatoriedad y restricción. Los marcadores con nombre usan sus nombres como claves. Los marcadores posicionales usan su número.

Enviar con una plantilla

Nombra la plantilla en el objeto template del envío y completa sus variables mediante components; consulta Enviar mensajes de WhatsApp para ver el payload completo:
const msg = await bird.whatsapp.send({
  to: "+15551234567",
  template: {
    slug: "bird_otp",
    components: [{ type: "body", parameters: [{ type: "text", text: "123456" }] }],
  },
});
console.log(msg.id, msg.status);

Enviar por categoría

Cada plantilla lleva una de las tres categorías de Meta, y la categoría cambia lo que debes hacer antes de que un envío tenga éxito y lo que cuesta. Crear o copiar una plantilla de autenticación propia requiere un negocio verificado, pero enviar una no: la bird_otp gestionada de Bird reside en la WhatsApp Business Account propia de Bird y se envía sin verificación de tu parte. Las plantillas de marketing siempre se envían desde una WhatsApp Business Account propia, a través de una segunda API de Meta a la que Bird enruta automáticamente. Las plantillas de utilidad tienen los menores prerrequisitos de las tres.

Siguientes pasos