> ## Documentation Index
> Fetch the complete documentation index at: https://docs.axelo.mx/llms.txt
> Use this file to discover all available pages before exploring further.

# WhatsApp Business

> Envía mensajes de WhatsApp usando templates aprobados por Meta.

## Requisitos

Para enviar por WhatsApp necesitas:

1. Una cuenta de **Meta Business** con número verificado
2. **Templates aprobados** por Meta (el proceso toma 24–48 h)
3. Credenciales configuradas en el dashboard: `phone_number_id` y `access_token`

## Cómo funciona

WhatsApp Business API solo permite enviar **mensajes de template** (HSM) hacia usuarios fuera de una ventana de conversación activa. Los templates deben ser aprobados por Meta antes de poder usarlos.

Las variables del template se pasan en orden como `params`:

```
Template Meta: "Hola {{1}}, tu cita es el {{2}}."
params:        ["María", "15 de abril"]
```

## Enviar un mensaje

```bash theme={null}
curl -X POST https://api.axelo.mx/v1/send/whatsapp \
  -H "Content-Type: application/json" \
  -H "X-API-Key: TU_API_KEY" \
  -d '{
    "phone_number":  "521234567890",
    "template_id":   "confirmacion_cita",
    "language_code": "es",
    "params":        ["María", "15 de abril", "10:00 AM"]
  }'
```

### Parámetros

| Campo           | Tipo   | Requerido | Descripción                                                                                                                               |
| --------------- | ------ | --------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `phone_number`  | string | ✅         | Número en formato internacional sin `+` (ej. `521234567890`)                                                                              |
| `template_id`   | string | ✅         | Alias amigable registrado en el dashboard, o el nombre exacto del template en Meta (snake\_case). Axelo resuelve el alias automáticamente |
| `language_code` | string | —         | Código de idioma. Si usas alias, se infiere del registro                                                                                  |
| `params`        | array  | —         | Valores para `{{1}}`, `{{2}}`, etc. en orden                                                                                              |

### Alias de templates

Los templates con header media en Meta llevan un sufijo `_hxXXXX...` (hash del contenido) que es ilegible. Para usar nombres limpios en tu código, registra un alias en el dashboard:

| Alias (`wa_template_id`) | Nombre real en Meta (`meta_name`)          |
| ------------------------ | ------------------------------------------ |
| `confirmacion`           | `torneospro_confirmacion_hx97bb9c99ad7...` |
| `partido`                | `torneospro_partido_v2_hxf2a40395f1d...`   |

Después puedes llamar la API con `"template_id": "confirmacion"` y Axelo traduce al nombre real antes de enviar a Meta. Si el alias no existe en tu tenant, el `template_id` se manda tal cual.

## Gestionar templates

### Desde el portal de tenant (`/app/me/wa-templates`)

Los tenants pueden ver sus templates disponibles con el ejemplo de llamada a la API.

Si el administrador habilitó **credenciales propias** (`allow_custom=true`) para el canal WhatsApp, el tenant también puede crear, editar y eliminar sus templates directamente.

### Desde el panel admin (`/app/tenants/:id/wa-templates`)

El administrador puede gestionar templates de cualquier tenant. Registra cada template con:

* El nombre del template (debe coincidir exactamente con el aprobado en Meta)
* El código de idioma
* El esquema de parámetros (para documentar qué va en cada posición)

<Note>
  El nombre del template en el campo `template_id` debe ser exactamente el mismo que aparece en el Meta Business Manager, incluyendo mayúsculas/minúsculas.
</Note>

## Webhook de entrada

Meta envía eventos (mensajes recibidos, confirmaciones de entrega) a:

```
POST https://comms.panzo.mx/webhook/whatsapp
```

La plataforma verifica la firma `X-Hub-Signature-256` automáticamente.
