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"}}'
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
- Procédures tRPC : comment appeler
campaigns.*etemailAnalytics.* - Journeys marketing : l'étape
EMAIL, la seule étape de journey qui envoie - Vue d'ensemble des intégrations