# WhatsApp

Permite que los usuarios se registren e inicien sesión con un código de un solo uso enviado por WhatsApp, junto al correo electrónico. `vela enable whatsapp` añade la opción "Continuar con WhatsApp" a las páginas de login y registro que creó [`vela enable auth`](/es/docs/enable/auth), con acciones de formulario o con [`--remote`](/es/docs/enable/auth-remote).

### Sintaxis

```
$ vela enable whatsapp
```

Ejecuta primero [`vela enable auth`](/es/docs/enable/auth); igual que auth, necesita [shadcn-svelte](/es/docs/ui), porque las páginas se construyen con sus componentes. El comando necesita vela 0.15.13 o posterior. El inicio de sesión con WhatsApp viene de un plugin de `pocketbase-server` 0.40.5-beta.5 y posteriores; con un PocketBase anterior el comando se detiene e indica qué actualizar.

### Qué añade

- Una opción **Continuar con WhatsApp** en `/login` y `/signup`. El usuario introduce su número, recibe un código por WhatsApp y lo escribe en `/whatsapp/[token]`.
- `src/lib/server/whatsapp.ts`, las llamadas al plugin de PocketBase.
- Los campos `phone` y `phoneVerified` en `users`. El número es único entre los usuarios que tienen uno.
- Las cuentas nuevas llegan a `/welcome` para elegir un nombre, ya que solo tienen un número.

### El correo electrónico pasa a ser opcional

Un registro con WhatsApp no tiene correo electrónico, así que `enable whatsapp` hace opcional `email` en `users`. Las páginas que generan auth, [teams](/es/docs/enable/teams) y [payments](/es/docs/enable/payments) ya admiten usuarios sin él:

- Los ajustes les ocultan las secciones de correo, verificación y contraseña.
- La navegación y las listas de miembros de equipo muestran el nombre y, si no hay, el número de teléfono.
- La facturación crea su cliente de Stripe a partir del nombre y el número de teléfono.

Las invitaciones a equipos siguen yendo a una dirección de correo, así que un usuario sin correo no ve invitaciones pendientes. Todavía no hay una página para añadir un correo a una cuenta creada con un número de teléfono.

### Desarrollo local

Hasta que configures un remitente, los códigos no se envían: aparecen en los logs de PocketBase de `vela dev`. Regístrate con cualquier número en formato internacional, como `+16165550123`, y copia el código de ahí.

### Enviar códigos en producción

Un destino de despliegue sin remitente oculta la opción de WhatsApp. Configura uno con [`vela env set`](/es/docs/env/set), que toma una clave por comando y pide su valor. Los códigos salen por el relay de VelaStack:

```
$ vela env set VELASTACK_API_KEY -t production
```

O directamente por la API de WhatsApp Cloud, con una plantilla de mensaje aprobada en tu cuenta de Meta Business:

```
$ vela env set WHATSAPP_PHONE_NUMBER_ID -t production
$ vela env set WHATSAPP_ACCESS_TOKEN -t production
$ vela env set WHATSAPP_TEMPLATE_NAME -t production
```

`WHATSAPP_WABA_ID` es opcional pero recomendable: sin él, el panel de PocketBase no puede confirmar que la plantilla esté aprobada.

El remitente sigue a las credenciales configuradas, así que `WHATSAPP_MODE` no hace falta: `VELASTACK_API_KEY` elige el relay y `WHATSAPP_ACCESS_TOKEN` la API de Cloud. Define `WHATSAPP_MODE` solo para cambiar eso: `direct` cuando un destino tiene ambas credenciales (si no, gana el relay), o `dev` para dejar los códigos en los logs de PocketBase, por ejemplo en las previsualizaciones. El inicio de sesión con WhatsApp se activa con una migración que escribe `enable whatsapp`, así que llega a cada despliegue con el resto de tus migraciones.

### Páginas personalizadas

`enable whatsapp` reescribe las páginas de login y registro, y solo lo hace mientras sigan siendo las páginas que escribió `enable auth`. Si cambiaste un formulario, su página, código de servidor y esquema se dejan como están y se marcan como fallidos; el otro formulario se actualiza igualmente. Añade WhatsApp a tu versión a mano, usando las [páginas con WhatsApp](https://github.com/velastack/patterns/tree/main/src/patterns/enable/whatsapp/templates) como referencia.

Desactívalo con [`vela disable whatsapp`](/es/docs/disable/whatsapp).