Email & MJML

La pile email d'Inklura a trois pièces mobiles : un compositeur MJML qui produit du HTML compatible email, un pont Mautic qui le livre réellement, et deux routers tRPC sur l'API company-manager pour la gestion des campagnes (campaigns) et le reporting (emailAnalytics).

Le compositeur MJML

Les mail designers (maildesigner.inklura.fr / mail.inklura.fr) construisent du HTML compatible email avec un miroir MJML conservé à côté pour l'édition. Un chat de construction assisté par IA diffuse sa sortie via Server-Sent Events :

GET /api/builder/stream/<chatId>

Le rôle du compositeur est de produire le HTML ; l'envoi est une étape distincte.

Livraison — le pont Mautic

L'email n'est pas envoyé directement. La livraison est confiée à une instance Mautic auto-hébergée sur infra.wd29.net via un pont à deux endpoints. Le secret du pont est uniquement côté serveur — n'appelez jamais ces endpoints depuis le navigateur.

Mettre un message en file pour livraison :

POST https://infra.wd29.net/api/mautic/queue/enqueue
Content-Type: application/json

{
  "html": "<…rendered email HTML…>",
  "subject": "…",
  "tag": "…",
  "slugs": ["…"],
  "tenantId": "…",
  "userId": "…",
  "scheduledFor": "…",
  "segmentId": "…"
}
Champ Requis Notes
html oui Le HTML rendu, compatible email.
subject oui Ligne d'objet.
tag oui Tag de campagne/segment.
slugs oui Liste de slugs cibles.
tenantId non Portée du tenant.
userId non Acteur.
scheduledFor non Heure d'envoi différé.
segmentId non Segment Mautic.

Vérifier le statut d'un élément mis en file :

POST https://infra.wd29.net/api/mautic/queue/status
Content-Type: application/json

{ "id": "<queue-item-id>" }

CRUD & envoi de campagnes — le router campaigns

Le cycle de vie des campagnes vit dans le router tRPC campaigns. Appelez-le à /api/trpc/campaigns.<procedure> en suivant les conventions tRPC standard :

Procédure Rôle
getCampaigns Lister les campagnes.
getCampaignById Récupérer une campagne.
createCampaign Créer une campagne.
createCampaignWizard Créer via le flux d'assistant guidé.
updateCampaign Mettre à jour une campagne.
deleteCampaign Supprimer une campagne.
sendCampaign Envoyer une campagne.
pauseCampaign Mettre en pause une campagne en cours d'envoi.
resumeCampaign Reprendre une campagne en pause.
duplicateCampaign Cloner une campagne.
getCampaignActivity Lire l'activité d'une campagne.
getCampaignTags Lister les tags de campagne.
createCampaignTag Créer un tag de campagne.

Analytics — le router emailAnalytics

Le reporting est un router distinct, emailAnalytics. Chaque procédure est un permissionProtectedProcedure(["analytics:read"]), donc l'appelant a besoin d'une session portant la permission analytics:read (voir Procédures tRPC).

Procédure Retourne
getDashboardMetrics Les métriques phares du tableau de bord.
getCampaignAnalytics Les analytics par campagne.
getCampaignRevenue Le chiffre d'affaires attribué à une campagne.
getTopCampaigns Les campagnes les plus performantes.
getEngagementTrends L'engagement dans le temps.
getProviderPerformance La performance du fournisseur de livraison.
exportAnalytics Exporter les données d'analytics.
getUnsubscribeAnalytics Les métriques de désabonnement.
getUnsubscribeFunnel Le tunnel de désabonnement.
getHealthStatus La santé du pipeline d'analytics.
Note

Ces procédures délèguent à un service HTTP d'analytics externe à QUEUE_MANAGER_URL (par défaut http://localhost:8085). Lorsque ce service est injoignable, le router se dégrade proprement au lieu de faire échouer l'appel — ne traitez donc pas une réponse vide ou de repli comme une erreur bloquante.

Suivi des ouvertures & clics

La plateforme sert un pixel de suivi et une redirection de clic qui font proxy vers le même service d'analytics :

${QUEUE_MANAGER_URL}/track/email/<id>/open
${QUEUE_MANAGER_URL}/track/email/<id>/click

Une ouverture est enregistrée quand le pixel se charge ; un clic est enregistré lorsque la redirection fait passer le lecteur vers la destination.

Voir aussi