Skip to content

Guide administrateur — Invitations

Cette fiche décrit l'onglet Invités d'un événement : ajout d'invités, envoi groupé de magic links, suivi du statut de chaque invitation et relances. Elle ne couvre ni le contenu du modèle d'email d'invitation (voir Éditeur d'emails) ni l'expérience du membre qui reçoit et utilise ce lien (voir Guide membre).

Accès à l'onglet

Depuis la fiche d'un événement (/admin/events/:id/edit), l'onglet Invités regroupe tout le cycle d'invitation sur une seule liste : ajouter, envoyer, suivre, relancer et retirer. Il remplace tout empilement d'écrans séparés — il n'y a qu'un seul endroit où gérer les invitations d'un événement.

Ajouter des invités

Le bouton Ajouter ouvre la modale Gérer les invités, qui liste les utilisateurs avec une case à cocher par personne déjà sélectionnée pour l'événement. Cette liste fonctionne en remplacement total : décocher une personne déjà invitée la retire de l'événement au clic sur Enregistrer, ce n'est pas un ajout incrémental (client/src/components/admin/events/AddInvitesDialog.tsx).

La modale liste tous les utilisateurs de l'instance, administrateurs compris — il n'y a pas de restriction par rôle sur qui peut être invité à un événement. Un champ de recherche (nom ou email) filtre la liste, et une case Tout sélectionner coche ou décoche en une fois l'ensemble des utilisateurs actuellement visibles par ce filtre (client/src/components/admin/UserMultiSelect.tsx).

Ajouter un invité ne lui envoie rien automatiquement — il apparaît dans le tableau avec le statut En attente, en attendant un envoi explicite.

Envoyer les invitations

Le bouton Envoyer (N) en haut du tableau envoie un email d'invitation (magic link) à tous les invités actuellement au statut En attente ; N est leur nombre. Une boîte de confirmation récapitule le nombre d'envois avant l'envoi effectif.

Il est aussi possible d'envoyer (ou de renvoyer) à une sélection précise : cocher des lignes dans le tableau fait apparaître une barre d'actions groupées avec un bouton Envoyer (N) qui cible uniquement les lignes cochées — y compris des invités déjà Envoyée ou Cliquée ; sélectionner une ligne déjà envoyée et cliquer sur ce bouton la renvoie (client/src/components/admin/events/EventInvitesTab.tsx, server/src/services/invitations.service.ts:214-270). Seuls les utilisateurs effectivement sélectionnés pour l'événement (ajoutés via Ajouter) peuvent recevoir une invitation ; toute tentative sur un autre utilisateur est rejetée côté serveur.

Conditions d'envoi

Le bouton Envoyer (N) se désactive si l'événement n'a aucun créneau ou est terminé (server/src/services/invitations.service.tsvalidateEventForInvitations, codes NO_SLOTS / EVENT_ENDED) ; une bulle d'aide sur le bouton indique le motif. Le renvoi individuel et la relance groupée « sans réponse » (voir plus bas) ne réappliquent pas cette garde.

Un événement non publié ou sans créneau affiche un bandeau d'avertissement au-dessus du tableau : l'envoi reste possible, mais les invités ne pourront ni accéder à l'événement ni réserver tant que la publication ou les créneaux ne sont pas en place (voir Événements et créneaux).

Confirmations et messages affichés

La boîte de dialogue Envoyer les invitations annonce : « Vous êtes sur le point d'envoyer N invitation(s) par email. » et, si l'événement n'est pas publié ou n'a aucun créneau, ajoute une ligne d'avertissement correspondante avant de proposer Confirmer l'envoi. Une fois l'envoi terminé, un message de confirmation résume le résultat, par exemple « 5 invitation(s) envoyée(s) avec succès » ou, en cas d'échecs partiels, « 5 invitation(s) envoyée(s) avec succès, 2 échec(s) ». Un renvoi unitaire réussi affiche « Invitation renvoyée à [email] ».

Suivi de statut

Chaque invité affiche l'un des quatre statuts suivants, calculés côté serveur (server/src/services/invitations.service.tsgetEventUsersInvitationStatus) :

Statut affichéSignification exacte
En attenteAucune invitation enregistrée pour ce couple événement/utilisateur : jamais envoyée.
EnvoyéeLe dernier envoi a réussi côté serveur SMTP (status = 'sent') et aucun clic n'a encore été enregistré sur le lien.
CliquéeLe destinataire a cliqué au moins une fois sur le lien de l'email (clicked_at renseigné). Ce statut est définitif : un renvoi ultérieur ne le fait pas revenir à « Envoyée ».
ÉchouéeLe tout premier envoi (ou un renvoi explicite via Envoyer (N)) a échoué côté serveur SMTP.

Une relance automatique ratée ne fait jamais échouer

Si une relance groupée « sans réponse » (voir plus bas) échoue à joindre un destinataire, sa ligne reste au statut « Envoyée » avec sa date d'envoi d'origine — elle ne passe jamais à « Échouée » et reste éligible à une nouvelle relance. Seuls le premier envoi et un renvoi manuel explicite peuvent produire le statut « Échouée » (server/src/services/invitations.service.ts, fonction interne dispatchInvitations, option recordFailures).

La colonne Dernier envoi affiche la date du dernier email transmis, avec une info-bulle détaillant le nombre total d'envois (send_count, incrémenté à chaque envoi ou renvoi depuis la migration server/src/migrations/036_add_invitations_send_count.sql) : « Envoyée N× · 1re le [date] · dernière le [date] · Cliquée le [date] / non cliquée ». Une icône de renvoi accompagnée du compteur apparaît dès le deuxième envoi.

Rechercher, filtrer et lire le résumé

Une ligne de résumé au-dessus du tableau totalise l'état de l'événement : « X invité(s) · Y en attente · Z envoyée(s) · W cliquée(s) · V échec(s) », le nombre d'échecs étant mis en évidence en rouge dès qu'il est supérieur à zéro. Le tableau propose une recherche libre par nom ou email et un filtre à facettes sur la colonne Statut, permettant par exemple d'isoler en un clic tous les invités « Échouée » ou « Cliquée ».

Si aucun invité n'a encore été ajouté, le tableau est remplacé par un message et un bouton Ajouter des invités menant directement à la modale de sélection. En cas d'erreur de chargement, un message d'erreur s'affiche avec un bouton Réessayer.

Relance unitaire

Depuis le menu d'actions (icône à droite) d'une ligne, l'entrée Envoyer l'invitation (invité « En attente ») ou Renvoyer l'invitation (tout autre statut) envoie un nouveau magic link à ce seul invité, sans passer par la sélection multiple. Un clic déjà enregistré sur cet invité n'est jamais réinitialisé par ce renvoi.

Relance groupée des invités sans réponse

Le Tableau de bord signale, dans sa zone « à traiter », les événements ayant des invitations sans réponse et propose un bouton Relancer par événement (voir Tableau de bord). Une invitation entre dans ce périmètre lorsque, pour l'événement concerné :

  • son statut est Envoyée (pas « Échouée », pas « Cliquée ») ;
  • son dernier envoi (sent_at) date de plus de 3 jours ;
  • l'invité est toujours sélectionné pour l'événement ;
  • l'événement n'est pas terminé.

Ce délai de 3 jours et ces conditions sont définis dans une seule requête partagée par le tableau de bord et l'action de relance (server/src/services/invitations.service.ts, constante UNANSWERED_OVER_3_DAYS) — le nombre affiché sur le bouton correspond exactement au nombre d'invitations réellement relancées au clic.

Au clic sur Relancer, une confirmation s'affiche puis, selon le résultat :

Résultat serveurMessage affiché
Aucune cible« Aucune invitation à relancer »
Tous les envois réussissent« N invitation(s) relancée(s) »
Réussite partielle« N relancée(s), M échec(s) d'envoi »
Échec total« Échec de la relance : aucun email n'a pu être envoyé »

Retirer un invité

Depuis le menu d'actions d'une ligne (Retirer) ou par sélection multiple (Retirer (N) dans la barre d'actions groupées), un invité peut être retiré de l'événement après confirmation. Il perd l'accès à l'événement mais peut être ré-ajouté ultérieurement via Ajouter ; son historique d'invitation (statut, dates, nombre d'envois) est conservé et réapparaît tel quel s'il est ré-ajouté.

Durée de validité des liens envoyés

Chaque magic link d'invitation a une durée de validité (TTL) dérivée du réglage Connexion Membre de l'écran Paramètres (magic_link_user_ttl, 7 jours par défaut) — voir Paramètres in-app — Authentification. Un envoi groupé initial fixe un TTL commun, arrondi à la minute, calculé au moment de l'envoi ; un renvoi individuel ou une relance groupée applique directement la valeur courante du réglage. Modifier ce réglage n'affecte que les liens envoyés après la modification : les liens déjà en circulation conservent leur durée d'origine.

Si le lien d'un membre a expiré avant d'être utilisé, celui-ci peut demander lui-même un nouveau lien depuis la page de connexion, sans intervention d'un administrateur — voir Guide membre.

À propos du modèle d'email envoyé

Le contenu de l'email d'invitation (texte, mise en forme, variables) se personnalise depuis l'onglet Modèle d'email des Paramètres, avec une possibilité de surcharge par événement — voir Éditeur d'emails.

Publié sous licence FSL-1.1-MIT.