Calendrier Intelligent
Le module Calendrier de GoWeBa est un système complet de gestion du temps intégré au CRM. Il ne s'agit pas d'un simple agenda — c'est un outil intelligent qui connecte vos rendez-vous à vos contacts, vos tâches, vos factures et votre assistant IA WEBA. Le calendrier GoWeBa supporte : les calendriers multiples par utilisateur, les participants avec suivi RSVP, les récurrences, les rappels, la synchronisation Google Calendar, les créneaux de disponibilité publics (booking), le partage entre collègues, et l'analyse statistique.
Architecture
Gestion des événements
Créer un événement
Un événement GoWeBa peut être créé de plusieurs façons :
- Interface calendrier : cliquer sur un créneau ou le bouton « + Nouvel événement »
- WEBA : « Planifie une réunion avec Marie demain à 14h pendant 1 heure »
- Via un appel : Voice AI crée l'événement pendant l'appel téléphonique
- Synchronisation : importé automatiquement depuis Google Calendar
- Booking : un client réserve un créneau public
Champs d'un événement
Statuts d'un événement
Visibilité
Participants et RSVP
Ajouter des participants
Chaque événement peut avoir des participants internes (membres de l'organisation) ou externes (contacts GoWeBa ou invités par email) :
Suivi des réponses
GoWeBa suit les réponses RSVP en temps réel :
- Notification : les invités reçoivent un email d'invitation avec boutons RSVP
- Tableau de bord : le propriétaire voit les réponses en un coup d'œil
- Rappel : un rappel est envoyé aux invités n'ayant pas répondu
- Analytics : statistiques de taux de réponse dans le tableau de bord calendrier
Analytics RSVP
L'API /api/calendar/analytics fournit des statistiques sur les événements :
Événements récurrents
GoWeBa supporte les événements récurrents avec des règles de répétition flexibles :
Les récurrences sont stockées dans le modèle CalendarRecurrence et liées à l'événement maître. Chaque occurrence peut être modifiée individuellement (exception de récurrence) ou en lot. ⚠️ La suppression d'une récurrence supprime TOUTES les occurrences futures. Pour supprimer une seule occurrence, utilisez « Supprimer cette occurrence uniquement ».
Rappels
Chaque événement peut avoir un ou plusieurs rappels configurables :
Les rappels par défaut sont : 15 minutes avant (push) et 1 heure avant (email). L'utilisateur peut personnaliser les rappels par événement.
Disponibilités et prise de rendez-vous (Booking)
Configurer les disponibilités
L'outil Disponibilités permet de définir les créneaux pendant lesquels vous êtes disponible pour des rendez-vous externes :
- Créer une disponibilité — Calendrier → Disponibilités → Nouvelle disponibilité
- Définir les créneaux — Lundi-vendredi 9h-17h, durée 30 min, pause 10 min entre les créneaux
- Personnaliser — Titre, description, lien de visioconférence, couleur
- Publier — Générer un lien public de réservation
- Partager — Envoyer le lien aux clients ou l'intégrer dans votre site web
Le processus de booking
- Le client clique sur le lien de booking — Page publique avec le calendrier de disponibilités
- Sélection du créneau — Le client choisit une date et un horaire disponible
- Formulaire — Nom, email, téléphone (optionnel), notes
- Confirmation — Le booking est créé avec statut CONFIRMED
- Notifications — Email de confirmation au client + notification au propriétaire
- Événement créé — Un CalendarEvent est automatiquement créé dans le calendrier du propriétaire
Gestion des bookings
Chaque booking possède un cancelToken unique permettant au client d'annuler sans se connecter. 💡 Intégrez votre lien de booking dans votre signature email pour maximiser les réservations.
Synchronisation Google Calendar
GoWeBa peut se synchroniser avec Google Calendar pour une expérience unifiée :
Fonctionnalités de sync
- Import des événements Google Calendar → GoWeBa
- Détection des conflits de calendrier
- Mise à jour bidirectionnelle (selon la permission)
- Synchronisation des participants et RSVP
- Prise en charge des calendriers multiples
Configuration
- Aller dans Calendrier → Sync — Ouvrir le dialogue de synchronisation
- Connecter Google Calendar — Autoriser GoWeBa via OAuth 2.0
- Sélectionner les calendriers — Choisir quels calendriers Google synchroniser
- Configurer la direction — Import seulement ou bidirectionnel
- Activer — La synchronisation s'exécute automatiquement
Partage de calendrier
Les calendriers peuvent être partagés entre membres de l'organisation :
Le partage est géré via la page Calendrier → Partage. Le propriétaire du calendrier contrôle qui a accès et avec quel niveau de permission.
Cas d'utilisation concrets
Scénario : Planification via WEBA
- L'utilisateur écrit dans WEBA : — « Planifie une réunion de suivi avec Acme Inc mardi prochain à 10h, 1 heure, salle B »
- WEBA extrait les données — Titre: Réunion suivi Acme Inc, Mardi 10h-11h, Lieu: Salle B
- Vérification de disponibilité — WEBA vérifie que le créneau est libre
- Création de l'événement — Événement créé avec statut CONFIRMED
- Association au contact — L'événement est lié au contact « Acme Inc » dans le CRM
- Notification — Carte événement affichée dans le chat avec bouton « Voir dans le calendrier »
Scénario : Booking client en ligne
- Le consultant partage son lien de booking — acme.goweba.com/book/consultation
- Le client ouvre le lien — Il voit les créneaux disponibles pour les 2 prochaines semaines
- Sélection : mercredi 14h — Le client remplit son nom et email
- Confirmation automatique — Email de confirmation envoyé au client et au consultant
- Rappel — Le client reçoit un rappel SMS 1 heure avant
- Post-rendez-vous — Le consultant génère un résumé IA et crée les tâches de suivi
Scénario : Résumé IA post-réunion
- La réunion est terminée — L'événement passe au statut COMPLETED
- L'utilisateur clique « Résumé IA » — WEBA analyse les notes de la réunion
- Résumé structuré généré — Points discutés, décisions prises, actions à faire
- Le résumé est stocké — Champ aiSummary de l'événement
- Actions créées — Les tâches de suivi sont créées automatiquement dans le module Tâches
Dépannage et FAQ
Problèmes fréquents
FAQ
Q : Peut-on avoir plusieurs calendriers ? R : Oui. Chaque utilisateur peut créer plusieurs calendriers (Personnel, Travail, Projets) avec des couleurs et paramètres distincts. Q : Le booking est-il gratuit pour les clients ? R : Oui, la prise de rendez-vous en ligne est gratuite pour vos clients. Seule la notification SMS consomme des crédits. Q : Peut-on intégrer le calendrier dans un site web externe ? R : Oui, le lien de booking peut être intégré dans un iframe ou partagé directement. Un widget embarquable est également disponible. Q : WEBA peut-il vérifier ma disponibilité ? R : Oui. Demandez « Suis-je libre mardi après-midi ? » et WEBA consultera votre calendrier pour vous donner un résumé de vos créneaux libres et occupés. Q : Comment exporter mon calendrier ? R : Le calendrier peut être exporté au format iCal (.ics) compatible avec toutes les applications d'agenda (Apple Calendar, Outlook, Google Calendar).
— Fin du Module 05 —
GoWeBa — Bible des Opérations Document généré le 06 May 2026
| Composant | Rôle | Détail |
|---|---|---|
| UserCalendar | Calendrier personnel | Chaque utilisateur peut avoir plusieurs calendriers (Personnel, Travail, Projet X) |
| CalendarEvent | Événement | Un rendez-vous, réunion, appel, deadline — avec participants et rappels |
| CalendarEventAttendee | Participant | Invités avec statut RSVP (ACCEPTED, DECLINED, TENTATIVE, PENDING) |
| CalendarReminder | Rappel | Notifications avant l'événement (email, push, SMS) |
| CalendarRecurrence | Récurrence | Règles de répétition (quotidien, hebdomadaire, mensuel, personnalisé) |
| CalendarAvailability | Disponibilité | Créneaux publics pour la prise de rendez-vous en ligne (booking) |
| Booking | Réservation | Un client externe réserve un créneau via le lien public |
| CalendarShare | Partage | Partage de calendrier entre collègues avec permissions (VIEW, EDIT) |
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
| title | Texte | ✅ | Nom de l'événement |
| description | Texte long | ❌ | Notes, ordre du jour, détails |
| startAt | Date/heure | ✅ | Début de l'événement |
| endAt | Date/heure | ✅ | Fin de l'événement |
| timezone | Fuseau | ✅ | Défaut : America/Montreal |
| isAllDay | Boolean | ❌ | Événement journée entière (pas d'heure) |
| location | Texte | ❌ | Lieu physique ou adresse |
| meetingLink | URL | ❌ | Lien de visioconférence (Zoom, Meet, Teams) |
| color | Hex | ❌ | Couleur dans le calendrier |
| status | Enum | ✅ | CONFIRMED, TENTATIVE, CANCELLED, COMPLETED |
| visibility | Enum | ✅ | PUBLIC, PRIVATE, CONFIDENTIAL |
| relatedContactId | UUID | ❌ | Contact GoWeBa associé |
| aiSummary | Texte | ❌ | Résumé IA post-réunion |
| Statut | Description | Couleur |
|---|---|---|
| CONFIRMED | Événement confirmé, visible dans le calendrier | Bleu (par défaut) |
| TENTATIVE | En attente de confirmation | Jaune / hachuré |
| CANCELLED | Annulé (conservé dans l'historique) | Gris / barré |
| COMPLETED | Terminé (passé + résumé disponible) | Vert |
| Visibilité | Qui peut voir | Détails affichés |
|---|---|---|
| PUBLIC | Tous les membres de l'organisation | Titre, horaire, lieu, participants |
| PRIVATE | Seulement le propriétaire et les participants | Titre, horaire (pas de détails pour les autres) |
| CONFIDENTIAL | Seulement le propriétaire | Créneau « Occupé » visible, aucun détail |
| Champ | Type | Description |
|---|---|---|
| Adresse email du participant | ||
| displayName | Texte | Nom affiché |
| status | Enum | PENDING, ACCEPTED, DECLINED, TENTATIVE |
| isOrganizer | Boolean | true si c'est l'organisateur |
| isRequired | Boolean | true si la présence est obligatoire |
| contactId | UUID | Lien vers un contact GoWeBa (si applicable) |
| Métrique | Description |
|---|---|
| Total événements | Nombre d'événements dans la période |
| Événements par statut | Répartition CONFIRMED / TENTATIVE / CANCELLED / COMPLETED |
| Total participants | Nombre total de participants invités |
| Réponses RSVP | Répartition ACCEPTED / DECLINED / TENTATIVE / PENDING |
| Taux de réponse | Pourcentage de participants ayant répondu |
| Événements récurrents | Nombre d'événements liés à une récurrence |
| Fréquence | Exemple | Description |
|---|---|---|
| Quotidien | Tous les jours à 9h | Stand-up quotidien |
| Hebdomadaire | Chaque mardi et jeudi | Réunion d'équipe bihebdomadaire |
| Mensuel | Le 1er de chaque mois | Revue mensuelle |
| Annuel | Le 15 mars chaque année | Anniversaire, renouvellement |
| Personnalisé | Tous les 2 lundi du mois | Selon une règle RRULE |
| Canal | Timing | Exemple |
|---|---|---|
| X minutes/heures avant | Email 1 heure avant avec détails de l'événement | |
| Push navigateur | X minutes avant | Notification push 15 minutes avant |
| SMS | X minutes/heures avant | SMS 30 minutes avant (consomme des crédits SMS) |
| In-app | X minutes avant | Notification dans la cloche GoWeBa |
| Statut | Description | Actions |
|---|---|---|
| CONFIRMED | Booking confirmé | Envoyer rappel, modifier, annuler |
| CANCELLED | Annulé par le client ou le propriétaire | Le créneau redevient disponible |
| COMPLETED | Rendez-vous terminé | Ajouter des notes, résumé IA |
| NO_SHOW | Le client ne s'est pas présenté | Marquer comme no-show pour statistiques |
| Permission | Voir événements | Créer événements | Modifier événements | Supprimer |
|---|---|---|---|---|
| VIEW | ✅ | ❌ | ❌ | ❌ |
| EDIT | ✅ | ✅ | ✅ | ❌ |
| Problème | Cause probable | Solution |
|---|---|---|
| Événement au mauvais horaire | Fuseau horaire incorrect | Vérifier le fuseau dans le profil utilisateur (America/Montreal) |
| Booking non visible | Disponibilité non publiée | S'assurer que la disponibilité est active et que le lien est généré |
| Sync Google échoue | Token OAuth expiré | Se reconnecter via Calendrier → Sync |
| Participant non notifié | Email invalide ou spams | Vérifier l'adresse email et les filtres anti-spam |
| Rappel non reçu | Notifications désactivées | Vérifier les préférences de notification du navigateur et dans Paramètres |
| Récurrence non modifiée | Modification de l'occurrence au lieu de la série | Choisir « Modifier toutes les occurrences » dans le dialogue |
| Créneau booking déjà pris | Conflit de calendrier | Le créneau est occupé par un autre événement — configurer le buffer time |