Version Obsolete
La version 1.1 de l'API REST Contact Everyone est obsolète et ne doit plus être utilisée.
Merci d'utiliser la version 1.2.
Vous pouvez sélectionner la documentation de la version 1.2 via le menu à gauche.
Changements depuis la v1
Cette nouvelle version est simplement une mise à jour de la v1 avec format de date différent en sortie, interprété par défaut par une majorité de language :
Dans la v1, les dates retournées étaient au format
yyyy-MM-dd HH:mm:ss,SSSmais au formatyyyy-MM-dd'T'HH:mm:ss.SSSXXXen entrée (dans les filtres de recherches par exemple)Dans la v1.1, toutes les dates sont au format
yyyy-MM-dd'T'HH:mm:ss.SSSXXX
0. Prise en main
La solution complète pour vos diffusions SMS et e-mails
La plateforme Contact-Everyone est un service d'envoi de messages en masse proposé par Orange.
Ce service s'adresse aux professionnels et vous offre les moyens de réaliser vos campagnes SMS et e-mails en quelques clics via son application en ligne, d'alerter vos clients par SMS et consulter les statistiques de remise et les réponses de vos clients.
Par ailleurs, la plateforme Contact-Everyone propose
- Une API complète pour mettre en place efficacement vos campagnes et délivrer rapidement vos emails et SMS
- Une architecture rapide, scalable et entièrement sécurisée vous garantissant une fiabilité de réception exceptionnelle
- Un suivi avancé des messages pour analyser et mesurer l'efficacité de votre campagne

Protocole de connexion sécurisée
Vos applicatifs doivent se connecter en HTTPS en utilisant le protocole TLS 1.2.
Vous ne devez pas utiliser les protocoles TLS 1.0 et TLS 1.1, qui sont dépréciés.
Le support du protocole TLS 1.3 n'est pas encore disponible sur Contact Everyone.
Authentification
L'API de Contact-Everyone V5 est entièrement sécurisée par protocole OAuth2. Ce protocole standardisé permet à des applications tierces d’obtenir un accès sécurisé à un service via HTTPS par le biais d’une autorisation préalable accordée au client.
L'accès aux ressources de l'API s'effectue en deux étapes :
1. L'utilisateur s'authentifie à l'aide de son nom d'utilisateur et de son mot de passe au format application/x-www-form-urlencoded. Une fois authentifié, un jeton d'accés appelé [Access-Token] est retourné au client.
Pour récupérer un jeton d'accès, effectuez une requête POST HTTP vers l'URL ci-dessous.
2. L'utilisateur interroge le service en ajoutant son jeton d'accès dans l'entête Authorization de chacune de ses requêtes HTTP
A SAVOIR
- Afin d'utiliser le service, le mot de passe doit être activé et personnalisé sur l'application en ligne
- Le jeton d'accès est valable une heure avant d'expirer
- A chaque appel, la durée de vie du jeton est étendue pour être utilisable une heure supplémentaire
- Le nombre de jetons n'est pas limité, il est possible de générer autant de jetons que vous disposez de clients HTTP
- Toutes les requêtes sur l'API REST doivent être exécutées sur HTTPS
Format de requête
Format de requête
curl -X POST 'https://[SERVER_URL]/api/v1.1/oauth/token' \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'Accept: application/json' \
-d 'username=[login]&password=[password]'
URL url = new URL("https://[SERVER_URL]/api/v1.1/oauth/token");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
con.setDoOutput(true);
String postJsonData = "username=[login]&password=[password]";
DataOutputStream dataOutputStream = new DataOutputStream(con.getOutputStream());
dataOutputStream.write(postJsonData.getBytes(StandardCharsets.UTF_8));
dataOutputStream.flush();
dataOutputStream.close();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1/oauth/token");
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("application/x-www-form-urlencoded",
"username=[login]&password=[password]",
ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1/oauth/token")
dim request as RestRequest = new RestRequest(Method.POST)
request.AddHeader("Content-Type", "application/x-www-form-urlencoded")
request.AddParameter("application/x-www-form-urlencoded",
"username=[login]&password=[password]",
ParameterType.RequestBody)
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/oauth/token";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/x-www-form-urlencoded'
));
$content='username=[login]&password=[password]';
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/oauth/token"
payload := strings.NewReader("username=[login]&password=[password]")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
| Champ | Type | Description |
|---|---|---|
| username | String | L'identifiant utilisé pour se connecter à l'application |
| password | String | Le mot de passe utilisé pour se connecter à l'application |
Note : L'identifiant et le mot de passe doivent être fournis au format application/x-www-form-urlencoded
Format de réponse
Format de réponse
{
"access_token":"[access_token]",
"token_type":"bearer",
"scope":"api",
"ttl":3600
}
- Status code : 200 Ok
- Response Body : Renvoie un objet au format JSON contenant, entre autre, l'[Access-Token]
| Champ | Type | Description |
|---|---|---|
| access_token | String | Le jeton d'accès |
| token_type | String | Le type de jeton OAuth2.0, toujours "bearer" |
| scope | String | Le type de jeton, toujours "api" |
| ttl | String | La durée de vie du jeton, en secondes |
Erreurs possibles
| Status HTTP | Description |
|---|---|
| 401 Unauthorized | Vérifier que l'utilisateur et le mot de passe fournis sont corrects et que les paramètres ont été fournis au format x-www-form-urlencoded |
| 404 NotFound | Assurez vous que le chemin HTTP fourni est bien le suivant : /api/v1.1/oauth/token |
Déconnexion
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.1/logout" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.1/logout");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1/logout");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1/logout")
dim request as RestRequest = new RestRequest(Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/logout";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/logout"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
res, _ := http.DefaultClient.Do(req)
res.Body.Close()
}
Un utilisateur peut révoquer son accès en demandant à l'application d'invalider son token d'accès.
Pour invalider un jeton d'accès, effectuez une requête GET HTTP vers l'URL ci-dessous.
Note : L'entête Authorization: Bearer doit être positionnée.
Quick Start Guide
Dans ce quick start guide, nous allons découvrir les étapes simples permettant de déclencher un envoi de message SMS vers plusieurs destinataires identifiés par leurs numéros de mobile.

1. Récupérer un groupe de travail
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.1/groups" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups",Method.GET);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups",Method.GET)
request.AddHeader("Content-Type", "application/json")
request.AddHeader("Authorization", "Bearer [Access-Token]")
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
Dans l'application Contact-Everyone V5 tout est organisé par groupe. L'utilisation des groupes permet, entre autre, de grouper ses contacts et ses listes de diffusion afin de les partager avec d'autres utilisateurs.
Pour commencer, il convient donc de récupérer un identifiant de groupe.
Pour faire cela, utilisez l'URL suivante permettant de lister vos groupes.
Puis récupérez l'identifiant du groupe sur lequel vous allez effectuer votre envoi de messages.
Pour plus de détails sur la gestion des groupes, rendez-vous dans la section Gérer ses groupes
2. Créer une diffusion SMS simple
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.1/groups/[id-group]/diffusion-requests" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '{
"msisdns":["+33693847755", "0764536453", "+447564110766"],
"smsParam":{
"encoding" : "GSM7",
"body":"mon body SMS"
}
}'
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id-group]/diffusion-requests");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setDoOutput(true);
String postJsonData = "{"+
"\"msisdns\":[\"+33693847755\",\"0764536453\",\"+447564110766\"],"+
"\"smsParam\":{\"encoding\":\"GSM7\", \"body\":\"mon contenu SMS\"}}";
DataOutputStream dataOutputStream = new DataOutputStream(con.getOutputStream());
dataOutputStream.write(postJsonData.getBytes(StandardCharsets.UTF_8));
dataOutputStream.flush();
dataOutputStream.close();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/diffusion-requests",Method.POST);
request.AddHeader("Authorization", "Bearer [access-token]");
request.AddHeader("Content-Type", "application/json");
var json = @"{
""msisdns"":[""+33693847755"",""0764536453"",""+447564110766""],
""smsParam"":{
""encoding"":""GSM7"",
""body"":""mon contenu SMS""
}
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var response = client.Execute(request);
Dim client = new RestClient("https://[SERVER_URL]/api/v1.1")
Dim request = new RestRequest("/groups/[id_group]/diffusion-requests",Method.POST)
request.AddHeader("Authorization", "Bearer [access-token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{
""msisdns"":[""+33693847755"",""0764536453"",""+447564110766""],
""smsParam"":{
""encoding"":""GSM7"",
""body"": ""mon contenu SMS""
}
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]',
'Content-Type: application/json'
));
$content='{
"msisdns":["+33693847755","0764536453","+447564110766"],
"smsParam":{
"encoding":"GSM7",
"body": "mon contenu SMS"
}
}';
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests"
json := `{
"msisdns":"+33693847755","0764536453","+447564110766",
"smsParam":{
"encoding": "GSM7",
"body": "mon contenu SMS"
}
}`
payload := strings.NewReader(json)
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("accept", "application/json")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
Considérons l'envoi d'un message SMS vers trois numéros de mobile.
Construisez un document JSON conforme à la structure d'une diffusion, comme celui présenté sur la droite.
Le déclenchement d'une diffusion s'effectuera à l'aide d'une requête HTTP POST vers l'URL ci-dessous.
:id-group/diffusion-requests
Vous pouvez vous inspirer de l'exemple cURL dans le bandeau de droite.
3. Consulter l'état de votre diffusion
Format de requête
curl -X GET \
"https://[SERVER_URL]/api/v1.1/groups/[id-group]/contacts/[id-diffusion]" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id-group]/contacts/[id-diffusion]");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id-group]/contacts/[id-diffusion]",Method.GET);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id-group]/contacts/[id-diffusion]",Method.GET)
request.AddHeader("Content-Type", "application/json")
request.AddHeader("Authorization", "Bearer [Access-Token]")
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id-group]/contacts/[id-diffusion]";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id-group]/contacts/[id-diffusion]"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
Une fois la demande de diffusion créée, récupérez son identifiant (attribut id du document retourné).
Vous pouvez ensuite suivre son avancement à l'aide d'une requête HTTP GET vers l'URL ci-dessous.
:id-diffusion
Une fois de plus, vous pouvez vous inspirer vous de l'exemple cURL dans le bandeau de droite.
Le document retourné contient de nombreux champs renseignant sur l'état d'avancement de votre diffusion, le nombre de destinataires en succès et en échec, le ratio de succès, etc.
Pour des informations détaillées, rendez-vous dans la section état d'une diffusion
Informations générales
- Version de l'API
La version actuelle de l'API est 1.1
Format et entêtes HTTP
- Toutes les dates sont retournées au format ISO8601 suivant :
yyyy-MM-ddTHH:mm:ss.SSSXXX. Ex : 2017-11-02T11:28:23.000+02:00 - Toutes les requêtes émises vers l'API doivent contenir les entêtes HTTP obligatoires :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Spécifie le format de données |
| Authorization | Bearer [Access-Token] |
Permet de vous authentifier sur l'api. |
- Pagination des résultats
Certaines ressources retournent des listes pouvant contenir de très nombreux éléments (ex : Consultation des contacts ou des réponses). Ces résultats sont paginés, c'est à dire, englobé dans un document JSON de plus haut-niveau contenant des informations sur la structure paginée.
Ce document contient les propriétés ci-dessous.
| Attribut | Description |
|---|---|
| content | Tableau des résultats |
| size | Nombre d'éléments sur la page courante min : 5, max : 100 |
| totalElements | Nombre total d'éléments |
| number | Numéro de page courante (débute à 1) |
| totalPages | Nombre total de pages |
| first | Vrai si première page, faux sinon |
| last | Vrai si dernière page, faux sinon |
Vous pouvez utiliser les paramètres pageNumber et pageSize en query params dans vos requêtes HTTP.
Par exemple, la requête suivante vous retournera la deuxième page d'une liste qui contient 8 éléments par page
:id-group/replies?pageNumber=2&pageSize=8
- Codes d'erreur
Si une opération est en échec (ie code HTTP différent de 2XX), les codes d'erreur détaillés retournés par notre serveur sont définis ci-dessous.
| Code Erreur | Code HTTP | Description |
|---|---|---|
| N/A | 5XX | Erreur serveur, retentez à nouveau |
| N/A | 404 NotFound | La ressource pointée n'existe pas ou plus |
| UnparsableRequest | 400 BadRequest | Le format de la requête est incorrect, vérifiez la structure de votre document JSON |
| NotEmpty | 400 BadRequest | Le champ identifié par field ne peut être vide |
| 400 BadRequest | Le format d'email du champ identifié par field est incorrect |
|
| Msisdn | 400 BadRequest | Le format de numéro de mobile identifié par field est incorrect |
| NameNotAvailable | 400 BadRequest | Le nom utilisé n'est pas disponible |
- Exemples de code
Si vous voulez utiliser les exemples de code C# (.NET) de cette documentation il vous faudra installer une bibliothèque tierce.
En effet nous avons utilisé la librairie RestSharp pour simplifier la consommation du service web REST et HTTP pour .Net.
Vous trouverez plus d'infos sur le site : RestSharp - Simple REST and HTTP API Client for .NET
Pour pouvoir installer les packages nécessaires pour le fonctionnement de l'API
PM> Install-Package RestSharp -Version 105.2.3
- Nombre de caractères des SMS et SMS longs
En fonction de votre compte et du jeu de caractères utilisé (UNICODE ou GSM7), le nombre de caractères maximum autorisé dans un SMS varie :
| type d'usage | option Personnalisation Numéro Émetteur | jeu de caractères | Sans option SMS Longs | Avec option SMS Longs |
|---|---|---|---|---|
| Marketing | oui | GSM | 145 | 1515 |
| Marketing | oui | UNICODE | 55 | 655 |
| Marketing | non | GSM | 160 | 1530 |
| Marketing | non | GSM | 70 | 670 |
| Professionnel | oui | GSM | 160 | 1530 |
| Professionnel | oui | UNICODE | 70 | 670 |
| Professionnel | non | GSM | 160 | 1530 |
| Professionnel | non | UNICODE | 70 | 670 |
| Interpersonnel | oui | GSM | interdit | interdit |
| Interpersonnel | oui | UNICODE | interdit | interdit |
| Interpersonnel | non | GSM | 160 | 1530 |
| Interpersonnel | non | UNICODE | 70 | 670 |
Si vous disposez de l'option SMS Longs, vos messages dépassants 160 caractères en GSM, ou dépassants 70 en UNICODE, seront découpés et facturés en plusieurs SMS, selon le tableau ci-dessous :
| jeu de caractère | usage Marketing + perso du numéro émetteur | nombre de caractères | nombre de SMS facturés |
|---|---|---|---|
| GSM | non | de 1 à 160 inclus | 1 |
| GSM | non | de 161 à 306 inclus | 2 |
| GSM | non | de 307 à 459 inclus | 3 |
| GSM | non | de 460 à 612 inclus | 4 |
| GSM | non | de 613 à 765 inclus | 5 |
| GSM | non | de 766 à 918 inclus | 6 |
| GSM | non | de 919 à 1071 inclus | 7 |
| GSM | non | de 1072 à 1224 inclus | 8 |
| GSM | non | de 1225 à 1377 inclus | 9 |
| GSM | non | de 1378 à 1530 inclus | 10 |
| UNICODE | non | de 1 à 70 inclus | 1 |
| UNICODE | non | de 71 à 134 inclus | 2 |
| UNICODE | non | de 135 à 201 inclus | 3 |
| UNICODE | non | de 202 à 268 inclus | 4 |
| UNICODE | non | de 269 à 335 inclus | 5 |
| UNICODE | non | de 336 à 402 inclus | 6 |
| UNICODE | non | de 403 à 469 inclus | 7 |
| UNICODE | non | de 470 à 536 inclus | 8 |
| UNICODE | non | de 537 à 603 inclus | 9 |
| UNICODE | non | de 604 à 670 inclus | 10 |
| GSM | oui | de 1 à 145 inclus | 1 |
| GSM | oui | de 146 à 291 inclus | 2 |
| GSM | oui | de 292 à 444 inclus | 3 |
| GSM | oui | de 445 à 589 inclus | 4 |
| GSM | oui | de 590 à 734 inclus | 5 |
| GSM | oui | de 735 à 879 inclus | 6 |
| GSM | oui | de 880 à 1024 inclus | 7 |
| GSM | oui | de 1025 à 1169 inclus | 8 |
| GSM | oui | de 1170 à 1314 inclus | 9 |
| GSM | oui | de 1315 à 1459 inclus | 10 |
| UNICODE | oui | de 1 à 55 inclus | 1 |
| UNICODE | oui | de 56 à 119 inclus | 2 |
| UNICODE | oui | de 120 à 186 inclus | 3 |
| UNICODE | oui | de 187 à 241 inclus | 4 |
| UNICODE | oui | de 242 à 296 inclus | 5 |
| UNICODE | oui | de 297 à 351 inclus | 6 |
| UNICODE | oui | de 352 à 406 inclus | 7 |
| UNICODE | oui | de 407 à 461 inclus | 8 |
| UNICODE | oui | de 462 à 516 inclus | 9 |
| UNICODE | oui | de 517 à 572 inclus | 10 |
Ces informations ne sont pas contractuelles.
Media
Les valeurs possibles sont : SMS, EMAIL.
1. Gérer ses groupes
Un groupe est une notion permettant de regrouper des utilisateurs (de type diffuseurs ou superviseurs).
Le groupe est le moyen priviligié pour partager des contacts d'annuaire et des listes de diffusion entre utilisateurs. Il peut être également utilisé pour définir des contextes de travail.
Dans la version actuelle de l'API, seules les opérations de lecture sur les groupes sont supportées.
Structure d'un groupe
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | L'identifiant unique du groupe. |
| name | String | true | Le nom du groupe. |
| createdAt | Date | true | Date de création du groupe. |
| updatedAt | Date | true | Date de dernière modification du groupe. |
- Lister les groupes
Ce point d'accès permet de récupérer tous les groupes auxquel appartient l'utilisateur courant.
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.1/groups" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
N/A
- Payload
N/A
Format de réponse
Format de réponse
[
{
"id":"f12edd46-96b8-41d9-baa7-58f42daa9301",
"name":"Groupe interne",
"createdAt": "2017-04-10T11:57:43.229+01:00",
"updatedAt": "2017-04-10T11:57:44.030+01:00"
},
{
"id":"e32edd46-96b8-41d9-baa7-58f42daa9374",
"name":"Groupe diffusion Noel",
"createdAt": "2017-04-10T11:57:43229+01:00",
"updatedAt": "2017-04-10T11:57:44030+01:00"
}
]
- Status code : 200 OK
- Response Body : Retourne une liste d'objets groupe
- Récupérer un groupe
:id-group
Ce point d'accès permet de récupérer un groupe à partir de son identifiant .
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.1/groups/[id_group]" \
-H "Authorization: Bearer [Access-Token]" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]]")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant technique (32 caractères alphanumériques) du groupe. |
Format de réponse
Format de réponse
{
"id":"0e82774b-4cae-4347-80fe-10e81ce4a9da",
"name":"Julien",
"createdAt": "2017-04-10T11:57:43.229+01:00",
"updatedAt": "2017-04-10T11:57:44.030+01:00"
}
- Status code : 200 Ok
- Response Body : Renvoie un objet groupe
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du groupe auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe auquel vous tentez d'accéder |
2. Gérer ses contacts
Un contact est le destinataire d'un ou plusieurs messages.
C'est une structure qui porte des informations diverses telles que numéros de mobiles, adresse email, adresse postale, etc.
Structure d'un contact
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | L'identifiant unique du contact |
| name | String | false | Le nom du contact |
| firstName | String | false | Le prénom du contact |
| address | String | false | L'adresse du contact |
| city | String | false | La ville du contact |
| countryCode | String | false | Le code pays du contact |
| postalCode | String | false | Le code postal du contact |
| landlineOne | String | false | Le numéro de téléphone fixe 1 |
| landlineTwo | String | false | Le numéro de téléphone fixe 2 |
| cellularOne | String | false | Le numéro de téléphone portable 1 |
| cellularTwo | String | false | Le numéro de téléphone portable 2 |
| faxNumber | String | false | Le numéro de fax |
| String | false | L'adresse email du contact | |
| createdAt | Date | true | Date de création du contact |
| updatedAt | Date | true | Date de dernière modification du contact |
- Créer un contact
:id-group/contacts
Ce point d'accès permet de créer un contact dans un groupe donné.
Les nom et prénom d'un contact sont obligatoires.
Un contact doit posséder au minimum un numéro de téléphone ou une adresse email.
Format de requête
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '{
"name":"Julien",
"firstName":"Nicolas",
"landlineOne":"+33115610572",
"email":"consequaturlena.vincent@gmail.com"
}'
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("Content-Type", "application/json");
con.setDoOutput(true);
String postJsonData = "{\"name\":\"Julien\",\"firstName\":\"Nicolas\",\"landlineOne\":\"+33115610572\",\"email\":\"consequaturlena.vincent@gmail.com\"}";
DataOutputStream dataOutputStream = new DataOutputStream(con.getOutputStream());
dataOutputStream.write(postJsonData.getBytes(StandardCharsets.UTF_8));
dataOutputStream.flush();
dataOutputStream.close();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/contacts", Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"name\":\"Julien\",\n \"firstName\":\"Nicolas\",\n \"landlineOne\":\"+33115610572\",\n \"email\":\"consequaturlena.vincent@gmail.com\"\n }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/contacts", Method.POST)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
request.AddParameter("application/json", "{""name"":""Julien"",""firstName"":""Nicolas"",""landlineOne"":""+33115610572"",""email"":""consequaturlena.vincent@gmail.com""}", ParameterType.RequestBody)
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]',
'Content-Type: application/json'
));
$content='{
"name":"Julien",
"firstName":"Nicolas",
"landlineOne":"+33115610572",
"email":"consequaturlena.vincent@gmail.com"
}';
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts"
json := `{
"name":"Julien",
"firstName":"Nicolas",
"landlineOne":"+33115610572",
"email":"consequaturlena.vincent@gmail.com"
}`
payload := strings.NewReader(json)
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer [Access-Token]")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
| id-group | String | L'identifiant technique (32 caractères alphanumériques) du groupe. |
Format de réponse
Format de réponse
{
"id": "8249e746-f243-437d-afe7-47751dfb5996",
"name": "Bob",
"firstName": "Nicolas",
"landlineOne": "+33115610572",
"email": "consequaturlenssa.vincent@gmail.com",
"createdAt": "2018-05-22T13:23:55.794+02:00",
"updatedAt": "2018-05-22T13:23:55.794+02:00"
}
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Format de la donnée |
| Location | /api/v1.1/groups/:id-group/contacts/:id-contact |
Emplacement du contact créé |
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du groupe auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
| 400 BadRequest | NotEmpty | Un ou plusieurs champs obligatoires sont manquants dans votre objet |
| 400 BadRequest | Msisdn | Le format du numéro de téléphone fourni n'est pas correct |
| 400 BadRequest | Le format de l'adresse email fournie n'est pas correct | |
| 400 BadRequest | MissingIdentification | Au moins une information de contact (nom, prénom, société ou fonction) est requise |
- Modifier un contact
:id-group/contacts/:id-contact
Ce point d'accès permet de modifier un contact dans un groupe donné.
Les nom et prénom d'un contact sont obligatoires.
Un contact doit posséder au minimum un numéro de téléphone ou une adresse email.
Format de requête
Format de requête
curl -X PUT "https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts/[id_contact]" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '{
"name":"Julien",
"firstName":"Nicolas",
"landlineOne":"+33115610572",
"email":"consequaturlena.vincent@gmail.com"
}'
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts/[id_contact]");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("PUT");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setDoOutput(true);
String postJsonData = "{\"name\":\"Julien\",\"firstName\":\"Nicolas\",\"landlineOne\":\"+33115610572\",\"email\":\"consequaturlena.vincent@gmail.com\"}";
DataOutputStream dataOutputStream = new DataOutputStream(con.getOutputStream());
dataOutputStream.write(postJsonData.getBytes(StandardCharsets.UTF_8));
dataOutputStream.flush();
dataOutputStream.close();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/contacts/[id_contact]", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n \"name\":\"Julien\",\n \"firstName\":\"Nicolas\",\n \"landlineOne\":\"+33115610572\",\n \"email\":\"consequaturlena.vincent@gmail.com\"\n }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/contacts/[id_contact]", Method.PUT)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
request.AddParameter("application/json", "{""name"":""Julien"",""firstName"":""Nicolas"",""landlineOne"":""+33115610572"",""email"":""consequaturlena.vincent@gmail.com""}", ParameterType.RequestBody)
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts/[id_contact]";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]',
'Content-Type: application/json'
));
$content='{
"name":"Julien",
"firstName":"Nicolas",
"landlineOne":"+33115610572",
"email":"consequaturlena.vincent@gmail.com"
}';
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts/[id_contact]"
json := `{
"name":"Julien",
"firstName":"Nicolas",
"landlineOne":"+33115610572",
"email":"consequaturlena.vincent@gmail.com"
}`
payload := strings.NewReader(json)
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
| id-group | String | L'identifiant technique (32 caractères alphanumériques) du groupe. |
| id-contact | String | L'identifiant unique du contact. |
Format de réponse
Format de réponse
{
"id": "8249e746-f243-437d-afe7-47751dfb5996",
"name": "Bob",
"firstName": "Nicolas",
"landlineOne": "+33115610572",
"email": "consequaturlenssa.vincent@gmail.com",
"createdAt": "2018-05-22T13:23:55.794+02:00",
"updatedAt": "2018-05-22T13:23:55.794+02:00"
}
- Status code : 200 OK
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Format de la donnée |
| Location | /api/v1.1/groups/:id-group/contacts/:id-contact |
Emplacement du contact modifié |
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du groupe auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
| 400 BadRequest | NotEmpty | Un ou plusieurs champs obligatoires sont manquants dans votre objet |
| 400 BadRequest | Msisdn | Le format du numéro de téléphone fourni n'est pas correct |
| 400 BadRequest | Le format de l'adresse email fournie n'est pas correct | |
| 400 BadRequest | MissingIdentification | Au moins une information de contact (nom, prénom, société ou fonction) est requise. |
- Supprimer un contact
:id-group/contacts/:id-contact
Ce point d'accès permet de supprimer un contact d'un groupe donné.
Format de requête
Format de requête
curl -X DELETE \
"https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts/[id_contact]" \
-H "Authorization: Bearer [Access-Token]" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts/[id_contact]");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("DELETE");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/contacts/[id_contact]", Method.DELETE);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/contacts/[id_contact]", Method.DELETE)
request.AddHeader("Authorization", "Bearer [Access-Token]")
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts/[id_contact]";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
?>
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts/[id_contact]"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
| id-group | String | L'identifiant technique (32 caractères alphanumériques) du groupe. |
| id-contact | String | L'identifiant unique du contact. |
- Payload
N/A
Format de réponse
- Status code : 204 No Content
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder |
- Récupérer un contact
:id-group/contacts/:id-contact
Ce point d'accès permet de récupérer un contact dans un groupe donné, à partir de son identifiant.
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts/[id_contact]" \
-H "Authorization: Bearer [Access-Token]" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts/[id_contact]");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/contacts/[id_contact]", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/contacts/[id_contact]", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts/[id_contact]";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts/[id_contact]"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
| id-group | String | L'identifiant technique (32 caractères alphanumériques) du groupe. |
| id-contact | String | L'identifiant unique du contact. |
Format de réponse
Format de réponse
{
"id":"0e82774b-4cae-4347-80fe-10e81ce4a9da",
"name":"Julien",
"firstName":"Nicolas",
"address":"507 rue Fleury Saint-Bernard",
"city":"Lakestad",
"countryCode":"FRA",
"postalCode":"90579",
"landlineOne":"+33115610572",
"landlineTwo":"+33162370335",
"cellularOne":"+33733577490",
"cellularTwo":"+33736968801",
"faxNumber":"+33117556832",
"email":"consequaturlena.vincent@gmail.com",
"acquittalNumber":"4858",
"createdAt":"2017-02-27T16:38:36.110+02:00",
"updatedAt":"2017-02-27T16:38:36.110+02:00"
}
- Status code : 200 Ok
- Response Body : Renvoie un objet contact
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du contact auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
- Lister les contacts
:id-group/contacts
Ce point d'accès permet de récupérer la liste paginée des contacts d'un groupe donné.
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/contacts", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/contacts", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
| id-group | String | L'identifiant technique (32 caractères alphanumériques) du groupe. |
- Payload
N/A
Format de réponse
Format de réponse
{
"content":[
{
"id":"f12edd46-96b8-41d9-baa7-58f42daa9301",
"name":"Boyer",
"firstName":"Mael",
[...]
},
{
"id":"54032d6f-19cd-4049-8cfe-bd80a563c911",
"name":"Le gall",
"firstName":"Ethan",
[...]
},
{...},
{
"id":"372c1ede-03d5-41d4-bd2c-0471a3c371be",
"name":"Morel",
"firstName":"Alexis",
[...]
}
],
"last":false,
"first":true,
"totalPages":3,
"totalElements":25,
"numberOfElements":25,
"size":10,
"number":0
}
- Status code : 200 Ok
- Response Body : Renvoie une liste d'objets contact
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
- Lister les listes de diffusion d'un contact
:id-group/contacts/:id-contact/mailing-lists
Ce point d'accès permet de récupérer les listes de diffusion d'un contact
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts/[id_contact]/mailing-lists" \
-H "Authorization: Bearer [Access-Token]" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts/[id_contact]/mailing-lists");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/contacts/[id_contact]/mailing-lists", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/contacts/[id_contact]/mailing-lists", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts/[id_contact]/mailing-lists";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/contacts/[id_contact]/mailing-lists"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
| id-group | String | L'identifiant technique (32 caractères alphanumériques) du groupe |
| id-contact | String | L'identifiant unique du contact |
Format de réponse
Format de réponse
[
{
"id":"0e82774b-4cae-6578-12fe-10e81ce4aze",
"name":"Mes amis",
"contactCount": 5,
"description":"Contient mes amis",
"createdAt":"2017-05-27T18:38:36.110+02:00",
"updatedAt":"2017-02-21T16:38:36.110+02:00"
},
{
"id":"0e82774b-4cae-6578-12fe-10e81ce4a8qq",
"name":"Ma famille",
"contactCount": 1,
"description":"Contient toute ma famille",
"createdAt":"2017-02-27T16:38:36.110+02:00",
"updatedAt":"2017-02-27T16:38:36.110+02:00"
}
]
- Status code : 200 OK
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du contact auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
3. Gérer ses listes de diffusion
Une liste de diffusion permet de regrouper des contacts en leur associant un libellé (le nom de la liste de diffusion)
Elle est par la suite utilisée pour réaliser des envois de messages groupés, sans avoir à sélectionner les contacts un par un.
Parmi les listes de diffusion courament utilisées on retrouve : "clients", "le staff", "abonnés", etc...
A SAVOIR
- Une liste de diffusion n'a pas de taille limite, elle peut contenir 50 000 contacts
- Un contact peut appartenir à plusieurs listes de diffusion
- Si deux contacts appartenant à une même liste de diffusion disposent du même numéro de téléphone, le message ne sera émis qu'une seule fois vers le numéro en question
Structure d'une liste de diffusion
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | L'identifiant unique de la liste de diffusion |
| name | String | false | Le nom de la liste de diffusion |
| contactCount | Long | true | Le nombre de contacts présents dans la liste de diffusion |
| description | String | false | La description de la liste de diffusion |
| createdAt | Date | true | Date de création |
| updatedAt | Date | true | Date de dernière modification |
- Créer une liste de diffusion
:id-group/mailing-lists
Ce point d'accès permet de créer une liste de diffusion.
Format de requête
curl -X POST \
"https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '{
"name": "Mes Amis",
"description": "Contient tous mes amis"
}'
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setDoOutput(true);
String postJsonData = "{\"name\": \"Mes amis\",\"description\": \"Contient tous mes amis.\"}";
DataOutputStream dataOutputStream = new DataOutputStream(con.getOutputStream());
dataOutputStream.write(postJsonData.getBytes(StandardCharsets.UTF_8));
dataOutputStream.flush();
dataOutputStream.close();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/mailing-lists", Method.POST);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddParameter("application/json", "{\"name\": \"Mes amis\",\"description\": \"Contient tous mes amis.\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/mailing-lists", Method.POST)
request.AddHeader("Content-Type", "application/json")
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddParameter("application/json", "{""name"": ""Mes amis"",""description"": ""Contient tous mes amis.""}", ParameterType.RequestBody)
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]',
'Content-Type: application/json'
));
$content='{"name": "Mes amis","description": "Contient tous mes amis."}';
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists"
json := `{
"name":"Mes amis",
"description":"Contient tous mes amis."
}`
payload := strings.NewReader(json)
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant technique (32 caractères alphanumériques) du groupe |
- Payload
| Champ | Type | Description |
|---|---|---|
| name | String | Le nom de la liste de diffusion |
| description | String | La description de la liste de diffusion |
Format de réponse
Format de réponse
{
"id": "08274797-b6cb-4adf-8547-e5f44b280a97",
"name": "Mes Amis",
"contactCount": 0,
"description": "Contient tous mes amis",
"createdAt": "2018-05-22T13:39:01.602+02:00",
"updatedAt": "2018-05-22T13:39:01.602+02:00"
}
- Status code : 201 Created
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de la liste du diffusion à laquelle vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
| 400 BadRequest | NotEmpty | Un ou plusieurs champs obligatoires sont manquants dans votre objet |
| 400 BadRequest | NameNotAvailable | Le nom de la liste de diffusion n'est pas disponible |
- Modifier une liste de diffusion
:id-group/mailing-lists/:id-mailing-list
Ce point d'accès permet de modifier une liste de diffusion.
Format de requête
Format de requête
curl -X PUT \
"https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '{
"name": "Mes nouveaux Amis",
"description": "Contient tous mes nouveaux amis"
}'
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("PUT");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setDoOutput(true);
String postJsonData = "{\"name\": \"Mes nouveaux amis\",\"description\": \"Contient tous mes nouveaux amis.\"}";
DataOutputStream dataOutputStream = new DataOutputStream(con.getOutputStream());
dataOutputStream.write(postJsonData.getBytes(StandardCharsets.UTF_8));
dataOutputStream.flush();
dataOutputStream.close();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
<?php
$url = "'https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]',
'Content-Type: application/json'
));
$content='{"name": "Mes nouveaux amis","description": "Contient tous mes nouveaux amis."}';
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]"
json := `{
"name":"Mes nouveaux amis",
"description":"Contient tous mes nouveaux amis."
}`
payload := strings.NewReader(json)
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/mailing-lists/[id_mailingList]", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\"name\": \"Mes nouveaux amis\",\"description\": \"Contient tous mes nouveaux amis.\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/mailing-lists/[id_mailingList]", Method.PUT)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
request.AddParameter("application/json", "{""name"": ""Mes nouveaux amis"",""description"": ""Contient tous mes nouveaux amis.""}", ParameterType.RequestBody)
dim response as IRestResponse = client.Execute(request)
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant technique (32 caractères alphanumériques) du groupe. |
id-mailing-list |
String | L'identifiant unique de la liste de diffusion. |
- Payload
| Champ | Type | Description |
|---|---|---|
| name | String | Le nom de la mailing list |
| description | String | La description de la mailing list |
Format de réponse
Format de réponse
{
"id": "08274797-b6cb-4adf-8547-e5f44b280a97",
"name": "Mes Amis",
"contactCount": 0,
"description": "Contient tous mes amis",
"createdAt": "2018-05-22T13:39:01.602+02:00",
"updatedAt": "2018-05-22T13:39:01.602+02:00"
}
- Status code : 201 Created
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du groupe auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
| 400 BadRequest | NotEmpty | Un ou plusieurs champs obligatoires sont manquants dans votre objet |
| 400 BadRequest | NameNotAvailable | Le nom de la liste de diffusion n'est pas disponible |
- Supprimer une liste de diffusion
:id-group/mailing-lists/:id-mailing-list
Ce point d'accès permet de supprimer une liste de diffusion.
Format de requête
Format de requête
curl -X DELETE \
"https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]" \
-H "Authorization: Bearer [Access-Token]" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("DELETE");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/mailing-lists/[id_mailingList]", Method.DELETE);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/mailing-lists/[id_mailingList]", Method.DELETE)
request.AddHeader("Authorization", "Bearer [Access-Token]")
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1/groups/[id_group]/mailing-lists/[id_mailingList]";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
?>
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant technique (32 caractères alphanumériques) du groupe. |
id-mailing-list |
String | L'identifiant unique de la liste de diffusion. |
Format de réponse
- Status code : 204 No Content
- Payload : N/A
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de la liste de diffusion à laquelle vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
- Lister les listes de diffusion
:id-group/mailing-lists
Ce point d'accès permet de récupérer la liste paginée des listes de diffusions d'un groupe donné.
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("Content-Type", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/mailing-lists", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/mailing-lists", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
dim response as IRestResponse = client.Execute(request)
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant technique (32 caractères alphanumériques) du groupe. |
Format de réponse
Format de réponse
{
"content": [{
"id": "8c76c1e0-cc65-4e01-be62-395b2f2da2f5",
"name": "liste N2",
"contactCount": 12,
"description": "description de la liste",
"createdAt": "2018-04-27T16:24:10.622+02:00",
"updatedAt": "2018-04-27T16:24:10.622+02:00"
}, {
"id": "bfb7fb90-9c01-4063-a83d-e1ea2c283482",
"name": "liste n1",
"contactCount": 0,
"description": "Lorem ipsum",
"createdAt": "2018-04-27T16:23:52.101+02:00",
"updatedAt": "2018-04-27T16:23:52.101+02:00"
}],
"totalPages": 1,
"last": true,
"totalElements": 2,
"sort": [{
"direction": "ASC",
"property": "name",
"ignoreCase": false,
"nullHandling": "NATIVE",
"descending": false,
"ascending": true
}],
"size": 10,
"number": 0,
"numberOfElements": 2,
"first": true
}
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
- Récupérer une liste de diffusion
:id-group/mailing-lists/:id-mailing-list
Ce point d'accès permet de récupérer une liste de diffusion.
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/mailing-lists/[id_mailingList]", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/mailing-lists/[id_mailingList]", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
dim response as IRestResponse = client.Execute(request)
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant technique (32 caractères alphanumériques) du groupe. |
id-mailing-list |
String | L'identifiant unique de la liste de diffusion. |
Format de réponse
Format de réponse
{
"id": "bfb7fb90-9c01-4063-a83d-e1ea2c283482",
"name": "liste n1",
"contactCount": 5,
"description": "Lorem ipsum",
"createdAt": "2018-04-27T16:23:52.101+02:00",
"updatedAt": "2018-04-27T16:23:52.101+02:00"
}
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de la liste de diffusion à laquelle vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
- Ajouter un contact
:id-group/mailing-lists/:id-mailing-list/contacts/:id-contact
Ce point d'accès permet de rajouter un contact à une liste de diffusion.
Format de requête
Format de requête
curl -X PUT \
"https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts/[id_contact]" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts/[id_contact]");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("PUT");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/mailing-lists/[id_mailingList]/contacts/[id_contact]", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/mailing-lists/[id_mailingList]/contacts/[id_contact]", Method.PUT)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts/[id_contact]";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts/[id_contact]"
req, _ := http.NewRequest("PUT", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant technique (32 caractères alphanumériques) du groupe |
id-mailing-list |
String | L'identifiant unique de la liste de diffusion |
id-contact |
String | L'identifiant du contact à ajouter dans la liste |
Format de réponse
- Status code : 200 OK
- Payload : N/A
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de la liste de diffusion ou du contact auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
| 400 BadRequest | ConsistencyError | Un des contacts que vous souhaitez ajouter ou supprimer à la liste n'existe pas, ou n'appartient pas au groupe |
- Ajouter des contacts
:id-group/mailing-lists/:id-mailing-list/contacts
Ce point d'accès permet de rajouter des contacts à une liste de diffusion.
Format de requête
Format de requête
curl -X PUT \
"https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts?ids=id1&ids=id2"\
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts?ids=id-contact-1&ids=id-contact-2");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("PUT");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("Content-Type", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/mailing-lists/[id_mailingList]/contacts?ids=id-contact-1&ids=id-contact-2";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]',
'Content-Type: application/json'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/mailing-lists/[id_mailingList]/contacts?ids=[id_contact_1]&ids=[id_contact_2]", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/mailing-lists/[id_mailingList]/contacts?ids=[id_contact_1]&ids=[id_contact_2]", Method.PUT)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
dim response as IRestResponse = client.Execute(request)
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts?ids=id-contact-1&ids=id-contact-2"
req, _ := http.NewRequest("PUT", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant technique (32 caractères alphanumériques) du groupe. |
id-mailing-list |
String | L'identifiant unique de la liste de diffusion. |
ids |
[]String | Les identifiants des contacts à ajouter. |
Format de réponse
- Status code : 200 OK
- Payload : N/A
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de la liste du diffusion à laquelle vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
- Récupérer les contact
:id-group/mailing-lists/:id-mailing-list/contacts
Ce point d'accès permet de récupérer la liste paginée des contacts d'une liste de diffusion.
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts" \
-H "Authorization: Bearer [Access-Token]" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/mailing-lists/[id_mailingList]/contacts", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/mailing-lists/[id_mailingList]/contacts", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant technique (32 caractères alphanumériques) du groupe. |
id-mailing-list |
String | L'identifiant unique de la liste de diffusion. |
Format de réponse
Format de réponse
{
"content": [{
"id": "a3884338-b6c5-4253-a6ec-57e675ac136f",
"name": "Charles",
"firstName": "Célia",
"address": "514 rue Boulevard des Panoramas",
"city": "Portview",
"countryCode": "FRA",
"postalCode": "76779",
"landlineTwo": "+33131471185",
"cellularOne": "+33699831343",
"email": "etthomas.aubert@hotmail.fr",
"createdAt": "2018-04-26T11:41:05.678+02:00",
"updatedAt": "2018-04-26T11:41:05.678+02:00"
}, {
"id": "2dc83b7a-301a-4e0e-97f5-c1496c3d8219",
"name": "Dupuy",
"firstName": "Alexis",
"address": "702 rue Boulevard Royale",
"city": "Northberg",
"countryCode": "FRA",
"postalCode": "71946",
"landlineOne": "+33111749422",
"cellularOne": "+33790949718",
"email": "utmatteo.leroux@hotmail.fr",
"createdAt": "2018-04-26T11:41:06.078+02:00",
"updatedAt": "2018-04-26T11:41:06.078+02:00"
},
...
],
"totalPages": 1,
"last": true,
"totalElements": 6,
"sort": [{
"direction": "ASC",
"property": "name",
"ignoreCase": false,
"nullHandling": "NATIVE",
"descending": false,
"ascending": true
}, {
"direction": "ASC",
"property": "firstName",
"ignoreCase": false,
"nullHandling": "NATIVE",
"descending": false,
"ascending": true
}, {
"direction": "ASC",
"property": "id",
"ignoreCase": false,
"nullHandling": "NATIVE",
"descending": false,
"ascending": true
}],
"size": 10,
"number": 0,
"numberOfElements": 6,
"first": true
}
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de la liste du diffusion à laquelle vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
- Détacher un contact
:id-group/mailing-lists/:id-mailing-list/contacts/:id-contact
Ce point d'accès permet de retirer un contact d'une liste de diffusion.
Format de requête
Format de requête
curl -X DELETE \
"https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts/[id_contact]" \
-H "Authorization: Bearer [Access-Token]" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts/[id_contact]");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("DELETE");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("Content-Type", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/mailing-lists/[id_mailingList]/contacts/[id_contact]", Method.DELETE);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/mailing-lists/[id_mailingList]/contacts/[id_contact]", Method.DELETE)
request.AddHeader("Authorization", "Bearer [Access-Token]")
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts/[id_contact]";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
?>
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts/[id_contact]"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant technique (32 caractères alphanumériques) du groupe. |
id-mailing-list |
String | L'identifiant unique de la liste de diffusion. |
id-contact |
String | L'identifiant du contact dans la liste de diffusion. |
Format de réponse
Format de réponse
- Status code : 200 OK
- Payload : N/A
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de la liste du diffusion à laquelle vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
| 400 BadRequest | NameNotAvailable | Le nom de la liste de diffusion n'est pas disponible |
- Détacher plusieurs contacts
:id-group/mailing-lists/:id-mailing-list/contacts
Ce point d'accès permet de retirer des contacts d'une liste de diffusion.
Format de requête
Format de requête
curl -X DELETE \
"https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts?ids=id1&ids=id2"\
-H "Authorization: Bearer [Access-Token]" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts?ids=[id_contact_1]&ids=[id_contact_2]");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("DELETE");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts?ids=[id_contact_1]&ids=[id_contact_2]";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
?>
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/mailing-lists/[id_mailingList]/contacts?ids=[id_contact_1]&ids=[id_contact_2]", Method.DELETE);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/mailing-lists/[id_mailingList]/contacts?ids=[id_contact_1]&ids=[id_contact_2]", Method.DELETE)
request.AddHeader("Authorization", "Bearer [Access-Token]")
dim response as IRestResponse = client.Execute(request)
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/mailing-lists/[id_mailingList]/contacts?ids=id-contact-1&ids=id-contact-2"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
Format de réponse
- Status code : 200 OK
- Payload : N/A
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant technique (32 caractères alphanumériques) du groupe |
id-mailing-list |
String | L'identifiant unique de la liste de diffusion |
ids |
[]String | Les identifiants des contacts à retirer |
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de la liste du diffusion à laquelle vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
| 400 BadRequest | NameNotAvailable | Le nom de la liste de diffusion n'est pas disponible |
4. Déclencher une diffusion
Une diffusion est un envoi d'un ou plusieurs messages déclenché immédiatement.
Une diffusion est identifiée par la ressource DiffusionRequest, qui définit le contenu du message par média ainsi que les coordonnées des destinataires, identifiants de contacts, ou liste de diffusion.
Une diffusion peut être émise sur les médias SMS et/ou EMAIL.
Pour émettre une diffusion simple vers un SMS, les champs msisdns et smsParam doivent être renseignés.
Pour émettre une diffusion simple vers un EMAIL, les champs emails et emailParam doivent être renseignés.
Les diffusions impliquant le média EMAIL peuvent optionnellement comporter jusqu'à 5 pièces jointes.
La stratégie d'envoi, à savoir la gestion des retentatives sur les points de communication des contacts en cas d'échec, peut être paramétrée dans l'application Contact-Everyone.
A SAVOIR
- Seuls les numéros émetteurs personnalisés qui vous sont attribués sont utilisables dans l'API (champ
smsParam.senderName)
Pour vous familiariser avec l'API, il est conseillé de commencer par le quick start guide
Structure d'une diffusion
- Objet Diffusion
| Champ | Type | Requis | Description |
|---|---|---|---|
| id | String | false | L'identifiant unique de la diffusion. |
| name | String | false | Le nom de la diffusion |
| msisdns | []String | false | La liste des numéros de téléphone |
| emails | []String | false | La liste des adresses email |
| contacts | []String | false | Les identifiants de contacts |
| mailingLists | []String | false | Les identifiants de liste de diffusion |
| excludedContacts | []String | false | Les identifiants des contacts exclus |
| mailingFields | []String | false | La liste des champs de publipostage |
| mailingRecipients | []Recipient | false | Les destinataires du publipostage |
| emailParam | EmailParam | false | Le paramétrage de l'envoi email |
| smsParam | SmsParam | false | Le paramétrage de l'envoi SMS |
| createdAt | Date | N/A (read only) | Date de création |
| updatedAt | Date | N/A (read only) | Date de dernière modification |
Objet EmailParam
| Champ | Type | Requis | Description |
|---|---|---|---|
| senderName | String | false | Le nom de l'émetteur |
| senderLocalPart | String | false | La partie local de l'adresse email de l'émetteur, avant le @ |
| replyTo | String | false | L'adresse email de réponse |
| Subject | String | true | Le sujet du mail |
| body | String | true | Le corps du mail (format html) |
Objet SmsParam
| Champ | Type | Requis | Description |
|---|---|---|---|
| senderName | String | false | Le nom de l'émetteur |
| encoding | String | true | Le charset utilisé pour l'envoi (GSM7 ou UCS2) |
| body | String | true | Le corps du message (format texte) |
Objet Recipient
| Champ | Type | Requis | Description |
|---|---|---|---|
| mobile | String | false | Le numéro de mobile du destinataire |
| mobile2 | String | false | Le second numéro de mobile du destinataire |
| String | false | L'adresse email du destinataire | |
| fields | Objet JSON | true | Table de hachage contenant les variables |
- Créer une diffusion SMS
:id-group/diffusion-requests
Ce point d'accès permet de créer une diffusion dans un groupe donné.
Format de requête
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '
{
"name":"mon nom de diffusion",
"contacts":["id_contact_1", "id_contact_2", ...],
"mailingLists":["id_mailing_list_1","id_mailing_list_2", ...],
"msisdns":["0600000000"],
"smsParam":{
"encoding":"GSM7",
"body":"mon contenu SMS"
}
}
'
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("Content-Type", "application/json");
con.setDoOutput(true);
String postJsonData = "{"+
"\"name\":\"mon nom de diffusion\","+
"\"contacts\":[\"id_contact_1\", \"id_contact_2\", ...],"+
"\"mailingLists\":[\"id_mailing_list_1\",\"id_mailing_list_2\", ...],"+
"\"msisdns\":[\"0600000000\"],"+
"\"smsParam\":{\"encoding\":\"GSM7\", \"body\":\"mon contenu SMS\"}}";
DataOutputStream dataOutputStream = new DataOutputStream(con.getOutputStream());
dataOutputStream.write(postJsonData.getBytes(StandardCharsets.UTF_8));
dataOutputStream.flush();
dataOutputStream.close();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/diffusion-requests", Method.POST);
request.AddHeader("Authorization", "Bearer [access-token]");
request.AddHeader("Content-Type", "application/json");
var json = @"{
""name"":""mon nom de diffusion"",
""contacts"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingLists"":[""id_mailing_list_1"",""id_mailing_list_2"", ...],
""msisdns"":[""0600000000""],
""smsParam"":{
""encoding"":""GSM7"",
""body"":""mon contenu SMS""
}
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/diffusion-requests",Method.POST)
request.AddHeader("Authorization", "Bearer [access-token]")
request.AddHeader("Content-Type", "application/json")
dim json = "{
""name"":""mon nom de diffusion"",
""contacts"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingLists"":[""id_mailing_list_1"",""id_mailing_list_2"", ...],
""msisdns"":[""0600000000""],
""smsParam"":{
""encoding"":""GSM7"",
""body"":""mon contenu SMS""
}
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]',
'Content-Type: application/json'
));
$content='{
"name":"mon nom de diffusion",
"contacts":["id_contact_1", "id_contact_2", ...],
"mailingLists":["id_mailing_list_1","id_mailing_list_2", ...],
"msisdns":["0600000000"],
"smsParam":{
"encoding":"GSM7",
"body":"mon contenu SMS"
}
}';
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests"
json := `{
"name":"mon nom de diffusion",
"contacts":["id_contact_1", "id_contact_2", ...],
"mailingLists":["id_mailing_list_1","id_mailing_list_2", ...],
"msisdns":["0600000000"],
"smsParam":{
"encoding": "GSM7",
"body": "mon contenu SMS"
}
}`
payload := strings.NewReader(json)
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer [access-token]")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
| id-group | String | L'identifiant technique (32 caractères alphanumériques) du groupe. |
Format de réponse
Format de réponse
{
"id": "4a0c8b08-cc7e-4cee-a6a5-2407c9cba5d4",
"name": "mon nom de diffusion",
"msisdns": ["+33699832919"],
"emails": [],
"contacts": [],
"mailingLists": ["81eb68cb-051b-4e9a-9ac2-aa774583f0f4"],
"excludedContacts": [],
"smsParam": {
"encoding": "GSM7",
"body": "mon contenu SMS",
"estimatedMsgCount": 1
},
"createdAt": "2018-04-27T16:50:42.625+02:00",
"updatedAt": "2018-04-27T16:50:42.625+02:00"
}
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Content-type utilisé |
| Location | /api/v1.1/groups/:id-group/diffusions/:id-diffusion |
Emplacement de la ressource |
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du groupe auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
| 400 BadRequest | NotEmpty | Un ou plusieurs champs obligatoires sont manquants dans votre objet. Un NotEmpty sur le champ recipients signifie qu'aucun contact, liste de diffusion ou MSISDN n'a été défini sur votre diffusion |
| 400 BadRequest | Msisdn | Le format d'un des numéros de téléphone fournis n'est pas correct |
| 400 BadRequest | InconsistentTimeSlots | Vous ne pouvez pas émettre une diffusion en dehors des périodes horaires définies dans l'application |
| 400 BadRequest | MissingEncoding | L'encodage du message SMS doit être spécifié. Il peut prendre les valeurs : "GSM7" ou "UCS2" |
| 400 BadRequest | MissingSenderOption | Le champ SenderName a été renseigné alors que vous n'avez pas l'option remplacement nom d'émetteurs activée |
| 400 BadRequest | InactiveAffectedContract | Votre contrat est inactif |
| 400 BadRequest | MediaAbsentInStrategy | La stratégie ne contient pas le média renseigné dans votre demande de diffusion |
| 400 BadRequest | MediaNotEnabled | Le media de votre diffusion n'est pas actif sur votre compte client. |
| 400 BadRequest | SmsTooLong | Le contenu du message SMS est trop long |
| 400 BadRequest | SenderNameNotAllowed | L'émetteur n'est pas autorisé par la configuration |
| 400 BadRequest | SenderEmailNotAllowed | L'email n'est pas autorisé par la configuration |
| 400 BadRequest | SenderLocalPartNotAllowed | La valeur du champ local part n'est pas autorisée par la configuration |
| 400 BadRequest | MissingMedia | La diffusion doit contenir au moins un media |
| 400 BadRequest | MissingOneEndpoint | Les contacts du publipostage doivent disposer d'au moins un moyen de communication. |
| 400 BadRequest | NoDefaultStrategyAvailable | Le groupe n'a pas de stratégie par défaut. |
- Créer une diffusion e-mail
:id-group/diffusion-requests
Ce point d'accès permet de créer une diffusion dans un groupe donné.
Format de requête
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '
{
"name":"mon nom de diffusion",
"contacts":["id_contact_1", "id_contact_2", ...],
"mailingLists":["id_mailing_list_1","id_mailing_list_2", ...],
"excludedContacts":[],
"emails":["johndoe@domain.com"],
"emailParam":{
"senderLocalPart":"johnthesender",
"senderName": "John the sender",
"body": "mon contenu email HTML",
"subject":"Mon objet de mail"
}
}
'
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setDoOutput(true);
String postJsonData = "{"+
"\"name\":\"mon nom de diffusion\"," +
"\"contacts\":[\"id_contact_1\", \"id_contact_2\", ...]," +
"\"mailingLists\":[\"id_mailing_list_1\",\"id_mailing_list_2\", ...]," +
"\"excludedContacts\":[]," +
"\"emails\":[\"johndoe@domain.com\"]," +
"\"emailParam\":{" +
"\"senderLocalPart\":\"johnthesender\"," +
"\"senderName\": \"John the sender\"," +
"\"body\": \"mon contenu email HTML\"," +
"\"subject\":\"Mon objet de mail\"" +
"}}";
DataOutputStream dataOutputStream = new DataOutputStream(con.getOutputStream());
dataOutputStream.write(postJsonData.getBytes(StandardCharsets.UTF_8));
dataOutputStream.flush();
dataOutputStream.close();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/diffusion-requests", Method.POST);
request.AddHeader("Authorization", "Bearer [access-token]");
request.AddHeader("Content-Type", "application/json");
var json = @"{
""name"":""mon nom de diffusion"",
""contacts"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingLists"":[""id_mailing_list_1"",""id_mailing_list_2"", ...],
""excludedContacts"":[],
""emails"":[""johndoe@domain.com""],
""emailParam"":{
""senderLocalPart"":""johnthesender"",
""senderName"": ""John the sender"",
""body"": ""mon contenu email HTML"",
""subject"":""Mon objet de mail""
}
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/diffusion-requests", Method.POST)
request.AddHeader("Authorization", "Bearer [access-token]")
request.AddHeader("Content-Type", "application/json")
dim json = "{
""name"":""mon nom de diffusion"",
""contacts"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingLists"":[""id_mailing_list_1"",""id_mailing_list_2"", ...],
""excludedContacts"":[],
""emails"":[""johndoe@domain.com""],
""emailParam"":{
""senderLocalPart"":""johnthesender"",
""senderName"": ""John the sender"",
""body"": ""mon contenu email HTML"",
""subject"":""Mon objet de mail""
}
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
```php
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]',
'Content-Type: application/json'
));
$content='{
"name":"mon nom de diffusion",
"contacts":["id_contact_1", "id_contact_2", ...],
"mailingLists":["id_mailing_list_1","id_mailing_list_2", ...],
"excludedContacts":[],
"emails":["johndoe@domain.com"],
"emailParam":{
"senderEmail":"johnthesender@domain.com",
"senderName": "John the sender",
"body": "mon contenu email HTML",
"subject":"Mon objet de mail"
}
}';
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests"
json := `{
"name":"mon nom de diffusion",
"contacts":["id_contact_1", "id_contact_2", ...],
"mailingLists":["id_mailing_list_1","id_mailing_list_2", ...],
"excludedContacts":[],
"emails":"johndoe@domain.com",
"emailParam":{
"senderLocalPart":"johnthesender",
"senderName": "John the sender",
"subject": "Mon objet de mail",
"body": "mon contenu SMS"
}
}`
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer [access-token]")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
| id-group | String | L'identifiant technique (32 caractères alphanumériques) du groupe. |
Format de réponse
Format de réponse
{
"id": "b7d167ba-24f3-4838-aaca-7e8b3c4b161f",
"name": "mon nom de diffusion",
"msisdns": [],
"emails": ["johndoe@domain.com"],
"contacts": [],
"mailingLists": [],
"excludedContacts": [],
"emailParam": {
"senderName": "John the sender",
"senderLocalPart": "adam.royer",
"subject": "Mon objet de mail",
"body": "mon contenu email HTML"
},
"createdAt": "2018-05-22T17:05:39.512+02:00",
"updatedAt": "2018-05-22T17:05:39.512+02:00"
}
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Content-type utilisé. |
| Location | /api/v1.1/groups/:id-group/diffusions/:id-diffusion |
Emplacement de la ressource |
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du groupe auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
| 400 BadRequest | NotEmpty | Un ou plusieurs champs obligatoires sont manquants dans votre objet. Un NotEmpty sur le champ recipients signifie qu'aucun contact, liste de diffusion ou MSISDN n'a été défini sur votre diffusion |
| 400 BadRequest | Msisdn | Le format d'un des numéros de téléphone fournis n'est pas correct |
| 400 BadRequest | InconsistentTimeSlots | Vous ne pouvez pas émettre une diffusion en dehors des périodes horaires définies dans l'application |
| 400 BadRequest | MissingEncoding | L'encodage du message SMS doit être spécifié. Il peut prendre les valeurs : "GSM7" ou "UCS2" |
| 400 BadRequest | MissingSenderOption | Le champ SenderName a été renseigné alors que vous n'avez pas l'option remplacement nom d'émetteurs activée |
| 400 BadRequest | InactiveAffectedContract | Votre contrat est inactif |
| 400 BadRequest | MediaAbsentInStrategy | La stratégie ne contient pas le média renseigné dans votre demande de diffusion |
| 400 BadRequest | MediaNotEnabled | Le media de votre diffusion n'est pas actif sur votre compte client. |
| 400 BadRequest | SmsTooLong | Le contenu du message SMS est trop long |
| 400 BadRequest | SenderNameNotAllowed | L'émetteur n'est pas autorisé par la configuration |
| 400 BadRequest | SenderEmailNotAllowed | L'email n'est pas autorisé par la configuration |
| 400 BadRequest | SenderLocalPartNotAllowed | La valeur du champ local part n'est pas autorisée par la configuration |
| 400 BadRequest | MissingMedia | La diffusion doit contenir au moins un media |
| 400 BadRequest | MissingOneEndpoint | Les contacts du publipostage doivent disposer d'au moins un moyen de communication. |
| 400 BadRequest | NoDefaultStrategyAvailable | Le groupe n'a pas de stratégie par défaut. |
- Lien de consultation en ligne
Il est possible d’insérer dans le body un lien d’ouverture de l'email en ligne. Le destinataire aura alors la possibilité d’ouvrir le contenu de l'email sur son navigateur internet en cas de problème de lecture :
<a href="~VIEW_ONLINE~">consulter en ligne</a>
Le contenu de la balise <a href="~VIEW_ONLINE~"> (ici "consulter en ligne") est bien sûr libre.
- Lien de désinscription
Il est aussi possible d'insérer dans le body un lien de désinscription :
- En français :
<a href="~URL_STOP_FR~">désinscription</a> - En anglais :
<a href="~URL_STOP_EN~">unsubscribe</a>
Le contenu de la balise <a> (ici "désinscription") est bien sûr libre.
La langue (FR ou EN) permet d'orienter l'utilisateur vers la page de confirmation traduite dans la langue choisie lorsqu'il clique sur le lien.
En cas de « suivi des liens » selectionné dans la stratégie, les clics effectués sur ce lien feront l’objet d’un suivi/tracking dans le bilan des envois.
- Créer une diffusion multimédia
:id-group/diffusion-requests
Ce point d'accès permet de créer une diffusion dans un groupe donné.
Format de requête
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '
{
"name":"mon nom de diffusion",
"contacts":["id_contact_1", "id_contact_2", ...],
"mailingLists":["id_mailing_list_1","id_mailing_list_2", ...],
"excludedContacts":[],
"msisdns":["0600000000"],
"emails":["johndoe@domain.com"],
"smsParam":{
"encoding":"GSM7",
"senderName":"OpenBar",
"body":"mon contenu SMS"
},
"emailParam":{
"senderLocalPart":"johnthesender",
"senderName": "John the sender",
"body": "mon contenu email HTML",
"subject":"Mon objet de mail"
}
}
'
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setDoOutput(true);
String postJsonData = "{"+
"\"name\":\"mon nom de diffusion\"," +
"\"contacts\":[\"id_contact_1\", \"id_contact_2\", ...]," +
"\"mailingLists\":[\"id_mailing_list_1\",\"id_mailing_list_2\", ...]," +
"\"excludedContacts\":[]," +
"\"msisdns\":[\"0600000000\"]," +
"\"emails\":[\"johndoe@domain.com\"]," +
"\"smsParam\":{" +
"\"encoding\":\"GSM7\"," +
"\"senderName\":\"OpenBar\"," +
"\"body\":\"mon contenu SMS\"" +
"}," +
"\"emailParam\":{" +
"\"senderLocalPart\":\"johnthesender\"," +
"\"senderName\": \"John the sender\"," +
"\"body\": \"mon contenu email HTML\"," +
"\"subject\":\"Mon objet de mail\"" +
"}}";
DataOutputStream dataOutputStream = new DataOutputStream(con.getOutputStream());
dataOutputStream.write(postJsonData.getBytes(StandardCharsets.UTF_8));
dataOutputStream.flush();
dataOutputStream.close();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/diffusion-requests",Method.POST);
request.AddHeader("Authorization", "Bearer [access-token]");
request.AddHeader("Content-Type", "application/json");
var json = @"{
""name"":""mon nom de diffusion"",
""contacts"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingLists"":[""id_mailing_list_1"", ""id_mailing_list_2"", ...],
""excludedContacts"":[],
""msisdns"":[""0600000000""],
""emails"":[""johndoe@domain.com""],
""smsParam"":{
""encoding"":""GSM7"",
""senderName"":""OpenBar"",
""body"":""mon contenu SMS""
},
""emailParam"":{
""senderLocalPart"":""johnthesender"",
""senderName"": ""John the sender"",
""body"": ""mon contenu email HTML"",
""subject"":""Mon objet de mail""
}
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/diffusion-requests",Method.POST)
request.AddHeader("Authorization", "Bearer [access-token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{
""name"":""mon nom de diffusion"",
""contacts"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingLists"":[""id_mailing_list_1"", ""id_mailing_list_2"", ...],
""excludedContacts"":[],
""msisdns"":[""0600000000""],
""emails"":[""johndoe@domain.com""],
""smsParam"":{
""encoding"":""GSM7"",
""senderName"":""OpenBar"",
""body"":""mon contenu SMS""
},
""emailParam"":{
""senderLocalPart"":""johnthesender"",
""senderName"": ""John the sender"",
""body"": ""mon contenu email HTML"",
""subject"":""Mon objet de mail""
}
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]',
'Content-Type: multipart/form-data; boundary=efcaa4b6-a261-19be-4d49-4b7262bf039a'
));
$content = '{
"name":"mon nom de diffusion",
"contacts":["id_contact_1", "id_contact_2", ...],
"mailingLists":["id_mailing_list_1","id_mailing_list_2", ...],
"excludedContacts":[],
"msisdns":["0600000000"],
"emails":["johndoe@domain.com"],
"smsParam":{
"encoding":"GSM7",
"senderName":"OpenBar",
"body":"mon contenu SMS"
},
"emailParam":{
"senderLocalPart":"johnthesender",
"senderName": "John the sender",
"body": "mon contenu email HTML",
"subject":"Mon objet de mail"
}
}';
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
var_dump($head);
?>
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests"
json := `{
"name":"mon nom de diffusion",
"contacts":["id_contact_1", "id_contact_2", ...],
"mailingLists":["id_mailing_list_1","id_mailing_list_2", ...],
"excludedContacts":[],
"emails":["johndoe@domain.com"],
"emailParam":{
"senderLocalPart":"johnthesender",
"senderName": "John the sender",
"body": "mon contenu email HTML",
"subject": "Mon objet de mail"},
"msisdns":["0600000000"],
"smsParam":{
"encoding":"GSM7",
"senderName": "OpenBar",
"body":"mon contenu SMS"}
}`
req, _ := http.NewRequest("POST", url, json)
req.Header.Add("Authorization", "Bearer [access-token]")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
| id-group | String | L'identifiant technique (32 caractères alphanumériques) du groupe. |
Format de réponse
Format de réponse
{
"id": "dd75b75c-9a3a-43ea-b8bc-33ca5ca31341",
"name": "mon nom de diffusion",
"msisdns": ["+33678581724"],
"emails": ["johndoe@domain.com"],
"contacts": [],
"mailingLists": [],
"excludedContacts": [],
"emailParam": {
"senderName": "John the sender",
"senderLocalPart": "adam.royer",
"subject": "Mon objet de mail",
"body": "mon contenu email HTML"
},
"smsParam": {
"senderName": "Rem nobi",
"encoding": "GSM7",
"body": "mon contenu SMS",
"estimatedMsgCount": 1
},
"createdAt": "2018-05-22T17:12:54.933+02:00",
"updatedAt": "2018-05-22T17:12:54.933+02:00"
}
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Content-type utilisé |
| Location | /api/v1.1/groups/:id-group/diffusions/:id-diffusion |
Emplacement de la ressource |
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du groupe auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
| 400 BadRequest | NotEmpty | Un ou plusieurs champs obligatoires sont manquants dans votre objet. Un NotEmpty sur le champ recipients signifie qu'aucun contact, liste de diffusion ou MSISDN n'a été défini sur votre diffusion |
| 400 BadRequest | Msisdn | Le format d'un des numéros de téléphone fournis n'est pas correct |
| 400 BadRequest | InconsistentTimeSlots | Vous ne pouvez pas émettre une diffusion en dehors des périodes horaires définies dans l'application |
| 400 BadRequest | MissingEncoding | L'encodage du message SMS doit être spécifié. Il peut prendre les valeurs : "GSM7" ou "UCS2" |
| 400 BadRequest | MissingSenderOption | Le champ SenderName a été renseigné alors que vous n'avez pas l'option remplacement nom d'émetteurs activée |
| 400 BadRequest | InactiveAffectedContract | Votre contrat est inactif |
| 400 BadRequest | MediaAbsentInStrategy | La stratégie ne contient pas le média renseigné dans votre demande de diffusion |
| 400 BadRequest | MediaNotEnabled | Le media de votre diffusion n'est pas actif sur votre compte client. |
| 400 BadRequest | SmsTooLong | Le contenu du message SMS est trop long |
| 400 BadRequest | SenderNameNotAllowed | L'émetteur n'est pas autorisé par la configuration |
| 400 BadRequest | SenderEmailNotAllowed | L'email n'est pas autorisé par la configuration |
| 400 BadRequest | SenderLocalPartNotAllowed | La valeur du champ local part n'est pas autorisée par la configuration |
| 400 BadRequest | MissingMedia | La diffusion doit contenir au moins un media |
| 400 BadRequest | MissingOneEndpoint | Les contacts du publipostage doivent disposer d'au moins un moyen de communication. |
| 400 BadRequest | NoDefaultStrategyAvailable | Le groupe n'a pas de stratégie par défaut. |
- Créer une diffusion avec publipostage
La fonction de publipostage permet d'envoyer des messages avec des contenus personnalisés à vos destinataires à l'aide de balises de remplacement. Le format du message est commun, seules les sections spécifiques identifiées par des balises seront remplacées.
Pour émettre une diffusion de type publipostage
- Utilisez des balises de remplacement au format #balise# dans le contenu de vos messages SMS et EMAIL
- Renseignez la liste complète de vos balises dans le champ
mailingFields - Définissez les valeurs de publipostage dans le champ
fieldsdans l'attributmailingRecipients
Les champs de publipostage ne peuvent ni commencer par $ ni contenir ..
Vous trouverez un exemple de publipostage sur le bloc de code à droite.
Notez que le nombre de SMS découpés peut varier d'un destinataire à l'autre, la longueur réelle des messages dépendant des valeurs de publipostage.
Format de requête
Format de requête
curl -X POST \
"https://[SERVER_URL]/api/v1.1/groups/5ab3ec70-87d8-48f9-befe-a1c86a31b66c/diffusion-requests" \
-H 'Authorization: Bearer [Access-Token]' \
-H 'Content-Type: application/json' \
-d ' {
"name": "Campagne avec publipostage",
"smsParam":{
"encoding":"GSM7",
"body":"Bonjour #prenom# #nom#, la nouvelle collection est arrivée chez Flush. Venez vite, un cadeau vous attend en magasin."
},
"emailParam":{
"senderLocalPart": "john",
"senderName": "John the sender",
"body":"<html style=\"font-family:Arial, Verdana, sans-serif;\"><head><title></title></head><body><h2>Bonjour #prenom# #nom#</h2><p>La nouvelle collection savonette est arrivée chez Flush. Venez vite, un cadeau vous attend en magasin.</p></body></html>",
"subject":"Mon objet de mail"
},
"mailingFields" : ["nom", "prenom"],
"mailingRecipients": [
{
"mobile" : "+33647365520",
"mobile2" : "+33647365521",
"email" : "p.jane@techtv.com",
"fields" : {
"prenom" : "Patrick",
"nom" : "Jane"
}
},
{
"mobile" : "+33647365524",
"mobile2" : "+33654389908",
"email" : "Jess344@techtv.com",
"fields" : {
"prenom" : "Jessica",
"nom" : "Alba"
}
}
]
}'
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setDoOutput(true);
String postJsonData = "{"+
"\"name\": \"Campagne avec publipostage\"," +
"\"smsParam\":{" +
"\"encoding\":\"GSM7\"," +
"\"body\":\"Bonjour #prenom# #nom#, la nouvelle collection est arrivée chez Flush. Venez vite, un cadeau vous attend en magasin.\"" +
"}," +
"\"emailParam\":{" +
"\"senderLocalPart\": \"john\"," +
"\"senderName\": \"John the sender\"," +
"\"body\":\"<html style=\\\"font-family:Arial, Verdana, sans-serif;\\\"><head><title></title></head><body><h2>Bonjour #prenom# #nom#</h2><p>La nouvelle collection savonette est arrivée chez Flush. Venez vite, un cadeau vous attend en magasin.</p></body></html>\"," +
"\"subject\":\"Mon objet de mail\"" +
"}," +
"\"mailingFields\" : [\"nom\", \"prenom\"]," +
"\"mailingRecipients\": [" +
"{" +
"\"mobile\" : \"+33647365520\"," +
"\"mobile2\" : \"+33647365521\"," +
"\"email\" : \"p.jane@techtv.com\"," +
"\"fields\" : {" +
"\"prenom\" : \"Patrick\"," +
"\"nom\" : \"Jane\"" +
"}" +
"}," +
"{" +
"\"mobile\" : \"+33647365524\"," +
"\"mobile2\" : \"+33654389908\"," +
"\"email\" : \"Jess344@techtv.com\"," +
"\"fields\" : {" +
"\"prenom\" : \"Jessica\"," +
"\"nom\" : \"Alba\"" +
"}" +
"}" +
"]}";
DataOutputStream dataOutputStream = new DataOutputStream(con.getOutputStream());
dataOutputStream.write(postJsonData.getBytes(StandardCharsets.UTF_8));
dataOutputStream.flush();
dataOutputStream.close();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/diffusion-requests", Method.POST);
request.AddHeader("Authorization", "Bearer [access-token]");
request.AddHeader("Content-Type", "application/json");
var json = @"{
""name"": ""Campagne avec publipostage"",
""smsParam"":{
""encoding"":""GSM7"",
""body"":""Bonjour #prenom# #nom#, Mon body SMS.""
},
""emailParam"":{
""senderLocalPart"": ""john"",
""senderName"": ""John the sender"",
""body"":""<html style=\""font-family:Arial, Verdana, sans-serif;\""><head><title></title></head><body><h2>Bonjour #prenom# #nom#</h2><p>Mon body Email.</p></body></html>"",
""subject"":""Mon objet de mail""
},
""mailingFields"" : [""nom"", ""prenom""],
""mailingRecipients"": [
{
""mobile"" : ""+33647365520"",
""mobile2"" : ""+33647365521"",
""email"" : ""p.jane@techtv.com"",
""fields"" : {
""prenom"" : ""Patrick"",
""nom"" : ""Jane""
}
},
{
""mobile"" : ""+33647365524"",
""mobile2"" : ""+33654389908"",
""email"" : ""Jess344@techtv.com"",
""fields"" : {
""prenom"" : ""Jessica"",
""nom"" : ""Alba""
}
}
]
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/diffusion-requests", Method.POST)
request.AddHeader("Authorization", "Bearer [access-token]")
request.AddHeader("Content-Type", "application/json")
dim json = "{
""name"": ""Campagne avec publipostage"",
""smsParam"":{
""encoding"":""GSM7"",
""body"":""Bonjour #prenom# #nom#, Mon body SMS.""
},
""emailParam"":{
""senderLocalPart"": ""john"",
""senderName"": ""John the sender"",
""body"":""<html style=\""font-family:Arial, Verdana, sans-serif;\""><head><title></title></head><body><h2>Bonjour #prenom# #nom#</h2><p>Mon body Email.</p></body></html>"",
""subject"":""Mon objet de mail""
},
""mailingFields"" : [""nom"", ""prenom""],
""mailingRecipients"": [
{
""mobile"" : ""+33647365520"",
""mobile2"" : ""+33647365521"",
""email"" : ""p.jane@techtv.com"",
""fields"" : {
""prenom"" : ""Patrick"",
""nom"" : ""Jane""
}
},
{
""mobile"" : ""+33647365524"",
""mobile2"" : ""+33654389908"",
""email"" : ""Jess344@techtv.com"",
""fields"" : {
""prenom"" : ""Jessica"",
""nom"" : ""Alba""
}
}
]
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]',
'Content-Type: application/json'
));
$content='{
"name": "Campagne avec publipostage",
"smsParam":{
"encoding":"GSM7",
"body":"Bonjour #prenom# #nom#, Mon body SMS."
},
"emailParam":{
"senderLocalPart": "john",
"senderName": "John the sender",
"body":"<html style=\"font-family:Arial, Verdana, sans-serif;\"><head><title></title></head><body><h2>Bonjour #prenom# #nom#</h2><p>Mon body Email.</p></body></html>",
"subject":"Mon objet de mail"
},
"mailingFields" : ["nom", "prenom"],
"mailingRecipients": [
{
"mobile" : "+33647365520",
"mobile2" : "+33647365521",
"email" : "p.jane@techtv.com",
"fields" : {
"prenom" : "Patrick",
"nom" : "Jane"
}
},
{
"mobile" : "+33647365524",
"mobile2" : "+33654389908",
"email" : "Jess344@techtv.com",
"fields" : {
"prenom" : "Jessica",
"nom" : "Alba"
}
}
]
}';
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests"
json := `{
"name": "Campagne avec publipostage"
"smsParam":{
"encoding":"GSM7",
"body":"Bonjour #prenom# #nom#, Mon body de SMS."
},
"emailParam":{
"senderLocalPart": "john",
"senderName": "John the sender",
"body":"<html style=\"font-family:Arial, Verdana, sans-serif;\"><head><title></title></head><body><h2>Bonjour #prenom# #nom#</h2><p>Mon body de mail.</p></body></html>",
"subject":"Mon objet de mail"
},
"mailingFields" : ["nom", "prenom"],
"mailingRecipients": [
{
"mobile" : "+33647365520",
"mobile2" : "+33647365521",
"email" : "p.jane@techtv.com",
"fields" : {
"prenom" : "Patrick",
"nom" : "Jane"
}
},
{
"mobile" : "+33647365524",
"mobile2" : "+33654389908",
"email" : "Jess344@techtv.com",
"fields" : {
"prenom" : "Jessica",
"nom" : "Alba"
}
}
]
}`
req, _ := http.NewRequest("POST", url, json)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer [access-token]")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
Format de réponse
Format de réponse
{
"id": "cfd296b7-a2a1-4114-aeae-f15b4aaac0e5",
"name": "Campagne avec publipostage",
"msisdns": [],
"emails": [],
"contacts": [],
"mailingLists": [],
"excludedContacts": [],
"emailParam": {
"senderName": "John the sender",
"senderLocalPart": "adam.royer",
"subject": "Mon objet de mail",
"body": "<html style=\"font-family:Arial, Verdana, sans-serif;\"><head><title></title></head><body><h2>Bonjour #prenom# #nom#</h2><p>Mon body Email.</p></body></html>"
},
"smsParam": {
"encoding": "GSM7",
"body": "Bonjour #prenom# #nom#, Mon body SMS.",
"estimatedMsgCount": 1
},
"mailingRecipients": [{
"mobile": "+33647365520",
"mobile2": "+33647365521",
"email": "p.jane@techtv.com",
"fields": {
"prenom": "Patrick",
"nom": "Jane"
}
}, {
"mobile": "+33647365524",
"mobile2": "+33654389908",
"email": "Jess344@techtv.com",
"fields": {
"prenom": "Jessica",
"nom": "Alba"
}
}],
"mailingFields": ["mobile2", "mobile", "nom", "prenom", "email"],
"createdAt": "2018-05-22T17:26:37.998+02:00",
"updatedAt": "2018-05-22T17:26:37.998+02:00"
}
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Content-type utilisé. |
| Location | /api/v1.1/groups/:id-group/diffusions/:id-diffusion |
Emplacement de la ressource |
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du groupe auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
| 400 BadRequest | NotEmpty | Un ou plusieurs champs obligatoires sont manquants dans votre objet. Un NotEmpty sur le champ recipients signifie qu'aucun contact, liste de diffusion ou MSISDN n'a été défini sur votre diffusion |
| 400 BadRequest | Msisdn | Le format d'un des numéros de téléphone fournis n'est pas correct |
| 400 BadRequest | InconsistentTimeSlots | Vous ne pouvez pas émettre une diffusion en dehors des périodes horaires définies dans l'application |
| 400 BadRequest | MissingEncoding | L'encodage du message SMS doit être spécifié. Il peut prendre les valeurs : "GSM7" ou "UCS2" |
| 400 BadRequest | MissingSenderOption | Le champ SenderName a été renseigné alors que vous n'avez pas l'option remplacement nom d'émetteurs activée |
| 400 BadRequest | InactiveAffectedContract | Votre contrat est inactif |
| 400 BadRequest | MediaAbsentInStrategy | La stratégie ne contient pas le média renseigné dans votre demande de diffusion |
| 400 BadRequest | MediaNotEnabled | Le media de votre diffusion n'est pas actif sur votre compte client. |
| 400 BadRequest | SmsTooLong | Le contenu du message SMS est trop long |
| 400 BadRequest | SenderNameNotAllowed | L'émetteur n'est pas autorisé par la configuration |
| 400 BadRequest | SenderEmailNotAllowed | L'email n'est pas autorisé par la configuration |
| 400 BadRequest | SenderLocalPartNotAllowed | La valeur du champ local part n'est pas autorisée par la configuration |
| 400 BadRequest | MissingMedia | La diffusion doit contenir au moins un media |
| 400 BadRequest | MissingOneEndpoint | Les contacts du publipostage doivent disposer d'au moins un moyen de communication. |
| 400 BadRequest | NoDefaultStrategyAvailable | Le groupe n'a pas de stratégie par défaut. |
- Créer une diffusion avec pièces jointes
:id-group/diffusion-requests
Cette route permet de créer une diffusion incluant des pièces jointes. Une diffusion peut comporter jusqu'à 5 pièces jointes pour un poids total maximum de 5Mo.
La diffusion doit au moins concerner le média EMAIL.
Format de requête
Format de requête
1° solution:
curl -X POST "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests" \
-H 'Authorization: Bearer [Access-Token]' \
-H 'Content-Type: multipart/form-data; boundary=efcaa4b6-a261-19be-4d49-4b7262bf039a' \
-d $'--efcaa4b6-a261-19be-4d49-4b7262bf039a\r
Content-Type: application/json\r
Content-Disposition: form-data; name="diffusion"\r
\r
{
"name":"Message interne - 07/03/2017",
"emails":["johndoe@domain.com", "jason.moriz@domain.com", "lisa.money@domain.com"],
"emailParam":{
"senderLocalPart":"johnthesender",
"senderName": "Patrick",
"subject":"Réunion de cet après-midi annulée",
"body":"Hello world"
}
}
\r
--efcaa4b6-a261-19be-4d49-4b7262bf039a\r
Content-Disposition: form-data; name="attachment1"; filename="filename.txt"\r
Content-Type: plain/text\r
\r
Content of a txt file. \r
--efcaa4b6-a261-19be-4d49-4b7262bf039a--\r
'
2° solution
curl -X POST "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests" \
-H 'Authorization: Bearer [Access-Token]' \
-H 'Content-Type: multipart/form-data' \
-F attachment1=@/path/to/monImage.jpg \
-F attachment2=@/path/to/monFicher.txt \
-F 'diffusion={
"name":"Message interne - 07/03/2017",
"emails":["johndoe@domain.com", "jason.moriz@domain.com", "lisa.money@domain.com"],
"emailParam":{
"senderLocalPart":"johnthesender",
"senderName": "Patrick",
"subject":"Réunion de cet après-midi annulée",
"body":"Hello world"
}
};type=application/json'
var client = new RestClient("https://[SERVER_URL]/api/v1.1")
var request = new RestRequest("/groups/[id_group]/diffusion-requests", Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
var json = @"{
""name"":""test Diff API"",
""emails"":[""johndoe@domain.com""],
""emailParam"":{
"senderLocalPart":"johnthesender",
""senderName"": ""John the sender"",
""body"": ""mon contenu email HTML"",
""subject"":""Mon objet de mail""
}
}";
request.AddParameter("diffusion", json, "application/json", ParameterType.RequestBody);
request.AddFile("attachment1", @"c:\myFirstFile.jpg", "image/jpg");
request.AddFile("attachment2", @"c:\mySecondFile.txt", "plain/text");
IRestResponse r = client.Execute(request);
Dim client = new RestClient("https://[SERVER_URL]/api/v1.1")
Dim request = new RestRequest("/groups/[id_group]/diffusion-requests", Method.POST)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim json = "{
""name"":""test Diff API"",
""emails"":[""johndoe@domain.com""],
""emailParam"":{
"senderLocalPart":"johnthesender",
""senderName"": ""John the sender"",
""body"": ""mon contenu email HTML"",
""subject"":""Mon objet de mail""
}
}"
request.AddParameter("diffusion", json, "application/json", ParameterType.RequestBody)
request.AddFile("attachment1", "c:\myFirstFile.jpg", "image/jpg")
request.AddFile("attachment2", "c:\mySecondFile.txt", "plain/text")
Dim r as IRestResponse = client.Execute(request)
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("Content-Type", "multipart/form-data; boundary=efcaa4b6-a261-19be-4d49-4b7262bf039a");
con.setRequestProperty("Cache-Control", "no-cache");
con.setDoOutput(true);
String content = "--efcaa4b6-a261-19be-4d49-4b7262bf039a\r\n" +
"Content-Type: application/json\r\n" +
"Content-Disposition: form-data; name=\"diffusion\"\r\n\r\n" +
"{" +
" \"name\":\"Message interne - 07/03/2017\", " +
" \"emails\":[\"johndoe@domain.com\", \"jason.moriz@domain.com\", \"lisa.money@domain.com\"], " +
" \"emailParam\":{ " +
" \"senderLocalPart\":\"johnthesender\", " +
" \"senderName\": \"Patrick\", " +
" \"subject\":\"Réunion de cet après-midi annulée\", " +
" \"body\":\"Hello world\" " +
" } " +
" } " +
"\r\n--efcaa4b6-a261-19be-4d49-4b7262bf039a\r\n" +
"Content-Disposition: form-data; name=\"attachment1\"; filename=\"filename.pdf\"\r\n" +
"Content-Type: application/pdf\r\n\r\n";
byte[] pdfContentAsBytes = Files.readAllBytes(Paths.get("/path/to/file.pdf"));
DataOutputStream dataOutputStream = new DataOutputStream(con.getOutputStream());
dataOutputStream.write(content.getBytes(StandardCharsets.UTF_8));
dataOutputStream.write(pdfContentAsBytes);
dataOutputStream.write("\r\n--efcaa4b6-a261-19be-4d49-4b7262bf039a--\r\n".getBytes(StandardCharsets.UTF_8))
dataOutputStream.close();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
package main
import (
"os"
"bytes"
"io"
"mime/multipart"
"io/ioutil"
"fmt"
"net/http"
"net/textproto"
)
func main() {
// Prepare a form that you will submit
var b bytes.Buffer
w := multipart.NewWriter(&b)
// Add your attachments
err := addFilePart(w, "attachment1", "filename1.jpg", "/path/to/file1")
if err != nil {
return
}
err = addFilePart(w, "attachment2", "filename2.jpg", "/path/to/file2")
if err != nil {
return
}
// Add the diffusion json part
json := `{
"name":"test Diff API",
"emails":["johndoe@domain.com"],
"emailParam":{
"senderLocalPart":"johnthesender",
"senderName": "John the sender",
"body": "mon contenu email HTML",
"subject":"Mon objet de mail"
}
}`
h := make(textproto.MIMEHeader)
h.Set("Content-Disposition", `form-data; name="diffusion"`)
h.Set("Content-Type", "application/json")
dw, err := w.CreatePart(h)
if _, err = dw.Write([]byte(json)); err != nil {
return
}
// Don't forget to close the multipart writer.
// If you don't close it, your request will be missing the terminating boundary.
w.Close()
// Now that you have a form, you can submit it to your handler.
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests"
req, err := http.NewRequest("POST", url, &b)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Set("Content-Type", w.FormDataContentType())
if err != nil {
return
}
// Submit the request
client := &http.Client{}
res, err := client.Do(req)
if err != nil {
return
}
// Check the response
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
func addFilePart(w *multipart.Writer, partName, filename, file string) error {
f, err := os.Open(file)
if err != nil {
return err
}
defer f.Close()
fw, err := w.CreateFormFile(partName, filename)
if err != nil {
return err
}
if _, err = io.Copy(fw, f); err != nil {
return err
}
return nil
}
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/diffusion-requests";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]',
'Content-Type: multipart/form-data; boundary=efcaa4b6-a261-19be-4d49-4b7262bf039a'
));
$content = "--efcaa4b6-a261-19be-4d49-4b7262bf039a\r
Content-Type: application/json\r
Content-Disposition: form-data; name=\"diffusion\"\r
\r
{
\"name\":\"Message interne - 07/03/2017\",
\"emails\":[\"johndoe@domain.com\", \"jason.moriz@domain.com\", \"lisa.money@domain.com\"],
\"emailParam\":{
\"senderLocalPart\":\"johnthesender\",
\"senderName\": \"Patrick\",
\"subject\":\"Réunion de cet après-midi annulée\",
\"body\":\"Hello world\"
}
}\r
--efcaa4b6-a261-19be-4d49-4b7262bf039a\r
Content-Disposition: form-data; name=\"attachment1\"; filename=\"filename.txt\"\r
Content-Type: plain/text\r
\r
Content of a txt file. \r
--efcaa4b6-a261-19be-4d49-4b7262bf039a--\r
";
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
var_dump($head);
?>
La requête doit être une requête au format multipart/form-data avec comme parties :
partie
diffusion(requis) : définition de la diffusion au formatapplication/json,partie
attachment1: pièce jointe #1,partie
attachment2: pièce jointe #2,partie
attachment3: pièce jointe #3,partie
attachment4: pièce jointe #4,partie
attachment5: pièce jointe #5.
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
| id-group | String | L'identifiant unique du groupe. |
Format de réponse
Format de réponse
{
"id": "8f3cfcc2-1be0-4e71-9d22-b4203ce32b79",
"name": "Message interne - 07/03/2017",
"msisdns": [],
"emails": ["johndoe@domain.com", "lisa.money@domain.com", "jason.moriz@domain.com"],
"contacts": [],
"mailingLists": [],
"excludedContacts": [],
"emailParam": {
"senderName": "Patrick",
"senderLocalPart": "adam.royer",
"subject": "Réunion de cet après-midi annulée",
"body": "Hello world"
},
"createdAt": "2018-05-22T17:41:22.312+02:00",
"updatedAt": "2018-05-22T17:41:22.312+02:00"
}
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Content-type utilisé. |
| Location | /api/v1.1/groups/:id-group/diffusions/:id-diffusion |
Emplacement de la ressource |
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du groupe auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
| 400 BadRequest | NotEmpty | Un ou plusieurs champs obligatoires sont manquants dans votre objet. Un NotEmpty sur le champ recipients signifie qu'aucun contact, liste de diffusion ou MSISDN n'a été défini sur votre diffusion |
| 400 BadRequest | Msisdn | Le format d'un des numéros de téléphone fournis n'est pas correct |
| 400 BadRequest | InconsistentTimeSlots | Vous ne pouvez pas émettre une diffusion en dehors des périodes horaires définies dans l'application |
| 400 BadRequest | MissingEncoding | L'encodage du message SMS doit être spécifié. Il peut prendre les valeurs : "GSM7" ou "UCS2" |
| 400 BadRequest | MissingSenderOption | Le champ SenderName a été renseigné alors que vous n'avez pas l'option remplacement nom d'émetteurs activée |
| 400 BadRequest | InactiveAffectedContract | Votre contrat est inactif |
| 400 BadRequest | MediaAbsentInStrategy | La stratégie ne contient pas le média renseigné dans votre demande de diffusion |
| 400 BadRequest | MediaNotEnabled | Le media de votre diffusion n'est pas actif sur votre compte client. |
| 400 BadRequest | SmsTooLong | Le contenu du message SMS est trop long |
| 400 BadRequest | SenderNameNotAllowed | L'émetteur n'est pas autorisé par la configuration |
| 400 BadRequest | SenderEmailNotAllowed | L'email n'est pas autorisé par la configuration |
| 400 BadRequest | SenderLocalPartNotAllowed | La valeur du champ local part n'est pas autorisée par la configuration |
| 400 BadRequest | MissingMedia | La diffusion doit contenir au moins un media |
| 400 BadRequest | MissingOneEndpoint | Les contacts du publipostage doivent disposer d'au moins un moyen de communication. |
| 400 BadRequest | NoDefaultStrategyAvailable | Le groupe n'a pas de stratégie par défaut. |
5. Consulter l'état d'une diffusion
Une fois la diffusion émise, l'état d'avancement de la diffusion est consultable au travers de l'objet Diffusion
Structure de l'état d'une diffusion
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | L'identifiant unique de la diffusion |
| mainCvo | String | true | Le CVO du compte CEO |
| name | String | true | Le nom de la diffusion |
| emissionChannel | EmissionChannel | true | Le canal d'émission |
| sendDate | Date | true | La date d'envoi |
| creationDate | Date | true | La date de création |
| group | Group | true | Le groupe via lequel la diffusion a été émise |
| author | User | true | L'auteur |
| medias | []Media | true | Les médias utilisés dans la diffusion |
| state | []State | true | L'état de la diffusion |
EmissionChannel
valeurs possibles : WEB, EMAIL, API_LIGHT, API.
Group
Voir la structure détaillée de l'objet dans la section groupe
User
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | L'identifiant unique de l'utilisateur |
| name | String | true | Le nom |
| firstName | String | true | Le prénom |
| String | true | L'email de l'utilisateur |
State
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| status | Status | true | Le statut de la diffusion |
| startedAt | Date | true | La date de démarrage |
| endedAt | Date | true | Le date de fin |
| nbSelected | int | true | Le nombre de destinataires selectionnés |
| nbReachable | int | true | Le nombre de destinataires joignables |
| nbSuccess | int | true | Le nombre de destinataire joints |
| ratio | double | true | Le pourcentage de succès |
Status
Les valeurs possibles sont: WAITING, ONGOING, COMPLETED, CANCELING, CANCELED.
| Valeur | Description |
|---|---|
| WAITING | La diffusion est en préparation pour l'envoi |
| ONGOING | La diffusion est en cours |
| COMPLETED | La diffusion est terminée |
| CANCELING | La diffusion est cours d'annulation |
| CANCELED | La diffusion a été annulée |
- Lister les diffusions
Ce point d'accès permet de récupérer la liste paginée des diffusions émises.
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.1/diffusions" \
-H "Authorization: Bearer [Access-Token]" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/diffusions");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("cache-control", "no-cache");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/diffusions", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/diffusions", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/diffusions";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/diffusions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
Format de réponse
Format de réponse
{
"content": [{
"id": "1eb51ea7-f4cd-463c-b0bf-5f19d26b3d9c",
"mainCvo": "CVOSI38417821",
"name": "Diffusion 1",
"emissionChannel": "WEB",
"group": {
"id": "09a8e93e-4373-47e8-86f0-df080de3592d",
"name": "groupe 1"
},
"author": {
"id": "d80c0c9a-51b0-4d09-8205-c9b2a83e576a",
"name": "Blues",
"firstName": "Agathe"
},
"strategy": {
"name": "stratégie à la volée",
"lifetime": 0,
"sequences": []
},
"medias": ["SMS", "EMAIL"],
"state": {
"status": "COMPLETED",
"startedAt": "2018-05-22T14:47:14.572+02:00",
"endedAt": "2018-05-22T14:47:16.150+02:00",
"nbSelected": 4,
"nbReachable": 4,
"nbSuccess": 4,
"ratio": 1.0,
"metrics": {
"recipients": {
"status": {
"SUCCESS": 4
},
"media": {
"SMS": {
"SUCCESS": 2
},
"EMAIL": {
"SUCCESS": 2
}
}
},
"communications": {
"SMS": {
"SUCCESS": 2
},
"EMAIL": {
"SUCCESS": 2
}
},
"openings": {
"SMS": {
"DELIVERED": 2,
"SENT": 2
},
"EMAIL": {
"DELIVERED": 2,
"SENT": 1,
"ACK": 1
}
}
}
},
"sendDate": "2018-05-22T14:47:14.018+02:00",
"creationDate": "2018-05-22T14:47:14.001+02:00"
}, {
"id": "7427ac7a-0d4c-49ca-b70c-cbe70f556bc1",
"mainCvo": "CVOSI38417821",
"name": "Diff 2",
"emissionChannel": "WEB",
"group": {
"id": "09a8e93e-4373-47e8-86f0-df080de3592d",
"name": "groupe 1"
},
"author": {
"id": "d80c0c9a-51b0-4d09-8205-c9b2a83e576a",
"name": "Blues",
"firstName": "Agathe"
},
"strategy": {
"name": "stratégie à la volée",
"lifetime": 0,
"sequences": []
},
"medias": ["SMS"],
"state": {
"status": "COMPLETED",
"startedAt": "2018-05-22T14:48:56.607+02:00",
"endedAt": "2018-05-22T14:48:56.976+02:00",
"nbSelected": 1,
"nbReachable": 1,
"nbSuccess": 1,
"ratio": 1.0,
"metrics": {
"recipients": {
"status": {
"SUCCESS": 1
},
"media": {
"SMS": {
"SUCCESS": 1
}
}
},
"communications": {
"SMS": {
"SUCCESS": 1
}
},
"openings": {
"SMS": {
"DELIVERED": 1,
"SENT": 1
}
}
}
},
"sendDate": "2018-05-22T14:48:56.371+02:00",
"creationDate": "2018-05-22T14:48:56.371+02:00"
}],
"totalPages": 1,
"last": true,
"totalElements": 2,
"first": true,
"size": 10,
"number": 0,
"numberOfElements": 2
}
- Status code : 200 OK
Filtres
Il est possible de filtrer les résultats des diffusions à l'aide des paramètres d'URL ci-dessous.
| Champ | Type | Description |
|---|---|---|
| dateMin | date au format RFC3339 | La date minimale d'envoi |
| dateMax | date au format RFC3339 | La date maximale d'envoi |
| media | 'EMAIL' ou 'SMS' | Le type de média utilisé dans la diffusion |
| recipientFullName | String | Le nom d'un contact destinataire |
| recipientEmail | L'adresse email d'un destinataire | |
| recipientPhoneNumber | msisdn | Le numéro de téléphone d'un destinataire |
Par exemple, la requête ci-dessous recherche les diffusions émises entre le 25 et le 29 avril 2017, qui utilise le média EMAIL, dont le nom contient la chaîne de caractère interne et dont un au moins des destinataires est johndoe@domain.com.
curl -X GET "https://[SERVER_URL]/api/v1.1/diffusions?dateMax=2017-04-30T00:00:00.000Z&dateMin=2017-04-25T22:00:00.000Z&medias=EMAIL&name=interne&recipientEmail=johndoe@domain.com"
- Récupérer une diffusion
:id-diffusion
Ce point d'accès permet de récupérer une diffusion.
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.1/diffusions/[id_diffusion]" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/diffusions/[id_diffusion]");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/diffusions/[id_diffusion]", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/diffusions/[id_diffusion]", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/diffusions/[id_diffusion]";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/diffusions/[id_diffusion]"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-diffusion |
String | L'identifiant unique de la diffusion. |
Format de réponse
Format de réponse
{
"id": "1eb51ea7-f4cd-463c-b0bf-5f19d26b3d9c",
"mainCvo": "CVOSI38417821",
"name": "Diffusion 1",
"emissionChannel": "WEB",
"group": {
"id": "09a8e93e-4373-47e8-86f0-df080de3592d",
"name": "groupe 1"
},
"author": {
"id": "d80c0c9a-51b0-4d09-8205-c9b2a83e576a",
"name": "Blues",
"firstName": "Agathe"
},
"medias": ["SMS", "EMAIL"],
"state": {
"status": "COMPLETED",
"startedAt": "2018-05-22T14:47:14.572+02:00",
"endedAt": "2018-05-22T14:47:16.150+02:00",
"nbSelected": 4,
"nbReachable": 4,
"nbSuccess": 4,
"ratio": 1.0
},
"sendDate": "2018-05-22T14:47:14.018+02:00",
"creationDate": "2018-05-22T14:47:14.001+02:00"
}
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de la diffusion à laquelle vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur l'objet auquel vous tentez d'accéder |
6. Consulter le détail des remises
Les résultats de remise d'une diffusion sont définis par destinataires (recipients en anglais).
Un destinataire peut être un contact ou une adresse à la volée (adresse email ou numéro de mobile).
Un destinataire, s'il est un contact, peut regrouper plusieurs points de communication cible (adresse email ou numéros de mobile).
Structure d'un destinataire joint
- Destinataire
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | L'identifiant unique du destinataire. |
| status | Status | true | Le statut du destinataire. |
| label | String | true | Le nom/prénom ou adresse du destinataire |
- Status
Les valeurs possibles sont: WAITING, SUCCESS, FAILED, UNREACHABLE
| Valeur | Description |
|---|---|
| WAITING | Le message est en attente d'envoi |
| SUCCESS | Le destinataire a été joint avec succès |
| FAILED | La condition de succès n'a pas été atteinte |
| UNREACHABLE | Le destinataire est injoignable, on n'envoie pas de message |
Lister les messages remis
:id-diffusion/recipients
Ce point d'accès permet de récupérer les destinataires pour une diffusion.
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.1/diffusions/[id_diffusion]/recipients" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/diffusions/[id_diffusion]/recipients");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
<?php
$url = "https://[SERVER_URL]/api/v1.1/diffusions/[id_diffusion]/recipients";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/diffusions/[id_diffusion]/recipients"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/diffusions/[id_diffusion]/recipients", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/diffusions/[id_diffusion]/recipients", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
dim response as IRestResponse = client.Execute(request)
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-diffusion |
String | L'identifiant unique de la diffusion. |
Format de réponse
Format de réponse
{
"content": [{
"id": "5b04062b9256c90fb3377a74",
"status": "SUCCESS",
"label": "+33678541224"
}, {
"id": "5b04062b9256c90fb3377a73",
"status": "SUCCESS",
"label": "+33678581724"
}],
"totalElements": 2,
"last": true,
"totalPages": 1,
"numberOfElements": 2,
"first": true,
"size": 10,
"number": 0
}
- Status code : 200 OK
Filtres
Il est possible de filtrer les résultats des messages remis à l'aide des paramètres d'URL ci-dessous.
| Champ | Type | Description |
|---|---|---|
| communicationMedia | 'EMAIL' ou 'SMS' | Le type de média sur lequel le destinataire a été joint |
| label | String | Le nom ou le prénom de contact |
| address | email ou msisdn | L'adresse email ou le msisdn d'un destinataire |
Par exemple, la requête ci-dessous recherche le destinataire portant l'adresse johndoe@domain.com, de type EMAIL et dont le nom contient john.
curl -X GET "https://[SERVER_URL]/api/v1.1/diffusion/id_diffusion/recipients?address=johndoe@domain.com&communicationMedia=EMAIL&label=john
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de la diffusion à laquelle vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |
7. Consulter les réponses SMS
Une réponse SMS est un objet qui représente la réponse SMS d'un destinataire à une diffusion.
La réponse SMS est une option à activer sur le compte CEO
Structure d'une réponse SMS
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | L'identifiant unique de la réponse. |
| timestamp | Date | true | La date de réception. |
| address | String | true | L'adresse de l’émetteur. |
| body | String | true | Le corps du message. |
| author | User | true | L'auteur. |
| country | String | true | Le code pays de la réponse (Format ISO 3166-1 alpha-3). |
Récupérer les réponses
:id-group/replies
Ce point d'accès permet de récupérer la liste paginée des réponses SMS reçues en réponse aux SMS envoyés
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api/v1.1/groups/[id_group]/replies" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/groups/[id_group]/replies");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/groups/[id_group]/replies", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("content-Type", "application/json");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/groups/[id_group]/replies", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
dim response as IRestResponse = client.Execute(request)
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/groups/[id_group]/replies"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
<?php
$url = "https://[SERVER_URL]/api/v1.1/groups/[id_group]/replies";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant technique (32 caractères alphanumériques) du groupe |
Format de réponse
Format de réponse
{
"content": [{
"id": "5b0407ea9256c90fb3377a77",
"timestamp": "2018-05-22T14:07:06.000+02:00",
"address": "+33678581726",
"body": "this is reply ",
"author": {
"id": "2b153b01-c082-413a-a37d-7fdb93f9709d",
"email": "democeov5.Agathe@gmail.com",
"name": "Blues",
"firstName": "Agathe"
},
"country": "FRA"
}],
"totalElements": 1,
"last": true,
"totalPages": 1,
"numberOfElements": 1,
"first": true,
"size": 10,
"number": 0
}
- Status code : 200 OK
Filtres
Il est possible de filtrer les résultats des messages remis à l'aide des paramètres d'URL ci-dessous.
| Champ | Type | Description |
|---|---|---|
| dateMin | date au format RFC3339 | La date minimale d'envoi |
| dateMax | date au format RFC3339 | La date maximale d'envoi |
| label | String | Le nom ou le prénom du contact |
| address | email ou msisdn | L'adresse email ou le msisdn de l'émetteur |
Par exemple, la requête ci-dessous recherche les réponses du numéro 0648576900 reçues entre le 18 et le 26 avril 2017 et dont le nom ou prénom de contact est Patrick.
curl -X GET "https://[SERVER_URL]/api/v1.1/groups/:id-group/replies?address=0648576900&dateMax=2017-04-26T23:59:59.999Z&dateMin=2017-04-18T22:00:00.000Z&label=Patrick
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Votre compte n'a pas l'option réponse SMS, ou vous n'avez pas les droits sur le groupe indiqué |
8. SMS+
Le service SMS+ permet de recevoir des SMS entrants selon des régles de routage, associées à un compte, un groupe de ce compte et un responsable.
SMS+ est lié aux options SMS_PLUS_SHORT_NUMBER et SMS_LONG_NUMBER à activer sur le compte CEO
Il est possible pour un utilisateur de CEO de répondre à un SMS entrant (voir réponse SMS+).
L'échange SMS entrants et SMS sortants entre les mêmes interlocuteurs (dans les 72h qui suivent le premier SMS entrant) est appelé une conversation (voir conversation SMS+).
SMS entrant
- Structure d'un SMS entrant
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | L'identifiant unique du SMS entrant |
| timestamp | Date | true | La date de reception du SMS entrant |
| sender | String | true | L'adresse de l'émetteur (MSISDN ou alias) |
| body | String | true | Le corps du message |
| recipient | String | true | Le numéro ciblé par le SMS entrant |
| smsPlusSubKeyword | SmsPlusSubKeyword | true | Le Numéro/Mot-clef/Sous-mot-clef associé à un sms entrant |
| groupId | String | true | Le groupe auquel est rattaché le SMS entrant |
| cvo | String | true | Le CVO du compte CEO |
| conversationId | String | true | L'identifiant de la conversation dont fait partie le SMS entrant |
| isRoot | boolean | true | Indique si ce SMS est à l'origine d'une conversation |
SmsPlusSubKeyword :
Ceci représente la règle de routage associée au SMS entrant, configurable dans l'application.
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| number | String | true | Le numéro cible de la règle de routage |
| keyword | String | true | Le mot-clef de la règle de routage (optionnel) |
| subkeyword | String | true | Le sous-mot-clef de la règle de routage (optionnel) |
- Récupérer les SMS entrants
Ce point d'accès permet de récupérer la liste paginée des SMS MO reçus
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api/v1.1/smsplus" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api/v1.1/smsplus");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("Content-Type", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/smsplus", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/smsplus", Method.GET)
request.AddHeader("Content-Type", "application/json")
request.AddHeader("Authorization", "Bearer [Access-Token]")
dim response as IRestResponse = client.Execute(request)
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/smsplus"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(body)
}
<?php
$url = "https://[SERVER_URL]/api/v1.1/smsplus";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
- Query Parameters
N/A
Format de réponse
Format de réponse
{
"content": [{
"id": "59a426dbaad20587d9f4c5e6",
"recipient": "81212",
"body": "81212 TOP FR",
"timestamp": "2016-11-30T11:30:00.000+02:00",
"sender": "+33687798413",
"cvo": "CVOSI38410015",
"groupId": "68107800-9872-4896-8b6e-eeab499482c5",
"conversationId": "59a426dbaad20587d9f4c5f5",
"root": true
},
{
"id": "59a426dbaad20587d9f4c5e7",
"recipient": "118712",
"body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"timestamp": "2016-11-30T11:35:00.000+02:00",
"sender": "+33687798476",
"cvo": "CVOSI38410015",
"groupId": "68107800-9872-4896-8b6e-eeab499482c5",
"conversationId": "59a426dbaad20587d9f4c5f3",
"root": true
}
],
"size": 10,
"totalPages": 1,
"totalElements": 2,
"numberOfElements": 2,
"last": true,
"first": true
}
- Status code : 200 OK
- Response Body : Retourne une liste d'objets SMS entrant
Filtres
Il est possible de filtrer les résultats des sms entrants à l'aide des paramètres d'URL ci-dessous.
| Champ | Type | Description |
|---|---|---|
| groupIds | []String | Une liste d'identifiants de groupe |
| body | String | Un extrait du texte contenu dans le corps du SMS entrant |
| recipient | String | Un extrait du numéro cible du SMS entrant |
| smsPlusCampaignIds | []String | Une liste d'identifiants de campagne SMS+ |
| author | String | Un identifiant de responsable de sous mot-clef |
| sender | String | Un extrait du numéro emetteur du SMS entrant |
| dateMin | date au format RFC3339 | La date minimale d'envoi |
| dateMax | date au format RFC3339 | La date maximale d'envoi |
Par exemple, la requête ci-dessous recherche les sms entrants dont le corps de message contient soldes reçus entre le 18 et le 26 avril 2017.
curl -X GET "https://[SERVER_URL]/api/v1.1/smsplus?body=soldes&dateMax=2017-04-26T23:59:59.999Z&dateMin=2017-04-18T22:00:00.000Z
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 400 BadRequest | SmsPlusNotAllowed | Votre compte n'a pas l'option SMS+ |
Réponse SMS+
- Structure d'une réponse à un SMS entrant
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| body | String | true | Le corps de la réponse |
| encoding | String | true | Le charset utilisé pour l'envoi (GSM7 ou UCS2) |
- Envoyer une réponse à un SMS entrant
:id-conversation/replies
Format de requête
Format de requête
curl -X POST \
"https://[SERVER_URL]/api/v1.1/smsplus/conversations/[id_conversation]/replies" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '
{
"body":"une réponse ...",
"encoding":"GSM7"
}
'
URL url = new URL("https://[SERVER_URL]/api/v1.1/smsplus/conversations/[id_conversation]/replies");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("Content-Type", "application/json");
con.setDoOutput(true);
String postJsonData = "{\"body\":\"une réponse ...\",\"encoding\":\"GSM7\"}";
DataOutputStream dataOutputStream = new DataOutputStream(con.getOutputStream());
dataOutputStream.write(postJsonData.getBytes(StandardCharsets.UTF_8));
dataOutputStream.flush();
dataOutputStream.close();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/smsplus/conversations/[id_conversation]/replies", Method.POST);
request.AddHeader("Authorization", "Bearer [access-token]");
request.AddHeader("Content-Type", "application/json");
var json = @"{
""body"":""Mon body"",
""encoding"":""GSM7""
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/smsplus/conversations/[id_conversation]/replies", Method.POST)
request.AddHeader("Authorization", "Bearer [access-token]")
request.AddHeader("Content-Type", "application/json")
dim json = "{
""body"":""Mon body"",
""encoding"":""GSM7""
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.1/smsplus/conversations/[id_conversation]/replies";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]',
'Content-Type: application/json'
));
$content='{
"body":"Mon body",
"encoding":"GSM7"
}';
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/smsplus/conversations/[id_conversation]/replies"
payload := strings.NewReader("/* OBJET JSON */")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer [access-token]")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id_conversation |
String | L'identifiant de la conversation |
Format de réponse
- Status code : 200 OK
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 400 BadRequest | SmsPlusNotAllowed | Votre compte n'a pas l'option SMS+ |
| 400 BadRequest | SmsPlusFirstNotFound | La conversation SMS+ n'existe pas |
| 400 BadRequest | SmsPlusInvalidGroup | Vous n'appartenez pas au groupe de la conversation |
| 400 BadRequest | SmsTooLong | Le contenu du message SMS est trop long |
Conversation SMS+
- Structure d'un élément de conversation SMS+
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| body | String | true | Le contenu du SMS |
| timestamp | Date | true | La date de réception du SMS |
| sender | String | true | L'adresse de l'émetteur (MSISDN ou alias) |
| recipient | String | true | Le numéro ciblé par le SMS |
| isInbound | boolean | true | Indique si le SMS est entrant (true) ou sortant (false) |
| deliveryState | DeliveryState | true | Dernière notification d'état pour les SMS sortants |
Objet DeliveryState
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| timestamp | Date | true | La date de réception de la notification |
| status | String | true | Le statut de la notification |
| cause | String | true | La cause (en cas d'échec) |
| desc | String | true | Le contenu du SMS |
| op | String | true | L'opérateur |
| msgcount | Integer | true | Le nombre de SMS (en cas de SMS trop long) |
status peut prendre les valeurs :
WAITING,CANCELED,REJECTED,INPROGRESS,FAILED,UNREACHABLE,SUCCESS
cause peut prendre les valeurs :
BLACKLISTED,EMPTY_ADDRESS,UNREACHABLE_ADDRESS,DOM_NOT_ENABLED,USA_NOT_ENABLED,INTERNATIONAL_NOT_ENABLED,
QUOTA_REACHED,EXPIRED,EXPIRED_DIFFUSION,DUPLICATE_ADDRESS,DELIVERED,SENT,NO_ACK,ACK,NACK
- Récuperer une conversation SMS+
:id-conversation
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api/v1.1/smsplus/conversations/[id_conversation]" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
URL url = new URL("https://[SERVER_URL]/api/v1.1/smsplus/conversations/[id_conversation]");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("Content-Type", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/smsplus/conversations/[id_conversation]", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/smsplus/conversations/[id_conversation]", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
dim response as IRestResponse = client.Execute(request)
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/smsplus/conversations/[id_conversation]"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
<?php
$url = "https://[SERVER_URL]/api/v1.1/smsplus/conversations/[id_conversation]";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
Format de réponse
Format de réponse
[{
"body": "FILM spielberg",
"timestamp": 1504270797000,
"sender": "+33678581724",
"recipient": "118712",
"isInbound": true
}, {
"body": "Sugarland Express",
"timestamp": "2016-11-30T11:30:00.000+02:00",
"sender": "Robin Scherbatsky",
"recipient": "+33678581724",
"deliveryState": {
"status": "SUCCESS",
"cause": "DELIVERED"
},
"isInbound": false
}, {
"body": "SUIVANT",
"timestamp": "2016-11-30T11:35:00.000+02:00",
"sender": "+33678581724",
"recipient": "118712",
"isInbound": true
}, {
"body": "Les dents de la mer",
"timestamp": "2016-11-30T11:36:00.000+02:00",
"sender": "Robin Scherbatsky",
"recipient": "+33678581724",
"deliveryState": {
"status": "INPROGRESS",
"cause": "SENT"
},
"isInbound": false
}]
- Status code : 200 OK
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 400 BadRequest | SmsPlusNotAllowed | Votre compte n'a pas l'option SMS+ |
| 400 BadRequest | SmsPlusFirstNotFound | La conversation SMS+ n'existe pas |
| 400 BadRequest | SmsPlusInvalidGroup | Vous n'appartenez pas au groupe de la conversation |
Campagnes SMS+
- Structure d'un campagne SMS+
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | L'identifiant unique du SMS entrant |
| name | String | true | Le nom de la campagne |
| cvo | String | true | Le CVO du compte CEO |
| group | Group | true | Le groupe associé à la campagne |
- Récupérer les campagnes SMS+
Ce point d'accès permet de récupérer la liste paginée des campagnes SMS+
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api/v1.1/smsplus/[groupId]/campaigns" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api/v1.1/smsplus/[groupId]/campaigns");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("Content-Type", "application/json");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();
while ((output = in.readLine()) != null){
response.append(output);
}
in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.1");
var request = new RestRequest("/smsplus/[groupId]/campaigns", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
IRestResponse response = client.Execute(request);
dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.1")
dim request as RestRequest = new RestRequest("/smsplus/[groupId]/campaigns", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
dim response as IRestResponse = client.Execute(request)
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.1/smsplus/[groupId]/campaigns"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(body)
}
<?php
$url = "https://[SERVER_URL]/api/v1.1/smsplus/[groupId]/campaigns";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer [Access-Token]'
));
$head = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpCode . "\r\n";
var_dump($head);
?>
Format de réponse
Format de réponse
{
"content": [{
"id": "77372312-fe1a-42c5-9f2f-36dbce61df93",
"name": "Promo"
}, {
"id": "40275410-cd2d-49ac-9fd6-33d6d9c1144f",
"name": "Soldes 2018"
}],
"totalPages": 1,
"last": true,
"totalElements": 2,
"first": true,
"size": 10,
"number": 0,
"sort": [{
"direction": "ASC",
"property": "name",
"ignoreCase": false,
"nullHandling": "NATIVE",
"descending": false,
"ascending": true
}],
"numberOfElements": 2
}
- Status code : 200 OK
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou l'objet auquel vous tentez d'accéder, ou l'objet n'appartient pas au groupe indiqué |