# WhatsApp Business Cloud API — Pandora CRM

Pandora CRM v0.6.24 envía automáticamente la confirmación al cliente **cuando se crea una orden**, siempre que `WHATSAPP_ENABLED=true`. La creación de la orden no se revierte si Meta no responde: el resultado queda registrado en `whatsapp_messages`.

## Plantilla aprobada

La integración usa `WHATSAPP_SEND_MODE=template`, plantilla `confirmacion_orden_pandora`, idioma `es`, con **ocho variables de cuerpo**:

1. Detalle de productos / servicios
2. Total (incluye `$`)
3. Fecha de entrega
4. Dirección
5. Notas (`Sin notas adicionales.` cuando no existen)
6. Titular de la cuenta
7. Banco + datos de cuenta
8. CI/RUC del titular

Cuerpo aprobado:

```text
🛍️ ¡Su orden está confirmada! ✅

{{1}}

*Total: {{2}}*

🗓️ {{3}}
📍 Dirección: {{4}}
{{5}}

⚡ Para su comodidad, puede pagar su orden vía transferencia o en efectivo al momento de la entrega.

Transferencia a:
*{{6}}*
*{{7}}*
*CI:  {{8}}*

Envíe el comprobante por este medio 📜
```

`{{7}}` se construye uniendo `WHATSAPP_BANK_NAME` + `WHATSAPP_BANK_ACCOUNT`.

## Variables `.env`

```env
WHATSAPP_ENABLED=true
WHATSAPP_GRAPH_VERSION=v26.0
WHATSAPP_PHONE_NUMBER_ID=
WHATSAPP_WABA_ID=
WHATSAPP_ACCESS_TOKEN=
WHATSAPP_SEND_MODE=template
WHATSAPP_TEMPLATE_NAME=confirmacion_orden_pandora
WHATSAPP_TEMPLATE_LANGUAGE=es
WHATSAPP_WEBHOOK_VERIFY_TOKEN=
WHATSAPP_APP_SECRET=
WHATSAPP_BANK_HOLDER=
WHATSAPP_BANK_NAME=
WHATSAPP_BANK_ACCOUNT=
WHATSAPP_BANK_ID=
```

Si falta cualquiera de los cuatro datos bancarios, Pandora registra el intento como `skipped` y no envía una confirmación con datos incompletos.

## Envío al crear la orden

`OrderController::store()` guarda la orden y ejecuta `SendOrderWhatsAppConfirmation::dispatchAfterResponse(...)`. El trabajo llama a `WhatsAppService::sendOrderConfirmation()` después de responder al navegador, de modo que guardar la orden no queda bloqueado por la llamada a Meta.

## Webhook

Callback:

```text
https://crm.pandora.farm/webhooks/whatsapp
```

Use el mismo valor definido en `WHATSAPP_WEBHOOK_VERIFY_TOKEN`. Si `WHATSAPP_APP_SECRET` está configurado, Pandora valida `X-Hub-Signature-256` antes de aceptar eventos.

Los estados `sent`, `delivered`, `read` y `failed` actualizan el log de la orden.

## Modo text

`WHATSAPP_SEND_MODE=text` envía texto libre y debe usarse solamente dentro de una ventana válida de atención. Para confirmaciones automáticas iniciadas por Pandora se mantiene el modo `template`.
