Fonctionnalité #18442
ferméNotifications personnalisées
Description
En tant qu'utilisateur, je veux recevoir des notifications d'événements survenant dans l'application afin de savoir quelles actions sont à mener et quand.
Analyse
Un embryon de système existe déjà pour les événements de l'application. cf contrôleur audit/event.
Il faut appliquer le même système au journal du cycle de vie et le faire évoluer pour répondre à la demande de personnalisation du contenu de message.
Le processus global est le suivant :
- à l'enregistrement d'un message, le contrôleur détermine si une notification doit être envoyée.
- si oui, le processus détermine le ou les destinataires
- si au moins 1 destinataire a été trouvé, le processus produit le message et l'enregistre dans la file d'attente d'envoi
- une tâche planifiée dépile la liste des messages à envoyer et les traite
La configuration définit 4 points:
- les événements qui doivent déclencher l'envoi d'une notification
- les modes de notification (email dans le périmètre initial)
- les règles de détermination des destinataires
- le modèle de message : texte simple ou HTML en cible du mail
Sélection des événements¶
Un système de filtre permet au moteur de déterminer si une notification doit êtr envoyée.
Il utilise les valeurs d'en-tête et de détail du message avec des tests LQL (égalité, liste entre crochets principalement)
Exemple pour notifier d'un dépôt pour les producteurs CPTA et RH :
filter:
eventType : "recordsManagement/deposit"
operationResult : false
eventInfo.originatorOrgRegNumber : ["CPTA", "RH"]
Destinataires¶
Les destinataires sont indiqués
- en dur dans la configuration par leur identifiant unique ou leur adresse email (si plusieurs utilisateurs ont la même adresse les notifications in app seront impossibles)
- déduit de règles utilisant les acteurs de l'événement
- par un script spécifique (hors périmètre V2)
Exemple pour notifier un utilisateur défini dans la configuration :
recipients : ["info@maarch.org", "bblier"]
Exemple pour notifier des utilisateurs dynamiques :
recipients : @accountId // Utilisateur initiateur de l'opération
recipients : @orgUnitRegNumber // Tous les utilisateurs du service
recipients : @eventInfo.originatorOrgRegNumber // Tous les utilisateurs du service producteur indiqué dans les infos compélmentaires (le moteur recherchera la valeur dans les utilisateurs et dans les services)
Exemple pour notifier des utilisateurs dynamiques par script :
recipients : /bundle/api/command // Service personnalisé qui va recevoir le sinformations de l'événement et retourner un tableau d'identifiants d'utilsiateurs
Message¶
La configuration fournit un texte ou un lien vers un modèle de contenu de message.
Le processus utilise le moteur de fusion XML/HTML du framework avec la syntaxe et [?merge ?].
Exemple pour un texte simple avec variable :
message : "Bonjour, une erreur est survenue lors du versement de l'archive du service [?merge eventInfo.originatorOrgRegNumber ?]"
exemple pour un modèle externe (html ou texte) :
message : /data/maarchRM/notifications/template1.html
Inscription¶
Le processus inscrit le message dans la file d'attente "notification" (contrôleur batchProcessing/notification::create())
Traitement d'envoi¶
Le processus réalise l'envoi par le connecteur approprié (email pour 'instant) (contrôleur batchProcessing/notification::process())
Fichiers
Mis à jour par Cyril VAZQUEZ il y a environ 3 ans
- Statut changé de A traiter à R&D - A planifier
Mis à jour par Cyril VAZQUEZ il y a environ 3 ans
- Lié à Fonctionnalité #11889: [Mail] Template HTML paramétrable dans la configuration ajouté
Mis à jour par Cyril VAZQUEZ il y a environ 3 ans
- Fichier Notifications.drawio.png Notifications.drawio.png ajouté
Mis à jour par Cyril VAZQUEZ il y a presque 3 ans
- Statut changé de R&D - A planifier à En cours
- Assigné à mis à Cyril VAZQUEZ
Mis à jour par Cyril VAZQUEZ il y a presque 3 ans
Création de la branche feat/18442_Notifications
Ajout du contrôleur lifeCycle/eventNotifier
Modification du contrôleur lifeCycle/journal pour appel à eventNotifier::dispatch()
Ajout d'exemples
- configuration commentée
- template de corps HTML
- script d'identification des destinataires
- script de collecte des sources de données à fusionner
Reste à faire:
- grooming pour suites à donner (déplacer eventNotifier dans batchProcessing ? fournir des scripts standards par relations de destinataires et types d'objets)
- documentation
- tests et packaging (fournir des scripts d'exemple)