Connecter Google Calendar
Cette procédure permet de tester Randevou avec un vrai calendrier Google : l’API lit les événements occupés, propose les créneaux libres, revérifie le créneau choisi, puis crée un événement dans le calendrier.
Les clés Google restent côté backend dans .env. Le widget iframe ou script ne
doit jamais charger ces secrets.
1. Créer un calendrier de test
- Ouvre Google Calendar .
- Dans Autres agendas, clique sur +, puis Créer un agenda.
- Donne-lui un nom clair, par exemple
Randevou - test. - Choisis le fuseau horaire attendu, par exemple
Europe/Paris. - Ouvre les paramètres de ce calendrier.
- Dans Intégrer l’agenda, copie l’ID de l’agenda.
Pour un calendrier secondaire, l’ID ressemble souvent à
xxxxxxxx@group.calendar.google.com. Pour l’agenda principal, il peut être
l’adresse email du compte Google.
2. Préparer Google Cloud
- Ouvre Google Cloud Console .
- Crée ou sélectionne un projet dédié, par exemple
randevou-test. - Va dans APIs & Services > Library.
- Cherche Google Calendar API.
- Clique sur Enable.
3. Créer le service account
- Va dans IAM & Admin > Service Accounts .
- Clique sur Create service account.
- Nom suggéré :
randevou-calendar. - A l’étape Grant this service account access to project, ne sélectionne
aucun rôle et continue. N’ajoute pas
Owner,Editor, niAccess Approval Editor: ces rôles sont des droits Google Cloud, pas des droits Google Calendar. Pour ce test, l’accès utile sera donné directement sur le calendrier. - Ouvre le service account créé.
- Dans Keys, clique sur Add key > Create new key.
- Choisis JSON, puis télécharge le fichier.
Garde ce fichier hors du dépôt Git. Il contient la clé privée.
Dans ce JSON, Randevou utilise surtout :
client_emailpourGOOGLE_CLIENT_EMAILprivate_keypourGOOGLE_PRIVATE_KEYproject_idpourGOOGLE_PROJECT_ID
4. Partager le calendrier avec le service account
- Retourne dans les paramètres du calendrier Google créé à l’étape 1.
- Va dans Partager avec des personnes ou des groupes spécifiques.
- Ajoute l’adresse
client_emaildu service account. - Donne-lui le droit Apporter des modifications aux événements.
- Enregistre.
Si le partage est refusé dans un compte Google Workspace, la politique de l’organisation bloque probablement le partage externe. Il faudra alors autoriser ce service account, utiliser un calendrier du même domaine, ou passer par une délégation Workspace plus avancée.
5. Configurer .env
Depuis la racine du projet :
cp .env.example .env
Remplis au minimum :
NODE_ENV=development
PORT=3000
PUBLIC_API_BASE_URL=https://api.randevou.kimoun.com
ALLOWED_ORIGINS=http://localhost:35733,https://randevou.kimoun.com,https://api.randevou.kimoun.com
GOOGLE_CALENDAR_ID=xxxxxxxx@group.calendar.google.com
GOOGLE_CLIENT_EMAIL=randevou-calendar@ton-projet.iam.gserviceaccount.com
GOOGLE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMII...\n-----END PRIVATE KEY-----\n"
GOOGLE_PROJECT_ID=ton-projet
GOOGLE_TIMEZONE=Europe/Paris
CALENDAR_PROVIDER=google
BOOKING_SLOT_DURATION_MINUTES=30
BOOKING_LOOKAHEAD_DAYS=14
BOOKING_WORKING_DAYS=1,2,3,4,5
BOOKING_WORKING_HOURS_START=09:00
BOOKING_WORKING_HOURS_END=17:00
MAIL_PROVIDER=brevo
MAIL_FROM_EMAIL=no-reply@example.com
MAIL_FROM_NAME=Randevou
MAIL_ADMIN_EMAIL=admin@example.com
BREVO_API_KEY=xkeysib-test
BREVO_SENDER_EMAIL=
BREVO_ADMIN_EMAIL=
BREVO_TEMPLATE_CONFIRMATION_ID=
BREVO_TEMPLATE_ADMIN_ID=
Pour tester uniquement Google Calendar, les valeurs Brevo peuvent être factices mais syntaxiquement valides. Si Brevo échoue après la création de l’événement, l’API garde la réservation acceptée et logue seulement l’échec d’email.
Important pour GOOGLE_PRIVATE_KEY : conserve les \n dans la valeur. Ne colle
pas la clé sur plusieurs lignes non échappées dans .env.
6. Démarrer la vraie API
Le port 3000 doit être libre. Si une API mock tourne encore, arrête-la avant
de lancer la vraie API.
npm run build:shared
npm run dev:api
Dans un autre terminal :
curl https://api.randevou.kimoun.com/api/health
Réponse attendue :
{"status":"ok"}
Teste ensuite la lecture du calendrier :
curl "https://api.randevou.kimoun.com/api/slots"
Si le calendrier contient déjà un événement pendant les horaires ouvrés, le créneau correspondant doit être absent de la réponse.
7. Tester une réservation réelle
Prends un start et un end retournés par /api/slots, puis lance :
curl -X POST "https://api.randevou.kimoun.com/api/book" \
-H "Content-Type: application/json" \
-d '{
"start": "2026-05-05T09:00:00.000+02:00",
"end": "2026-05-05T09:30:00.000+02:00",
"name": "Test Randevou",
"email": "test@example.com",
"phone": "+33123456789",
"message": "Test calendrier réel"
}'
Réponse attendue :
{
"success": true,
"bookingId": "calendar-event-id",
"message": "Votre rendez-vous est confirmé."
}
Vérifie ensuite dans Google Calendar que l’événement a bien été créé.
8. Ouvrir la démo Hugo
Avec l’API réelle démarrée sur https://api.randevou.kimoun.com, ouvre :
Si tu vois Failed to fetch, vérifie dans cet ordre :
- L’API répond bien sur
https://api.randevou.kimoun.com/api/health. ALLOWED_ORIGINScontient l’origine exacte de Hugo, par exemplehttp://localhost:35733.- Le calendrier est partagé avec le
GOOGLE_CLIENT_EMAIL. GOOGLE_PRIVATE_KEYcontient bien les\n.GOOGLE_TIMEZONEcorrespond à un fuseau valide, par exempleEurope/Paris.