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 :
~~~ ~~~yaml
---
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 :
~~~ ~~~yaml
recipients = ["info@maarch.org", "bblier"]
~~~
Exemple pour notifier des utilisateurs dynamiques :
~~~ ~~~yaml
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 :
~~~ ~~~yaml
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 :
~~~ ~~~yaml
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) :
~~~ ~~~yaml
message = /data/maarchRM/notifications/template1.html
~~~
**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 :
~~~ ~~~yaml
---
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 :
~~~ ~~~yaml
recipients = ["info@maarch.org", "bblier"]
~~~
Exemple pour notifier des utilisateurs dynamiques :
~~~ ~~~yaml
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 :
~~~ ~~~yaml
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 :
~~~ ~~~yaml
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) :
~~~ ~~~yaml
message = /data/maarchRM/notifications/template1.html
~~~