edtech / docs /embedded_signup_implementation.md
CognxSafeTrack
feat: implement WhatsApp setup route and documentation for Embedded Signup
3078897
# Implémentation Embedded Signup WhatsApp
Ce document décrit le flux technique pour permettre aux organisations B2B de connecter leur propre numéro WhatsApp à la plateforme.
## 1. Flux Frontend (SDK Meta)
Le Frontend doit charger le SDK Facebook et déclencher la popup de configuration.
### Configuration Requise
- **SDK URL** : `https://connect.facebook.net/en_US/sdk.js`
- **App ID** : Configuré dans le Dashboard Meta App.
- **Config ID** : Identifiant de la configuration d'Embedded Signup créée sur Meta Business Suite.
### Exemple d'appel JS
```javascript
FB.login((response) => {
if (response.authResponse) {
const code = response.authResponse.code;
// Envoyer le code ou le token au Backend
}
}, {
config_id: '<YOUR_CONFIG_ID>',
response_type: 'code',
override_default_response_type: true
});
```
## 2. Point de Terminaison Backend (API)
L'API réceptionne les données après la validation Meta côté client.
### Route : `POST /v1/organizations/:id/whatsapp-setup`
**Authentification** : Requiert un token JWT valide d'un administrateur d'organisation ou une clé API d'administration.
**Corps de la requête (JSON)** :
```json
{
"wabaId": "1234567890",
"accessToken": "EAAG...",
"phoneNumberId": "9876543210",
"phoneNumber": "+33612345678"
}
```
### Traitement Backend :
1. **Validation** : Vérification de la présence des champs obligatoires via Zod.
2. **Chiffrement** : Le `accessToken` est chiffré à la volée avec l' `ENCRYPTION_SECRET` (AES-256-GCM).
3. **Persistance** : Mise à jour de la table `Organization` (champs `systemUserToken` et `wabaId`).
4. **Synchronisation** : `upsert` dans la table `WhatsAppPhoneNumber` pour lier l'ID technique au numéro lisible.
5. **Invalidation Cache** : Suppression des clés Redis `org:config:*` et `org:phone:*` pour forcer le Worker à charger la nouvelle configuration.
## 3. Sécurité
- **Données en transit** : Toujours sous HTTPS + JWT.
- **Données au repos** : Tous les tokens d'accès système sont chiffrés. Seul le code applicatif possédant l' `ENCRYPTION_SECRET` (non présent en DB) peut les lire.