Aller au contenu principal

Événements webhook

Liste complète des événements webhook disponibles avec leurs payloads.

Types d'événements

appointment.created

Déclenché quand un nouveau rendez-vous est créé.

Payload :

{
"id": "evt_abc123",
"type": "appointment.created",
"created": "2026-01-21T14:30:00Z",
"data": {
"object": {
"id": 12345,
"departmentId": 5,
"department": {
"id": 5,
"name": "Service de Passeports",
"organization": {
"id": 1,
"name": "Ministère de l'Intérieur"
}
},
"dateTime": "2026-01-25T14:30:00",
"status": "SCHEDULED",
"name": "Jean Dupont",
"phone": "+224621234567",
"email": "jean.dupont@example.gn",
"qrCode": "https://moncreneau.gn/qr/12345",
"createdAt": "2026-01-21T14:30:00Z",
"creditsUsed": 1
}
}
}

Cas d'usage :

  • Envoyer un SMS de confirmation
  • Créer une entrée dans votre CRM
  • Notifier l'équipe d'un nouveau RDV

appointment.updated

Déclenché quand un rendez-vous est modifié (date, heure, informations).

Payload :

{
"id": "evt_def456",
"type": "appointment.updated",
"created": "2026-01-22T10:15:00Z",
"data": {
"object": {
"id": 12345,
"departmentId": 5,
"dateTime": "2026-01-26T10:00:00",
"status": "SCHEDULED",
"name": "Jean Dupont",
"phone": "+224621234567",
"updatedAt": "2026-01-22T10:15:00Z",
"changes": {
"dateTime": {
"from": "2026-01-25T14:30:00",
"to": "2026-01-26T10:00:00"
}
}
}
}
}

Cas d'usage :

  • Envoyer une notification de changement
  • Mettre à jour les calendriers
  • Logger les modifications

appointment.cancelled

Déclenché quand un rendez-vous est annulé.

Payload :

{
"id": "evt_ghi789",
"type": "appointment.cancelled",
"created": "2026-01-23T16:45:00Z",
"data": {
"object": {
"id": 12345,
"departmentId": 5,
"dateTime": "2026-01-25T14:30:00",
"status": "CANCELLED",
"name": "Jean Dupont",
"phone": "+224621234567",
"cancelledAt": "2026-01-23T16:45:00Z",
"cancelledBy": "user",
"cancelReason": "Empêchement de dernière minute",
"creditsRefunded": 1
}
}
}

Cas d'usage :

  • Notifier l'utilisateur de l'annulation
  • Libérer le créneau
  • Rembourser/créditer l'utilisateur

appointment.validated

Déclenché quand un rendez-vous est validé par le staff (présence confirmée).

Payload :

{
"id": "evt_jkl012",
"type": "appointment.validated",
"created": "2026-01-25T14:35:00Z",
"data": {
"object": {
"id": 12345,
"departmentId": 5,
"dateTime": "2026-01-25T14:30:00",
"status": "VALIDATED",
"name": "Jean Dupont",
"phone": "+224621234567",
"validatedAt": "2026-01-25T14:35:00Z",
"validatedBy": {
"id": 42,
"name": "Agent Martin"
}
}
}
}

Cas d'usage :

  • Marquer le rendez-vous comme honoré
  • Générer une facture
  • Mettre à jour les statistiques

appointment.completed

Déclenché quand un rendez-vous est marqué comme terminé.

Payload :

{
"id": "evt_mno345",
"type": "appointment.completed",
"created": "2026-01-25T15:00:00Z",
"data": {
"object": {
"id": 12345,
"departmentId": 5,
"dateTime": "2026-01-25T14:30:00",
"status": "COMPLETED",
"name": "Jean Dupont",
"phone": "+224621234567",
"completedAt": "2026-01-25T15:00:00Z",
"duration": 30,
"notes": "Document délivré"
}
}
}

Cas d'usage :

  • Envoyer un email de satisfaction
  • Archiver le dossier
  • Demander un avis

Filtrer les événements

Lors de la configuration d'un webhook depuis le dashboard, sélectionnez uniquement les événements nécessaires pour optimiser les performances et réduire le trafic réseau.

Depuis l'interface web :

  1. Accédez à Paramètres → Webhooks
  2. Créez ou éditez un webhook
  3. Cochez uniquement les événements pertinents pour votre application

Gestion des événements

Router par type

function handleWebhook(event) {
switch (event.type) {
case 'appointment.created':
return handleAppointmentCreated(event.data.object);

case 'appointment.cancelled':
return handleAppointmentCancelled(event.data.object);

case 'appointment.validated':
return handleAppointmentValidated(event.data.object);

default:
console.log(`Événement non géré: ${event.type}`);
}
}

Idempotence

Utilisez l'ID d'événement pour éviter les doublons :

async function processWebhook(event) {
// Vérifier si déjà traité
const exists = await db.webhookEvents.findOne({
eventId: event.id
});

if (exists) {
console.log(`Événement ${event.id} déjà traité`);
return;
}

// Traiter l'événement
await processEvent(event);

// Marquer comme traité
await db.webhookEvents.create({
eventId: event.id,
processedAt: new Date()
});
}

Prochaines étapes