DataPass intègre un système de webhooks qui envoie des payloads à une URL cible en fonction du service, ceci à chaque changement d'état d'une demande associé à ce dit service. Dans le cadre d'API Entreprise, ceux-ci nous servent à gérer intégralement la communication envoyée aux utilisateurs, ainsi que la création du jeton associé en cas de validation.
Pour le contexte, les emails étaient précédemment géré par DataPass, tandis que la création du jeton était géré par un " bridge " custom côté DataPass.
A noter que certains emails (relatifs aux contacts RGPD) sont encore gérés côté DataPass.
Pour plus d'infos sur les webhooks:
L'intégralité du traitement s'effectue à travers le controller
DatapassWebhooksController
, où l'organizer DatapassWebhook
est appelé.
Celui-ci effectue les tâches suivantes de manière séquentielle:
- Trouve ou crée l'utilisateur (le demandeur)
- Trouve ou crée la demande, en affectant les dernières valeurs (intitule, contacts etc...)
- Si l'événement est une validation, crée le jeton associé
- Mets à jour les contacts (demandeur, technique et métier) sur Mailjet
- Construit la liste des variables Mailjet
- Planifie l'ensemble des emails associés à la demande, en fonction de l'événement
Cette dernière étape s'appuie sur un fichier de configuration, expliqué ci-dessous.
Le fichier de configuration se situe dans
config/datapass_webhooks.yml
et permet de
planifier les emails aux divers contacts associés à la demande.
Ci-dessous un exemple avec les explications de chaque entrée:
# L'environnement associé à la configuration
production:
# Chaque clé à ce niveau correspond à un événement associé à la demande. La liste exhaustive se trouve dans la documentation DataPass
# Une clé vide ou absente n'effectue aucun envoi d'email.
created: {}
send_application:
emails:
# Chaque entrée correspond à un email. Le champ 'id' correspond à l'ID technique d'un template transactionnel sur Mailjet, et doit être présent (il s'agit du seul champ obligatoire)
- id: "11"
- id: "12"
# La clé 'when' permet de planifier un email dans le future, dans le cadre des relances. Point iportant: si la demande a changé d'état au moment de l'envoi, l'email n'est pas envoyé.
# Par défaut l'email est envoyé sans délai.
when: "in 14 days"
review_application:
emails:
- id: "22"
refuse_application:
emails:
- id: "32"
validate_application:
emails:
- id: "51"
# La clé 'condition_on_authorization' permet d'appliquer une condition sur l'envoi de l'email. Cette condition est évaluée au moment de la réception du webhook et non lors de l'envoi. Cette condition doit être une méthode définie sur la classe AuthorizationRequestConditionFacade
# Par défaut condition est évalué à true
condition_on_authorization: "all_contacts_have_the_same_email?"
- id: "52"
condition_on_authorization: "all_contacts_have_different_emails?"
# Tableau des destinataires, doit être soit un modèle User soit un modèle Contact
to:
- "authorization_request.contact_metier"
# Tableau des destinataires en copie
cc:
- "authorization_request.contact_technique"
- "authorization_request.demandeur"
Un test d'acceptance vérifie le format du fichier: si il y a une typo les tests ne passeront pas.
Pour les conditions évaluées, vous trouverez le fichier ici: AuthorizationRequestConditionFacade
Les variables ci-dessous sont disponibles quelque soit l'état de la demande:
authorization_request_id
,integer
, l'ID de la demande DataPassauthorization_request_intitule
,string
, l'intitulé de la demande DataPassauthorization_request_description
,string
, la description de la demande DataPassdemandeur_first_name
,string
, le prénom du demandeurdemandeur_last_name
,string
, le nom du demandeurdemandeur_email
,string
, l'email du demandeurcontact_metier_first_name
,string
, le prénom du contact métiercontact_metier_last_name
,string
, le nom du contact métiercontact_metier_email
,string
, l'email du contact métiercontact_technique_first_name
,string
, le prénom du contact techniquecontact_technique_last_name
,string
, le nom du contact techniquecontact_technique_email
,string
, l'email du contact technique
A noter que les variables associées aux contacts peuvent être vides.
Si l'événement est initié par un instructeur (refuse_application
,
review_application
, validate_application
, review
), les variables suivantes
sont disponibles:
instructor_first_name
,string
, prénom de l'instructeurinstructor_last_name
,string
, nom de l'instructeur
A noter qu'il s'agit de variables d'environnements. Les attributs des contacts sont mis à jour avant l'envoi des emails, et décrit ci-dessous.
Si un jeton est associé à la demande (théoriquement seulement dans le cas de la validation), les variables suivantes sont disponibles:
token_role_ROLE
,boolean
, détermine si ROLE est associé au jeton. La liste des rôles est celle en base de données.
A chaque réception d'un webhook, les informations de contacts sont mis à jour sur Mailjet. Les contacts regroupent le demandeur, le contact technique et le contact métier. Les informations mises à jour sont les suivantes:
prénom
,string
, le prénom du contactnom
,string
, le nom du contactcontact_demandeur
,boolean
, indique si le contact est le demandeurcontact_métier
,boolean
, indique si le contact est le contact métiercontact_technique
,boolean
, indique si le contact est le contact technique