Fonctionnalité #18442
Mis à jour par Cyril VAZQUEZ il y a plus de 2 ans
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 <?merge ?> 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())
**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 <?merge ?> 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())