# Connecter le WhatsApp d'une boutique

> Flux de connexion par QR code, interrogation (polling) et déconnexion de la session WhatsApp d'une boutique.

# Connecter le WhatsApp d'une boutique

| Méthode | Chemin | Permission | Objet |
|---|---|---|---|
| GET | `/shops/{idOrName}/channels/whatsapp` | `whatsapp.read` | état du canal stocké + session en direct |
| POST | `/shops/{idOrName}/channels/whatsapp/connect` | `whatsapp.connect` | démarrer la connexion ; renvoie un QR ou `connected` |
| GET | `/shops/{idOrName}/channels/whatsapp/connect` | `whatsapp.connect` | interroger jusqu'à `connected` (dernier QR à chaque appel) |
| POST | `/shops/{idOrName}/channels/whatsapp/disconnect` | `whatsapp.connect` | arrêter la session, garder la configuration |

## Flux

```
POST …/channels/whatsapp/connect
→ { "status": "qr_waiting", "qr": "<raw>",
    "qrImageDataUrl": "data:image/png;base64,…",
    "expiresAt": "…", "pollAfterMs": 3000, "channelConfigId": "…" }

GET  …/channels/whatsapp/connect        (à chaque pollAfterMs)
→ { "status": "qr_waiting", … }         (le QR change toutes les ~20–60 s — affichez toujours le dernier)
→ { "status": "connected", "phone": "24177000000", … }
```

Autres statuts : `starting` (le bot démarre — réessayez) et `disconnected`
(la session s'est interrompue — refaites un `POST connect`). Interroger
avant tout `POST` renvoie `409 WHATSAPP_NOT_CONFIGURED`.

Dès que `connected` arrive, l'API enregistre exactement ce que fait la
fenêtre modale QR du tableau de bord elle-même (état du canal,
`channelStatus.whatsapp` de la boutique, le numéro de notification du
propriétaire). Les identifiants de session WhatsApp eux-mêmes sont stockés
chiffrés par le bot à l'instant même où le téléphone scanne le code — ils
ne transitent jamais par cette API.

## Déconnexion

`POST …/channels/whatsapp/disconnect` arrête la session en direct mais
conserve la configuration du canal, de sorte qu'un `connect` ultérieur la
réutilise (avec son créneau de quota) plutôt que de repartir de zéro.
Renvoie `404 WHATSAPP_NOT_CONFIGURED` si la boutique n'a jamais eu de canal
WhatsApp du tout.
