Skip to main content

Refunds & Notifications · Article 6.1

Tous les e-mails envoyés par Clozo, en un seul tableau

Clozo envoie 13 types d'e-mails transactionnels distincts tout au long du cycle de vie des devis et des avenants. Cette page liste chacun d'eux, qui le déclenche, qui le reçoit et ce qui est joint.

La couche e-mail de Clozo est conçue pour deux audiences : votre client (qui a besoin de clarté et d'une action claire à effectuer) et vous (qui avez besoin de la piste d'audit et d'une copie dans vos archives). Chaque e-mail correspond à une seule transition d'état — un devis passant à Envoyé, un acompte reçu, un avenant contresigné. L'inventaire ci-dessous est l'index principal ; chaque ligne renvoie à un article dédié avec le déclencheur, le contenu, les pièces jointes et la procédure de récupération.

Why this works this way

Trois propriétés s'appliquent à tous les e-mails envoyés par Clozo :

1. Idempotence par conception. Chaque envoi est enveloppé dans le modèle _claim_email_field() ([D-070]). Avant que la tâche n'assemble un message, elle bascule atomiquement un horodatage par ligne de NULL vers now(). Si une nouvelle tentative Celery, une relecture de webhook ou un redéclenchement manuel arrive après que le champ est déjà réclamé, la deuxième tentative se termine silencieusement — votre client ne reçoit jamais de doublon.

2. Les pièces jointes viennent de R2, pas de la mémoire. Les PDF sont générés une seule fois (lors du déclenchement de l'événement sous-jacent) et téléversés dans le stockage Cloudflare R2 immuable. La tâche d'e-mail télécharge les octets depuis R2 au moment de l'envoi ; si R2 est brièvement inaccessible, la tâche relance avec un backoff exponentiel jusqu'à trois fois. Cette séparation garantit qu'un rendu Gotenberg lent ne bloque jamais la file d'attente des e-mails.

3. La langue est résolue une seule fois, sur le devis. Lorsqu'un client signe pour la première fois (ou lorsque vous définissez la langue du devis), la langue est fixée sur l'enregistrement du devis. Chaque e-mail ultérieur — relance, remboursement, avenant — consulte la même valeur, de sorte qu'un client ne reçoit jamais une facture d'acompte en anglais suivie d'une relance de facture finale en allemand.

Troubleshooting

Keep reading