4. JOBS
Les fonctions ci-dessous décrivent la gestion de mailing-lists (newsletters, campagnes..).
POST api/jobs
Créé un nouveau job et lance les envois
PUT api/jobs/<rfmailno>
GET api/jobs
Modifie les propriétés du job <rfmailno> (date de début/fin, nombre d’essais…)
Liste l’ensemble des jobs du compte utilisateur et leurs principaux indicateurs de statut et statistiques
GET api/jobs/<rfmailno>/stats
GET api/jobs/<rfmailno>/report
Retourne les statistiques détaillées d’envoi et de tracking du job <rfmailno>, ventilées par [IP,sd,dm,mx]
Retourne le rapport d’envoi du job <rfmailno>
GET api/jobs/<rfmailno>/clicks
GET api/jobs/<rfmailno>/<data>
Retourne les statistiques des clics ventilés du job <rfmailno>
Retourne le contenu des éléments natifs du job (txtbody/htmbody/ampbody/list)
Method
Description
4.1. Envoyer un job
Cette méthode crée un nouveau job, lance les envois, et retourne le résultat de l’opération dans la section "stamp" de la réponse. La description détaillée des objets JSON est fournie à la section 6 ("Objects").
POST api/jobs HTTP/1.1
Authorization: <apikey>
Content-Type: application/json
Content-Lenght: <taille en octet des données JSON ci-dessous>
{
"job" : {
"ref" : <référence du job (3-30 chars ‘a’-‘z’ ‘0’-‘9’ ‘-‘>,
"title" : <intitule du job>,
"tags" : [ <liste de mots clefs de recherches>,… ],
"datestart" : <date de début des envois, au format YYMMDDhhmmss>,
"datestop" : <date de fin des envois, au format YYMMDDhhmmss>,
"retrynb" : <nombre de ré-essais>,
"retrydelay" : <délai entre les ré-essais>
},
"header" : {
"subject" : <sujet de l’email>,
"from" : { "addr": <email de l’expéditeur> , "name": <nom de
l’expéditeur > },
"sender" : { "addr": <email du sender > , "name": <nom du sender> },
"reply-to" : { "addr": <email de réponse> , "name": <nom de réponse> },
"to" : [ { "addr" : <email du destinataire>, "name" : <nom du
destinataire> },… ],
"cc" : [ { "addr" : <email du destinataire>, "name" : <nom du
destinataire> },… ],
"feedback-id" : <champ feedback-id (Google) au format_a:b:c:d>,
"precedence" : <champ precedence (Google) true/false>,
"unlst" : <champ List-Unsubscribe : liens http/smtp/both>,
"charset" : <charset d’encodage du header des emails, def utf-8>
},
"recipients" : {
"path" : <@path de la liste des destinataires au format csv OU nom de la section contenant l'enregistrement du destinataire, par exemple "rec", voir ci- dessous>,
"charset" : <charset d’encodage de la liste>,
"testaddr" : [<liste d’emails de test >,… ],
"checkaddr" : [<liste d’emails pour envoi depuis chaque IP >,… ],
"filter" : [<liste de blacklistes utilisées pour le filtrage>,… ],
"optout" : <nom de la liste dans laquelle enregistrer les unsubs>
},
"rec" : {
"email" : <adresse email du destinataire - champ obligatoire>,
"custom1" : <premier champ custom du destinataire, par exemple "name" : "xxx">,
"custom2" : <second champ custom du destinataire>,
...
"custom(n)" : <dernier champ custom du destinataire>
},
"txtbody" : {
"path" : <@path du fichier body txt>,
"encoding" : <format d’encodage du body, def Quoted-Printable>,
"charset" : <charset du fichier body txt>
},
"htmbody" : {
"path" : <@path du fichier body htm>,
"encoding" : <format d’encodage du body, def Quoted-Printable>,
"charset" : <charset du fichier body htm>
},
"attachments" : [ {
"path" : <@path du fichier de la pièce jointe>,
"encoding" : <format d’encodage de la pièce jointe, def Base64>,
},… ],
"images" : [ {
"path" : <@path du fichier de l’image encapsulée>,
"encoding" : <format d’encodage de l’image, def Base64>,
},… ],
"tracking" : {
"host" : <nom de domaine utilisé pour les URL trackées>,
"open" : <option de tracking d’ouverture : disable/image/pixel>,
"click" : <option de tracking de clics : disable/short/embedded>,
"image" : <option de tracking d’images : disable/short/embedded>,
"bot" : <option d’insertion de lien masqué : enable/disable>,
"unsub" : <lien vers la page de désabonnement>,
"uncfm" : <lien vers la page de confirmation de désabonnement>,
"mirror" : <lien vers la page miroir>,
"https" : <option de liens de tracking en https : true/false>
},
"routing" : {
"ehlo" : <nom de domaine utilisé dans le EHLO (@rdns)>,
"envelopefrom": <adresse utilisée dans l’email de MAIL FROM : @mailfrom/@verp/@from>,
"sign" : <flag de signature DKIM : from/envelope/both>,
"starttls" : <flag d’utilisation de STARTTLS : true/false>,
"ip" : <liste d'IPs et/ou ressources d’émission>
}
}
-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/json
Content-Lenght: <taille en octet des données JSON ci-dessous>
{
"stamp" : {
"date" : <date de prise en compte YYMMDDhhmmss>,
"mailno" : <reference système sous laquelle est enregistrée le job>,
"err" : <code d’erreur, 0=OK>,
"msg" : <description du code d’erreur>
}
}
4.2. Modifier un job
Cette méthode permet de modifier les paramètres d'un job en cours d'exécution.
PUT api/jobs/<rfmailno> HTTP/1.1
Authorization: <apikey>
Content-Type: application/json
Content-Lenght: <taille en octet des données JSON ci-dessous>
{
"status" : {
"hold" : <true/false>,
},
"job" : {
"datestart" : <date de début des envois, au format YYMMDDhhmmss>,
"datestop" : <date de fin des envois, au format YYMMDDhhmmss>
"retrynb" : <nombre de réessais>
},
"header" : {
"subject" : <sujet de l’email>,
}
}
-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/json
Content-Lenght: <taille du fichier json en octets>
{
"stamp" : {
"date" : <date de prise en compte YYMMDDhhmmss>,
"err" : <code d’erreur, 0=OK>,
"msg" : <description du code d’erreur>
}
}
La clef "status" permet de suspendre la diffusion du job avec effet immédiat. Le job reste en état suspendu tant qu’il n’a pas été relancé via une requête fixant la valeur de "hold" à false.
La section "jobs" permet de reprogrammer dates de début et de fin des envois du job, ainsi que le nombre de d’essais d’envois.
Enfin "header" permet la modification du sujet des emails en cours de diffusion.
4.3. Liste des jobs
Cette méthode liste les jobs injectés dans le système.
GET api/jobs/<rfmailno>?from=<index_from>&to=<index_to>
&fmt=<csv/htm/xml/json_output_file_format> HTTP/1.1
Authorization: <apikey>
-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/json
Content-Lenght: <taille du fichier json en octets>
{
"jobs" : [ {
"ref" : <référence du job>,
"type" : <‘S’ pour une campagne, ‘T’ pour un test, 'P' pour un message>,
"rfmailno" : <référence système du job>,
"rfstart" : <date de début d’envoi YYMMDDHHMMSS>,
"rfstop" : <date de fin d’envoi YYMMDDHHMMSS>,
"rfsts" : <statut du job (voir tableau ci-dessous)>,
"rfstr" : <intitulé du statut>,
"rfrsn" : <cause du statut>,
"rfrecfirst" : <compteur interne>,
"rfrecidx" : <compteur interne>,
"rfrecbusy" : <nombre de total de messages en file d’attente>,
"rfrecfeed" : <dernier nombre de messages injectés dans la file d’attente>,
"rflistsize" : <nombre total de destinataires de la liste>,
"rffiltered" : <nombre de destinataires filtrés à l’injection>,
"rfdiscarded" : <nombre de destinataires filtrés au routage>,
"rfsyserr" : <nombre de messages en erreur système>,
"rfdelivered" : <nombre d’emails délivrés>,
"rfsoft" : <nombre de destinataires en erreur temporaire>,
"rfhard" : <nombre de NPAI>,
"rfflow" : <nombre total de changement de flow au cours du routage>,
"rfptrn" : <nombre total de patterns SMTP NON reconnus>,
"rfopen" : <nombre total d’ouvertures>,
"rfopener" : <nombre total d’ouvreurs>,
"rfclick" : <nombre total de clics>,
"rfclicker" : <nombre total de cliqueurs>,
"rfmirror" : <nombre de destinataires ayant lu le mail en ligne (page miroir)>,
"rfunsub" : <nombre de destinataires ayant cliqué sur le lien de désabonnement>,
"rfuncfm" : <nombre de destinataires ayant cliqué sur le lien de confirmation>,
"rfunlst" : <nombre de destinataires désabonnés à l’aide du TAG List-Unsubscribe>,
"rfbot" : <nombre de destinataires ayant cliqué sur le lien invisible>,
"rffbl" : <nombre de FeedBackLoop reçues>,
"rfreply" : <nombre de réponses par email reçues>,
"datestart" : <date de début d’envoi programmée>,
"datestop" : <date de fin d’envoi programmée>,
"retrynb" : <nombre de repasses programmées>,
"retrydelay" : <délai en heures entre les repasses>,
"title" : <titre du job>,
"tags" : <mots clef du job>,
"subject" : <sujet de l’email>,
"fromaddr" : <adresse email de l’expéditeur (sans le domaine)>,
"fromname" : <nom de l’expéditeur>,
"toaddr" : <adresse email du premier destinataire>,
"toname" : <nom du premier destinataire>,
"ccaddr" : <adresse email du premier destinataire en copie>,
"ccname" : <nom du premier destinataire en copie>,
"rftextsz" : <taille du body text (en octets)>,
"txtbody" : <lien vers le body txt>,
"rfhtmsz" : <taille du body htm (en octets)>,
"htmbody" : <lien vers le body html>,
"list" : <lien vers la liste originale des destinataires>,
"filter" : <liste de blacklistes>,
"optout" : <nom de la liste dans laquelle enregistrer les unsubs>,
"rflinknb" : <nombre total de liens trackés>,
"rfattchsz" : <taille totale des pièces jointes>,
"rfattchnb" : <nombre de pièces jointes>,
"rfimagenb" : <nombre d’images encapsulées>,
"rfimagesz" : <taille totale des images encapsulées>
},… ]
}
Intitulé
rfsts
Description
Job en cours d’exécution
Job soumis au système
Job terminé
Job suspendu manuellement
Job en erreur
Job en attente de datestart
Submitted
Running
Completed
Waiting
Suspended
Error
1
2
3
4
5
6
Query :
Le paramètre "rfmailno" est facultatif. Si non précisé, le système retourne par défaut les 100 derniers jobs injectés dans le système par l’utilisateur. Il est possible de modifier cette étendue à l’aide des paramètres "from" et "to", avec un intervalle de 1000 résultats à la fois maximum. Si le paramètre "rfmailno" est précisé, le système retourne uniquement l’entrée du tableau correspondant à la référence du job et ignore les autres paramètres de la requête.
4.4. Statistiques détaillées des jobs
GET api/jobs/<rfmailno>/stats?groupby=<flag de regroupement>
&fmt=<csv/htm/xml/json_output_file_format> HTTP/1.1
Authorization: <apikey>
-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/json
Content-Lenght: <taille du fichier json en octets>
{
"stats" : [ {
"rfdate" : <toujours à 0)>,
"rfipno" : <numéro interne de l’IP d’émission>,
"rfipstr" : <adresse IP d’émission>,
"rfsdno" : <numéro interne du sender>,
"rfsdstr" : <domaine de sender>,
"rfdmno" : <numéro interne du groupe de domaines>,
"rfdmstr" : <nom du groupe de domaines>,
"rfmxno" : <numéro interne du MX>,
"rfmxstr" : <adresse IP du MX>,
"rfmxdm" : <numéro interne du groupe de domaines rattaché au MX>,
"rfmxds" : <nom du groupe de domaines rattaché au MX>,
"rflistsize" : <nombre de destinataires par groupe de domaines
(pré calculé à l’injection selon les alias connus)>,
"rfdelivered" : <nombre d’emails délivrés>,
"rfsoft" : <nombre de destinataires en erreur temporaire>,
"rfhard" : <nombre de NPAI>,
"rfflow" : <nombre total de changement de flow au cours du routage>,
"rffallback" : <nombre total de transmission sur MX secondaire>,
"rfopen" : <nombre total d’ouvertures>,
"rfopener" : <nombre total d’ouvreurs>,
"rfclick" : <nombre total de clics>,
"rfclicker" : <nombre total de cliqueurs>,
"rfmirror" : <nombre total de clics sur page mirroir>,
"rfunsub" : <nombre total de clics sur lien de désabonnement>,
"rfuncfm" : <nombre total de clics sur le lien de confirmation>,
"rfunlst" : <nombre désabonnements à l’aide du TAG List-Unsubscribe>,
"rfbot" : <nombre total de clics sur lien invisible>,
"rffbl" : <nombre de FeedBackLoop reçues>,
"rfreply" : <nombre de réponse par email reçues>
},… ]
}
Query :
Cette commande génère des statistiques de delivery et tracking du job référencé par la variable ‘mailno’, issue du journal des jobs.
Les principaux indicateurs (emails délivrés, hardbounces, ouvertures, clics, …) sont ventilés par quadruplets uniques { ip ; sd ; dm ; mx }, où ‘ip’ représente d’IP d’émission, ‘sd’ le domaine de sender, ‘dm’ le groupe de domaines de destination, et ‘mx’ l’IP du serveur SMTP distant.
"listsize" représente le nombre de destinataires par groupe de domaine, tel que précalculé selon les alias connus à l’injection du job dans le système.
Le paramètre GROUPBY représente la valeur décimale du Ou Logique (OR) des flags suivants :
-
STAT_FLAG_IP 0x08
-
STAT_FLAG_SD 0x04
-
STAT_FLAG_DM 0x02
-
STAT_FLAG_MX 0x01
4.5. Rapports d'envoi d'un job
GET api/jobs/<rfmailno>/report?&fmt=<csv/htm/xml/json_output_file_format> HTTP/1.1
Authorization: <apikey>
-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/json
Content-Lenght: <taille du fichier json en octets>
{
"report" : [ {
"rfsts" : <code de statut (voir ci-dessous)>,
"rfevt" : <code d'évènement)>,
"rfstr" : <intitulé du statut>,
"rfpatten" : <nom du pattern détecté>,
"rfpoolno" : <poolno spécifique>,
"rfcrc" : <hash interne>,
"rftryno" : <numéro d'essai de l'envoi>,
"rfcancelnb" : <nombre d’expirations en file d’attente>,
"rfsubmitdate" : <date de l’envoi {YYMMDDHHMMSS}>,
"rfsenddate" : <date de l’envoi {YYMMDDHHMMSS}>,
"rfduration" : <durée totale de traitement du message (ms)>,
"rfipno" : <numéro de l’IP d’émission>,
"rfipstr" : <adresse IP d’émission>,
"rfsdno" : <numéro du sender>,
"rfsdstr" : <domaine de sender>,
"rfdmno" : <numéro du groupe de domaines>,
"rfdmstr" : <nom du groupe de domaines>,
"rfmxno" : <numéro du MX>,
"rfmxstr" : <adresse IP du MX>,
"rfmxname" : <nom d’hôte du MX>,
"rfmxdx" : <numero du MX dans la liste des MX>,
"rfmxnb" : <nombre de MX du domaine de destination>,
"rfmxdm" : <numéro du groupe de domaines rattaché au MX>,
"rfmxds" : <nom du groupe de domaines rattaché au MX>,
"rfipflowno" : <numéro du profil de contrôle de flux IP lors de l’envoi>,
"rfipflowstr" : <nom du profil de contrôle de flux IP lors de l’envoi>,
"rfsdflowno" : <numéro du profil de contrôle de flux SENDER>,
"rfsdflowstr" : <nom du profil de contrôle de flux SENDER>,
"rfssno" : <numéro du message dans la session SMTP>,
"rfdforge" : <durée de fusion/personnalisation du message (ms)>,
"rfdsign" : <durée de signature DKIM (ms)>,
"rfsize" : <taille en octet du message>,
"rfssl" : <version du protocole SSL/TLS négocié dans la session>,
"rferr" : <numéro de la dernière erreur enregistrée>,
"rfapp" : <dernier code d’erreur applicatif>,
"rfdwe" : <numéro de la dernière erreur système enregistrée>,
"rfval" : <dernier code XXX reçu>,
"rfstp" : <dernière étape du protocole effectuée>,
"rfclientip" : <adresse IP du client http>,
"rflasthit" : <dernier évènement de tracking>,
"rflastclick" : <dernier clic reçu>,
"rfopennb" : <nombre total d’ouverture>,
"rfopen" : <date de dernière ouverture>,
"rfclicknb" : <nombre total de clics>,
"rfclick" : <date du dernier clic>,
"rfmirror" : <date de première consultation de la page miroir>,
"rfunsub" : <date de premier clic sur lien de désinscription>,
"rfuncfm" : <date de premier clic sur lien de confirmation de
désinscription>,
"rfunlst" : <date de premier hit sur lien List-Unsubscribe>,
"rfbot" : <date de premier hit sur lien invisible>,
"rffbl" : <date de réception du message de FeedBackLoop>,
"rfreply" : <date de réception du message de réponse>,
"rfreplytype" : <type de réponse reçue>,
"rfdevice" : <terminal de consultation du client>,
"rfbrowser" : <navigateur web du client>,
"email" : <adresse email du destinaire>,
<champ custom> : <valeur du champ custom>,
<champ custom> : <valeur du champ custom>,
<champ custom> : <valeur du champ custom>,
…
<champ custom>: <valeur du champ custom>
},… ]
}
rfsts
Intitulé
Description
Format de l’adresse email invalide
Adresse email vide
Adresse email en doublon dans la liste
Email remis avec succès
Adresse présente dans la blackliste xxx
Empty
Invalid
Duplicate
BL xxx
Delivered
1
2
3
4
21
22
Soft
Soft Bounce – voir rfstr pour le détail
23
Hard
Hard Bounce – voir rfstr pour le détail
24
Flow
Changement de sets de paramètres suite à match pattern SMTP
25
Discarded
IP/MX/banner filtré
26
System
Erreur système
4.6. Ventilation des clics d'un job
GET api/jobs/<rfmailno>/clicks?fmt=<csv/htm/xml/json_output_file_format> HTTP/1.1
Authorization: <apikey>
-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/json
Content-Lenght: <taille du fichier json en octets>
{
"clicks" : [ {
"no" : <numéro du lien dans le body>,
"nb" : <nombre total de clicks sur le lien du job>,
"url" : <url de redirection>
},… ]
}
4.7. Téléchargement des éléments
GET api/jobs/<rfmailno>/<txtbody/htmbody/ampbody/list> HTTP/1.1
Authorization: <apikey>
-----------------------------------------------------------------------------------------------HTTP/1.1 200 OK
Content-Type: application/<content type>
Content-Lenght: <taille en octet des données ci-dessous>
<requested data>
