Email & MJML

L'e-mail sur Inklura repose sur trois éléments : Mail Designer, l'application où vous composez vos newsletters en MJML, le service d'envoi de la plateforme, et deux routers de l'API Plateforme : campaigns pour gérer et envoyer les campagnes, emailAnalytics pour les statistiques.

Mail Designer

Mail Designer (maildesigner.inklura.fr / mail.inklura.fr) compose les newsletters en MJML, qui se compile en HTML correctement rendu par les clients de messagerie, et conserve la source MJML pour les modifications ultérieures. Un assistant IA vous aide à rédiger le message. Mail Designer a ses propres programmes de newsletters et sa propre planification ; vous l'utilisez depuis son interface.

Gérer et envoyer des campagnes : le router campaigns

Le cycle de vie des campagnes de l'API Plateforme se trouve dans le router tRPC campaigns, appelé à /api/trpc/campaigns.<procedure> selon les conventions tRPC. Chaque procédure exige la permission indiquée :

Procédure Type Entrée Rôle Permission
getCampaigns query page, per_page, search, status Lister les campagnes. campaigns:read
getCampaignById query id Récupérer une campagne. campaigns:read
createCampaign mutation voir ci-dessous Créer une campagne. campaigns:create
createCampaignWizard mutation channelType, details, template, audience, schedule Créer une campagne avec l'assistant guidé. campaigns:create
updateCampaign mutation champs de createCampaign + id, status Mettre à jour une campagne. campaigns:update
deleteCampaign mutation id Supprimer une campagne. campaigns:delete
sendCampaign mutation id Envoyer une campagne. campaigns:send
pauseCampaign mutation id Passer la campagne au statut paused. campaigns:update
resumeCampaign mutation id Repasser la campagne au statut active. campaigns:update
duplicateCampaign mutation id Dupliquer une campagne. campaigns:create
getCampaignActivity query id, page, per_page Lire l'activité d'une campagne, paginée. campaigns:read
getCampaignTags query aucune Lister les tags de campagne. campaigns:read
createCampaignTag mutation name Créer un tag de campagne. campaigns:create

La pagination commence à page: 0, avec per_page: 10 par défaut. getCampaigns filtre search sur le nom et la description, et renvoie { data, total, page, per_page, totalPages }. Les procédures qui cherchent une campagne par son id (sauf pauseCampaign et resumeCampaign) renvoient NOT_FOUND pour une campagne inconnue ou appartenant à un autre site.

Créer une campagne

createCampaign accepte :

Champ Type Notes
name string Obligatoire, 3 caractères minimum.
type string Obligatoire.
channelType string email ou sms. À défaut, type est utilisé, puis email.
subject, content string Objet et contenu de l'e-mail.
templateId string Modèle à utiliser.
segmentId string Segment de contacts destinataire.
marketingCampaignId string Campagne marketing de rattachement.
scheduled, scheduledDate boolean, date scheduled: true crée la campagne au statut scheduled, sinon draft.
testMode, testEmail boolean, string Mode test (false par défaut) et adresse de test.

La réponse contient l'id de la campagne.

curl -X POST "https://manage.inklura.fr/api/trpc/campaigns.createCampaign" \
  -H "Authorization: Bearer $INKLURA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"json":{"name":"Newsletter d’octobre","type":"email","subject":"Les nouveautés du mois","segmentId":"<segment-id>"}}'

Envoyer

sendCampaign passe la campagne au statut active puis envoie le message à chaque contact des segments de la campagne (hors segments exclus), en écartant les adresses désinscrites. Chaque envoi est journalisé et alimente ensuite emailAnalytics. Une campagne SMS part par SMS aux contacts qui l'ont accepté. Vous n'appelez pas directement le service d'envoi.

curl -X POST "https://manage.inklura.fr/api/trpc/campaigns.sendCampaign" \
  -H "Authorization: Bearer $INKLURA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"json":{"id":"<campaign-id>"}}'

pauseCampaign et resumeCampaign ne changent que le statut de la campagne : ils n'interrompent pas un envoi déjà lancé par sendCampaign.

Statistiques : le router emailAnalytics

Les statistiques passent par un router distinct, emailAnalytics. Chaque procédure exige une session qui détient la permission analytics:read (voir Procédures tRPC).

Procédure Entrée principale Retourne
getDashboardMetrics filtres de période Envois, ouvertures et clics uniques, rebonds, désabonnements et leurs taux, avec comparaison à la période précédente.
getCampaignAnalytics campaignId, includeTimeSeries, timeSeriesInterval Les statistiques d'une campagne et ses 50 derniers e-mails envoyés.
getCampaignRevenue campaignId, period (1y par défaut) Conversions, chiffre d'affaires, coût et ROAS attribués à une campagne.
getTopCampaigns limit (1 à 100, 10 par défaut), sortBy, sortOrder, période Les campagnes les plus performantes.
getEngagementTrends filtres de période, granularity (day par défaut) L'engagement dans le temps.
getProviderPerformance filtres de période La performance de la livraison.
getUnsubscribeAnalytics filtres de période Les indicateurs de désabonnement.
getUnsubscribeFunnel period (7d, 30d ou 90d), campaignId Le tunnel de désabonnement.
getHealthStatus aucune L'état du service de statistiques.

Les filtres de période sont :

Champ Valeurs Défaut
period today, yesterday, 7d, 30d, 90d, 1y, custom 30d
startDate, endDate dates, pour period: "custom"
campaignId UUID de campagne
emailAddress adresse d'un destinataire
includeComparison boolean true

sortBy accepte openRate, clickRate, bounceRate ou totalEmails (openRate par défaut) ; sortOrder vaut asc ou desc (desc par défaut). timeSeriesInterval accepte hour, day, week ou month (hour par défaut), comme granularity.

curl -G "https://manage.inklura.fr/api/trpc/emailAnalytics.getDashboardMetrics" \
  -H "Authorization: Bearer $INKLURA_TOKEN" \
  --data-urlencode 'input={"json":{"period":"7d"}}'
Note

En cas d'échec, la plupart des procédures renvoient une erreur INTERNAL_SERVER_ERROR. Deux d'entre elles se dégradent à la place : getCampaignAnalytics renvoie quand même les e-mails envoyés de la campagne, avec analytics: null et une série temporelle vide si le service de statistiques est indisponible, et getCampaignRevenue renvoie des zéros avec hasData: false. getHealthStatus indique l'état de chaque composant (healthy ou unhealthy) et l'état global (healthy, degraded ou unhealthy).

Suivi des ouvertures et des clics

Quand le suivi est activé pour un envoi (c'est le réglage par défaut du service d'envoi), l'e-mail contient un pixel de suivi et ses liens passent par une redirection. Une ouverture est comptée quand le pixel se charge ; un clic est compté quand le lecteur passe par la redirection vers la page de destination. Ces événements alimentent emailAnalytics.

Voir aussi