Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Documente la décision du transfert de mail #2517

Merged
merged 1 commit into from
Jun 1, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
File renamed without changes.
59 changes: 59 additions & 0 deletions docs/decisions/2022-05-12-transfert-de-responses-aux-agents.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
---
title: Transferer les réponses usagers directement aux agents concernés
date: 12 mai 2022
status: approuvée
---


## Contexte

- Nous envoyons des emails de notification aux usagers ;
- Nous ne souhaitons pas exposer l'adresse email des agents ;
- Nous utilisons une adresse `contact@rdv-solidarites.fr` et `support@rdv-solidarites.fr` pour l'envoie et la réponse à ces emails ;
- Certains usagers répondents aux emails de notification pensant dialoguer avec l'agent avec qui il ou elle avait RDV ;
- L'équipe de support transfert les emails aux agents concernés le plus rapidement possible, mais parfois un peu en retard ;


## Objectif

Faire en sorte que les réponses usagers partent directement dans les boites mails des agents concernés.


## Décision

### Comment router les mails reçus à rdv+***@reply.rdv-solidarites.fr ?

Deux options s'offrent à nous :

- créer une boite mail chez Gandi, et faire du polling dessus pour récupérer les nouveaux mails, puis les traiter.
- utiliser un service externe qui permet que tous les e-mails envoyés à un sous-domaine soient détectés et transmis en HTTP à notre appli

La solution retenue pour le moment est la seconde, à travers le système proposé par Sendinblue (qui est le seul non américain à proposer ce service, et qui se trouve être déjà notre outil d'envoi de mails transactionnels). Ce choix nous a paru le plus simple, mais rien ne nous empêchera de changer à l'avenir.

J'ai testé l'envoi de mails depuis mes adresses perso vers le domaine @reply.rdv-solidarites.fr avec un webhook en place qui transmet à une URL de test proposée par webhook.site.

Note : les webhooks Sendinblue de type "inbound" n’apparaissent pas dans leur interface web, mais sont bien listés via leur API (il faut bien demander les webhooks de type inbound et non transactional).

### Où stocker le token ?

Afin de pouvoir retrouver un RDV à partir de l'e-mail de réponse, il fallait stocker un identifiant dans la base et faire en sorte de le joindre au mail de réponse, en utilisant une adresse du type rdv+UUID@reply.rdv-solidarites.fr.

Il était possible de stocker le token dans :

un Rdv
un RdvsUser
un Receipt

J'ai fait le choix de stocker le token dans Rdv pour le moment, principalement car les mailers n'ont pas accès aux RdvsUsers et au Receipts, et qu'il était donc difficile de générer l'adresse de ReplyTo depuis les mailers.

Je me suis aussi dit que si une personne était ajoutée par erreur à un RDV puis supprimée juste ensuite, elle allait recevoir un mail de notification pour la création, et il était alors préférable qu'elle puisse répondre, ce qui aurait été impossible si le token était stocké dans un RdvsUser.

Je me dis aussi que si on change d'avis (par exemple stocker le token dans les Receipts), la migration sera simple.

### Sous quel format transmettre le contenu de la réponse ?

Lorsque l'usagè⋅re répond au mail de notification, son client mail va faire en sorte de citer le mail original et de permettre de répondre au dessus de cette citation. Cette citation ne nous intéresse pas, ou du moins nous ne souhaitons pas la faire apparaître lorsque nous notifions l'agent de la réponse.

La bonne nouvelle, c'est que Sendinblue nous fournit dans son payload une version Markdown du mail, dans laquelle ils ont déjà exclu la citation. C'est donc ce champ (ExtractedMarkdownMessage) que nous allons utiliser pour transmettre la réponse.


File renamed without changes.