Contact Everyone
Cette page documente l'API REST de la solution de messaging Contact Everyone.
Contact Everyone est une offre d'Orange Business :
https://www.orange-business.com/fr/solutions/relation-client/contact-everyone
Contact Everyone, ainsi que l'accès à l'API REST, sont soumis à abonnement. Vous pouvez vous rapprocher de votre contact commercial Orange Business pour plus de renseignements.
Informations importantes
Cette documentation n'est pas contractuelle, est fournie en l'état, et ne saurait engager la responsabilité d'Orange Business Services en aucun cas.
Contact Everyone évoluant constamment, l'utilisateur de cette documentation doit s'assurer qu'il utilise la version disponible en ligne sur le site officiel à l'adresse https://contact-everyone.orange-business.com/api/docs/guides/index.html et non une version enregistrée ou conservée dans un cache.
Des corrections et ajustements étant apportés régulièrement à l'API et à la documentation, il peut arriver que l'implémentation diffère légèrement.
Cette documentation pouvant être rendue obsolète sans préavis d'aucune sorte, Orange Business Services ne saurait être tenu responsable d'un travail basé sur une version obsolète de la documentation.
Changements depuis la v1.1
Support des diffusions RCS, fax et vocales
Ajout de la configuration des catégories de diffusion
Ajout de l'affectation d'une catégorie de diffusion à une diffusion
Ajout de la création/modification/suppression de groupes
Ajout de la création/modification/suppression d'utilisateurs (superviseur et diffuseur)
Ajout d'un critère de recherche par identifiant de diffusion dans la recherche des réponses SMS
Les réponses SMS contiennent maintenant la liste des identifiants de diffusions associés
Refonte des messages d'erreurs : plus complets et explicites
Suppression de l'ajout/suppression de contact unique à des listes de diffusions. Utiliser l'ajout/suppression de multiples contacts à la place.
Ajout de la configuration de modèle de diffusion
Ajout de la configuration de message prédéfini
Ajout de l'utilisation de modèle de diffusion et/ou de message prédéfini dans les diffusions.
0. Prise en main
La solution complète pour vos diffusions
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 RCS, SMS, e-mail, vocal et/ou fax en quelques clics via son application en ligne 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 messages via les canaux RCS, SMS, e-mail, voix et fax.
- 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
L'API pouvant être enrichie après publication, il est indispensable que le client API ne réalise pas de parsing strict des réponses fournies par CEO : le client API devra ignorer les données non nécessaires à son fonctionnement.

Protocole de connexion sécurisée
Vos applicatifs doivent se connecter en HTTPS en utilisant le protocole TLS 1.3.
Le protocole TLS 1.2 est également supporté, mais nous vous recommandons TLS 1.3.
Vous ne pouvez pas utiliser les protocoles TLS 1.0 et TLS 1.1.
Les protocoles et ciphers supportés sont susceptibles d'évoluer en fonction des recommandations et politiques de sécurité, des risques liés à la sécurité de la plateforme, à celle des applicatifs et à la protection des données, des failles découvertes, et/ou de toute autre cas non listé qui le justifierait.
Vous devez donc être en mesure de pouvoir ajuster vos applicatifs sous un délai raisonnable lorsqu'une situation de ce type se présente.
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.
Ne pas oublier de faire un urlEncode sur le login et le mot de passe.
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 du compte utilisateur doit avoir été personnalisé sur l'application en ligne
- Le jeton d'accès est émis avec une durée de validité initiale de une heure, prolongée d'autant à chaque utilisation. Le jeton expire après une heure d'inactivité, et devra être renouvelé (via la même requête d'authentification).
- Demander un jeton n'invalide pas les jetons encore valides : les applicatifs distribués peuvent demander chacun leur jeton.
- Toutes les requêtes sur l'API REST doivent être exécutées en HTTPS.
⚠ Le jeton d'accès doit être mis en cache côté applicatif.
L'utilisation répétée de l'API de génération de token a pour conséquence l'activation d'un rate limiting.
De manière générale, la plateforme étant mutualisée, un comportement abusif de la part de l'application client pourra faire l'objet de mesures dissuasives.
Format de requête
Format de requête
curl -X POST 'https://[SERVER_URL]/api/v1.2/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.2/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.2");
var request = new RestRequest("/oauth/token", 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.2")
Dim request as RestRequest = new RestRequest("/oauth/token", 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.2/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.2/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.2/oauth/token |
Déconnexion
Format de requête
curl -X GET 'https://[SERVER_URL]/api/v1.2/logout' \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/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.2/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.2/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.2/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.2/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.2/groups" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups");
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.2");
var request = new RestRequest("/groups", 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.2")
dim request as RestRequest = new RestRequest("/groups", 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.2/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.2/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.2/groups/[id-group]/diffusion-requests" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '{
"msisdns":["+33693847755", "0764536453", "+447564110766"],
"smsParam":{
"encoding" : "GSM7",
"body":"Bonjour les amis, rendez vous au plan B à 18h00"
}
}'
URL url = new URL("https://[SERVER_URL]/api/v1.2/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 = "{"+
"\"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.2");
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.2")
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.2/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.2/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.2/diffusions/[id-diffusion]" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]"
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.2
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
Déroulement des résultats
Certaines ressources retournent des listes pouvant contenir de très nombreux éléments. Ces résultats peuvent être consultés de manière déroulante, ils sont englobés dans un document JSON de plus haut-niveau contenant des informations sur la structure déroulante.
Ce document contient les propriétés ci-dessous.
| Attribut | Description |
|---|---|
| content | Tableau des résultats |
| scrollId | Identifiant à passer en paramètre de la requête suivante pour récupérer la suite des résultats. Cet identifiant peut être très long (>300 octets). |
- 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 de plus de 160 caractères en GSM, ou de plus de 70 caractères en UNICODE, seront découpés et facturés en plusieurs SMS, selon les règles décrites dans les tableaux ci-dessous.
Usage Marketing :
| jeu de caractère | perso du numéro émetteur | nombre de caractères | nombre de SMS facturés |
|---|---|---|---|
| GSM | sans | de 1 à 160 inclus | 1 |
| GSM | sans | de 161 à 306 inclus | 2 |
| GSM | sans | de 307 à 459 inclus | 3 |
| GSM | sans | de 460 à 612 inclus | 4 |
| GSM | sans | de 613 à 765 inclus | 5 |
| GSM | sans | de 766 à 918 inclus | 6 |
| GSM | sans | de 919 à 1071 inclus | 7 |
| GSM | sans | de 1072 à 1224 inclus | 8 |
| GSM | sans | de 1225 à 1377 inclus | 9 |
| GSM | sans | de 1378 à 1530 inclus | 10 |
| UNICODE | sans | de 1 à 70 inclus | 1 |
| UNICODE | sans | de 71 à 134 inclus | 2 |
| UNICODE | sans | de 135 à 201 inclus | 3 |
| UNICODE | sans | de 202 à 268 inclus | 4 |
| UNICODE | sans | de 269 à 335 inclus | 5 |
| UNICODE | sans | de 336 à 402 inclus | 6 |
| UNICODE | sans | de 403 à 469 inclus | 7 |
| UNICODE | sans | de 470 à 536 inclus | 8 |
| UNICODE | sans | de 537 à 603 inclus | 9 |
| UNICODE | sans | de 604 à 670 inclus | 10 |
| GSM | avec | de 1 à 145 inclus | 1 |
| GSM | avec | de 146 à 291 inclus | 2 |
| GSM | avec | de 292 à 444 inclus | 3 |
| GSM | avec | de 445 à 597 inclus | 4 |
| GSM | avec | de 598 à 750 inclus | 5 |
| GSM | avec | de 751 à 903 inclus | 6 |
| GSM | avec | de 904 à 1056 inclus | 7 |
| GSM | avec | de 1057 à 1209 inclus | 8 |
| GSM | avec | de 1210 à 1362 inclus | 9 |
| GSM | avec | de 1363 à 1515 inclus | 10 |
| UNICODE | avec | de 1 à 55 inclus | 1 |
| UNICODE | avec | de 56 à 119 inclus | 2 |
| UNICODE | avec | de 120 à 186 inclus | 3 |
| UNICODE | avec | de 187 à 253 inclus | 4 |
| UNICODE | avec | de 254 à 320 inclus | 5 |
| UNICODE | avec | de 321 à 387 inclus | 6 |
| UNICODE | avec | de 388 à 454 inclus | 7 |
| UNICODE | avec | de 455 à 521 inclus | 8 |
| UNICODE | avec | de 522 à 588 inclus | 9 |
| UNICODE | avec | de 589 à 655 inclus | 10 |
Autres usages :
| jeu de caractère | perso du numéro émetteur | nombre de caractères | nombre de SMS facturés |
|---|---|---|---|
| GSM | avec ou sans | de 1 à 160 inclus | 1 |
| GSM | avec ou sans | de 161 à 306 inclus | 2 |
| GSM | avec ou sans | de 307 à 459 inclus | 3 |
| GSM | avec ou sans | de 460 à 612 inclus | 4 |
| GSM | avec ou sans | de 613 à 765 inclus | 5 |
| GSM | avec ou sans | de 766 à 918 inclus | 6 |
| GSM | avec ou sans | de 919 à 1071 inclus | 7 |
| GSM | avec ou sans | de 1072 à 1224 inclus | 8 |
| GSM | avec ou sans | de 1225 à 1377 inclus | 9 |
| GSM | avec ou sans | de 1378 à 1530 inclus | 10 |
| UNICODE | avec ou sans | de 1 à 70 inclus | 1 |
| UNICODE | avec ou sans | de 71 à 134 inclus | 2 |
| UNICODE | avec ou sans | de 135 à 201 inclus | 3 |
| UNICODE | avec ou sans | de 202 à 268 inclus | 4 |
| UNICODE | avec ou sans | de 269 à 335 inclus | 5 |
| UNICODE | avec ou sans | de 336 à 402 inclus | 6 |
| UNICODE | avec ou sans | de 403 à 469 inclus | 7 |
| UNICODE | avec ou sans | de 470 à 536 inclus | 8 |
| UNICODE | avec ou sans | de 537 à 603 inclus | 9 |
| UNICODE | avec ou sans | de 604 à 670 inclus | 10 |
Ces informations ne sont pas contractuelles.
Media
Les valeurs possibles sont : RCS, SMS, EMAIL, FAX, VOICE.
DTMF
Les valeurs possibles sont : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *, #.
EmissionChannel
Les valeurs possibles sont:
WEB, EMAIL, API_LIGHT, API, SMPP
AudioContent
L'un des deux paramètres doit être renseigné
| Parameter | Type | Description |
|---|---|---|
| text | String | Le contenu vocalisé |
| contentId | String | L'identifiant d'un contenu audio préalablement téléversé |
RcsParam
| Champ | Type | Requis | Description |
|---|---|---|---|
| agentId | String | true | L'identifiant de l'agent utilisé pour l'envoi |
| body | String | true | Le corps du message (chaîne JSON) |
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) |
| templateId | String | false | Identifiant du message prédéfini à appliquer dans le cas des modèles de diffusion et des diffusions ce champ est utilisé en entrée, mais n'est jamais retourné |
| urlToShorten | String | false | L'URL à raccourcir (cf Créer une diffusion SMS) |
| landingPageParam | LandingPageParam | false | Les paramètres pour la génération d'une landing page (cf Créer une diffusion SMS) |
LandingPageParam
| Champ | Type | Requis | Description |
|---|---|---|---|
| landingPageId | String | true | L'identifiant du template Sinch for marketing à utiliser pour générer la landing page |
| fields | Map{String,String} | false | Un ensemble de clé:valeur où clé est un caractère entre B et Z et valeur est un champ publipostage (cf Structure d'une diffusion). Lors de l'envoi, valeur sera remplacé par une valeur correspondante au destinataire et la map sera transmise à Sinch for marketing pour remplacer les variables utilisées dans le template de la landing page. |
EmailParam
| Champ | Type | Requis | Description |
|---|---|---|---|
| senderName | String | false | Le nom de l'émetteur |
| senderEmail | String | true | L'adresse email de l'émetteur |
| 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) |
| attachmentIds | String[] | false | Identifiants des fichiers à attacher |
| templateId | String | false | Identifiant du message prédéfini à appliquer dans le cas des modèles de diffusion et des diffusions ce champ est utilisé en entrée, mais n'est jamais retourné |
FaxParam
| Champ | Type | Requis | Description |
|---|---|---|---|
| attachmentIds | String[] | false | Identifiants des documents fax |
| headingHTML | String | false | La page de garde HTML du fax |
| templateId | String | false | Identifiant du message prédéfini à appliquer dans le cas des modèles de diffusion et des diffusions ce champ est utilisé en entrée, mais n'est jamais retourné |
| senderNumber | String | false | Numéro de fax personnalisé apparaît comme le numéro de l'émetteur, doit faire parti de la liste de numéros associés à votre compte |
VoiceParam
Les contenus audio doivent soit être renseignés via les paramètres ci-dessous, soit être fournis au moyen d'une requête de type multipart/form-data
| Parameter | Type | Requis | Description |
|---|---|---|---|
| intro | AudioContent | false | Le contenu de l'introduction du message (max 2000 car). |
| body | AudioContent | true | Le contenu du message (max 2000 car). |
| outro | AudioContent | false | Le contenu de la conclusion du message (max 2000 car). |
| locale | String | true | La locale utilisée pour la synthèse vocale: fr_FR (France) ou en_GB (Royaume Uni) |
| templateId | String | false | Identifiant du message prédéfini à appliquer dans le cas des modèles de diffusion et des diffusions ce champ est utilisé en entrée, mais n'est jamais retourné |
| senderNumber | String | false | Numéro de fixe personnalisé apparaît comme le numéro de l'émetteur, doit faire parti de la liste de numéros associés à votre compte |
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.
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.2/groups" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/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.2");
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.2")
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.2/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.2/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.2/groups/[id_group]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/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.2");
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.2")
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.2/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.2/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 unique 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 |
- Créer un groupe
Ce point d'accès permet de créer un groupe.
Format de requête
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.2/groups" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '{
"name":"Mon groupe",
"ownerId":"729492ac-a214-4874-95fc-e0609a5ac9b6"
}'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups");
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 groupe\"," +
"\"ownerId\":\"729492ac-a214-4874-95fc-e0609a5ac9b6\"" +
"}";
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.2");
var request = new RestRequest("/groups", Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.RequestFormat = DataFormat.Json;
var json = @"{
""name"":""Mon groupe"",
""ownerId"":""729492ac-a214-4874-95fc-e0609a5ac9b6""
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse r = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups", Method.POST)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{
""name"":""Mon groupe"",
""ownerId"":""729492ac-a214-4874-95fc-e0609a5ac9b6""
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/groups";
$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 groupe",
"ownerId":"729492ac-a214-4874-95fc-e0609a5ac9b6"
}';
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.2/groups"
json := `{
"name":"Mon groupe",
"ownerId":"729492ac-a214-4874-95fc-e0609a5ac9b6"
}`
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))
}
- Payload
| Parameter | Type | Requis | Description |
|---|---|---|---|
name |
String | true | Nom du groupe |
ownerId |
String | false | Identifiant de l'utilisateur propriétaire du groupe, si différent de l'utilisateur courant |
Format de réponse
Format de réponse
{
"id":"007f2a20-1790-410f-8d54-7eafad4cb856",
"name":"Mon groupe",
"ownerId":"729492ac-a214-4874-95fc-e0609a5ac9b6",
"createdAt": "2018-03-02T10:18:55.371+01:00",
"updatedAt": "2018-03-02T10:18:55.371+01:00"
}
- Status code : 201 Created
- Response Body : Renvoie un objet groupe
Erreurs possibles
| Status HTTP | Code | Detail | Description |
|---|---|---|---|
| 403 Forbidden | Forbidden | N/A | Vous n'avez pas les droits sur l'utilisateur que vous souhaitez associer |
| 400 BadRequest | ReferenceNotFound | ownerId | L'identifiant de l'utilisateur renseigné comme owner n'existe pas |
| 400 BadRequest | NameNotAvailable | groupname | Le nom de groupe n'est pas disponible |
- Modifier un groupe
:id-group
Ce point d'accès permet de modifier un groupe.
Format de requête
Format de requête
curl -X PUT "https://[SERVER_URL]/api/v1.2/groups/[id_group]" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '{
"name":"Nouveau nom",
"ownerId":"729492ac-a214-4874-95fc-e0609a5ac9b6"
}'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]");
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\":\"Nouveau nom\"," +
"\"ownerId\":\"729492ac-a214-4874-95fc-e0609a5ac9b6\"" +
"}";
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.2");
var request = new RestRequest("/groups/[id_group]", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.RequestFormat = DataFormat.Json;
var json = @"{
""name"":""Nouveau nom"",
""ownerId"":""729492ac-a214-4874-95fc-e0609a5ac9b6""
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse r = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]", Method.PUT)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{
""name"":""Nouveau nom"",
""ownerId"":""729492ac-a214-4874-95fc-e0609a5ac9b6""
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]";
$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":"Nouveau nom",
"ownerId":"729492ac-a214-4874-95fc-e0609a5ac9b6"
}';
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.2/groups/[id_group]"
json := `{
"name":"Nouveau nom",
"ownerId":"729492ac-a214-4874-95fc-e0609a5ac9b6"
}`
payload := strings.NewReader(json)
req, _ := http.NewRequest("PUT", 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 | Identifiant du groupe à modifier |
- Payload
| Parameter | Type | Description |
|---|---|---|
name |
String | Nom du groupe |
ownerId |
String | Identifiant de l'utilisateur propriétaire du groupe |
Format de réponse
Format de réponse
{
"id":"007f2a20-1790-410f-8d54-7eafad4cb856",
"name":"Nouveau nom",
"ownerId":"729492ac-a214-4874-95fc-e0609a5ac9b6",
"createdAt": "2018-03-02T10:18:55.371+01:00",
"updatedAt": "2018-03-02T10:18:55.371+01:00"
}
- Status code : 200 Ok
- Response Body : Renvoie un objet groupe
Erreurs possibles
| Status HTTP | Code | Detail | Description |
|---|---|---|---|
| 400 BadRequest | ReferenceNotFound | ownerId | L'identifiant de l'utilisateur renseigné comme owner n'existe pas |
| 400 BadRequest | NameNotAvailable | groupname | Le nom de groupe n'est pas disponible |
| 403 Forbidden | Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou sur l'utilisateur que vous souhaitez associer |
- Supprimer un groupe
:id-group
Ce point d'accès permet de supprimer un groupe donné.
Format de requête
Format de requête
curl -X DELETE \
"https://[SERVER_URL]/api/v1.2/groups/[id_group]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]");
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.2");
var request = new RestRequest("/groups/[id_group]", Method.DELETE);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json")
IRestResponse response = client.Execute(request);
Dim client = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request = new RestRequest("/groups/[id_group]", Method.DELETE)
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.2/groups/[id_group]";
$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.2/groups/[id_group]"
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 du groupe à supprimer |
- Payload
N/A
Format de réponse
- Status code : 204 No Content
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | Le groupe auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | Forbidden | Vous n'avez pas les droits sur le groupe que vous souhaitez supprimer |
| 400 BadRequest | CannotRemoveUserFromDefaultGroup | Opération impossible : C'est le groupe par défaut d'un utilisateur |
| 400 BadRequest | CannotRemoveUserFromHisLastGroup | Opération impossible : C'est le dernier groupe d'un utilisateur |
| 400 BadRequest | GroupUsedInScheduledDiffusion | Opération impossible : Ce groupe est utilisé dans une diffusion programmée |
| 400 BadRequest | GroupUsedInSmsPlusSubKeyword | Opération impossible : Ce groupe est associé à une règle de routage SMS+ |
- Ajouter des utilisateurs à un groupe
:id-group/add/users
Ce point d'accès permet d'ajouter des utilisateurs existants à un groupe.
Format de requête
Format de requête
curl -X PUT "https://[SERVER_URL]/api/v1.2/groups/[id_group]/add/users" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '["id_user1", "id_user_2"]'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/add/users");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("PUT");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("Content-Type", "application/json");
con.setDoOutput(true);
String postJsonData = "[\"id_user1\", \"id_user_2\"]";
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.2");
var request = new RestRequest("/groups/[id_group]/add/users", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.RequestFormat = DataFormat.Json;
var userIds = new string[] {"id_user1", "id_user2"};
request.AddParameter("application/json", JsonConvert.SerializeObject(userIds), ParameterType.RequestBody);
IRestResponse r = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/add/users", Method.PUT)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
dim userIds = New string() {"0b3ff7bf-55c9-4416-8fb5-d7b216550b51"}
request.AddParameter("application/json", JsonConvert.SerializeObject(userIds), ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/add/users";
$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='["id_user1", "id_user_2"]';
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.2/groups/[id_group]/add/users"
json := `["id_user1", "id_user_2", ...]`
payload := strings.NewReader(json)
req, _ := http.NewRequest("PUT", 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
| Champ | Type | Description |
|---|---|---|
| id_group | String | Identifiant du groupe auquel rajouter les utlisateurs |
- Payload
Tableau avec les identifiants des utilisateurs à ajouter au groupe
Format de réponse
- Status code : 200 Ok
- Payload : N/A
Erreurs possibles
| Status HTTP | Code | Detail | Description |
|---|---|---|---|
| 404 NotFound | N/A | N/A | Le groupe n'existe pas |
| 400 BadRequest | ReferenceNotFound | Id de l'utilisateur | L'identifiant de l'utilisateur renseigné n'existe pas |
| 403 Forbidden | Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou sur l'utilisateur que vous souhaitez associer |
- Retirer des utilisateurs d'un groupe
:id-group/remove/users
Ce point d'accès permet de retirer des utilisateurs existants d'un groupe.
Format de requête
Format de requête
curl -X PUT "https://[SERVER_URL]/api/v1.2/groups/[id_group]/remove/users" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '["id_user1", "id_user_2"]'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/remove/users");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("PUT");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("Content-Type", "application/json");
con.setDoOutput(true);
String postJsonData = "[\"id_user1\", \"id_user_2\"]";
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.2");
var request = new RestRequest("/groups/[id_group]/remove/users", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.RequestFormat = DataFormat.Json;
var userIds = new string[] {"id_user1", "id_user2"};
request.AddParameter("application/json", JsonConvert.SerializeObject(userIds), ParameterType.RequestBody);
IRestResponse r = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/remove/users", Method.PUT)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
dim userIds = New string() {"0b3ff7bf-55c9-4416-8fb5-d7b216550b51"}
request.AddParameter("application/json", JsonConvert.SerializeObject(userIds), ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/remove/users";
$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='["id_user1", "id_user_2"]';
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.2/groups/[id_group]/remove/users"
json := `["id_user1", "id_user_2", ...]`
payload := strings.NewReader(json)
req, _ := http.NewRequest("PUT", 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
| Champ | Type | Description |
|---|---|---|
| id_group | String | Identifiant du groupe auquel retirer les utilisateurs |
- Payload
Tableau avec les identifiants des utilisateurs à retirer du groupe
Format de réponse
- Status code : 200 Ok
- Payload: N/A
Erreurs possibles
| Status HTTP | Code | Detail | Description |
|---|---|---|---|
| 404 NotFound | N/A | N/A | Le groupe n'existe pas |
| 403 Forbidden | Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou sur l'utilisateur que vous souhaitez associer |
| 400 BadRequest | ReferenceNotFound | Id de l'utilisateur | L'identifiant de l'utilisateur renseigné n'existe pas |
| 400 BadRequest | CannotRemoveOwnerFromGroup | groups-Nom du groupe | Le propriétaire d'un groupe ne peut pas être retiré du groupe |
| 400 BadRequest | CannotRemoveUserFromDefaultGroup | Opération impossible : C'est le groupe par défaut d'un utilisateur | |
| 400 BadRequest | CannotRemoveUserFromHisLastGroup | Opération impossible : C'est le dernier groupe d'un utilisateur |
- Récupérer les émetteurs personnalisés
:id-group/custom-senders/:type
Ce point d'accès permet de récuperer la liste des émetteurs personnalisés pour un groupe et un type donné
Types possibles : OADC, EMAIL, DOMAIN, FAX, VOICE
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/groups/[id_group]/custom-senders/[type]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/custom-senders/[type]");
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.2");
var request = new RestRequest("/groups/[id_group]/custom-senders/[type]", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/custom-senders/[type]", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/custom-senders/[type]";
$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.2/groups/[id_group]/custom-senders/[type]"
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 unique du groupe. |
Type |
CustomSenderType | le type d'émetteur personnalisé. |
CustomSenderType
Les valeurs possibles sont:
OADC, EMAIL, FAX, VOICE
Format de réponse
Format de réponse
["email1@sender.com", "email2@sender.com"]
- Status code :
200 Ok
- Response Body :
Renvoie un tableau d'émetteurs personnalisés (String) du type demandé
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe auquel vous tentez d'accéder |
| 400 BadRequest | InvalidValue | La valeur recherché n'est pas valide, valeurs valides : OADC, EMAIL, FAX, VOICE |
- Modifier les émetteurs personnalisés associés à un groupe
:id-group/custom-senders/:type
Ce point d'accès permet de modifier les émetteurs personnalisés associés à un groupe pour un type donné
Format de requête
Format de requête
curl -X PUT "https://[SERVER_URL]/api/v1.2/groups/[id_group]/custom-senders/[type]" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '["oadc1", "oadc2"]'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/custom-senders/[type]");
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 = "[\"oadc1\", \"oadc2\"]";
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.2");
var request = new RestRequest("/groups/[id_group]/custom-senders/[type]", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.RequestFormat = DataFormat.Json;
var json = @"["oadc1", ""oadc2""]";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse r = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/custom-senders/[type]", Method.PUT)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "[""oadc1"", ""oadc2""]"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "'https://[SERVER_URL]/api/v1.2/groups/[id_group]/custom-senders/[type]";
$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='["oadc1", "oadc2"]';
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.2/groups/[id_group]/custom-senders/[type]"
json := `["oadc1", "oadc2"]`
payload := strings.NewReader(json)
req, _ := http.NewRequest("PUT", 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 unique du groupe. |
type |
CustomSenderType | le type d'émetteur personnalisé. |
CustomSenderType
Les valeurs possibles sont:
OADC, EMAIL, FAX, VOICE
- Payload
Un tableau d'émetteurs personnalisés (String) correspondants au type donné
- Status code : 200 Ok
Erreurs possibles
| Status HTTP | Code | Description |
|---|---|---|
| 403 Forbidden | Forbidden | Vous n'avez pas les droits sur le groupe auquel vous tentez d'accéder |
| 400 BadRequest | CustomSenderCantAffectDomainToGroup | Le type DOMAIN n'est pas disponible pour les groupes |
| 400 BadRequest | NotEmpty | La liste des émetteurs personnalisés à affecter est vide |
- Vérifier si la personnalisation sms est activée pour un groupe
:id-group/oadc-enabled
Ce point d'accès permet de récuperer l'état de la personnalisation sms pour un groupe
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/groups/[id_group]/oadc-enabled" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/oadc-enabled");
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.2");
var request = new RestRequest("/groups/[id_group]/oadc-enabled", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/oadc-enabled", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/oadc-enabled";
$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.2/groups/[id_group]/oadc-enabled"
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 unique du groupe. |
Format de réponse
Format de réponse
true
- Status code :
200 Ok
- Response Body :
Renvoie un booléen indiquant l'état actuel de la personnalisation sms pour le groupe
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe auquel vous tentez d'accéder |
- Définir la personnalisation sms pour un groupe
:id-group/oadc-enabled
Ce point d'accès permet de définir l'état de la personnalisation sms pour un groupe
Format de requête
Format de requête
curl -X PUT "https://[SERVER_URL]/api/v1.2/groups/[id_group]/oadc-enabled" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d 'true'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/oadc-enabled");
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 = "true";
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.2");
var request = new RestRequest("/groups/[id_group]/oadc-enabled", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.RequestFormat = DataFormat.Json;
var json = @"true";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse r = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/oadc-enabled", Method.PUT)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "true"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/oadc-enabled";
$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='true';
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.2/groups/[id_group]/oadc-enabled"
json := `true`
payload := strings.NewReader(json)
req, _ := http.NewRequest("PUT", 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 unique du groupe. |
- Payload :
Un boolean spécifiant l'état voulu
- 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 auquel vous tentez d'accéder |
- Créer un email personnalisé
:id-group/custom-senders/EMAIL
Ce point d'accès permet de créer des emails personnalisés pour un groupe.
Les noms de domaine des emails que vous tentez de créer doivent faire partie des noms de domaine vous ayant été attribués
(Récupérer les émetteurs personnalisés disponibles)
Format de requête
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.2/groups/[id_group]/custom-senders/EMAIL" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '["monemail@domain.com"]'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/custom-senders/EMAIL");
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 = "[\"monemail@domain.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.2");
var request = new RestRequest("/groups/[id_group]/custom-senders/EMAIL", Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.RequestFormat = DataFormat.Json;
var json = @"[""monemail@domain.com""]";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse r = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/custom-senders/EMAIL", Method.POST)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "[""monemail@domain.com""]"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/custom-senders/[type]";
$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='["monemail@domain.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.2/groups/[id_group]/custom-senders/EMAIL"
json := `["monemail@domain.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))
}
- Payload
un tableau contenant les adresses emails que vous souhaitez créer au format String
Format de réponse
Format de réponse
["monemail@domain.com"]
- Status code : 201 Created
- Response Body :
Un tableau contenant les emails créés au format String
Erreurs possibles
| Status HTTP | Code | Description |
|---|---|---|
| 403 Forbidden | Forbidden | Vous n'avez pas les droits sur le groupe auquel vous souhaitez accéder |
| 400 BadRequest | Invalid | L'adresse email n'est pas valide |
| 400 BadRequest | CustomSenderInvalidEmail | Le nom de domaine utilisé n'est pas autorisé |
| 400 BadRequest | NotNull | La liste d'emails est vide |
| 400 BadRequest | CustomSenderAlreadyExist | L'émetteur personnalisé existe déjà |
2. Gérer ses utilisateurs
Les utilisateurs de l'application peuvent avoir les rôles Administrateur, Superviseur ou Diffuseur.
Il est possible de créer/modifier/supprimer les utilisateurs superviseurs et diffuseurs et de gérer leurs informations (nom, prénom, mail ...) ainsi que de configurer leurs groupes, ...
Structure d'un utilisateur
| Champ | Type | Read-Only | Requis | Description |
|---|---|---|---|---|
| id | String | false | true | Identifiant unique de l'utilisateur |
| managerId | String | false | true | Identifiant du manager |
| role | rôle | false | true | Role |
| groupIds | String[] | false | true | Liste des groupes auxquels appartient l'utilisateur |
| monitoredGroupIds | String[] | false | false | Liste des groupes que l'utilisateur surveille |
| mail2smsDefaultGroupId | String | false | true (si option) | Groupe par défaut utilisé par l'interface mail (ne renseigner que si le compte a l'option InterfaceMail) |
| webDefaultGroupId | String | false | true | Groupe par défaut utilisé dans l'IHM |
| lightAPIDefaultGroupId | String | false | true (si option) | Groupe par défaut utilisé par l'API light (ne renseigner que si le compte a l'option LightAPI) |
| lightAPIAccessToken | String | true | N/A | Clé d'API Light (Affiché uniquement si le compte a l'option LightAPI) |
| login | String | false | true | login de l'utilisateur |
| name | String | false | true | Nom |
| firstName | String | false | true | Prénom |
| String | false | true | ||
| doNotSendEmail | boolean | false | false | Indiquer si l'adresse email de cet utilisateur ne doit pas recevoir des messages (bilan d'envois, notification de réponse, etc.) |
| unreachableSmsNumberQuarantineEnabled | boolean | false | false | Indiquer si les numéros injoignables doivent être mis en quarantaine lors de l'envoi d'un SMS (activé par défaut) |
| landline | String | false | false | Numéro de téléphone |
| cellular | String | false | false | Numéro de mobile |
| faxNumber | String | false | false | Numéro de fax |
| frequencyReportDistribution | fréquence | false | false | Fréquence d'envoi des rapports de diffusions |
| receiveAllReports | boolean | false | false | Envoyer une copie des bilans de fin de campagnes à cet utilisateur |
| activeStatus | boolean | false | false | Statut de l'utilisateur |
| affectableContracts | String[] | false | false (si option) | Liste des contrats affectables à ses subalternes (si option entités facturables et utilisateur Superviseur) |
| defaultAffectableContract | String | false | false (si option) | Contrat affectable à ses subalternes par défaut (si option entités facturables et utilisateur Superviseur) |
| affectedContract | String | false | false (si option) | Contrat affecté à l'utilisateur (si option entités facturables) |
| forwardReplies | boolean | false | false (si option) | Transférer les réponses SMS par email (si option réponse SMS) |
| forwardSmsPlus | boolean | false | false (si option) | Autoriser l'envoi d'email à cet utilisateur lors de réception de SMS+ (si option SMS+) |
| ackEmailInterfaceDiffusion | boolean | false | false (si option) | Recevoir les emails de confirmation de prise en compte pour les diffusions lancées par Email interface |
| managedUserIds | String[] | true | N/A | Liste des identifiants des subalternes |
| cvo | String | true | N/A | Identifiant du contrat principal |
| createdAt | String | true | N/A | Date de création |
| updatedAt | String | true | N/A | Date de la dernière modification |
Rôle
Valeurs autorisées : SUPERVISEUR,DIFFUSEUR
Fréquence
Valeurs autorisées : CURRENT, DAILY, NEVER
- Lister les utilisateurs
Ce point d'accès permet de récupérer la liste paginée des utilisateurs sous sa responsabilité.
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/users" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/users");
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.2");
var request = new RestRequest("/users", Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/users", Method.GET)
request.AddHeader("cache-control", "no-cache")
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/users";
$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.2/users"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
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
{
"content": [{
"id": "95880138-2d59-42a8-9ca0-3365128d761d",
"name": "Da silva",
"firstName": "Raphaël",
"cvo": "CVOSI38417821",
"login": "superviseur",
"role": "SUPERVISEUR",
"email": "harumclara.meyer@hotmail.fr",
"landline": "+33187921607",
"cellular": "+33734139526",
"faxNumber": "+33150082961",
"createdAt": "2018-02-02T15:47:02.704+01:00",
"updatedAt": "2018-02-02T15:47:02.704+01:00",
"groupIds": ["b4945cae-bb77-4f39-8fa6-b10226f75d08", "d2ee406a-3434-46aa-9285-1206707ceeed", "ec278b31-6ace-4c94-a52a-daf500f6cf9f", "46dc46df-1beb-4656-8b1c-69c65d8d2533", "653ee337-04e6-405c-8ce6-9545bdf5e293"],
"monitoredGroupIds": ["b4945cae-bb77-4f39-8fa6-b10226f75d08", "d2ee406a-3434-46aa-9285-1206707ceeed"],
"mail2smsDefaultGroupId": "46dc46df-1beb-4656-8b1c-69c65d8d2533",
"webDefaultGroupId": "46dc46df-1beb-4656-8b1c-69c65d8d2533",
"lightAPIDefaultGroupId": "46dc46df-1beb-4656-8b1c-69c65d8d2533",
"frequencyReportDistribution": "NEVER",
"receiveAllReports": false,
"lightAPIAccessToken": "67c1d0d1-f1b3-433b-8c75-e31fe037e258",
"activeStatus": true,
"managerId": "0b3ff7bf-55c9-4416-8fb5-d7b216550b51",
"managedUserIds": ["5f065e71-f4b8-496c-8440-781843f62cf6"],
"affectableContracts": ["CVOSI38417821"],
"defaultAffectableContract": "CVOSI38417821",
"affectedContract": "CVOSI38417821",
"forwardReplies": true,
"forwardSmsPlus": true
}, {
"id": "d5ef11d0-f448-415c-ac9a-f9eff1db276a",
"name": "Philippe",
"firstName": "Mael",
"cvo": "CVOSI38417821",
"login": "diffuseur1",
"role": "DIFFUSEUR",
"email": "delenitiambre.bernard@hotmail.fr",
"landline": "+33129589432",
"cellular": "+33799114892",
"createdAt": "2018-02-02T15:47:02.750+01:00",
"updatedAt": "2018-02-02T15:47:02.750+01:00",
"groupIds": ["b4945cae-bb77-4f39-8fa6-b10226f75d08", "d2ee406a-3434-46aa-9285-1206707ceeed", "ec278b31-6ace-4c94-a52a-daf500f6cf9f", "46dc46df-1beb-4656-8b1c-69c65d8d2533", "653ee337-04e6-405c-8ce6-9545bdf5e293"],
"monitoredGroupIds": [],
"mail2smsDefaultGroupId": "46dc46df-1beb-4656-8b1c-69c65d8d2533",
"webDefaultGroupId": "46dc46df-1beb-4656-8b1c-69c65d8d2533",
"lightAPIDefaultGroupId": "46dc46df-1beb-4656-8b1c-69c65d8d2533",
"frequencyReportDistribution": "NEVER",
"receiveAllReports": false,
"lightAPIAccessToken": "22f4441e-3489-47b3-bbf2-20f7835c2cb3",
"activeStatus": true,
"managerId": "5f065e71-f4b8-496c-8440-781843f62cf6",
"managedUserIds": [],
"affectableContracts": [],
"affectedContract": "CVOSI38417821",
"forwardReplies": true,
"forwardSmsPlus": true
}],
"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
}, {
"direction": "ASC",
"property": "firstName",
"ignoreCase": false,
"nullHandling": "NATIVE",
"descending": false,
"ascending": true
}],
"numberOfElements": 2
}
- Status code : 200 OK
- Response Body : Retourne une liste d'objets utilisateur
Filtres
Il est possible de filtrer les résultats des utilisateurs à l'aide des paramètres d'URL ci-dessous.
| Champ | Type | Description |
|---|---|---|
| managerUserId | String | identifiant du manager |
| roles | Role[] | Liste des rôles |
| fullName | String | Nom et prénom |
| activeStatus | Boolean | Statut |
| affectedContract | String | Identifiant du contrat affecté |
| affectableContract | String | Identifiant du contrat affectable (dans le cas des superviseurs) |
| groupId | String | identifiant du groupe dont sont membres les utilisateurs |
Par exemple, la requête ci-dessous recherche les utilisateurs ayant pour rôle DIFFUSEUR.
curl -X GET "https://[SERVER_URL]/api/v1.2/users?roles=DIFFUSEUR"
- Récupérer un utilisateur
:id-user
Ce point d'accès permet de récupérer un utilisateur à partir de son identifiant .
On peut aussi récupérer l'utilisateur courant en remplaçant le /api/v1.2/users/:id-user par /api/v1.2/users/me
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/users/[id_user]" \
-H "Authorization: Bearer [Access-Token]" \
URL url = new URL("https://[SERVER_URL]/api/v1.2/users/[id_user]");
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.2");
var request = new RestRequest("/users/[id_user]", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/users/[id_user]", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/users/[id_user]";
$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.2/users/[id_user]"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
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-user |
String | L'identifiant unique de l'utilisateur |
Format de réponse
Format de réponse
{
"id": "d5ef11d0-f448-415c-ac9a-f9eff1db276a",
"name": "Philippe",
"firstName": "Mael",
"cvo": "CVOSI38417821",
"login": "diffuseur1",
"role": "DIFFUSEUR",
"email": "delenitiambre.bernard@hotmail.fr",
"landline": "+33129589432",
"cellular": "+33799114892",
"createdAt": "2018-02-02T15:47:02.750+01:00",
"updatedAt": "2018-02-02T15:47:02.750+01:00",
"userIds": ["b4945cae-bb77-4f39-8fa6-b10226f75d08", "d2ee406a-3434-46aa-9285-1206707ceeed", "46dc46df-1beb-4656-8b1c-69c65d8d2533", "ec278b31-6ace-4c94-a52a-daf500f6cf9f", "653ee337-04e6-405c-8ce6-9545bdf5e293"],
"groupIds": ["b4945cae-bb77-4f39-8fa6-b10226f75d08", "d2ee406a-3434-46aa-9285-1206707ceeed", "ec278b31-6ace-4c94-a52a-daf500f6cf9f", "46dc46df-1beb-4656-8b1c-69c65d8d2533", "653ee337-04e6-405c-8ce6-9545bdf5e293"],
"monitoredGroupIds": ["b4945cae-bb77-4f39-8fa6-b10226f75d08", "d2ee406a-3434-46aa-9285-1206707ceeed"],
"mail2smsDefaultuserId": "46dc46df-1beb-4656-8b1c-69c65d8d2533",
"webDefaultuserId": "46dc46df-1beb-4656-8b1c-69c65d8d2533",
"lightAPIDefaultuserId": "46dc46df-1beb-4656-8b1c-69c65d8d2533",
"frequencyReportDistribution": "NEVER",
"receiveAllReports": false,
"lightAPIAccessToken": "22f4441e-3489-47b3-bbf2-20f7835c2cb3",
"activeStatus": true,
"managerId": "5f065e71-f4b8-496c-8440-781843f62cf6",
"managedUserIds": [],
"affectableContracts": [],
"affectedContract": "CVOSI38417821",
"forwardReplies": true,
"forwardSmsPlus": true
}
- Status code : 200 Ok
- Response Body : Renvoie un objet utilisateur
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de l'utilisateur auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur l'utilisateur auquel vous tentez d'accéder |
- Créer un utilisateur
Ce point d'accès permet de créer un utilisateur.
Format de requête
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.2/users" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '{
"managerId": "28edc6a7-df1f-4c3f-bed7-2ada375a9146",
"role": "SUPERVISEUR",
"groupIds": ["b6bf2049-9618-4f01-b8aa-1e9f8364e42d"],
"monitoredGroupIds": ["b6bf2049-9618-4f01-b8aa-1e9f8364e42d"],
"webDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"mail2smsDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"lightAPIDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"login": "4fb0d0de_0840_4a13_9dea_ff1976693a8a",
"name": "Doe",
"firstName": "John",
"email": "email@orange.com",
"frequencyReportDistribution": "CURRENT",
"receiveAllReports": "true",
"affectableContracts": ["CVOSI03856054"],
"defaultAffectableContract": "CVOSI03856054",
"affectedContract": "CVOSI03856054",
"forwardReplies": "false",
"forwardSmsPlus": "false"
}'
URL url = new URL("https://[SERVER_URL]/api/v1.2/users");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("cache-control", "no-cache");
con.setDoOutput(true);
String postJsonData = "{" +
" \"managerId\": \"28edc6a7-df1f-4c3f-bed7-2ada375a9146\"," +
" \"role\": \"SUPERVISEUR\"," +
" \"groupIds\": [\"b6bf2049-9618-4f01-b8aa-1e9f8364e42d\"]," +
" \"monitoredGroupIds\": [\"b6bf2049-9618-4f01-b8aa-1e9f8364e42d\"]," +
" \"webDefaultGroupId\": \"b6bf2049-9618-4f01-b8aa-1e9f8364e42d\"," +
" \"mail2smsDefaultGroupId\": \"b6bf2049-9618-4f01-b8aa-1e9f8364e42d\"," +
" \"lightAPIDefaultGroupId\": \"b6bf2049-9618-4f01-b8aa-1e9f8364e42d\"," +
" \"login\": \"4fb0d0de_0840_4a13_9dea_ff1976693a8a\"," +
" \"name\": \"Doe\"," +
" \"firstName\": \"John\"," +
" \"email\": \"email@orange.com\"," +
" \"frequencyReportDistribution\": \"CURRENT\"," +
" \"receiveAllReports\": \"true\"," +
" \"affectableContracts\": [\"CVOSI03856054\"]," +
" \"defaultAffectableContract\": \"CVOSI03856054\"," +
" \"affectedContract\": \"CVOSI03856054\"," +
" \"forwardReplies\": \"false\"," +
" \"forwardSmsPlus\": \"false\"" +
"}";
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.2");
var request = new RestRequest("/users", Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.RequestFormat = DataFormat.Json;
var json = @"{
""managerId"": ""28edc6a7-df1f-4c3f-bed7-2ada375a9146"",
""role"": ""SUPERVISEUR"",
""groupIds"": [""b6bf2049-9618-4f01-b8aa-1e9f8364e42d""],
""monitoredGroupIds"": [""b6bf2049-9618-4f01-b8aa-1e9f8364e42d""],
""webDefaultGroupId"": ""b6bf2049-9618-4f01-b8aa-1e9f8364e42d"",
""mail2smsDefaultGroupId"": ""b6bf2049-9618-4f01-b8aa-1e9f8364e42d"",
""lightAPIDefaultGroupId"": ""b6bf2049-9618-4f01-b8aa-1e9f8364e42d"",
""login"": ""4fb0d0de_0840_4a13_9dea_ff1976693a8a"",
""name"": ""Doe"",
""firstName"": ""John"",
""email"": ""email@orange.com"",
""frequencyReportDistribution"": ""CURRENT"",
""receiveAllReports"": ""true"",
""affectableContracts"": [""CVOSI03856054""],
""defaultAffectableContract"": ""CVOSI03856054"",
""affectedContract"": ""CVOSI03856054"",
""forwardReplies"": ""false"",
""forwardSmsPlus"": ""false""
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse r = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/users", Method.POST)
request.AddHeader("cache-control", "no-cache")
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{
""managerId"": ""28edc6a7-df1f-4c3f-bed7-2ada375a9146"",
""role"": ""SUPERVISEUR"",
""groupIds"": [""b6bf2049-9618-4f01-b8aa-1e9f8364e42d""],
""monitoredGroupIds"": [""b6bf2049-9618-4f01-b8aa-1e9f8364e42d""],
""webDefaultGroupId"": ""b6bf2049-9618-4f01-b8aa-1e9f8364e42d"",
""mail2smsDefaultGroupId"": ""b6bf2049-9618-4f01-b8aa-1e9f8364e42d"",
""lightAPIDefaultGroupId"": ""b6bf2049-9618-4f01-b8aa-1e9f8364e42d"",
""login"": ""4fb0d0de_0840_4a13_9dea_ff1976693a8a"",
""name"": ""Doe"",
""firstName"": ""John"",
""email"": ""email@orange.com"",
""frequencyReportDistribution"": ""CURRENT"",
""receiveAllReports"": ""true"",
""affectableContracts"": [""CVOSI03856054""],
""defaultAffectableContract"": ""CVOSI03856054"",
""affectedContract"": ""CVOSI03856054"",
""forwardReplies"": ""false"",
""forwardSmsPlus"": ""false""
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/users";
$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='{
"managerId": "28edc6a7-df1f-4c3f-bed7-2ada375a9146",
"role": "SUPERVISEUR",
"groupIds": ["b6bf2049-9618-4f01-b8aa-1e9f8364e42d"],
"monitoredGroupIds": ["b6bf2049-9618-4f01-b8aa-1e9f8364e42d"],
"webDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"mail2smsDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"lightAPIDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"login": "4fb0d0de_0840_4a13_9dea_ff1976693a8a",
"name": "Doe",
"firstName": "John",
"email": "email@orange.com",
"frequencyReportDistribution": "CURRENT",
"receiveAllReports": "true",
"affectableContracts": ["CVOSI03856054"],
"defaultAffectableContract": "CVOSI03856054",
"affectedContract": "CVOSI03856054",
"forwardReplies": "false",
"forwardSmsPlus": "false"
}';
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.2/users"
json := `{
"managerId": "28edc6a7-df1f-4c3f-bed7-2ada375a9146",
"role": "SUPERVISEUR",
"groupIds": ["b6bf2049-9618-4f01-b8aa-1e9f8364e42d"],
"monitoredGroupIds": ["b6bf2049-9618-4f01-b8aa-1e9f8364e42d"],
"webDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"mail2smsDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"lightAPIDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"login": "4fb0d0de_0840_4a13_9dea_ff1976693a8a",
"name": "Doe",
"firstName": "John",
"email": "email@orange.com",
"frequencyReportDistribution": "CURRENT",
"receiveAllReports": "true",
"affectableContracts": ["CVOSI03856054"],
"defaultAffectableContract": "CVOSI03856054",
"affectedContract": "CVOSI03856054",
"forwardReplies": "false",
"forwardSmsPlus": "false"
}`
payload := strings.NewReader(json)
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Payload
| Champ | Type | Requis | Description |
|---|---|---|---|
| managerId | String | false | Identifiant du manager (l'identifiant de l'utilisateur connecté est utilisé par défaut) |
| role | rôle | true | Role |
| groupIds | String[] | true | Liste des groupes auxquels appartient l'utilisateur |
| monitoredGroupIds | String[] | false | Liste des groupes que l'utilisateur surveille |
| mail2smsDefaultGroupId | String | true (si option) | Groupe par défaut utilisé par l'interface mail (ne renseigner que si le compte a l'option InterfaceMail) |
| webDefaultGroupId | String | true | Groupe par défaut utilisé dans l'IHM |
| lightAPIDefaultGroupId | String | true (si option) | Groupe par défaut utilisé par l'API light (ne renseigner que si le compte a l'option lightAPI) |
| login | String | true | login de l'utilisateur |
| name | String | true | Nom |
| firstName | String | true | Prénom |
| String | true | ||
| landline | String | false | Numéro de téléphone |
| cellular | String | false | Numéro de mobile |
| faxNumber | String | false | Numéro de fax |
| frequencyReportDistribution | fréquence | false | Fréquence d'envoi des rapports de diffusions |
| receiveAllReports | boolean | false | Recevoir une copie des bilans de fin de campagnes à cet utilisateur |
| activeStatus | boolean | false | Statut de l'utilisateur |
| affectableContracts | String[] | false (si option) | Liste des contrats affectables à ses subalternes (si option entités facturable et utilisateur Superviseur) |
| defaultAffectableContract | String | false (si option) | Contrat affectable à ses subalternes par défaut (si option entités facturable et utilisateur Superviseur) |
| affectedContract | String | false (si option) | Contrat affecté à l'utilisateur (si option entités facturable) |
| forwardReplies | boolean | false | Transférer les réponses SMS par email |
| forwardSmsPlus | boolean | false | Autoriser l'envoi d'email à cet utilisateur lors de réception de SMS+ |
| sendConnectionKit | boolean | false | Indiquer si le kit de connexion sera envoyé à la création de l'utilisateur (valeur par défaut: true) |
Format de réponse
Format de réponse
{
"id": "2b58803b-c018-44ed-9427-7ecf145c971c",
"name": "Doe",
"firstName": "John",
"cvo": "CVOSI03856054",
"login": "4fb0d0de_0840_4a13_9dea_ff1976693a8a",
"role": "SUPERVISEUR",
"email": "email@orange.com",
"createdAt": "2018-03-07T14:33:06.203+01:00",
"updatedAt": "2018-03-07T14:33:06.391+01:00",
"groupIds": ["b6bf2049-9618-4f01-b8aa-1e9f8364e42d"],
"monitoredGroupIds": ["b6bf2049-9618-4f01-b8aa-1e9f8364e42d"],
"mail2smsDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"webDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"lightAPIDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"frequencyReportDistribution": "CURRENT",
"receiveAllReports": true,
"lightAPIAccessToken": "ec1105dd-e331-4032-afa6-2c47f92da64c",
"activeStatus": true,
"managerId": "28edc6a7-df1f-4c3f-bed7-2ada375a9146",
"managedUserIds": [],
"affectableContracts": ["CVOSI03856054"],
"defaultAffectableContract": "CVOSI03856054",
"affectedContract": "CVOSI03856054",
"forwardReplies": false,
"forwardSmsPlus": false
}
- Status code : 201 Created
- Response Body : Renvoie un objet utilisateur
Erreurs possibles
| Status HTTP | Code | Details | Description |
|---|---|---|---|
| 404 NotFound | NotFound | N/A | L'utilisateur ([id_user]) n'existe pas |
| 403 Forbidden | Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou le manager que vous souhaitez associer |
| 400 BadRequest | ReferenceNotFound | nom du champ | Le champ indiqué par "details" est un identifiant qui n'existe pas |
| 400 BadRequest | NotEmpty | nom du champ | Le champ indiqué par "details" ne doit pas être vide |
| 400 BadRequest | NotNull | nom du champ | Le champ indiqué par "details" est obligatoire |
| 400 BadRequest | InvalidValue | nom du champ | La valeur renseignée n'est pas valide (pour les champs role ou frequencyReportDistribtion ) |
| 400 BadRequest | UserMustBeMemberOfMonitoredGroup | nom du groupe | Le groupe ne peut pas être surveillé si l'utilisateur n'en est pas membre |
| 400 BadRequest | InvalidMonitoredGroup | N/A | Vous n'avez pas les droits sur le groupe vous souhaitez définir comme surveillé |
| 400 BadRequest | AdminAndDiffusorsCanNotHaveAffectableContracts | nom du champ | Les administrateurs et les utilisateur ne peuvent pas avoir d'entité facturable délégable |
| 400 BadRequest | NotAnEntityContract | nom du champ | Entité(s) facturable(s) non délégable(s) pour le compte |
| 400 BadRequest | ContractNotAffectableByManager | nom du champ | Entité(s) facturable(s) non délégable(s) par le superviseur |
| 400 BadRequest | MissingAffectableContract | nom du champ | Veuillez sélectionner au moins une entité facturable délégable par défaut |
| 400 BadRequest | ManageEntityOptionInactive | nom du champ | Le champ indiqué par "details" ne doit pas être spécifié si le compte n'a pas l'option entités facturables |
| 400 BadRequest | LightAPIOptionInactive | lightAPIDefaultGroupId | Le champ "lightAPIDefaultGroupId" ne doit pas être spécifié si le compte n'a pas l'option API Light |
| 400 BadRequest | EmailInterfaceOptionInactive | mail2smsDefaultGroupId | Le champ "mail2smsDefaultGroupId" ne doit pas être spécifié si le compte n'a pas l'option email interface |
| 400 BadRequest | SmsPlusOptionInactive | forwardSmsPlus | Le champ "forwardSmsPlus" ne doit pas être spécifié si le compte n'a pas l'option SMS+ |
- Modifier un utilisateur
:id-user
Ce point d'accès permet de modifier un utilisateur.
Format de requête
Format de requête
curl -X PUT "https://[SERVER_URL]/api/v1.2/users/[id_user]" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '{
"managerId": "28edc6a7-df1f-4c3f-bed7-2ada375a9146",
"role": "SUPERVISEUR",
"groupIds": ["b6bf2049-9618-4f01-b8aa-1e9f8364e42d"],
"monitoredGroupIds": ["b6bf2049-9618-4f01-b8aa-1e9f8364e42d"],
"webDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"mail2smsDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"lightAPIDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"login": "4fb0d0de_0840_4a13_9dea_ff1976693a8a",
"name": "Doe",
"firstName": "John",
"email": "email@orange.com",
"frequencyReportDistribution": "CURRENT",
"receiveAllReports": "true",
"affectableContracts": ["CVOSI03856054"],
"defaultAffectableContract": "CVOSI03856054",
"affectedContract": "CVOSI03856054",
"forwardReplies": "false",
"forwardSmsPlus": "false"
}'
URL url = new URL("https://[SERVER_URL]/api/v1.2/users/[id_user]");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("PUT");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("cache-control", "no-cache");
con.setDoOutput(true);
String PUTJsonData = "{" +
" \"managerId\": \"28edc6a7-df1f-4c3f-bed7-2ada375a9146\"," +
" \"role\": \"SUPERVISEUR\"," +
" \"groupIds\": [\"b6bf2049-9618-4f01-b8aa-1e9f8364e42d\"]," +
" \"monitoredGroupIds\": [\"b6bf2049-9618-4f01-b8aa-1e9f8364e42d\"]," +
" \"webDefaultGroupId\": \"b6bf2049-9618-4f01-b8aa-1e9f8364e42d\"," +
" \"mail2smsDefaultGroupId\": \"b6bf2049-9618-4f01-b8aa-1e9f8364e42d\"," +
" \"lightAPIDefaultGroupId\": \"b6bf2049-9618-4f01-b8aa-1e9f8364e42d\"," +
" \"login\": \"4fb0d0de_0840_4a13_9dea_ff1976693a8a\"," +
" \"name\": \"Doe\"," +
" \"firstName\": \"John\"," +
" \"email\": \"email@orange.com\"," +
" \"frequencyReportDistribution\": \"CURRENT\"," +
" \"receiveAllReports\": \"true\"," +
" \"affectableContracts\": [\"CVOSI03856054\"]," +
" \"defaultAffectableContract\": \"CVOSI03856054\"," +
" \"affectedContract\": \"CVOSI03856054\"," +
" \"forwardReplies\": \"false\"," +
" \"forwardSmsPlus\": \"false\"" +
"}";
DataOutputStream dataOutputStream = new DataOutputStream(con.getOutputStream());
dataOutputStream.write(PUTJsonData.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.2");
var request = new RestRequest("/users/[id_user]", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.RequestFormat = DataFormat.Json;
var json = @"{
""managerId"": ""28edc6a7-df1f-4c3f-bed7-2ada375a9146"",
""role"": ""SUPERVISEUR"",
""groupIds"": [""b6bf2049-9618-4f01-b8aa-1e9f8364e42d""],
""monitoredGroupIds"": [""b6bf2049-9618-4f01-b8aa-1e9f8364e42d""],
""webDefaultGroupId"": ""b6bf2049-9618-4f01-b8aa-1e9f8364e42d"",
""mail2smsDefaultGroupId"": ""b6bf2049-9618-4f01-b8aa-1e9f8364e42d"",
""lightAPIDefaultGroupId"": ""b6bf2049-9618-4f01-b8aa-1e9f8364e42d"",
""login"": ""4fb0d0de_0840_4a13_9dea_ff1976693a8a"",
""name"": ""Doe"",
""firstName"": ""John"",
""email"": ""email@orange.com"",
""frequencyReportDistribution"": ""CURRENT"",
""receiveAllReports"": ""true"",
""affectableContracts"": [""CVOSI03856054""],
""defaultAffectableContract"": ""CVOSI03856054"",
""affectedContract"": ""CVOSI03856054"",
""forwardReplies"": ""false"",
""forwardSmsPlus"": ""false""
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse r = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/users/[id_user]", Method.PUT)
request.AddHeader("cache-control", "no-cache")
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{
""managerId"": ""28edc6a7-df1f-4c3f-bed7-2ada375a9146"",
""role"": ""SUPERVISEUR"",
""groupIds"": [""b6bf2049-9618-4f01-b8aa-1e9f8364e42d""],
""monitoredGroupIds"": [""b6bf2049-9618-4f01-b8aa-1e9f8364e42d""],
""webDefaultGroupId"": ""b6bf2049-9618-4f01-b8aa-1e9f8364e42d"",
""mail2smsDefaultGroupId"": ""b6bf2049-9618-4f01-b8aa-1e9f8364e42d"",
""lightAPIDefaultGroupId"": ""b6bf2049-9618-4f01-b8aa-1e9f8364e42d"",
""login"": ""4fb0d0de_0840_4a13_9dea_ff1976693a8a"",
""name"": ""Doe"",
""firstName"": ""John"",
""email"": ""email@orange.com"",
""frequencyReportDistribution"": ""CURRENT"",
""receiveAllReports"": ""true"",
""affectableContracts"": [""CVOSI03856054""],
""defaultAffectableContract"": ""CVOSI03856054"",
""affectedContract"": ""CVOSI03856054"",
""forwardReplies"": ""false"",
""forwardSmsPlus"": ""false""
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/users/[id_user]";
$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='{
"managerId": "28edc6a7-df1f-4c3f-bed7-2ada375a9146",
"role": "SUPERVISEUR",
"groupIds": ["b6bf2049-9618-4f01-b8aa-1e9f8364e42d"],
"monitoredGroupIds": ["b6bf2049-9618-4f01-b8aa-1e9f8364e42d"],
"webDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"mail2smsDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"lightAPIDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"login": "4fb0d0de_0840_4a13_9dea_ff1976693a8a",
"name": "Doe",
"firstName": "John",
"email": "email@orange.com",
"frequencyReportDistribution": "CURRENT",
"receiveAllReports": "true",
"affectableContracts": ["CVOSI03856054"],
"defaultAffectableContract": "CVOSI03856054",
"affectedContract": "CVOSI03856054",
"forwardReplies": "false",
"forwardSmsPlus": "false"
}';
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.2/users/[id_user]"
json := `{
"managerId": "28edc6a7-df1f-4c3f-bed7-2ada375a9146",
"role": "SUPERVISEUR",
"groupIds": ["b6bf2049-9618-4f01-b8aa-1e9f8364e42d"],
"monitoredGroupIds": ["b6bf2049-9618-4f01-b8aa-1e9f8364e42d"],
"webDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"mail2smsDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"lightAPIDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"login": "4fb0d0de_0840_4a13_9dea_ff1976693a8a",
"name": "Doe",
"firstName": "John",
"email": "email@orange.com",
"frequencyReportDistribution": "CURRENT",
"receiveAllReports": "true",
"affectableContracts": ["CVOSI03856054"],
"defaultAffectableContract": "CVOSI03856054",
"affectedContract": "CVOSI03856054",
"forwardReplies": "false",
"forwardSmsPlus": "false"
}`
payload := strings.NewReader(json)
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Payload
| Champ | Type | Requis | Description |
|---|---|---|---|
| id | String | true | Identifiant unique de l'utilisateur |
| managerId | String | true | Identifiant du manager |
| role | rôle | true | Role |
| groupIds | String[] | true | Liste des groupes auxquels appartient l'utilisateur |
| monitoredGroupIds | String[] | false | Liste des groupes que l'utilisateur surveille |
| mail2smsDefaultGroupId | String | true (si option) | Groupe par défaut utilisé par l'interface mail (ne renseigner que si le compte a l'option InterfaceMail) |
| webDefaultGroupId | String | true | Groupe par défaut utilisé dans l'IHM |
| lightAPIDefaultGroupId | String | true (si option) | Groupe par défaut utilisé par l'API light (ne renseigner que si le compte a l'option LightAPI) |
| login | String | true | login de l'utilisateur |
| name | String | true | Nom |
| firstName | String | true | Prénom |
| String | true | ||
| landline | String | false | Numéro de téléphone |
| cellular | String | false | Numéro de mobile |
| faxNumber | String | false | Numéro de fax |
| frequencyReportDistribution | fréquence | false | Fréquence d'envoi des rapports de diffusions |
| receiveAllReports | boolean | false | Recevoir une copie des bilans de fin de campagnes à cet utilisateur |
| activeStatus | boolean | false | Statut de l'utilisateur |
| affectableContracts | String[] | false (si option) | Liste des contrats affectables à ses subalternes (si option entités facturable et utilisateur Superviseur) |
| defaultAffectableContract | String | false (si option) | Contrat affectable à ses subalternes par défaut (si option entités facturable et utilisateur Superviseur) |
| affectedContract | String | false (si option) | Contrat affecté à l'utilisateur (si option entités facturable) |
| forwardReplies | boolean | false (si option) | Transférer les réponses SMS par email (si option réponse SMS) |
| forwardSmsPlus | boolean | false (si option) | Autoriser l'envoi d'email à cet utilisateur lors de réception de SMS+ (si option SMS+) |
Format de réponse
Format de réponse
{
"id": "2b58803b-c018-44ed-9427-7ecf145c971c",
"name": "Doe",
"firstName": "John",
"cvo": "CVOSI03856054",
"login": "4fb0d0de_0840_4a13_9dea_ff1976693a8a",
"role": "SUPERVISEUR",
"email": "email@orange.com",
"createdAt": "2018-03-07T14:33:06.203+01:00",
"updatedAt": "2018-03-07T14:33:06.391+01:00",
"groupIds": ["b6bf2049-9618-4f01-b8aa-1e9f8364e42d"],
"monitoredGroupIds": ["b6bf2049-9618-4f01-b8aa-1e9f8364e42d"],
"mail2smsDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"webDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"lightAPIDefaultGroupId": "b6bf2049-9618-4f01-b8aa-1e9f8364e42d",
"frequencyReportDistribution": "CURRENT",
"receiveAllReports": true,
"lightAPIAccessToken": "ec1105dd-e331-4032-afa6-2c47f92da64c",
"activeStatus": true,
"managerId": "28edc6a7-df1f-4c3f-bed7-2ada375a9146",
"managedUserIds": [],
"affectableContracts": ["CVOSI03856054"],
"defaultAffectableContract": "CVOSI03856054",
"affectedContract": "CVOSI03856054",
"forwardReplies": false,
"forwardSmsPlus": false
}
- Status code : 200 OK
- Response Body : Renvoie un objet utilisateur
Erreurs possibles
| Status HTTP | Code | Details | Description |
|---|---|---|---|
| 404 NotFound | NotFound | N/A | L'utilisateur ([id_user]) n'existe pas |
| 403 Forbidden | Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou le manager que vous souhaitez associer |
| 400 BadRequest | ReferenceNotFound | nom du champ | Le champ indiqué par "details" est un identifiant qui n'existe pas |
| 400 BadRequest | NotEmpty | nom du champ | Le champ indiqué par "details" ne doit pas être vide |
| 400 BadRequest | UserRoleCannotBeChanged | N/A | Le rôle d'un utilisateur ne peut pas être modifié |
| 400 BadRequest | CannotModifyManager | N/A | Le supérieur hiérarchique ne peut pas être modifié |
| 400 BadRequest | InvalidValue | nom du champ | La valeur renseignée n'est pas valide (pour les champs role ou frequencyReportDistribution) |
| 400 BadRequest | UserMustBeMemberOfMonitoredGroup | nom du groupe | Le groupe ne peut pas être surveillé si l'utilisateur n'en est pas membre |
| 400 BadRequest | InvalidMonitoredGroup | N/A | Vous n'avez pas les droits sur le groupe que vous souhaitez définir comme surveillé |
| 400 BadRequest | AdminAndDiffusorsCanNotHaveAffectableContracts | nom du champ | Les administrateurs et les diffuseurs ne peuvent pas avoir d'entité facturable délégable |
| 400 BadRequest | NotAnEntityContract | nom du champ | Entité(s) facturable(s) non délégable(s) pour le compte |
| 400 BadRequest | ContractNotAffectableByManager | nom du champ | Entité(s) facturable(s) non délégable(s) par le superviseur |
| 400 BadRequest | MissingAffectableContract | nom du champ | Veuillez sélectionner au moins une entité facturable délégable par défaut |
- Supprimer un utilisateur
:id-user
Ce point d'accès permet de supprimer un utilisateur.
Format de requête
Format de requête
curl -X DELETE \
"https://[SERVER_URL]/api/v1.2/users/[id_user]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/users/[id_user]");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("DELETE");
con.setRequestProperty("Content-Type", "application/json");
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.2");
var request = new RestRequest("/users/[id_user]", Method.DELETE);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client = new RestClient("https://[SERVER_URL]/api/v1.2");
Dim request = new RestRequest("/users/[id_user]", Method.DELETE);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Authorization", "Bearer [Access-Token]");
Dim response as IRestResponse = client.Execute(request);
<?php
$url = "https://[SERVER_URL]/api/v1.2/users/[id_user]";
$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.2/users/[id_user]"
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_user | String | L'identifiant de l'utilisateur à supprimer |
- Payload
N/A
Format de réponse
- Status code : 204 No Content
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'utilisateur auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | Forbidden | Vous n'avez pas les droits sur l'utilisateur que vous souhaitez supprimer |
- changer le mot de passe d'un utilisateur
Ce point d'accès permet de changer le mot de passe d'un utilisateur.
Ce nouveau mot de passe peut être : - temporaire : l'utilisateur devra alors changer son mot de passe lors de sa première connexion sur l'IHM - définitive : l'utilisateur peut directement utiliser son nouveau mot de passe
Format de requête
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.2/users/[id_user]/change-password" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '{
"changeAtFirstConnection": "true",
"newPassword": "01PaSsW0rd!"
}'
URL url = new URL("https://[SERVER_URL]/api/v1.2/users/[id_user]/change-password");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("cache-control", "no-cache");
con.setDoOutput(true);
String postJsonData = "{" +
" \"changeAtFirstConnection\": \"true\", " +
" \"newPassword\": \"01PaSsW0rd!\" " +
"}";
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.2");
var request = new RestRequest("/users/[id_user]/change-password", Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.RequestFormat = DataFormat.Json;
var json = @"{
""changeAtFirstConnection"": ""true"",
""newPassword"": ""01PaSsW0rd!""
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse r = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/users/[id_user]/change-password", Method.POST)
request.AddHeader("cache-control", "no-cache")
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{
""changeAtFirstConnection"": ""true"",
""newPassword"": ""01PaSsW0rd!""
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/users/[id_user]/change-password";
$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='{
"changeAtFirstConnection": "true",
"newPassword": "01PaSsW0rd!"
}';
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.2/users/[id_user]/change-password"
json := `{
"changeAtFirstConnection": "true",
"newPassword": "01PaSsW0rd!"
}`
payload := strings.NewReader(json)
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Payload
| Champ | Type | Description |
|---|---|---|
| changeAtFirstConnection | boolean | indique si le nouveau mot de passe est temporaire ou définitif |
| newPassword | String | Nouveau mot de passe |
Format de réponse
- Status code : 200 OK
- Response Body : N/A
Erreurs possibles
| Status HTTP | Code | Details | Description |
|---|---|---|---|
| 404 NotFound | NotFound | N/A | L'utilisateur ([id_user]) n'existe pas |
| 403 Forbidden | Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou le manager que vous souhaitez associer |
- Récupérer les permissions d'un utilisateur
:id-user/permissions
Ce point d'accès permet de récupérer les permissions d'un utilisateur à partir de son identifiant .
Liste des permissions
| Permissions | Description |
|---|---|
| templateRead | Modèle de diffusion, messages prédéfinis: Lecture |
| templateWrite | Modèle de diffusion, messages prédéfinis: Ecriture |
| contactRead | Contacts, liste de diffusion: Lecture |
| contactWrite | Contacts, liste de diffusion: Ecriture |
| strategyRead | Stratégie: Lecture |
| strategyWrite | Stratégie: Ecriture |
| statisticsRead | Statistiques: Lecture |
| diffusionRead | Bilan des messages, bilan des envois |
| diffusionUIWrite | Diffusion autorisée par l'IHM et par API |
| diffusionEmailWrite | Diffusion autorisée par l'interface mail (si option du compte activée) |
| diffusionLightAPIWrite | Diffusion autorisée par API Light |
| diffuseurWrite | Utilisateur de type diffuseur: Ecriture |
| superviseurWrite | Utilisateur de type superviseur: Ecriture |
| smsPlusRoutingRead | Configuration du routage SMS+: Lecture |
| smsPlusRoutingWrite | Configuration du routage SMS+: Ecriture |
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/users/[id_user]/permissions" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/users/[id_user]/permissions");
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.2");
var request = new RestRequest("/users/[id_user]/permissions", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/users/[id_user]/permissions", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/users/[id_user]/permissions";
$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.2/users/[id_user]/permissions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
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-user |
String | L'identifiant unique de l'utilisateur |
Format de réponse
Format de réponse
["strategyRead", "templateRead", "diffuseurWrite", "diffusionUIWrite"]
- Status code : 200 Ok
- Response Body : Renvoie la liste des permissions de l'utilisateur
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de l'utilisateur auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur l'utilisateur auquel vous tentez d'accéder |
- Modifier les permissions d'un utilisateur
:id-user/permissions
Ce point d'accès permet de modifier les permissions d'un utilisateur.
Format de requête
Format de requête
curl -X PUT "https://[SERVER_URL]/api/v1.2/users/[id_user]/permissions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '["templateRead", "templateWrite", "strategyRead"]'
URL url = new URL("https://[SERVER_URL]/api/v1.2/users/[id_user]/permissions");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("PUT");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("cache-control", "no-cache");
con.setDoOutput(true);
String PUTJsonData = "[\"templateRead\", \"templateWrite\", \"strategyRead\"]";
DataOutputStream dataOutputStream = new DataOutputStream(con.getOutputStream());
dataOutputStream.write(PUTJsonData.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.2");
var request = new RestRequest("/users/[id_user]/permissions", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.RequestFormat = DataFormat.Json;
var json = @"[""templateRead"", ""templateWrite"", ""strategyRead""]";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse r = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/users/[id_user]/permissions", Method.PUT)
request.AddHeader("cache-control", "no-cache")
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "[""templateRead"", ""templateWrite"", ""strategyRead""]"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/users/[id_user]/permissions";
$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='["templateRead", "templateWrite", "strategyRead"]';
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.2/users/[id_user]/permissions"
json := `["templateRead", "templateWrite", "strategyRead"]`
payload := strings.NewReader(json)
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
- Status code : 200 OK
- Response Body : N/A
Erreurs possibles
| Status HTTP | Code | Details | Description |
|---|---|---|---|
| 404 NotFound | NotFound | N/A | L'utilisateur ([id_user]) n'existe pas |
| 403 Forbidden | Forbidden | N/A | Vous n'avez pas les droits sur le groupe ou le manager que vous souhaitez associer |
| 400 Forbidden | UnparsableRequest | Votre requête est mal formée, ou l'une des permissions est mal orthographiée ou n'existe pas |
- Envoyer (ou renvoyer) le kit de connexion d'un utilisateur
Ce point d'accès permet de renvoyer le kit de connexion d'un utilisateur. Ce "kit de connexion" est un mail contenant : - l'url du site web - l'identifiant de l'utilisateur - le lien pour changer son mot de passe - le lien vers le manuel utilisateur
Notez bien que ce mail ne contient pas de mot de passe.
Format de requête
Format de requête
curl -X PUT "https://[SERVER_URL]/api/v1.2/users/[id_user]/send-connection-kit" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/users/[id_user]/send-connection-kit");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("PUT");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("cache-control", "no-cache");
con.setDoOutput(true);
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.2");
var request = new RestRequest("/users/[id_user]/send-connection-kit", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
IRestResponse r = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/users/[id_user]/send-connection-kit", Method.PUT)
request.AddHeader("cache-control", "no-cache")
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.2/users/[id_user]/send-connection-kit";
$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);
?>
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.2/users/[id_user]/send-connection-kit"
req, _ := http.NewRequest("PUT", url, nil)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
fmt.Println(res)
}
- Payload : N/A
Format de réponse
- Status code : 200 OK
- Response Body : N/A
Erreurs possibles
| Status HTTP | Code | Details | Description |
|---|---|---|---|
| 404 NotFound | NotFound | N/A | L'utilisateur ([id_user]) n'existe pas |
- Récupérer les émetteurs personnalisés
:id-user/custom-senders/:type
Ce point d'accès permet de récuperer la liste des émetteurs personnalisés pour un utilisateur et un type donné
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/users/[id_user]/custom-senders/[type]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/users/[id_user]/custom-senders/[type]");
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.2");
var request = new RestRequest("/users/[id_user]/custom-senders/[type]", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/users/[id_user]/custom-senders/[type]", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/users/[id_user]/custom-senders/[type]";
$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.2/users/[id_user]/custom-senders/[type]"
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-user |
String | L'identifiant unique de l'utilisateur. |
Type |
CustomSenderType | le type d'émetteur personnalisé. |
CustomSenderType
Les valeurs possibles sont:
OADC, EMAIL, DOMAIN, FAX, VOICE
Format de réponse
Format de réponse
["email1@sender.com", "email2@sender.com"]
- Status code :
200 Ok
- Response Body :
Renvoie un tableau d'émetteurs personnalisés (String) du type demandé
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de l'utilisateur auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur l'utilisateur auquel vous tentez d'accéder |
- Modifier les émetteurs personnalisés associés à un utilisateur
:id-user/custom-senders/:type
Ce point d'accès permet de modifier les émetteurs personnalisés associés à un utilisateur pour un type donné
Format de requête
Format de requête
curl -X PUT "https://[SERVER_URL]/api/v1.2/users/[id_user]/custom-senders/[type]" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '["oadc1", "oadc2"]'
URL url = new URL("https://[SERVER_URL]/api/v1.2/users/[id_user]/custom-senders/[type]");
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 = "[\"oadc1\", \"oadc2\"]";
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.2");
var request = new RestRequest("/users/[id_user]/custom-senders/[type]", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.RequestFormat = DataFormat.Json;
var json = @"["oadc1", ""oadc2""]";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse r = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/users/[id_user]/custom-senders/[type]", Method.PUT)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "[""oadc1"", ""oadc2""]"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/users/[id_user]/custom-senders/[type]";
$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='["oadc1", "oadc2"]';
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.2/users/[id_user]/custom-senders/[type]"
json := `["oadc1", "oadc2"]`
payload := strings.NewReader(json)
req, _ := http.NewRequest("PUT", 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-user |
String | L'identifiant unique de l'utilisateur. |
type |
CustomSenderType | le type d'émetteur personnalisé. |
CustomSenderType
Les valeurs possibles sont:
OADC, EMAIL, DOMAIN, FAX, VOICE
- Payload
Un tableau d'émetteurs personnalisés (String) correspondants au type donné
- Status code : 200 Ok
Erreurs possibles
| Status HTTP | Code | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de l'utilisateur auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | Forbidden | Vous n'avez pas les droits sur l'utilisateur auquel vous tentez d'accéder |
| 400 BadRequest | NotEmpty | La liste des émetteurs personnalisés à affecter est vide |
- Vérifier si la personnalisation sms est activée pour un utilisateur
:id-user/oadc-enabled
Ce point d'accès permet de récuperer l'état de la personnalisation sms pour un utilisateur
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/users/[id_user]/oadc-enabled" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/users/[id_user]/oadc-enabled");
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.2");
var request = new RestRequest("/users/[id_user]/oadc-enabled", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/users/[id_user]/oadc-enabled", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/users/[id_user]/oadc-enabled";
$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.2/users/[id_user]/oadc-enabled"
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-user |
String | L'identifiant unique de l'utilisateur. |
Format de réponse
Format de réponse
true
- Status code :
200 Ok
- Response Body :
Renvoie un booléen indiquant l'état actuel de la personnalisation sms pour l'utilisateur
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de l'utilisateur auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur l'utilisateur auquel vous tentez d'accéder |
- Définir la personnalisation sms pour un utilisateur
:id-user/oadc-enabled
Ce point d'accès permet de définir l'état de la personnalisation sms pour un utilisateur
Format de requête
Format de requête
curl -X PUT "https://[SERVER_URL]/api/v1.2/users/[id_user]/oadc-enabled" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d 'true'
URL url = new URL("https://[SERVER_URL]/api/v1.2/users/[id_user]/oadc-enabled");
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 = "true";
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.2");
var request = new RestRequest("/users/[id_user]/oadc-enabled", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.RequestFormat = DataFormat.Json;
var json = @"true";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse r = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/users/[id_user]/oadc-enabled", Method.PUT)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "true"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/users/[id_user]/oadc-enabled";
$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"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.2/users/[id_user]/oadc-enabled"
json := `true`
payload := strings.NewReader(json)
req, _ := http.NewRequest("PUT", 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-user |
String | L'identifiant unique de l'utilisateur. |
- Payload :
Un boolean spécifiant l'état voulu
- Status code :
200 Ok
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de l'utilisateur auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | N/A | Vous n'avez pas les droits sur l'utilisateur auquel vous tentez d'accéder |
- Créer un email personnalisé
:id-user/custom-senders/EMAIL
Ce point d'accès permet de créer des emails personnalisés pour un utilisateur.
Les noms de domaine des emails que vous tentez de créer doivent faire partie des noms de domaine vous ayant été attribués
(Récupérer les émetteurs personnalisés disponibles)
Format de requête
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.2/users/[id_user]/custom-senders/EMAIL" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '["monemail@domain.com"]'
URL url = new URL("https://[SERVER_URL]/api/v1.2/users/[id_user]/custom-senders/EMAIL");
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 = "[\"monemail@domain.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.2");
var request = new RestRequest("/users/[id_user]/custom-senders/EMAIL", Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.RequestFormat = DataFormat.Json;
var json = @"[""monemail@domain.com""]";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse r = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/users/[id_user]/custom-senders/EMAIL", Method.POST)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "[""monemail@domain.com""]"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/users/[id_user]/custom-senders/EMAIL";
$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='["monemail@domain.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.2/users/[id_user]/custom-senders/EMAIL"
json := `["monemail@domain.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))
}
- Payload
un tableau contenant les adresses emails que vous souhaitez créer au format String
Format de réponse
Format de réponse
["monemail@domain.com"]
- Status code : 201 Created
- Response Body :
Un tableau contenant les emails créés au format String
Erreurs possibles
| Status HTTP | Code | Description |
|---|---|---|
| 403 Forbidden | Forbidden | Vous n'avez pas les droits sur l'utilisateur auquel vous souhaitez accéder |
| 400 BadRequest | Invalid | L'adresse email n'est pas valide |
| 400 BadRequest | CustomSenderInvalidEmail | Le nom de domaine utilisé n'est pas autorisé |
| 400 BadRequest | NotNull | La liste d'emails est vide |
| 400 BadRequest | CustomSenderAlreadyExist | L'émetteur personnalisé existe déjà |
3. 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 | |
| acquittalNumber | String | false | code personnel d'acquittement du contact |
| company | String | false | La société du contact |
| position | String | false | La fonction du contact au sein de la société |
| 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.2/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.2/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.2");
var request = new RestRequest("/groups/[id_group]/contacts", Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
var json = @"{
""name"":""Julien"",
""firstName"":""Nicolas"",
""landlineOne"":""+33115610572"",
""email"":""consequaturlena.vincent@gmail.com""
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/contacts", Method.POST)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{
""name"":""Julien"",
""firstName"":""Nicolas"",
""landlineOne"":""+33115610572"",
""email"":""consequaturlena.vincent@gmail.com""
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/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.2/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 unique 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.2/groups/:id-group/contacts/:id-contact |
Emplacement du contact créé |
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é |
| 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.2/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.2/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.2");
var request = new RestRequest("/groups/[id_group]/contacts/[id_contact]", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
var json = @"{
""name"":""Julien"",
""firstName"":""Nicolas"",
""landlineOne"":""+33115610572"",
""email"":""consequaturlena.vincent@gmail.com""
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
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")
Dim json = "{
""name"":""Julien"",
""firstName"":""Nicolas"",
""landlineOne"":""+33115610572"",
""email"":""consequaturlena.vincent@gmail.com""
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/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.2/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("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
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 unique 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.2/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 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 | 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.2/groups/[id_group]/contacts/[id_contact]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/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.2");
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.2")
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.2/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.2/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 unique 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.2/groups/[id_group]/contacts/[id_contact]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/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.2");
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.2")
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.2/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.2/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 unique 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",
"company":"Orange",
"position":"développeur",
"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.2/groups/[id_group]/contacts" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/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.2");
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.2")
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.2/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.2/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 unique 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.2/groups/[id_group]/contacts/[id_contact]/mailing-lists" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/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.2");
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.2")
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.2/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.2/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 unique 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é |
4. 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
Format de requête
curl -X POST \
"https://[SERVER_URL]/api/v1.2/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.2/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();
<?php
$url = "https://[SERVER_URL]/api/v1.2/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.2/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))
}
var client = new RestClient("https://[SERVER_URL]/api/v1.2");
var request = new RestRequest("/groups/[id_group]/mailing-lists", Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
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.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/mailing-lists", Method.POST)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
request.AddParameter("application/json", "{""name"": ""Mes amis"",""description"": ""Contient tous mes amis.""}", ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant unique 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.2/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.2/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.2/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.2/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.2");
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");
var json = @"{
""name"": ""Mes nouveaux amis"",
""description"": ""Contient tous mes nouveaux amis.""
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
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")
Dim json = "{
""name"": ""Mes nouveaux amis"",
""description"": ""Contient tous mes nouveaux amis.""
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant unique 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 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é |
| 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.2/groups/[id_group]/mailing-lists/[id_mailingList]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/mailing-lists/[id_mailingList]");
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();
<?php
$url = "https://[SERVER_URL]/api/v1.2/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.2/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))
}
var client = new RestClient("https://[SERVER_URL]/api/v1.2");
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.2")
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)
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant unique 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 diffusion d'un groupe donné.
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api/v1.2/groups/[id_group]/mailing-lists" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api/v1.2/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();
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.2/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.2/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);
?>
var client = new RestClient("https://[SERVER_URL]/api/v1.2");
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.2")
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)
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant unique 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
}
- 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é |
- 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.2/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.2/groups/[id_group]/mailing-lists/[id_mailingList]");
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.2");
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.2")
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.2/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.2/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 unique 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"
}
- Status code : 200 OK
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 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.2/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.2/groups/[id_group]/mailing-lists/[id_mailingList]/contacts?ids=id1&ids=id2");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("PUT");
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setDoOutput(true);
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.2");
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.2")
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.2/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 unique 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.2/groups/[id_group]/mailing-lists/[id_mailingList]/contacts" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/mailing-lists/[id_mailingList]/contacts");
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();
<?php
$url = "https://[SERVER_URL]/api/v1.2/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.2/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))
}
var client = new RestClient("https://[SERVER_URL]/api/v1.2");
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.2")
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)
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant unique 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
}
- Status code : 200 OK
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 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.2/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.2/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("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, "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.2");
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.2")
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.2/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))
}
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant unique du groupe |
id-mailing-list |
String | L'identifiant unique de la liste de diffusion |
ids |
[]String | Les identifiants des contacts à retirer |
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 |
5. Gérer ses catégories de diffusions
Une catégorie de diffusion est une catégorie associable à une diffusion
C'est une structure qui permet de catégoriser les diffusions, notamment dans un but de filtrage lors d'une recherche.
Structure d'une catégorie de diffusion
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | L'identifiant unique de la catégorie |
| label | String | false | Le nom de la catégorie |
| created-at | Date | true | Date de création de la catégorie |
| updated-at | Date | true | Date de dernière modification de la catégorie |
- Lister les catégories de diffusion
:id-group/categories
Ce point d'accès permet de lister toute les catégories d'un groupe donné.
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/groups/[id_group]/categories" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/categories");
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.2");
var request = new RestRequest("/groups/[id_group]/categories", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/categories", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/categories";
$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.2/groups/[id_group]/categories"
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 unique du groupe. |
- Payload
N/A
Format de réponse
Format de réponse
{
[
{
"id":"f12edd46-96b8-41d9-baa7-58f42daa9301",
"label": "catégorie 1",
"created-at": "2017-04-26T23:59:59.999Z",
"updated-at": "2017-04-26T23:59:59.999Z"
},
{
"id":"54032d6f-19cd-4049-8cfe-bd80a563c911",
"label": "catégorie 2",
"created-at": "2017-04-26T23:59:59.999Z",
"updated-at": "2017-04-26T23:59:59.999Z"
},
{...},
{
"id":"372c1ede-03d5-41d4-bd2c-0471a3c371be",
"label": "catégorie 3",
"created-at": "2017-04-26T23:59:59.999Z",
"updated-at": "2017-04-26T23:59:59.999Z"
}
]
}
- Status code : 200 Ok
- Response Body : Renvoie une liste d'objets catégorie
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é |
- Créer une catégorie de diffusion
:id-group/categories
Ce point d'accès permet de créer une catégorie de diffusion.
Format de requête
Format de requête
curl -X POST \
"https://[SERVER_URL]/api/v1.2/groups/[id_group]/categories" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '{
"label": "Ma catégorie"
}'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/categories");
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 = "{\"label\": \"Ma catégorie\"}";
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.2");
var request = new RestRequest("/groups/[id_group]/categories", Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\"label\": \"Ma catégorie\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/categories", Method.POST)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
request.AddParameter("application/json", "{""label"": ""Ma catégorie""}", ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/categories";
$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='{"label": "Ma catégorie"}';
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.2/groups/[id_group]/categories"
payload := strings.NewReader("{\"label\": \"Ma catégorie\"}")
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 unique du groupe |
- Payload
| Champ | Type | Description |
|---|---|---|
| label | String | Le nom de la catégorie de diffusion |
Format de réponse
Format de réponse
{
"id": "cd8e85d5-a96a-49b5-99dd-d465a76f6df4",
"label": "Ma catégorie",
"createdAt": "2018-05-22T18:08:36.875+02:00",
"updatedAt": "2018-05-22T18:08:36.875+02:00"
}
- Status code : 201 Created
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe auquel vous tentez d'accéder |
| 400 BadRequest | NotEmpty | Un ou plusieurs champs obligatoires sont manquants dans votre objet |
| 400 BadRequest | CategoryAlreadyExists | Ce nom de catégorie n'est pas disponible |
- Modifier une catégorie de diffusion
:id-group/categories/:id-categorie
Ce point d'accès permet de modifier une catégorie de diffusion dans un groupe donné.
le label est obligatoire.
Format de requête
Format de requête
curl -X PUT "https://[SERVER_URL]/api/v1.2/groups/[id_group]/categories/[id_category]" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '{
"label":"Ma catégorie modifiée"
}'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/categories/[id_category]");
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 = "{\"label\":\"Ma catégorie modifiée\"}";
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.2");
var request = new RestRequest("/groups/[id_group]/categories/[id_category]", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\"label\":\"Ma catégorie modifiée\"}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
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", "{""label"":""Ma catégorie modifiée""}", ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/categories/[id_category]";
$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='{"label": "Ma catégorie modifiée"}';
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.2/groups/[id_group]/categories/[id_category]"
payload := strings.NewReader("{\"label\":\"Ma catégorie modifiée\"}")
req, _ := http.NewRequest("PUT", 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 unique du groupe. |
| id-categorie | String | L'identifiant unique de la catégorie. |
- Payload
N/A
Format de réponse
Format de réponse
{
"id": "cd8e85d5-a96a-49b5-99dd-d465a76f6df4",
"label": "Ma catégorie modifiée",
"createdAt": "2018-05-22T18:08:36.875+02:00",
"updatedAt": "2018-05-22T18:10:03.941+02:00"
}
- Status code : 200 OK
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Format de la donnée |
| Location | /api/v1.2/groups/:id-group/categories/:id-categorie |
Emplacement de la catégorie modifiée |
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de la catégorie à 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 | CategoryAlreadyExists | Ce nom de catégorie n'est pas disponible |
- Supprimer une catégorie de diffusion
:id-group/categories/:id-categorie
Ce point d'accès permet de supprimer une catégorie de diffusion d'un groupe donné.
Format de requête
Format de requête
curl -X DELETE \
"https://[SERVER_URL]/api/v1.2/groups/[id_group]/categories/[id-categorie]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/categories/[id-categorie]");
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.2");
var request = new RestRequest("/groups/[id_group]/categories/[id-categorie]", Method.DELETE);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/categories/[id-categorie]", Method.DELETE)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/categories/[id-categorie]";
$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.2/groups/[id_group]/categories/[id-categorie]"
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 unique du groupe. |
| id-categorie | String | L'identifiant unique de la catégorie. |
- Payload
N/A
Format de réponse
- Status code : 204 No Content
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de la catégorie à 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é |
6. Déclencher une diffusion
Une diffusion est un envoi d'un ou plusieurs messages vers des contacts, des listes de diffusion ou directement des adresses (mobile, fixe, email...).
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 n'importe quelle combinaison des médias RCS, SMS, EMAIL, VOICE, FAX (sous réserve de souscription aux médias).
Pour émettre une diffusion simple vers un RCS, les champs agentId, msisdns et rcsParam doivent être renseignés.
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.
Pour émettre une diffusion simple vocale, les champs msisdns, landlines et voiceParam doivent être renseignés.
Pour émettre une diffusion simple fax, le champ faxes et la partie faxParam doivent être renseignés.
Pour émettre une diffusion programmée, le champ scheduledDate doit être renseigné
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) - Seuls les emails émetteurs personnalisés qui vous sont attribués sont utilisables dans l'API (champ
emailParam.senderEmail) - Dans le cas d'une diffusion vocale, les champs
msisdnsetlandlinessont indicatifs. Un numéro de mobile renseigné dans leslandlinessera facturé en tant que mobile, et un numéro fixe renseigné dans lesmsisdnssera facturé en tant que fixe.
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 portable |
| additionalMsisdns | []String | false | La liste additionnelle de numéros de téléphone portable si utilisation d'un modèle de diffusion |
| landlines | []String | false | La liste des numéros de téléphone fixe |
| additionalLandlines | []String | false | La liste additionnelle de numéros de téléphone fixe si utilisation d'un modèle de diffusion |
| emails | []String | false | La liste des adresses email |
| additionalEmails | []String | false | La liste additionnelle d'adresses email si utilisation d'un modèle de diffusion |
| faxes | []String | false | La liste des numéros de fax |
| additionalFaxes | []String | false | La liste additionnelle des numéros de fax si utilisation d'un modèle de diffusion |
| contactIds | []String | false | Les identifiants de contacts |
| additionalContactIds | []String | false | Les identifiants additionnels de contacts si utilisation d'un modèle de diffusion |
| mailingListIds | []String | false | Les identifiants de liste de diffusion |
| additionalMailingListIds | []String | false | Les identifiants additionnels de liste de diffusion si utilisation d'un modèle de diffusion |
| excludedContactIds | []String | false | Les identifiants des contacts exclus |
| additionalExcludedContactIds | []String | false | Les identifiants additionnels des contacts exclus si utilisation d'un modèle de diffusion |
| categoryIds | []String | false | Les identifiants des catégories incluses |
| rcsParam | RcsParam | false | Paramètres de l'envoi RCS |
| smsParam | SmsParam | false | Paramètres de l'envoi SMS |
| emailParam | EmailParam | false | Paramètres de l'envoi email |
| faxParam | FaxParam | false | Paramètres de l'envoi fax |
| voiceParam | VoiceParam | false | Paramètres de l'envoi vocal |
| mailingRecipients | []Recipient | false | Les destinataires du publipostage |
| mailingFields | []String | false | La liste des champs de publipostage |
| strategyId | String | false | L'identifiant de la strategie |
| strategy | Strategie | false | Une strategie à la volée |
| createdAt | Date | N/A (read only) | Date de création |
| updatedAt | Date | N/A (read only) | Date de dernière modification |
| scheduledDate | Date | false | Date d'envoi programmée |
| diffusionTemplateId | String | false | L'identifiant d'un modèle de diffusion |
| customIds | Map{String,String} | false | Un ensemble de clé:valeur où clé est un destinataire et valeur est son identifiant personnalisé "destinataire" doit être soit un numéro de téléphone présent dans msisdns, landlines ou faxes, soit une adresse mail présente dans emails |
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 |
| customId | String | false | L'identifiant personnalisé associé au destinataire dans cette diffusion |
Utilisation de modèle de diffusion
Il est possible d'utiliser un modèle de diffusion créé auparavant en renseignant le champ diffusionTemplateId.
Dans ce cas, les données du modèle de diffusion seront utilisées pour créer la demande de diffusion. Attention, les champs non nuls présents dans la demande de diffusion écraseront ceux du modèle de diffusion. Il est ainsi par exemple possible d'utiliser un modèle de diffusion, mais de préciser une stratégie différente ou une liste différente de fichiers attachés dans emailParam, etc.
La demande de diffusion est alors créée, mais ne conserve pas de lien vers le modèle de diffusion. Ceci est important dans le cas d'une demande de diffusion programée : la modification/suppression du modèle de diffusion n'a aucun impact sur la demande de diffusion elle-même.
Si vous souhaitez conserver les contacts, excludedContacts, msisdns, emails, faxes, landlines, mailingLists présents dans le modèle de diffusion et que vous souhaitez en ajouter d'autres, vous pouvez utiliser les listes additionnelles dans ce cas.
Exemple :
- Si vous renseignez des identifiants de contact dans le champ
contactIds, ceux-ci seront utilisés à la place de ceux du modèle de diffusion. - Si vous renseignez des identifiants de contact dans le champ
additionnalContactIds, ceux-ci seront utilisés en plus de ceux du modèle de diffusion.
Utilisation de message prédéfini
Il est possible d'utiliser un message prédéfini en utilisant le champ templateId dans les objets RcsParam, SmsParam, EmailParam, FaxParam et VoiceParam.
Attention, les champs non nuls des objets xxxParam de la diffusion écraseront les valeurs issues du message prédéfini (il est ainsi possible de n'utiliser qu'une partie d'un message prédéfini).
La demande de diffusion est alors créée avec les valeurs du message prédéfini, mais ne conserve pas de lien vers celui-ci. Le message prédéfini peut donc être modifié ou supprimé sans impact sur la diffusion.
Utilisation de modèle de diffusion ET de message prédéfini
Il est bien sûr possible d'utiliser à la fois un modèle de diffusion et des messages prédéfinis lors d'une demande de diffusion. Tout comme dans l'IHM vous choisiriez un modèle de diffusion puis selectionneriez peut être un message prédéfini afin enfin de modifier manuellement quelques champs de votre diffusion, l'ordre de chargement des données dans l'API est le suivant:
- La diffusion est préparée avec les valeurs du modèle de diffusion
- Les champs non nuls du ou des message(s) prédéfini(s) écrasent ceux du modèle de diffusion
- Les champs non nuls de la demande de diffusion elle-même viennent à leur tour écraser les valeurs présentes
Stratégie
Si elle n'est pas renseignée, c'est la stratégie par défaut qui sera appliquée sur la diffusion.
Si elle n'est pas renseignée et que vous avez renseigné un modèle de diffusion qui a une stratégie, c'est cette dernière qui sera utilisée.
Pour renseigner une stratégie, 2 possibilités :
- renseigner le champ
strategyIdavec l'identifiant d'une stratégie existante - renseigner le champ
strategyavec une stratégie "à la volée", donc unique pour cette diffusion
- Créer une diffusion RCS
:id-group/diffusion-requests
Ce point d'accès permet de créer une diffusion dans un groupe donné.
Le contenu spécifique au RCS est spécifié dans le champ RcsParam.
Format de requête
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-requests" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '
{
"name":"mon nom de diffusion",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["id_mailing_list_1","id_mailing_list_2", ...],
"msisdns":["0600000000"],
"rcsParam":{
"agentId":"test__3las1ddy_agent",
"body":"{\"contentMessage\":{\"text\":\"mon contenu RCS\"}}"
}
}
'
URL url = new URL("https://[SERVER_URL]/api/v1.2/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\"," +
"\"contactIds\":[\"id_contact_1\", \"id_contact_2\"]," +
"\"mailingListIds\":[\"id_mailing_list_1\", \"id_mailing_list_2\"]," +
"\"msisdns\":[\"0600000000\"]," +
"\"rcsParam\":{" +
"\"agentId\":\"test__3las1ddy_agent\", " +
"\"body\":\"{\\\"contentMessage\\\":{\\\"text\\\":\\\"mon contenu RCS\\\"}}\"" +
"}" +
"}";
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.2");
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"",
""contactIds"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingListIds"":[""id_mailing_list_1"",""id_mailing_list_2"", ...],
""msisdns"":[""0600000000""],
""rcsParam"": {
""agentId"": ""test__3las1ddy_agent"",
""body"": ""{\""contentMessage\"":{\""text\"":\""mon contenu RCS\""}}""
}
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
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"",
""contactIds"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingListIds"":[""id_mailing_list_1"",""id_mailing_list_2"", ...],
""msisdns"":[""0600000000""],
""rcsParam"": {
""agentId"": ""test__3las1ddy_agent"",
""body"": ""{\""contentMessage\"":{\""text\"":\""mon contenu RCS\""}}""
}
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/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",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["id_mailing_list_1","id_mailing_list_2", ...],
"msisdns":["0600000000"],
"rcsParam": {
"agentId": "test__3las1ddy_agent",
"body": "{\"contentMessage\":{\"text\":\"mon contenu RCS\"}}"
}
}';
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.2/groups/[id_group]/diffusion-requests"
json := `{
"name":"mon nom de diffusion",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["id_mailing_list_1","id_mailing_list_2", ...],
"msisdns":["0600000000"],
"rcsParam": {
"agentId": "test__3las1ddy_agent",
"body": "{\"contentMessage\":{\"text\":\"mon contenu RCS\"}}"
}
}`
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 unique du groupe. |
Format de réponse
Format de réponse
{
"id": "4a0c8b08-cc7e-4cee-a6a5-2407c9cba5d4",
"name": "mon nom de diffusion",
"msisdns": ["+33699832919"],
"emails": [],
"contactIds": [],
"mailingListIds": ["81eb68cb-051b-4e9a-9ac2-aa774583f0f4"],
"excludedContactIds": [],
"rcsParam": {
"agentId": "test__3las1ddy_agent",
"body": "{\"contentMessage\":{\"text\":\"mon contenu RCS\"}}"
},
"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 | Pour une diffusion immédiate: /api/v1.2/diffusions/ :id-diffusion Pour une diffusion programmée: /api/v1.2/groups/ :id-group/diffusion-requests/:id-diffusion |
Emplacement de la ressource |
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é |
| 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 | 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 | MissingMedia | La diffusion doit contenir au moins un media |
| 400 BadRequest | MissingAgentId | L'identifiant de l'agent RCS doit être spécifié |
| 400 BadRequest | UnparsableRequest | Le JSON contenu dans le champ body est invalide ou mal formé |
| 400 BadRequest | NoDefaultStrategyAvailable | Le groupe n'a pas de stratégie par défaut |
- Créer une diffusion SMS
:id-group/diffusion-requests
Ce point d'accès permet de créer une diffusion dans un groupe donné.
Le contenu spécifique au SMS est spécifié dans le champ SmsParam.
Format de requête
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-requests" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '
{
"name":"mon nom de diffusion",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["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.2/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\","+
"\"contactIds\":[id_contact_1, id_contact_2, ...],"+
"\"mailingListIds\":[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.2");
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"",
""contactIds"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingListIds"":[""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.2")
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"",
""contactIds"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingListIds"":[""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.2/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",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["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.2/groups/[id_group]/diffusion-requests"
json := `{
"name":"mon nom de diffusion",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["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("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 unique du groupe. |
Format de réponse
Format de réponse
{
"id": "4a0c8b08-cc7e-4cee-a6a5-2407c9cba5d4",
"name": "mon nom de diffusion",
"msisdns": ["+33699832919"],
"emails": [],
"contactIds": [],
"mailingListIds": ["81eb68cb-051b-4e9a-9ac2-aa774583f0f4"],
"excludedContactIds": [],
"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 | Pour une diffusion immédiate: /api/v1.2/diffusions/ :id-diffusion Pour une diffusion programmée: /api/v1.2/groups/ :id-group/diffusion-requests/:id-diffusion |
Emplacement de la ressource |
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é |
| 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 | 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. |
| 400 BadRequest | MissingEnrichedSmsOption | Le champ LandingPageParam a été renseigné alors que vous n'avez pas l'option SMS enrichi activée |
| 400 BadRequest | MissingEnrichedSmsPlaceholder | Le champ LandingPageParam a été renseigné alors que le texte !!CEO_URL_LANDING_PAGE!! n'est pas présent dans le corps du message |
| 400 BadRequest | UnknownEnrichedSmsField | La map LandingPageParam.fields contient une ou plusieurs clés/valeurs non valides |
Remplacement de votre lien par un lien court
Pour utiliser cette fonctionnalité, il faut d'abord renseigner le champ urlToShorten dans le SmsParam.
Ensuite il sera possible d’insérer dans le corps du message un texte !!CEO_URL_RACCOURCIE!! qui, lors de l'envoi aux destinataires, sera remplacé par une URL du format https://ce1.io/ABCDEFG (22 caractères). Cette URL:
- Redirige vers le lien saisi dans
urlToShorten - Est unique pour chaque point de communication de chaque destinataire de votre diffusion. Cela permet de mettre en place le suivi/tracking de l'ouverture du lien pour chaque envoi.
Par exemple, on a le SmsParam suivant:
"smsParam":{
"encoding":"GSM7",
"body":"Voici le lien court: !!CEO_URL_RACCOURCIE!!",
"urlToShorten":"https://www.google.com?q=Contact+Everyone+Orange"
}
Avec ce smsParam, si vous créez une diffusion destinée à deux contacts: M. Dupont qui a deux numéros de téléphone 06 00 00 00 01 et 06 00 00 00 02 et M. Martin qui en a un seul 07 00 00 00 01, les messages qu'ils recevront seront les suivants:
| Numéro cible | Message reçu |
|---|---|
| 06 00 00 00 01 (Dupont) | Voici le lien court: https://ce1.io/ORANGE1 |
| 06 00 00 00 02 (Dupont) | Voici le lien court: https://ce1.io/ORANGE2 |
| 07 00 00 00 01 (Martin) | Voici le lien court: https://ce1.io/ORANGE3 |
Quand le destinataire consulte le lien reçu, il sera redirigé vers https://www.google.com?q=Contact+Everyone+Orange.
Note: ORANGE1, ORANGE2 et ORANGE3 sont à titre exemple. En réalité ces identifiants sont générés de manière quasi-aléatoire et ne sont pas énumérables.
Génération d'une page de destination (landing page)
Pour utiliser cette fonctionnalité, il faut renseigner le champ landingPageParam dans le SmsParam.
Ensuite il sera possible d'insérer dans le corps du message un texte !!CEO_URL_LANDING_PAGE!! qui, lors de l'envoi aux destinataires, sera remplacé par une URL du format https://rsms.co/ABCDEFGH (24 caractères). Cette URL est unique pour chaque point de communication de chaque destinataire et redirige vers une landing page hébergée chez notre partenaire Sinch for marketing
Par exemple, avec le SmsParam suivant:
"smsParam":{
"encoding":"GSM7",
"body":"Voici la landing page: !!CEO_URL_LANDING_PAGE!!",
"landingPageParam": {
"landingPageId": "891deb35-6450-4f16-89cc-e1dc58f560fc"
}
}
si vous créez une diffusion destinée à deux contacts: M. Dupont qui a deux numéros de téléphone 06 00 00 00 01 et 06 00 00 00 02 et M. Martin qui en a un seul 07 00 00 00 01, les messages qu'ils recevront seront les suivants:
| Numéro cible | Message reçu |
|---|---|
| 06 00 00 00 01 (Dupont) | Voici la landing page: https://rsms.co/aaa00001 |
| 06 00 00 00 02 (Dupont) | Voici la landing page: https://rsms.co/aaa00002 |
| 07 00 00 00 01 (Martin) | Voici la landing page: https://rsms.co/aaa00003 |
Note: Les identifiants aaa00001, aaa00002 et aaa00003 sont à titre exemple.
- Créer une diffusion email
:id-group/diffusion-requests
Ce point d'accès permet de créer une diffusion dans un groupe donné.
Le contenu spécifique aux emails est spécifié dans le champ EmailParam.
Format de requête
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-requests" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '
{
"name":"mon nom de diffusion",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["id_mailing_list_1","id_mailing_list_2", ...],
"excludedContactIds":[],
"emails":["johndoe@domain.com"],
"emailParam":{
"senderEmail":"johnthesender@domain.com",
"senderName": "John the sender",
"body": "mon contenu email HTML",
"subject":"Mon objet de mail"
}
}
'
URL url = new URL("https://[SERVER_URL]/api/v1.2/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\"," +
"\"contactIds\":[id_contact_1, id_contact_2, ...]," +
"\"mailingListIds\":[id_mailing_list_1,id_mailing_list_2, ...]," +
"\"excludedContactIds\":[]," +
"\"emails\":[\"johndoe@domain.com\"]," +
"\"emailParam\":{" +
"\"senderEmail\":\"johnthesender@domain.com\"," +
"\"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.2");
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"",
""contactIds"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingListIds"":[""id_mailing_list_1"",""id_mailing_list_2"", ...],
""excludedContactIds"":[],
""emails"":[""johndoe@domain.com""],
""emailParam"":{
""senderEmail"":""johnthesender@domain.com"",
""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.2")
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"",
""contactIds"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingListIds"":[""id_mailing_list_1"",""id_mailing_list_2"", ...],
""excludedContactIds"":[],
""emails"":[""johndoe@domain.com""],
""emailParam"":{
""senderEmail"":""johnthesender@domain.com"",
""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.2/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",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["id_mailing_list_1","id_mailing_list_2", ...],
"excludedContactIds":[],
"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.2/groups/[id_group]/diffusion-requests"
json := `{
"name":"mon nom de diffusion",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["id_mailing_list_1","id_mailing_list_2", ...],
"excludedContactIds":[],
"emails":"johndoe@domain.com",
"emailParam":{
"senderEmail":"johnthesender@domain.com",
"senderName": "John the sender",
"subject": "Mon objet de mail",
"body": "mon contenu SMS"
}
}`
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 unique du groupe. |
Format de réponse
Format de réponse
{
"id": "5802fc7f-1232-4738-b98c-d431e7d44c7e",
"name": "mon nom de diffusion",
"msisdns": [],
"emails": ["johndoe@domain.com"],
"contactIds": [],
"mailingListIds": [],
"excludedContactIds": [],
"categoryIds": [],
"emailParam": {
"senderName": "John the sender",
"senderEmail": "axel.leroy@hotmail.fr",
"subject": "Mon objet de mail",
"body": "mon contenu email HTML"
},
"createdAt": "2018-05-22T17:06:29.971+02:00",
"updatedAt": "2018-05-22T17:06:29.971+02:00"
}
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Content-type utilisé. |
| Location | Pour une diffusion immédiate: /api/v1.2/diffusions/ :id-diffusion Pour une diffusion programmée: /api/v1.2/groups/ :id-group/diffusion-requests/:id-diffusion |
Emplacement de la ressource |
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é |
| 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 | 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.
Par ailleurs, l’ensemble des désinscriptions est accessible via API (cf Coordonées désinscrites).
- Créer une diffusion email avec pièces jointes
:id-group/diffusion-requests
Une diffusion email peut comporter jusqu'à 5 pièces jointes (chacune avec un poids de 10Mo max et pour un poids total maximum de 10Mo).
Format de requête
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
| id-group | String | L'identifiant unique du groupe. |
Il y a deux façon de rajouter des pieces jointes :
1. Avec téléversement
Format de requête - Avec téléversement
curl -X POST "http://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-requests" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '
{
"name":"diffusion par fichier joint",
"emails":["johndoe@domain.com", "jason.moriz@domain.com", "lisa.money@domain.com"],
"emailParam":{
"senderName": "Patrick",
"senderEmail": "adam.royer@domain.com",
"subject": "Réunion de cet après-midi annulée",
"body": "Hello world",
"attachmentIds": [
"3a0a16d9-4fd6-4a88-a151-9698802dc734",
"81a95029-0d8c-4c1f-86da-68d0c5454730"
]
}
}
'
URL url = new URL("https://[SERVER_URL]/api/v1.2/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\":\"diffusion par fichier joint\"," +
" \"emails\":[\"johndoe@domain.com\", \"jason.moriz@domain.com\", \"lisa.money@domain.com\"]," +
" \"emailParam\":{" +
" \"senderName\": \"Patrick\"," +
" \"senderEmail\": \"adam.royer@domain.com\"," +
" \"subject\": \"Réunion de cet après-midi annulée\"," +
" \"body\": \"Hello world\"," +
" \"attachmentIds\": [" +
" \"3a0a16d9-4fd6-4a88-a151-9698802dc734\"," +
" \"81a95029-0d8c-4c1f-86da-68d0c5454730\"" +
" ]" +
" }" +
" }";
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.2");
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"":""diffusion par fichier joint"",
""emails"":[""johndoe@domain.com"", ""jason.moriz@domain.com"", ""lisa.money@domain.com""],
""emailParam"": {
""senderName"": ""Patrick"",
""senderEmail"": ""adam.royer@domain.com"",
""subject"": ""Réunion de cet après-midi annulée"",
""body"": ""Hello world"",
""attachmentIds"": [
""3a0a16d9-4fd6-4a88-a151-9698802dc734"",
""81a95029-0d8c-4c1f-86da-68d0c5454730""
]
}
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
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"":""diffusion par fichier joint"",
""emails"":[""johndoe@domain.com"", ""jason.moriz@domain.com"", ""lisa.money@domain.com""],
""emailParam"": {
""senderName"": ""Patrick"",
""senderEmail"": ""adam.royer@domain.com"",
""subject"": ""Réunion de cet après-midi annulée"",
""body"": ""Hello world"",
""attachmentIds"": [
""3a0a16d9-4fd6-4a88-a151-9698802dc734"",
""81a95029-0d8c-4c1f-86da-68d0c5454730""
]
}
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/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":"diffusion par fichier joint",
"emails":["johndoe@domain.com", "jason.moriz@domain.com", "lisa.money@domain.com"],
"emailParam":{
"senderName": "Patrick",
"senderEmail": "adam.royer@domain.com",
"subject": "Réunion de cet après-midi annulée",
"body": "Hello world",
"attachmentIds": [
"3a0a16d9-4fd6-4a88-a151-9698802dc734",
"81a95029-0d8c-4c1f-86da-68d0c5454730"
]
}
}';
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.2/groups/[id_group]/diffusion-requests"
json := `{
"name":"diffusion par fichier joint",
"emails":["johndoe@domain.com", "jason.moriz@domain.com", "lisa.money@domain.com"],
"emailParam":{
"senderName": "Patrick",
"senderEmail": "adam.royer@domain.com",
"subject": "Réunion de cet après-midi annulée",
"body": "Hello world",
"attachmentIds": [
"3a0a16d9-4fd6-4a88-a151-9698802dc734",
"81a95029-0d8c-4c1f-86da-68d0c5454730"
]
}
}`
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))
}
Il faut téléverser les fichiers (cf Envoyer un fichier ) que l'on souhaite envoyer dans un premier temps, puis faire une requête d'envoi de mail contenant les identifiants des fichiers.
La requête doit être une requête au format application/json
Le contenu spécifique au mail et les identifiants des fichiers téléversés sont spécifiés dans le champ EmailParam.
2. En multipart
Format de requête - En multipart
1° solution:
curl -X POST "https://[SERVER_URL]/api/v1.2/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":{
"senderEmail":"johnthesender@domain.com",
"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.2/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":{
"senderEmail":"johnthesender@domain.com",
"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.2")
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"":{
"senderEmail":"johnthesender@domain.com",
""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.2")
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"":{
"senderEmail":"johnthesender@domain.com",
""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.2/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.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\":{ " +
" \"senderEmail\":\"johnthesender@domain.com\", " +
" \"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":{
"senderEmail":"johnthesender@domain.com",
"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.2/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.2/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\":{
\"senderEmail\":\"johnthesender@domain.com\",
\"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.
Format de réponse
Format de réponse
{
"id": "2e8a094f-edab-4a76-a2c5-1626752b430c",
"name": "Message interne - 07/03/2017",
"msisdns": [],
"emails": ["johndoe@domain.com", "lisa.money@domain.com", "jason.moriz@domain.com"],
"contactIds": [],
"mailingListIds": [],
"excludedContactIds": [],
"emailParam": {
"senderName": "Patrick",
"senderEmail": "adam.royer@domain.com",
"subject": "Réunion de cet après-midi annulée",
"body": "Hello world"
},
"createdAt": "2018-05-22T17:39:45.290+02:00",
"updatedAt": "2018-05-22T17:39:45.290+02:00"
}
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Content-type utilisé. |
| Location | Pour une diffusion immédiate: /api/v1.2/diffusions/ :id-diffusion Pour une diffusion programmée: /api/v1.2/groups/ :id-group/diffusion-requests/:id-diffusion |
Emplacement de la ressource |
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é |
| 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 | 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. |
| 400 BadRequest | MaxFileSizeExceeded | Le poids total maximum des pièces jointes ne doit pas dépasser 10Mo. |
- Créer une diffusion email multi-destinataires
:id-group/multemail-diffusion-requests
Ce point d'accès permet de créer une diffusion Email à destinataires multiples dans un groupe donné.
Une diffusion email à destinataires multiples peut comporter jusqu'à 5 pièces jointes (chacune avec un poids de 5Mo max et pour un poids total maximum de 5Mo).
Si on souhaite envoyer des pièces jointes, il faut téléverser les fichiers (cf Envoyer un fichier ) dans un premier temps, puis faire une requête d'envoi de mail contenant les identifiants des fichiers.
Le contenu spécifique aux emails et les identifiants des fichiers téléversés sont spécifiés dans le champ EmailParam.
Le contenu spécifique aux emails multi-destinataires est spécifié dans la collection multEmails. Seule la collection d'adresses to est obligatoire par multEmail. Les tentatives d'envoi vers les destinataires des collections cc ou bcc sont annulées si tous les destinataires de la collection d'adresses to sont injoignables.
Format de requête
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.2/groups/[id_group]/multemail-diffusion-requests" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '
{
"name": "mon nom de diffusion",
"multEmails": [
{
"to": ["cathy@domain.com","john@domain.com","george@domain.com"],
"cc": [],
"bcc": []
},
{
"to": ["cathy@domain.com","john@domain.com","george@domain.com"],
"cc": ["julien@domain.com","catherine@domain.com"],
"bcc": []
},
{
"to": ["cathy@domain.com","john@domain.com","george@domain.com"],
"cc": [],
"bcc": ["louis@domain.com","alan@domain.com"]
},
{
"to": ["cathy@domain.com","john@domain.com","george@domain.com"],
"cc": ["julien@domain.com","catherine@domain.com"],
"bcc": ["louis@domain.com","alan@domain.com"]
}
],
"emailParam": {
"senderEmail":"johnthesender@domain.com",
"senderName": "John the sender",
"body": "mon contenu email HTML",
"subject":"Mon objet de mail",
"attachmentIds": ["3a0a16d9-4fd6-4a88-a151-9698802dc734","81a95029-0d8c-4c1f-86da-68d0c5454730"]
}
}
'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/multemail-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\","+
"\"multEmails\": ["+
"{"+
"\"to\": [\"cathy@domain.com\",\"john@domain.com\",\"george@domain.com\"],"+
"\"cc\": [],"+
"\"bcc\": []"+
"},"+
"{"+
"\"to\": [\"cathy@domain.com\",\"john@domain.com\",\"george@domain.com\"],"+
"\"cc\": [\"julien@domain.com\",\"catherine@domain.com\"],"+
"\"bcc\": []"+
"},"+
"{"+
"\"to\": [\"cathy@domain.com\",\"john@domain.com\",\"george@domain.com\"],"+
"\"cc\": [],"+
"\"bcc\": [\"louis@domain.com\",\"alan@domain.com\"]"+
"},"+
"{"+
"\"to\": [\"cathy@domain.com\",\"john@domain.com\",\"george@domain.com\"],"+
"\"cc\": [\"julien@domain.com\",\"catherine@domain.com\"],"+
"\"bcc\": [\"louis@domain.com\",\"alan@domain.com\"]"+
"}"+
"],"+
"\"emailParam\": {"+
"\"senderEmail\":\"johnthesender@domain.com\","+
"\"senderName\": \"John the sender\","+
"\"body\": \"mon contenu email HTML\","+
"\"subject\":\"Mon objet de mail\","+
"\"attachmentIds\": [\"3a0a16d9-4fd6-4a88-a151-9698802dc734\",\"81a95029-0d8c-4c1f-86da-68d0c5454730\"]"+
"}"+
"}";
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.2");
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"",
""multEmails"": [
{
""to"": [""cathy@domain.com"",""john@domain.com"",""george@domain.com""],
""cc"": [],
""bcc"": []
},
{
""to"": [""cathy@domain.com"",""john@domain.com"",""george@domain.com""],
""cc"": [""julien@domain.com"",""catherine@domain.com""],
""bcc"": []
},
{
""to"": [""cathy@domain.com"",""john@domain.com"",""george@domain.com""],
""cc"": [],
""bcc"": [""louis@domain.com"",""alan@domain.com""]
},
{
""to"": [""cathy@domain.com"",""john@domain.com"",""george@domain.com""],
""cc"": [""julien@domain.com"",""catherine@domain.com""],
""bcc"": [""louis@domain.com"",""alan@domain.com""]
}
],
""emailParam"": {
""senderEmail"":""johnthesender@domain.com"",
""senderName"": ""John the sender"",
""body"": ""mon contenu email HTML"",
""subject"":""Mon objet de mail"",
""attachmentIds"": [""3a0a16d9-4fd6-4a88-a151-9698802dc734"",""81a95029-0d8c-4c1f-86da-68d0c5454730""]
}
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
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"",
""multEmails"": [
{
""to"": [""cathy@domain.com"",""john@domain.com"",""george@domain.com""],
""cc"": [],
""bcc"": []
},
{
""to"": [""cathy@domain.com"",""john@domain.com"",""george@domain.com""],
""cc"": [""julien@domain.com"",""catherine@domain.com""],
""bcc"": []
},
{
""to"": [""cathy@domain.com"",""john@domain.com"",""george@domain.com""],
""cc"": [],
""bcc"": [""louis@domain.com"",""alan@domain.com""]
},
{
""to"": [""cathy@domain.com"",""john@domain.com"",""george@domain.com""],
""cc"": [""julien@domain.com"",""catherine@domain.com""],
""bcc"": [""louis@domain.com"",""alan@domain.com""]
}
],
""emailParam"": {
""senderEmail"":""johnthesender@domain.com"",
""senderName"": ""John the sender"",
""body"": ""mon contenu email HTML"",
""subject"":""Mon objet de mail"",
""attachmentIds"": [""3a0a16d9-4fd6-4a88-a151-9698802dc734"",""81a95029-0d8c-4c1f-86da-68d0c5454730""]
}
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/multemail-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",
"multEmails": [
{
"to": ["cathy@domain.com","john@domain.com","george@domain.com"],
"cc": [],
"bcc": []
},
{
"to": ["cathy@domain.com","john@domain.com","george@domain.com"],
"cc": ["julien@domain.com","catherine@domain.com"],
"bcc": []
},
{
"to": ["cathy@domain.com","john@domain.com","george@domain.com"],
"cc": [],
"bcc": ["louis@domain.com","alan@domain.com"]
},
{
"to": ["cathy@domain.com","john@domain.com","george@domain.com"],
"cc": ["julien@domain.com","catherine@domain.com"],
"bcc": ["louis@domain.com","alan@domain.com"]
}
],
"emailParam": {
"senderEmail":"johnthesender@domain.com",
"senderName": "John the sender",
"body": "mon contenu email HTML",
"subject":"Mon objet de mail",
"attachmentIds": ["3a0a16d9-4fd6-4a88-a151-9698802dc734","81a95029-0d8c-4c1f-86da-68d0c5454730"]
}
}';
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.2/groups/[id_group]/multemail-diffusion-requests"
json := ` {
"name": "mon nom de diffusion",
"multEmails": [
{
"to": ["cathy@domain.com","john@domain.com","george@domain.com"],
"cc": [],
"bcc": []
},
{
"to": ["cathy@domain.com","john@domain.com","george@domain.com"],
"cc": ["julien@domain.com","catherine@domain.com"],
"bcc": []
},
{
"to": ["cathy@domain.com","john@domain.com","george@domain.com"],
"cc": [],
"bcc": ["louis@domain.com","alan@domain.com"]
},
{
"to": ["cathy@domain.com","john@domain.com","george@domain.com"],
"cc": ["julien@domain.com","catherine@domain.com"],
"bcc": ["louis@domain.com","alan@domain.com"]
}
],
"emailParam": {
"senderEmail":"johnthesender@domain.com",
"senderName": "John the sender",
"body": "mon contenu email HTML",
"subject":"Mon objet de mail",
"attachmentIds": ["3a0a16d9-4fd6-4a88-a151-9698802dc734","81a95029-0d8c-4c1f-86da-68d0c5454730"]
}
}`
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 unique du groupe. |
- Payload
| Champ | Type | Requis | Description |
|---|---|---|---|
| name | String | false | Le nom de la diffusion |
| multEmails | MultEmail | true | Les adresses email des destinataires |
| emailParam | EmailParam | true | Paramètres de l'envoi email |
| strategyId | String | false | L'identifiant de la strategie |
| strategy | Strategie | false | Une strategie à la volée |
- Objet MultEmail
| Champ | Type | Requis | Description |
|---|---|---|---|
| to | []String | true | Les adresses email des destinataires |
| cc | []String | false | Les adresses email des destinataires en copie |
| bcc | []String | false | Les adresses email des destinataires en copie cachés |
Format de réponse
Format de réponse
{
"id": "4622a874-94a2-461a-918a-9c4437f95bf5",
"name": "mon nom de diffusion",
"multEmails": [
{
"to": ["cathy@domain.com","john@domain.com","george@domain.com"],
"cc": [],
"bcc": []
},
{
"to": ["cathy@domain.com","john@domain.com","george@domain.com"],
"cc": ["julien@domain.com","catherine@domain.com"],
"bcc": []
},
{
"to": ["cathy@domain.com","john@domain.com","george@domain.com"],
"cc": [],
"bcc": ["louis@domain.com","alan@domain.com"]
},
{
"to": ["cathy@domain.com","john@domain.com","george@domain.com"],
"cc": ["julien@domain.com","catherine@domain.com"],
"bcc": ["louis@domain.com","alan@domain.com"]
}
],
"emailParam": {
"senderEmail":"johnthesender@domain.com",
"senderName": "John the sender",
"body": "mon contenu email HTML",
"subject":"Mon objet de mail",
"attachmentIds": ["3a0a16d9-4fd6-4a88-a151-9698802dc734","81a95029-0d8c-4c1f-86da-68d0c5454730"]
}
"createdAt": "2019-09-03T13:49:56.687+02:00",
"updatedAt": "2019-09-03T13:49:56.687+02:00"
}
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Content-type utilisé. |
| Location | Pour une diffusion immédiate: /api/v1.2/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'aucune adresse Email n'a été fournie dans le champ "to". |
| 400 BadRequest | InconsistentTimeSlots | Vous ne pouvez pas émettre une diffusion en dehors des périodes horaires définies dans l'application |
| 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 | SenderNameNotAllowed | L'émetteur n'est pas autorisé par la configuration |
| 400 BadRequest | SenderEmailNotAllowed | L'email n'est pas autorisé par la configuration |
| 400 BadRequest | MissingMedia | La diffusion doit contenir au moins un media |
| 400 BadRequest | NoDefaultStrategyAvailable | Le groupe n'a pas de stratégie par défaut. |
| 400 BadRequest | DuplicateEmails | Des adresses sont en doublons entre les champs to/cc/bcc |
| 400 BadRequest | MaxFileSizeExceeded | Le poids total maximum des pièces jointes ne doit pas dépasser 5Mo. |
- Créer une diffusion fax
:id-group/diffusion-requests
Ce endpoint permet de diffuser des fax dans un groupe donné.
Il faut téléverser les fichiers (cf Envoyer un fichier ) que l'on souhaite faxer dans un premier temps, puis faire une requête d'envoi de fax contenant les identifiants des fichiers.
Le contenu spécifique au fax (la page de garde) et les identifiants des fichiers téléversés sont spécifiés dans le champ FaxParam.
Une diffusion fax peut comporter jusqu'à 5 pièces (chacune avec un poids de 5Mo max et pour un poids total maximum de 5Mo).
L'ordre d'arrivée des documents sur le fax destinataire n'est pas garanti.
Les formats supportés sont les suivants : .pdf, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .rtf, .txt, .html, .htm, .odt, .ods, .odp, .jpg, .jpeg, .png, .gif, .bmp
La page de garde est au format HTML et ne peut pas référencer des images externes.
Il est néanmoins possible d'inclure une image encodée en base64 dans le html :
<img src=”data:<MIMETYPE>;base64,<BASE64_ENCODED_IMAGE>”>
- Destinataires fax
Les numéros de fax peuvent être spécifiés via le champ faxes de la diffusion.
Format de requête
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-requests" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '
{
"name":"diffusion par fichier joint",
"faxes":["+33156341461"],
"faxParam": {
"attachmentIds": ["3e60f945-73f3-42d5-b304-350fd2586296"],
"headingHTML": "<h1>Ma page de garde en HTML</h1>"
}
}
'
URL url = new URL("https://[SERVER_URL]/api/v1.2/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\":\"diffusion par fichier joint\","+
"\"faxes\":[\"+33156341461\"],"+
"\"faxParam\": {"+
"\"attachmentIds\": [\"3e60f945-73f3-42d5-b304-350fd2586296\"],"+
"\"headingHTML\": \"<h1>Ma page de garde en HTML</h1>\""+
"}"+
"}";
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.2");
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"":""diffusion par fichier joint"",
""faxes"":[""+33156341461""],
""faxParam"": {
""attachmentIds"": [""3e60f945-73f3-42d5-b304-350fd2586296""],
""headingHTML"": ""<h1>Ma page de garde en HTML</h1>""
}
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
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"":""diffusion par fichier joint"",
""faxes"":[""+33156341461""],
""faxParam"": {
""attachmentIds"": [""3e60f945-73f3-42d5-b304-350fd2586296""],
""headingHTML"": ""<h1>Ma page de garde en HTML</h1>""
}
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/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":"diffusion par fichier joint",
"faxes":["+33156341461"],
"faxParam": {
"attachmentIds": ["3e60f945-73f3-42d5-b304-350fd2586296"],
"headingHTML": "<h1>Ma page de garde en HTML</h1>"
}
}';
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.2/groups/[id_group]/diffusion-requests"
json := `{
"name":"diffusion par fichier joint",
"faxes":["+33156341461"],
"faxParam": {
"attachmentIds": ["3e60f945-73f3-42d5-b304-350fd2586296"],
"headingHTML": "<h1>Ma page de garde en HTML</h1>"
}
}`
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 unique du groupe. |
Format de réponse
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Content-type utilisé. |
| Location | Pour une diffusion immédiate: /api/v1.2/diffusions/ :id-diffusion Pour une diffusion programmée: /api/v1.2/groups/ :id-group/diffusion-requests/:id-diffusion |
Emplacement de la ressource |
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é |
| 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 numéro de fax n'a été défini sur votre diffusion |
| 400 BadRequest | InconsistentTimeSlots | Vous ne pouvez pas émettre une diffusion en dehors des périodes horaires définies dans l'application |
| 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 média de votre diffusion n'est pas actif sur votre compte client. |
| 400 BadRequest | MissingMedia | La diffusion doit contenir au moins un média |
| 400 BadRequest | NoDefaultStrategyAvailable | Le groupe n'a pas de stratégie par défaut. |
| 400 BadRequest | MaxFileSizeExceeded | Le poids total maximum des pièces jointes ne doit pas dépasser 5Mo. |
- Créer une diffusion vocale
:id-group/diffusion-requests
Ce endpoint permet de diffuser des appels vocaux dans un groupe donné.
Le contenu spécifique aux appels vocaux est spécifié dans le champ VoiceParam.
- Contenu audio
Des contenus audio peuvent être utilisés à la place des contenus textes vocalisés intro, body et outro.
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
audio-intro: fichier audio utilisé pour l'introduction du message,partie
audio-body: fichier audio utilisé pour le contenu du message,partie
audio-outro: fichier audio utilisé pour la conclusion du message.
Les types de contenu audio supportés sont les suivants:
| Description | MIME | Extension |
|---|---|---|
| WAV (RIFF header) 8kHz 8-bit mono μ-law single channel | audio/x-wav | .wav |
| WAV (RIFF header) 8kHz 8-bit mono A-law single channel | audio/x-wav | .wav |
| WAV (RIFF header) 8kHz 8-bit mono Pulse Code Modulation (PCM) | audio/x-wav | .wav |
| WAV (RIFF header) 8kHz 16-bit mono Pulse Code Modulation (PCM) | audio/x-wav | .wav |
Une diffusion vocale peut comporter jusqu'à 3 fichiers audio (introduction, contenu, conclusion), chacun avec un poids de 5Mo maximum et pour un poids total maximum de 10Mo.
Format de requête
Format de requête
1 - Contenu vocalisé
curl -X POST https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-requests \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '
{
"name":"diffusion vocale via API REST",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["id_mailing_list_1","id_mailing_list_2", ...],
"excludedContactIds":[],
"msisdns":["0612327745"],
"landlines":["0522331155"],
"voiceParam":{
"locale": "fr_FR",
"intro": {"text": "bonjour"},
"body": {"text": "mon contenu vocalisé"},
"outro": {"text": "au revoir"}
}
}
'
2 - Avec fichier audio
curl -X POST https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-requests \
-H 'Authorization: Bearer [Access-Token]' \
-H 'Content-Type: multipart/form-data' \
-F audio-intro=@/path/to/myintro.wav \
-F audio-body=@/path/to/mybody.wav \
-F audio-outro=@/path/to/myoutro.wav \
-F 'diffusion={
"name":"diffusion vocale via API REST",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["id_mailing_list_1","id_mailing_list_2", ...],
"excludedContactIds":[],
"msisdns":["0612327745"],
"landlines":["0522331155"],
"voiceParam":{
"locale": "fr_FR"
}
};type=application/json'
Contenu vocalisé
URL url = new URL("https://[SERVER_URL]/api/v1.2/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\":\"diffusion vocale via API REST\"," +
"\"contactIds\":[\"id_contact_1\", \"id_contact_2\", ...]," +
"\"mailingListIds\":[\"id_mailing_list_1\",\"id_mailing_list_2\", ...]," +
"\"excludedContactIds\":[]," +
"\"msisdns\":[\"0612327745\"]," +
"\"landlines\":[\"0522331155\"]," +
"\"voiceParam\":{" +
"\"locale\": \"fr_FR\"," +
"\"intro\": {\"text\": \"bonjour\"}," +
"\"body\": {\"text\": \"mon contenu vocalisé\"}," +
"\"outro\": {\"text\": \"au revoir\"}" +
"}" +
}";
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();
1 - Contenu vocalisé
var client = new RestClient("https://[SERVER_URL]/api/v1.2");
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"":""diffusion vocale via API REST"",
""contactIds"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingListIds"":[""id_mailing_list_1"",""id_mailing_list_2"", ...],
""excludedContactIds"":[],
""msisdns"":[""0612327745""],
""landlines"":[""0522331155""],
""voiceParam"":{
""locale"": ""fr_FR"",
""intro"": {""text"": ""bonjour""},
""body"": {""text"": ""mon contenu vocalisé""},
""outro"": {""text"": ""au revoir""}
}
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
2 - Avec fichier audio
var client = new RestClient("https://[SERVER_URL]/api/v1.2")
var request = new RestRequest("/groups/[id_group]/diffusion-requests", Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddFile("audio-intro", @"c:\path\to\myintro.wav", "audio/x-wav");
request.AddFile("audio-body", @"c:\path\to\mybody.wav", "audio/x-wav");
request.AddFile("audio-outro", @"c:\path\to\myoutro.wav", "audio/x-wav");
var json = @"{
""name"":""diffusion vocale via API REST"",
""contactIds"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingListIds"":[""id_mailing_list_1"",""id_mailing_list_2"", ...],
""excludedContactIds"":[],
""msisdns"":[""0612327745""],
""landlines"":[""0522331155""],
""voiceParam"":{
""locale"": ""fr_FR""
}
}";
request.AddParameter("diffusion", json,"application/json", ParameterType.RequestBody);
IRestResponse r = client.Execute(request);
1 - Contenu vocalisé
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
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"":""diffusion vocale via API REST"",
""contactIds"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingListIds"":[""id_mailing_list_1"",""id_mailing_list_2"", ...],
""excludedContactIds"":[],
""msisdns"":[""0612327745""],
""landlines"":[""0522331155""],
""voiceParam"":{
""locale"": ""fr_FR"",
""intro"": {""text"": ""bonjour""},
""body"": {""text"": ""mon contenu vocalisé""},
""outro"": {""text"": ""au revoir""}
}
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
2 - Avec fichier audio
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/diffusion-requests", Method.POST)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddFile("audio-intro", "c:\path\to\myintro.wav", "audio/x-wav");
request.AddFile("audio-body", "c:\path\to\mybody.wav", "audio/x-wav");
request.AddFile("audio-outro", "c:\path\to\myoutro.wav", "audio/x-wav");
Dim json = "{
""name"":""diffusion vocale via API REST"",
""contactIds"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingListIds"":[""id_mailing_list_1"",""id_mailing_list_2"", ...],
""excludedContactIds"":[],
""msisdns"":[""0612327745""],
""landlines"":[""0522331155""],
""voiceParam"":{
""locale"": ""fr_FR""
}
}";
request.AddParameter("diffusion", json,"application/json", ParameterType.RequestBody);
Dim r as IRestResponse = client.Execute(request)
Contenu vocalisé
<?php
$url = "https://[SERVER_URL]/api/v1.2/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":"diffusion vocale via API REST",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["id_mailing_list_1","id_mailing_list_2", ...],
"excludedContactIds":[],
"msisdns":["0612327745"],
"landlines":["0522331155"],
"voiceParam":{
"locale": "fr_FR",
"intro": {"text": "bonjour"},
"body": {"text": "mon contenu vocalisé"},
"outro": {"text": "au revoir"}
}
}';
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);
?>
1 - Contenu vocalisé
package main
import (
"fmt"
"io/ioutil"
"net/http"
"strings"
)
func main() {
url := "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-requests"
json := `{
"name": "diffusion vocale via API REST",
"contactIds": ["id_contact_1", "id_contact_2", ...],
"mailingListIds": ["id_mailing_list_1", "id_mailing_list_2", ...],
"excludedContactIds": [],
"msisdns": ["0612327745"],
"landlines": ["0522331155"],
"voiceParam": {
"locale": "fr_FR",
"intro": {"text": "bonjour"},
"body": {"text": "mon contenu vocalisé"},
"outro": {"text": "au revoir"}
}
}`
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))
}
2 - Avec fichier audio
package main
import (
"bytes"
"fmt"
"io"
"io/ioutil"
"log"
"mime/multipart"
"net/http"
"net/textproto"
"os"
)
func main() {
var createPartFromFile = func(w *multipart.Writer, path, filename, partName, contentType string) {
file, _ := os.Open(path)
defer file.Close()
h := make(textproto.MIMEHeader)
h.Set("Content-Disposition", fmt.Sprintf(`form-data; name="%s"; filename="%s"`, partName, filename))
h.Set("Content-Type", contentType)
fileWriter, _ := w.CreatePart(h)
io.Copy(fileWriter, file)
}
var createPartFromJson = func(w *multipart.Writer, json string) {
h := make(textproto.MIMEHeader)
h.Set("Content-Disposition", fmt.Sprintf(`form-data; name="%s";`, "diffusion"))
h.Set("Content-Type", "application/json")
fieldWriter, _ := w.CreatePart(h)
fieldWriter.Write([]byte(json))
}
var requestBody bytes.Buffer
w := multipart.NewWriter(&requestBody)
createPartFromFile(w, "/path/to/myintro.wav", "intro.raw", "audio-intro", "audio/x-wav")
createPartFromFile(w, "/path/to/mybody.wav", "body.raw", "audio-body", "audio/x-wav")
createPartFromFile(w, "/path/to/myoutro.wav", "outro.raw", "audio-outro", "audio/x-wav")
json := `{
"name": "diffusion vocale via API REST",
"msisdns": ["0612327745"],
"voiceParam": {
"locale": "fr_FR"
}
}`
createPartFromJson(w, json)
url := "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-requests"
req, err := http.NewRequest("POST", url, &requestBody)
req.Header.Set("Content-Type", w.FormDataContentType())
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 unique du groupe. |
Format de réponse
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Content-type utilisé. |
| Location | Pour une diffusion immédiate: /api/v1.2/diffusions/ :id-diffusion Pour une diffusion programmée: /api/v1.2/groups/ :id-group/diffusion-requests/:id-diffusion |
Emplacement de la ressource |
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é |
| 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 média de votre diffusion n'est pas actif sur votre compte client. |
| 400 BadRequest | MissingMedia | La diffusion doit contenir au moins un média |
| 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. |
| 400 BadRequest | MaxFileSizeExceeded | Le poids total maximum des pièces jointes ne doit pas dépasser 5Mo. |
- 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.2/groups/[id_group]/diffusion-requests" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '
{
"name":"mon nom de diffusion",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["id_mailing_list_1","id_mailing_list_2", ...],
"excludedContactIds":[],
"msisdns":["0600000000"],
"emails":["johndoe@domain.com"],
"smsParam":{
"encoding":"GSM7",
"senderName":"OpenBar",
"body":"mon contenu SMS"
},
"emailParam":{
"senderEmail":"johnthesender@domain.com",
"senderName": "John the sender",
"body": "mon contenu email HTML",
"subject":"Mon objet de mail"
}
}
'
URL url = new URL("https://[SERVER_URL]/api/v1.2/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\"," +
"\"contactIds\":[id_contact_1, id_contact_2, ...]," +
"\"mailingListIds\":[id_mailing_list_1,id_mailing_list_2, ...]," +
"\"excludedContactIds\":[]," +
"\"msisdns\":[\"0600000000\"]," +
"\"emails\":[\"johndoe@domain.com\"]," +
"\"smsParam\":{" +
"\"encoding\":\"GSM7\"," +
"\"senderName\":\"OpenBar\"," +
"\"body\":\"mon contenu SMS\"" +
"}," +
"\"emailParam\":{" +
"\"senderEmail\":\"johnthesender@domaine.com\"," +
"\"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.2");
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"",
""contactIds"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingListIds"":[""id_mailing_list_1"",""id_mailing_list_2"", ...],
""excludedContactIds"":[],
""msisdns"":[""0600000000""],
""emails"":[""johndoe@domain.com""],
""smsParam"":{
""encoding"":""GSM7"",
""senderName"":""OpenBar"",
""body"":""mon contenu SMS""
},
""emailParam"":{
""senderEmail"":""johnthesender@domaine.com"",
""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.2")
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"",
""contactIds"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingListIds"":[""id_mailing_list_1"",""id_mailing_list_2"", ...],
""excludedContactIds"":[],
""msisdns"":[""0600000000""],
""emails"":[""johndoe@domain.com""],
""smsParam"":{
""encoding"":""GSM7"",
""senderName"":""OpenBar"",
""body"":""mon contenu SMS""
},
""emailParam"":{
""senderEmail"":""johnthesender@domaine.com"",
""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.2/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",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["id_mailing_list_1","id_mailing_list_2", ...],
"excludedContactIds":[],
"msisdns":["0600000000"],
"emails":["johndoe@domain.com"],
"smsParam":{
"encoding":"GSM7",
"senderName":"OpenBar",
"body":"mon contenu SMS"
},
"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);
var_dump($head);
?>
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-requests"
json := `{
"name":"mon nom de diffusion",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["id_mailing_list_1","id_mailing_list_2", ...],
"excludedContactIds":[],
"emails":["johndoe@domain.com"],
"emailParam":{
"senderEmail":"johnthesender@domain.com",
"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"}
}`
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 unique du groupe. |
Format de réponse
Format de réponse
{
"id": "97ed3af5-82a6-4b4a-99f1-d79e57d558f4",
"name": "mon nom de diffusion",
"msisdns": ["+33678581724"],
"emails": ["johndoe@domain.com"],
"contactIds": [],
"mailingListIds": [],
"excludedContactIds": [],
"categoryIds": [],
"emailParam": {
"senderName": "John the sender",
"senderEmail": "axel.leroy@hotmail.fr",
"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:13:44.238+02:00",
"updatedAt": "2018-05-22T17:13:44.238+02:00"
}
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Content-type utilisé |
| Location | Pour une diffusion immédiate: /api/v1.2/diffusions/ :id-diffusion Pour une diffusion programmée: /api/v1.2/groups/ :id-group/diffusion-requests/:id-diffusion |
Emplacement de la ressource |
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é |
| 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 | 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. |
| 400 BadRequest | MaxFileSizeExceeded | Le poids total maximum des pièces jointes ne doit pas dépasser 5Mo. |
- 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 RCS, SMS, EMAIL et synthèse vocale de vos appels,
- Renseignez la liste complète de vos balises dans le champ
mailingFields - Définissez les valeurs de publipostage dans le champ
fieldsdans l'attributmailingRecipients
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.
Notez que les champs landline et landline2 désignant des numéros fixes sont indicatifs. Un numéro de mobile renseigné dans un champ landline sera facturé comme un mobile et non un fixe.
- Destinataires de publipostage
Format et rôles des éléments du champ mailingRecipients.
| Champ | Type | Requis | Description |
|---|---|---|---|
| mobile | String | false | Le numéro de mobile principal du destinataire : utilisé pour les points de communication RCS_1 & SMS_1 & VOICE_CELL1 de la stratégie d'envoi. |
| mobile2 | String | false | Le numéro de mobile secondaire du destinataire : utilisé pour les points de communication RCS_2 & SMS_2 & VOICE_CELL2 de la stratégie d'envoi. |
| landline | String | false | Le numéro de fixe principal du destinataire : utilisé pour le point de communication VOICE_FIXED1 de la stratégie d'envoi. |
| landline2 | String | false | Le numéro de fixe secondaire du destinataire : utilisé pour le point de communication VOICE_FIXED2 de la stratégie d'envoi. |
| String | false | L'adresse email du destinataire : utilisée pour le point de communication EMAIL de la stratégie d'envoi. |
|
| fields | Map{String,String} | false | Un ensemble de couple 'balise' / 'valeur de la balise' |
Chaque destinataire de publipostage doit au moins définir un point d'adressage en corrélation avec la stratégie d'envoi utilisée.
Format de requête
Format de requête
curl -X POST \
"https://[SERVER_URL]/api/v1.2/groups/5ab3ec70-87d8-48f9-befe-a1c86a31b66c/diffusion-requests" \
-H 'Authorization: Bearer [Access-Token]' \
-H 'Content-Type: application/json' \
-d '{
"name": "Campagne avec publipostage",
"rcsParam":{
"agentId": "test__3las1ddy_agent",
"body": "{\"contentMessage\":{\"text\":\"Bonjour #prenom# #nom#, la nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin.\"}}"
},
"smsParam":{
"encoding": "GSM7",
"body": "Bonjour #prenom# #nom#, la nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin."
},
"emailParam": {
"senderEmail": "john@domain.com",
"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 est arrivée. Venez vite, un cadeau vous attend en magasin.</p></body></html>",
"subject": "Mon objet de mail"
},
"voiceParam": {
"intro": {"text": "bonjour #prenom# #nom#"},
"body": {"text": "La nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin."},
"locale": "fr_FR"
},
"mailingFields" : ["nom", "prenom"],
"mailingRecipients": [
{
"mobile" : "+33647365520",
"mobile2" : "+33647365521",
"landline" : "+33537365544",
"landline2" : "+33536365569",
"email" : "p.jane@techtv.com",
"fields" : {
"prenom" : "Patrick",
"nom" : "Jane"
}
},
{
"mobile" : "+33647365524",
"mobile2" : "+33654389908",
"landline" : "+33537365541",
"landline2" : "+33536365562",
"email" : "Jess344@techtv.com",
"fields" : {
"prenom" : "Jessica",
"nom" : "Alba"
}
}
]
}'
URL url = new URL("https://[SERVER_URL]/api/v1.2/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\": \"Campagne avec publipostage\"," +
"\"rcsParam\":{" +
"\"agentId\":\"test__3las1ddy_agent\", " +
"\"body\":\"{\\\"contentMessage\\\":{\\\"text\\\":\\\"Bonjour #prenom# #nom#, la nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin.\\\"}}\"" +
"}," +
"\"smsParam\":{" +
"\"encoding\":\"GSM7\"," +
"\"body\":\"Bonjour #prenom# #nom#, la nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin.\"" +
"}," +
"\"emailParam\":{" +
"\"senderEmail\": \"john@domain.com\"," +
"\"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 est arrivée. Venez vite, un cadeau vous attend en magasin.</p></body></html>\"," +
"\"subject\":\"Mon objet de mail\"" +
"}," +
"\"voiceParam\":{" +
"\"intro\":{" +
"\"text\":\"bonjour #prenom# #nom#\"" +
"}," +
"\"body\":{" +
"\"text\":\"La nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin.\"" +
"}," +
"\"locale\": \"fr_FR\"" +
"}," +
"\"mailingFields\" : [\"nom\", \"prenom\"]," +
"\"mailingRecipients\": [" +
"{" +
"\"mobile\" : \"+33647365520\"," +
"\"mobile2\" : \"+33647365521\"," +
"\"landline\" : \"+33537365544\"," +
"\"landline2\" : \"+33536365569\"," +
"\"email\" : \"p.jane@techtv.com\"," +
"\"fields\" : {" +
"\"prenom\" : \"Patrick\"," +
"\"nom\" : \"Jane\"" +
"}" +
"}," +
"{" +
"\"mobile\" : \"+33647365524\"," +
"\"mobile2\" : \"+33654389908\"," +
"\"landline\" : \"+33537365541\"," +
"\"landline2\" : \"+33536365562\"," +
"\"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.2");
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"",
""rcsParam"": {
""agentId"": ""test__3las1ddy_agent"",
""body"": ""{\""contentMessage\"":{\""text\"":\""Bonjour #prenom# #nom#, la nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin.\""}}""
},
""smsParam"":{
""encoding"":""GSM7"",
""body"":""Bonjour #prenom# #nom#, la nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin.""
},
""emailParam"":{
""senderEmail"": ""john@domain.com"",
""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 est arrivée. Venez vite, un cadeau vous attend en magasin.</p></body></html>"",
""subject"":""Mon objet de mail""
},
""voiceParam"":{
""intro"":{
""text"":""bonjour #prenom# #nom#""
},
""body"":{
""text"":""La nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin.""
},
""locale"": ""fr_FR""
},
""mailingFields"" : [""nom"", ""prenom""],
""mailingRecipients"": [
{
""mobile"" : ""+33647365520"",
""mobile2"" : ""+33647365521"",
""landline"" : ""+33537365544"",
""landline2"" : ""+33536365569"",
""email"" : ""p.jane@techtv.com"",
""fields"" : {""prenom"" : ""Patrick"",""nom"" : ""Jane""}
},
{
""mobile"" : ""+33647365524"",
""mobile2"" : ""+33654389908"",
""landline"" : ""+33537365541"",
""landline2"" : ""+33536365562"",
""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.2")
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"",
""rcsParam"": {
""agentId"": ""test__3las1ddy_agent"",
""body"": ""{\""contentMessage\"":{\""text\"":\""Bonjour #prenom# #nom#, la nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin.\""}}""
},
""smsParam"":{
""encoding"":""GSM7"",
""body"":""Bonjour #prenom# #nom#, la nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin.""
},
""emailParam"":{
""senderEmail"": ""john@domain.com"",
""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 est arrivée. Venez vite, un cadeau vous attend en magasin.</p></body></html>"",
""subject"":""Mon objet de mail""
},
""voiceParam"":{
""intro"":{
""text"":""bonjour #prenom# #nom#""
},
""body"":{
""text"":""La nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin.""
},
""locale"": ""fr_FR""
},
""mailingFields"" : [""nom"", ""prenom""],
""mailingRecipients"": [
{
""mobile"" : ""+33647365520"",
""mobile2"" : ""+33647365521"",
""landline"" : ""+33537365544"",
""landline2"" : ""+33536365569"",
""email"" : ""p.jane@techtv.com"",
""fields"" : {""prenom"" : ""Patrick"",""nom"" : ""Jane""}
},
{
""mobile"" : ""+33647365524"",
""mobile2"" : ""+33654389908"",
""landline"" : ""+33537365541"",
""landline2"" : ""+33536365562"",
""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.2/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",
"rcsParam": {
"agentId": "test__3las1ddy_agent",
"body": "{\"contentMessage\":{\"text\":\"Bonjour #prenom# #nom#, la nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin.\"}}"
},
"smsParam":{
"encoding":"GSM7",
"body":"Bonjour #prenom# #nom#, la nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin."
},
"emailParam":{
"senderName": "John the sender",
"senderEmail": "john@domain.com",
"body":"<html style=\"font-family:Arial, Verdana, sans-serif;\"><head><title></title></head><body><h2>Bonjour #prenom# #nom#</h2><p>La nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin.</p></body></html>",
"subject":"Mon objet de mail"
},
"voiceParam": {
"intro": {
"text": "bonjour #prenom# #nom#"
},
"body": {
"text": "La nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin."
},
"locale": "fr_FR"
},
"mailingFields" : ["nom", "prenom"],
"mailingRecipients": [
{
"mobile" : "+33647365520",
"mobile2" : "+33647365521",
"landline" : "+33537365544",
"landline2" : "+33536365569",
"email" : "p.jane@techtv.com",
"fields" : {
"prenom" : "Patrick",
"nom" : "Jane"
}
},
{
"mobile" : "+33647365524",
"mobile2" : "+33654389908",
"landline" : "+33537365541",
"landline2" : "+33536365562",
"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.2/groups/[id_group]/diffusion-requests"
json := `{
"name": "Campagne avec publipostage"
"rcsParam": {
"agentId": "test__3las1ddy_agent",
"body": "{\"contentMessage\":{\"text\":\"Bonjour #prenom# #nom#, la nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin.\"}}"
},
"smsParam":{
"encoding":"GSM7",
"body":"Bonjour #prenom# #nom#, la nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin."
},
"emailParam":{
"senderEmail": "john@domain.com",
"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 est arrivée. Venez vite, un cadeau vous attend en magasin.</p></body></html>",
"subject":"Mon objet de mail"
},
"voiceParam": {
"intro": {
"text": "bonjour #prenom# #nom#"
},
"body": {
"text": "La nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin."
},
"locale": "fr_FR"
},
"mailingFields" : ["nom", "prenom"],
"mailingRecipients": [
{
"mobile" : "+33647365520",
"mobile2" : "+33647365521",
"landline" : "+33537365544",
"landline2" : "+33536365569",
"email" : "p.jane@techtv.com",
"fields" : {
"prenom" : "Patrick",
"nom" : "Jane"
}
},
{
"mobile" : "+33647365524",
"mobile2" : "+33654389908",
"landline" : "+33537365541",
"landline2" : "+33536365562",
"email" : "Jess344@techtv.com",
"fields" : {
"prenom" : "Jessica",
"nom" : "Alba"
}
}
]
}`
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))
}
Format de réponse
Format de réponse
{
"id": "8408d9c7-c911-4f3d-9168-5ede07a37374",
"name": "Campagne avec publipostage",
"msisdns": [],
"landlines": [],
"faxes": [],
"emails": [],
"contactIds": [],
"mailingListIds": [],
"excludedContactIds": [],
"categoryIds": [],
"rcsParam": {
"agentId": "test__3las1ddy_agent",
"body": "{\"contentMessage\":{\"text\":\"Bonjour #prenom# #nom#, la nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin.\"}}"
},
"smsParam": {
"encoding": "GSM7",
"body": "Bonjour #prenom# #nom#, la nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin.",
"estimatedMsgCount": 1
},
"emailParam": {
"senderName": "John the sender",
"senderEmail": "axel.leroy@hotmail.fr",
"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>La nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin.</p></body></html>"
},
"voiceParam": {
"intro": {
"text": "bonjour #prenom# #nom#"
},
"body": {
"text": "La nouvelle collection est arrivée. Venez vite, un cadeau vous attend en magasin."
},
"locale": "fr_FR"
},
"mailingRecipients": [{
"mobile": "+33647365520",
"mobile2": "+33647365521",
"landline": "+33537365544",
"landline2": "+33536365569",
"email": "p.jane@techtv.com",
"fields": {
"prenom": "Patrick",
"nom": "Jane"
}
}, {
"mobile": "+33647365524",
"mobile2": "+33654389908",
"landline": "+33537365541",
"landline2": "+33536365562",
"email": "Jess344@techtv.com",
"fields": {
"prenom": "Jessica",
"nom": "Alba"
}
}],
"mailingFields": ["mobile", "mobile2", "landline", "landline2", "email", "nom", "prenom"],
"createdAt": "2018-05-22T17:28:38.816+02:00",
"updatedAt": "2018-05-22T17:28:38.816+02:00"
}
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Content-type utilisé. |
| Location | Pour une diffusion immédiate: /api/v1.2/diffusions/ :id-diffusion Pour une diffusion programmée: /api/v1.2/groups/ :id-group/diffusion-requests/:id-diffusion |
Emplacement de la ressource |
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é |
| 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 | MissingMedia | La diffusion doit contenir au moins un media |
| 400 BadRequest | MissingAgentId | L'identifiant de l'agent RCS doit être spécifié |
| 400 BadRequest | UnparsableRequest | Le JSON contenu dans le champ body est invalide ou mal formé |
| 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. |
- Annuler une diffusion programmée
:id-group/diffusion-requests/:id-diffusion-request
Ce point d'accès permet d'annuler une diffusion programmée
Format de requête
Format de requête
curl -X DELETE \
"https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-requests/[id_diffusion_request]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-requests/[id_diffusion_request]");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("DELETE");
con.setRequestProperty("Content-Type", "application/json");
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.2");
var request = new RestRequest("/groups/[id_group]/diffusion-requests/[id_diffusion_request]", Method.DELETE);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client = new RestClient("https://[SERVER_URL]/api/v1.2");
Dim request = new RestRequest("/groups/[id_group]/diffusion-requests/[id_diffusion_request]", Method.DELETE);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Authorization", "Bearer [Access-Token]");
Dim response as IRestResponse = client.Execute(request);
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-requests/[id_diffusion_request]";
$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.2/groups/[id_group]/diffusion-requests/[id_diffusion_request]"
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_diffusion_request | String | L'identifiant de la diffusion programmée à supprimer |
- Payload
N/A
Format de réponse
- Status code : 204 No Content
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant fournis ne correspond à aucune diffusion programmée |
| 403 Forbidden | Forbidden | Vous n'avez pas les droits sur la diffusion que vous souhaitez supprimer |
7. 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 |
Dans le cas de la récupération par identifiant, si l'on précise withContent=true dans l'url, les éléments suivants seront retournés :
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| rcsParam | RcsParam | true | Paramètres de l'envoi RCS |
| smsParam | SmsParam | true | Paramètres de l'envoi SMS |
| emailParam | EmailParam | true | Paramètres de l'envoi EMAIL |
| faxParam | FaxParam | true | Paramètres de l'envoi FAX |
| voiceParam | VoiceParam | true | Paramètres de l'envoi vocal |
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 destinataires 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.2/diffusions" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/diffusions");
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();
<?php
$url = "https://[SERVER_URL]/api/v1.2/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.2/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))
}
var client = new RestClient("https://[SERVER_URL]/api/v1.2");
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.2")
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)
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"
},
"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
},
"categoryIds": [],
"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"
},
"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
},
"categoryIds": [],
"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 |
| medias | 'EMAIL', 'RCS', 'SMS', 'FAX' ou 'VOICE' | 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 |
| recipientCustomId | String | L'identifiant personnalisé associé à un ou plusieurs destinataires de cette diffusion |
| groupIds | []String | Liste des identifiants de groupes |
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.2/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?withContent=:with-content
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.2/diffusions/[id_diffusion]" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api/v1.2/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.2");
var request = new RestRequest("/diffusions/[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.2")
Dim request as RestRequest = new RestRequest("/diffusions/[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.2/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.2/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. |
with-content |
bool | true si l'on souhaite avoir le contenu de la diffusion dans la réponse false par défaut |
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 |
8. 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 |
| communications | Communication[] | true | Liste des points de communication du destinataire |
| mailingFields | Map{String,String} | true | Ensemble des variables de publipostage avec leur valeur |
| customId | String | true | L'identifiant personnalisé associé au destinataire présent uniquement à la demande |
- 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 |
- Communication
| Champ | Type | Description |
|---|---|---|
| address | String | L'adresse du point de communication |
| status | Communication Status | Le statut de l'envoi vers ce point de communication |
| cause | Communication Cause | La cause du statut |
| details | String | Détails sur la cause (champ optionnel) |
| timestamp | Date | La date de mise à jour du statut |
| sminfo | SMInfo | Le détail du SMS émis |
| faxinfo | FaxInfo | Le détail du fax émis |
| vcinfo | VCInfo | Le détail de l'appel vocal émis |
Les champs sminfo, faxinfo et vcinfo sont uniquement renseignés
s'il s'agit respectivement d'une communication SMS, fax ou vocale.
- SMInfo (Short Message information)
| Champ | Type | Description |
|---|---|---|
| operatorCode | String | L'opérateur téléphonique utilisé (si détecté) |
| country | String | Le code pays ISO3 du pays cible (si détecté) |
| msgCount | Integer | Le nombre de SMS utilisés pour véhiculer le message (SMS long) |
- FaxInfo
| Champ | Type | Description |
|---|---|---|
| operatorCode | String | L'opérateur téléphonique utilisé (si détecté) |
| country | String | Le code pays ISO3 du pays cible (si détecté) |
| sentPages | Integer | Le nombre de pages transmises |
| retryCount | Integer | Le nombre de retentatives du fax |
- VCInfo (Voice Call information)
| Champ | Type | Description |
|---|---|---|
| operatorCode | String | L'opérateur téléphonique utilisé (si détecté) |
| country | String | Le code pays ISO3 du pays cible (si détecté) |
| duration | Integer | La durée de l'appel en secondes |
| status | Integer | Le statut détaillé de l'appel (voir ci-dessous) |
| replayCount | Integer | Le nombre de fois que le message a été répété |
| dtmfs | String | La liste des touches saisies au cours de l'appel |
- Détail du statut
Le détail du champ status d'un appel téléphonique encode 4
informations supplémentaires sur ses 4 premiers bits.
| Bit | Description |
|---|---|
| 0 | introAcked: l'introduction du message a bien été acquitté par le destinataire |
| 1 | bodyAcked: le contenu du message a bien été acquitté par le destinataire |
| 2 | fullyPlayed: le contenu du message a été intégralement joué |
| 3 | voicemail: répondeur détecté |
Par exemple un statut valant 5 (101) équivaut à introduction
aquittée et message intégralement joué.
- Communication Status
| Valeur | Description |
|---|---|
| WAITING | Le message est en attente d'envoi |
| CANCELED | Le message a été annulé avant l'envoi |
| REJECTED | erreur technique avant l'acquittement opérateur |
| UNREACHABLE | Le point de communication est injoignable |
| INPROGRESS | Le message est en cours d'envoi |
| FAILED | Le message est en erreur |
| SUCCESS | Le message a été envoyé au point de communication avec succès |
- Communication Cause
| Valeur | Description |
|---|---|
| BLACKLISTED | désinscrit |
| EMPTY_ADDRESS | pas d'adresse joignable |
| UNREACHABLE_ADDRESS | coordonnée injoignable |
| INVALID_ADDRESS | adresse invalide |
| DOM_NOT_ENABLED | envoi vers les DOM non autorisé |
| USA_NOT_ENABLED | envoi vers les USA non autorisé |
| INTERNATIONAL_NOT_ENABLED | envoi vers l'étranger non autorisé |
| OVERCHARGED_NUMBER | numéro surtaxé non autorisé |
| QUOTA_REACHED | quota du compte atteint |
| EXPIRED | expiré |
| DROPPED | pas d'accusé de réception opérateur |
| DUPLICATE_ADDRESS | doublon |
| DELIVERED | remis au destinataire |
| SENT | transmis à l'opérateur |
| NO_ACK | pas d'acquittement opérateur |
| ACK | lu par le destinataire |
| NACK | rejeté par l'opérateur |
| BUSY | correspondant occupé |
| NO_REPLY | pas de réponse du correspondant |
| NO_RING | pas de tonalité |
| NO_ROUTE | numéro non accessible |
Correpondance entre statuts et causes possibles
| Statut | Cause |
|---|---|
| WAITING | null |
| CANCELED | null |
| REJECTED | NO_ACK, NACK, QUOTA_REACHED, EXPIRED |
| UNREACHABLE | EMPTY_ADDRESS, INVALID_ADDRESS, DUPLICATE_ADDRESS, BLACKLISTED, UNREACHABLE_ADDRESS, DOM_NOT_ENABLED, USA_NOT_ENABLED, INTERNATIONAL_NOT_ENABLED, OVERCHARGED_NUMBER |
| INPROGRESS | SENT |
| FAILED | DROPPED, EXPIRED, UNREACHABLE_ADDRESS, BLACKLISTED, BUSY, NO_REPLY, NO_RING, NO_ROUTE |
| SUCCESS | DELIVERED, ACK |
Lister les messages remis
:id-diffusion/recipients
Ce point d'accès permet de récupérer la liste paginée des destinataires pour une diffusion.
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/diffusions/[id_diffusion]/recipients" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api/v1.2/diffusions/[id_diffusion]/recipients");
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);
}
<?php
$url = "https://[SERVER_URL]/api/v1.2/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.2/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.2");
var request = new RestRequest("/diffusions/[id_diffusion]/recipients", 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.2")
Dim request as RestRequest = new RestRequest("/diffusions/[id_diffusion]/recipients", Method.GET)
request.AddHeader("Content-Type", "application/json")
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-diffusion |
String | L'identifiant unique de la diffusion. |
withDetails |
boolean | Ajoute le champ details dans les objets Communication |
withMailingFields |
boolean | Ajoute les variables de publipostage |
withCustomIds |
boolean | Ajoute le champ customId dans les résultats |
Format de réponse
Format de réponse
{
"content": [{
"id": "5b69581b8d4f7f52c78d46a8",
"status": "FAILED",
"label": "Perez Alice",
"communications": [
{
"timestamp": "2018-08-07T10:28:11.000+02:00",
"status": "FAILED",
"cause": "UNREACHABLE_ADDRESS",
"address": "+33735488649",
"details": "Recipient barred"
},
{
"timestamp": "2018-08-07T10:28:11.000+02:00",
"status": "FAILED",
"cause": "UNREACHABLE_ADDRESS",
"address": "+33699206906",
"details": "Recipient barred"
},
{
"timestamp":"2025-02-24T16:28:58.249+01:00",
"status":"SUCCESS",
"cause":"DELIVERED",
"sminfo":
{
"msgCount":1,
"operatorCode":"FRTE",
"country":"FRA"
},
"address":"+33612457818"
}
]
}],
"totalElements": 3,
"last": true,
"totalPages": 1,
"numberOfElements": 3,
"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 | Media | Le type de média sur lequel le destinataire a été joint |
| label | String | Le nom ou le prénom de contact |
| address | String | L'adresse du destinataire |
| customId | String | L'identifiant personnalisé associé au 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.2/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é |
9. 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. |
| recipient | String | true | Numéro du déstinataire. |
| 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). |
| diffusionIds | String[] | true | L'identifiant des diffusions éligibles |
| isFuzzy | boolean | true | Indique si il y a du "flou" dans l'association de cette réponse SMS à une diffusion. C'est le cas quand une réponse peut aussi être associée à une ou plusieurs diffusions du même groupe, envoyée(s) par un autre utilisateur. |
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.2/groups/[id_group]/replies" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/replies");
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);
}
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.2/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.2/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);
?>
var client = new RestClient("https://[SERVER_URL]/api/v1.2");
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.2")
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)
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-group |
String | L'identifiant unique du groupe |
Format de réponse
Format de réponse
{
"content":[
{
"id":"5ae0507c49811e45f0b797ac",
"timestamp":"2018-04-25T11:55:08.000+02:00",
"address":"+33699518600",
"recipient":"95000",
"body":"contenu du SMS 1",
"author":{"id":"6ba76d26-bf8b-47b3-9c98-2d544f002a7a","email":"example.roy@gmail.com","name":"Lefevre","firstName":"Maëlle"},
"country":"FRA",
"diffusionIds":["d1414845-70d2-4b62-acf6-cee6342c66d8"],
"isFuzzy":false
},{
"id":"5ae0507c49811e45f0b797ad",
"timestamp":"2018-04-25T12:12:07.000+02:00",
"address":"+33791871411",
"body":"un autre contenu",
"author":{"id":"6ba76d26-bf8b-47b3-9c98-2d544f002a7a","email":"example.roy@gmail.com","name":"Lefevre","firstName":"Maëlle"},
"country":"FRA",
"diffusionIds":["d1414845-70d2-4b62-acf6-cee6342c66d8", "bc656972-563b-4a11-be93-aad542b6439e"],
"isFuzzy":true
}
],
"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 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 |
| diffusionId | String | Identifiant d'une diffusion |
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.2/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é |
10. 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 |
| 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 |
| campaignId | String | true | L'identifiant de la campagne à laquelle est associé le SMS entrant (présent uniquement quand le paramètre d'URL withCampaignIds est égal à true) |
- 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.2/smsplus" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api/v1.2/smsplus");
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();
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.2/smsplus"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("accept", "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.2/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);
?>
var client = new RestClient("https://[SERVER_URL]/api/v1.2");
var request = new RestRequest("/smsplus", Method.GET);
request.AddHeader("accept", "application/json");
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
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)
- 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,
"campaignId": "77372312-fe1a-42c5-9f2f-36dbce61df93"
}
],
"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.2/smsplus?body=soldes&dateMax=2017-04-26T23:59:59.999Z&dateMin=2017-04-18T22:00:00.000Z
Autres paramètres d'URL
| Champ | Type | Description |
|---|---|---|
| withCampaignIds | boolean | Inclure les identifiants des campagnes SMS+ dans les résultats |
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.2/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.2/smsplus/conversations/[id_conversation]/replies");
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 = "{\"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.2");
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"":""une réponse ..."",
""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.2")
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"":""une réponse ..."",
""encoding"":""GSM7""
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/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.2/smsplus/conversations/[id_conversation]/replies"
json := `{
"body":"un réponse",
"encoding":"GSM7"
}`
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_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.2/smsplus/conversations/[id_conversation]" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api/v1.2/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();
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.2/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.2/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);
?>
var client = new RestClient("https://[SERVER_URL]/api/v1.2");
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.2")
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)
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"
"sminfo": {
"msgCount":1,
"operatorCode":"ACMO",
"country":"FRA"
}
},
"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"
"sminfo": {
"msgCount":1
}
},
"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.2/smsplus/[groupId]/campaigns" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api/v1.2/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();
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api/v1.2/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.2/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);
?>
var client = new RestClient("https://[SERVER_URL]/api/v1.2");
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.2")
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)
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é |
11. Statistiques
Les statistiques permettent d’obtenir les statistiques sur les différents usages du service, quel que soit le mode de déclenchement.
Les données statistiques couvrent une période sur les 13 derniers mois complets + le mois en cours.
Seul l'affichage en mode tableau est disponible depuis l'API.
- Récuperer les statistiques tableau
Ce point d'accès permet de d'obtenir les statistiques tableau visibles par l'utilisateur.
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/statistics/array" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/statistics/array");
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.2");
var request = new RestRequest("/statistics/array", Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/statistics/array", Method.GET)
request.AddHeader("cache-control", "no-cache")
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/statistics/array";
$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]',
'Cache-Control' => 'no-cache',
));
$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.2/statistics/array"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
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
Filtres
Il est possible de filtrer les résultats sur lesquels portent les statistisques à l'aide des paramètres d'URL ci-dessous.
| Champ | Type | Obligatoire ? | Description |
|---|---|---|---|
| from | Date | oui | Date de début |
| to | Date | oui | Date de fin |
| groupIds | String[] | non | Liste des identifiants de groupes |
| categoryIds | String[] | non | Liste des identifiants de catégories de diffusions |
| countries | String[] | non | Le code pays (Format ISO 3166-1 alpha-3). |
| cvos | String[] | non | Liste des identifiants de contrat (si votre compte a des entités facturables) |
| emissionChannels | EmissionChannel[] | non | Les canaux d'émission |
| types | Type[] | non | Les types de messages (SMS,EMAIL, réponse à SMS+ ...) |
| addresses | String[] | non | Liste d'adresses de destinataires |
| authorIds | String[] | non | Liste des émetteurs |
Type
Valeurs possibles: SMS_SENT,EMAIL_SENT,SMS_PLUS,SMS_PLUS_REPLY,SMS_REPLY,FAX_SENT,FIXED_CALL,CELL_CALL
Groupements
Les statistiques tableau sont une aggrégation par Type. Il est possible d'ajouter d'autres groupements :
La vue par tableau propose de faire des groupements à l'aide des paramètres d'URL ci-dessous.
| Champ | Type | Description |
|---|---|---|
| groupByCriterias | GroupByCriteria[] | Liste des groupements |
GroupByCriteria
Valeurs possibles:
| Champ | Description |
|---|---|
| GROUP | groupement par identifiant de groupe |
| GROUP_NAME | groupement par nom de groupe (si un groupe est renommé, il apparaîtra sous 2 noms différents) |
| EMISSION_CHANNEL | groupement par EmissionChannel |
| AUTHOR | groupement par identifiant de l'émétteur du message |
| CONTRACT_CVO | groupement par identifiant de contrat (intéressant dans le cas d'un compte avec entités facturables) |
| COUNTRY | groupement par pays de destination des messages (Format ISO 3166-1 alpha-3) |
| CATEGORY | groupement par catégorie de diffusion |
L'ordre dans lequel les groupements sont renseignés est important.
Demander &groupByCriterias=COUNTRY&groupByCriterias=GROUP n'affichera pas les mêmes résultats que &groupByCriterias=GROUP&groupByCriterias=COUNTRY.
En effet dans le premier cas l'aggrégation se fera par pays puis par groupe au sein de chaque pays, alors que dans le deuxème cas l'aggrégation se fera par groupe puis par pays au sein de chaque groupe.
Par exemple, la requête ci-dessous demande les statistiques tableau sur les messages :
- envoyés entre le 26 avril 2017 à 20h00 et le 27 avril 2017 à 20h00,
- sur les messages envoyés sur des fixes et des mobiles
- groupés par pays puis par groupes
curl -X GET "https://[SERVER_URL]/api/v1.2/statistics/array?from=2017-04-26T20:00:00.000Z&to=2017-04-27T20:00:00.000Z&groupByCriterias=COUNTRY&groupByCriterias=GROUP&types=FIXED_CALL&types=CELL_CALL"
Format de réponse
Format de réponse
Exemple de réponse pour un groupement par pays :
[
["none",{"EMAIL_SENT":{"count":3,"successCount":3,"failureCount":3,"billingQuantity":0}}],
["FRA", {"SMS_SENT": {"count":2,"successCount":2,"failureCount":2,"billingQuantity":0}}],
["DEU", {"SMS_SENT": {"count":1,"successCount":1,"failureCount":1,"billingQuantity":0}}]
]
Exemple de réponse pour un groupement par pays / diffusion :
[
["none","fd96c238-cbec-4b31-8b6e-6b62e81e3e0c",{"EMAIL_SENT":{"count":3,"successCount":3,"failureCount":3,"billingQuantity":0}}],
["FRA", "fd96c238-cbec-4b31-8b6e-6b62e81e3e0c",{"SMS_SENT": {"count":2,"successCount":2,"failureCount":2,"billingQuantity":0}}],
["DEU", "fd96c238-cbec-4b31-8b6e-6b62e81e3e0c",{"SMS_SENT": {"count":1,"successCount":1,"failureCount":1,"billingQuantity":0}}]
]
Exemple de réponse pour un groupement par groupe uniquement :
[
["71a078f9-4756-4a1e-96ad-abcac94084da",{"SMS_SENT":{"count":2,"successCount":2,"failureCount":0,"billingQuantity":2},"EMAIL_SENT":{"count":2,"successCount":2,"failureCount":0,"billingQuantity":2}}],
["fd96c238-cbec-4b31-8b6e-6b62e81e3e0c",{"SMS_SENT":{"count":2,"successCount":2,"failureCount":0,"billingQuantity":2}}]
]
Le réponse est un tableau de tableaux dans lesquels les premiers éléments sont les valeurs des groupements, et le dernier élément est un objet contenant les statistiques aggrégées pour chaque Type de message.
[
[ValeurGroupment1, ValeurGroupment2, ...,{
"Type1":{"count":XX,"successCount":XX,"failureCount":XX,"billingQuantity":XX},
"Type2":{"count":XX,"successCount":XX,"failureCount":XX,"billingQuantity":XX}
}],
[ValeurGroupment1, ValeurGroupment2, ...,{
"Type1":{"count":XX,"successCount":XX,"failureCount":XX,"billingQuantity":XX},
"Type2":{"count":XX,"successCount":XX,"failureCount":XX,"billingQuantity":XX}
}],
...
]
- 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é |
| 400 BadRequest | NotNull | Le filtre indiqué par la propriété "field" dans le message d'erreur est obligatoire |
| 400 BadRequest | DateFromAfterTo | La période renseignée (from/to) est invalide: la date de début se situe aprés la date de fin |
| 400 BadRequest | TooOld | La date de début est trop ancienne (13 derniers mois complets + le mois en cours) |
12. Coordonnées injoignables
Une coordonnée injoignable est une adresse (sms, email, ...) qui n'a pas pu être contactée.
Structure d'une coordonnée injoignable
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | L'identifiant unique de la coordonnée |
| createdAt | Date | true | La date de mise en quarantaine |
| expireAt | Date | true | La date jusqu'à laquelle la coordonnée est en quarantaine |
| address | String | true | L'adresse injoignable |
| media | Media | true | Le media ciblé lors de l'envoi |
| groupId | String | true | Le groupe utilisé lors de la diffusion |
Media
Les valeurs possibles sont : RCS, SMS, EMAIL, FAX et VOICE.
- Lister les coordonnées injoignables
:id-group/unreachable-addresses
Ce point d'accès permet de récupérer la liste paginée des coordonnées injoignables associées à un groupe.
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/groups/[id_group]/unreachable-addresses" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/unreachable-addresses");
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.2");
var request = new RestRequest("/groups/[id_group]/unreachable-addresses", Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/unreachable-addresses", Method.GET)
request.AddHeader("cache-control", "no-cache")
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/unreachable-addresses";
$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.2/groups/[id_group]/unreachable-addresses"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
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 | Requis | Description |
|---|---|---|---|
| id_group | String | true | L'identifiant du groupe concerné |
Format de réponse
Format de réponse
{
"content": [{
"id": "5b043f11755883319b034a69",
"cvo": "CVOSI38417821",
"expireAt": "2018-11-22T18:02:25.126+01:00",
"address": "+33678581724",
"media": "SMS",
"groupId": "09a8e93e-4373-47e8-86f0-df080de3592d",
"createdAt": "2018-05-22T18:02:25.126+02:00"
}, {
"id": "5b043f5f755883319b034ae7",
"cvo": "CVOSI38417821",
"expireAt": "2018-11-22T18:03:43.468+01:00",
"address": "+33678544554",
"media": "SMS",
"groupId": "09a8e93e-4373-47e8-86f0-df080de3592d",
"createdAt": "2018-05-22T18:03:43.468+02:00"
}],
"totalPages": 1,
"last": true,
"totalElements": 2,
"first": true,
"size": 10,
"number": 0,
"sort": [{
"direction": "ASC",
"property": "expireAt",
"ignoreCase": false,
"nullHandling": "NATIVE",
"descending": false,
"ascending": true
}],
"numberOfElements": 2
}
- Status code : 200 Ok
Filtres
Il est possible de filtrer les résultats de la recherche à l'aide des paramètres d'URL ci-dessous.
| Parameter | Type | Requis | Description |
|---|---|---|---|
| address | String | false | Adresse en quarantaine |
| dateStart | date | false | Borne basse pour le début de la quarantaine |
| dateEnd | date | false | Borne haute pour le début de la quarantaine |
| medias | []Media | false | Liste des médias sur lesquels la diffusion a été effectuée |
| pageSize | int | false | Nombre d'éléments contenus par page |
| pageNumber | int | false | Page que vous souhaitez visualiser |
Par exemple, la requête ci-dessous recherche les coordonnées portant l'adresse johndoe@domain.com, de type EMAIL.
curl -X GET "https://[SERVER_URL]/api/v1.2/groups/[id_group]/unreachable-addresses?address=johndoe@domain.com&medias=EMAIL
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe auquel vous tentez d'accéder |
- Sortir une coordonnée de quarantaine
:id-group/unreachable-addresses/:id-unreachable-address
Ce point d'accès permet de sortir une coordonnée de quarantaine pour un groupe.
Format de requête
Format de requête
curl -X DELETE \
"https://[SERVER_URL]/api/v1.2/groups/[id_group]/unreachable-addresses/[id-unreachable-address]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/unreachable-addresses/[id-unreachable-address]");
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.2");
var request = new RestRequest("/groups/[id_group]/unreachable-addresses/[id-unreachable-address]", Method.DELETE);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json")
IRestResponse response = client.Execute(request);
Dim client = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request = new RestRequest("/groups/[id_group]/unreachable-addresses/[id-unreachable-address]", Method.DELETE)
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.2/groups/[id_group]/unreachable-addresses/[id-unreachable-address]";
$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.2/groups/[id_group]/unreachable-addresses/[id-unreachable-address]"
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 du groupe concerné |
| id_unreachable_address | String | L'identifiant de l'adresse à réactiver |
Format de réponse
- Status code : 204 No Content
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | Le groupe ou la coordonnée auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | Forbidden | Vous n'avez pas les droits sur le groupe auquel vous souhaitez accèder |
13. Coordonnées désinscrites
Une coordonnée désinscrite est une adresse qui a été désinscrite par l'utilisateur via le lien de désinscription.
Structure d'une coordonnée désinscrite
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | L'identifiant unique de la coordonnée |
| address | String | true | L'adresse désinscrite |
| media | Media | true | Le media ciblé lors de l'envoi |
| cvo | String | true | Le cvo du compte CEO |
| groupId | String | true | Le groupe utilisé lors de la diffusion |
| diffusionId | String | true | La diffusion dans laquelle l'adresse a été contactée |
| createdAt | Date | true | La date à laquelle l'adresse a été désinscrite |
Media
Les valeurs possibles sont : SMS, EMAIL, FAX et VOICE.
- Lister les coordonnées désinscrites
:id-group/unsubscriptions
Ce point d'accès permet de récupérer la liste paginée des coordonnées désinscrites associées à un groupe.
Format de requête
Format de requête
curl -X GET https://[SERVER_URL]/api/v1.2/groups/[id_group]/unsubscriptions \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/unsubscriptions");
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.2");
var request = new RestRequest("/groups/[id_group]/unsubscriptions", Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/unsubscriptions", Method.GET)
request.AddHeader("cache-control", "no-cache")
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/unsubscriptions";
$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.2/groups/[id_group]/unsubscriptions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
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 | Requis | Description |
|---|---|---|---|
| id_group | String | true | L'identifiant du groupe concerné |
Filtres
Il est possible de filtrer les résultats de la recherche à l'aide des paramètres d'URL ci-dessous.
| Parameter | Type | Requis | Description |
|---|---|---|---|
| address | String | false | Adresse en quarantaine |
| dateStart | date | false | Borne basse pour la date de désinscription |
| dateEnd | date | false | Borne haute pour la date de désinscription |
| medias | []Media | false | Liste des médias sur lesquels la diffusion a été effectuée |
| pageSize | int | false | Nombre d'éléments contenus par page |
| pageNumber | int | false | Page que vous souhaitez visualiser |
Par exemple, la requête ci-dessous recherche les coordonnées portant l'adresse johndoe@domain.com, de type EMAIL.
curl -X GET "https://[SERVER_URL]/api/v1.2/groups/[id_group]/unsubscriptions?address=johndoe@domain.com&medias=EMAIL
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe auquel vous tentez d'accéder |
- Supprimer une désinscription
:id-group/unsubscriptions/:id-unsubscriptions
Ce point d'accès permet d' annuler la désincription pour un groupe et une adresse spécifique.
Format de requête
Format de requête
curl -X DELETE \
https://[SERVER_URL]/api/v1.2/groups/[id_group]/unsubscriptions/[id-unsubscriptions] \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/unsubscriptions/[id-unsubscriptions]");
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.2");
var request = new RestRequest("/groups/[id_group]/unsubscriptions/[id-unsubscriptions]", Method.DELETE);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json")
IRestResponse response = client.Execute(request);
Dim client = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request = new RestRequest("/groups/[id_group]/unsubscriptions/[id-unsubscriptions]", Method.DELETE)
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.2/groups/[id_group]/unsubscriptions/[id-unsubscriptions]";
$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.2/groups/[id_group]/unsubscriptions/[id-unsubscriptions]"
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 du groupe concerné |
| id_unsubscriptions | String | L'identifiant de l'adresse à réactiver |
Format de réponse
- Status code : 204 No Content
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | Le groupe ou la coordonnée auquel vous tentez d'accéder n'existe pas |
| 403 Forbidden | Forbidden | Vous n'avez pas les droits sur le groupe auquel vous souhaitez accèder |
- Désinscrire un numéro
:id-group/unsubscriptions
Format de requête
Format de requête
curl -X POST \
https://[SERVER_URL]/api/v1.2/groups/[id_group]/unsubscriptions \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '
{
"address": "735677896",
"media": "SMS"
}
'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/unsubscriptions");
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 = "{\"address\": \"735677896\",\"media\": \"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.2");
var request = new RestRequest("/groups/[id_group]/unsubscriptions", Method.POST);
request.AddHeader("Authorization", "Bearer [access-token]");
request.AddHeader("Content-Type", "application/json");
var json = @"{
""address"":""735677896"",
""media"":""SMS""
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/unsubscriptions", Method.POST)
request.AddHeader("Authorization", "Bearer [access-token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{
""address"":""735677896"",
""media"":""SMS""
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/unsubscriptions";
$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='{
"address":"735677896",
"media":"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.2/groups/[id_group]/unsubscriptions"
json := `{
"address":"735677896",
"media":"SMS"
}`
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))
}
- Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id_group | String | L'identifiant du groupe concerné |
Format de réponse
- Status code : 201 Created
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 400 BadRequest | N/A | adresse non valide |
| 403 Forbidden | Forbidden | Vous n'avez pas les droits sur le groupe auquel vous souhaitez accèder |
14. Stratégies
Une stratégie de diffusion est l’ensemble des informations et règles définissant le comportement du système pour une diffusion donnée : choix et enchaînement des médias, durée de vie de campagne, conditions de succès, plage horaire etc...
La stratégie est définie en fonction du ou des médias sélectionnés, c’est-à-dire en mono-média ou en multimédia
Structure d'une stratégie
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | L'identifiant de la stratégie |
| name | String | false | Le nom de la stratégie |
| groupId | String | false | L'identifiant du groupe auquel est associée la stratégie |
| lifetime | long | false | Durée de vie en minutes de la campagne. Sa valeur doit être comprise entre 10 et 4320 |
| sequences | Sequence[] | false | Configuration des séquences d'envois |
| rcsMediaConfiguration | RcsMediaConfiguration | false | Configuration du média RCS |
| smsMediaConfiguration | SmsMediaConfiguration | false | Configuration du média SMS |
| emailMediaConfiguration | emailMediaConfiguration | false | Configuration du média EMAIL |
| faxMediaConfiguration | faxMediaConfiguration | false | Configuration du média FAX |
| voiceMediaConfiguration | voiceMediaConfiguration | false | Configuration du média VOCAL |
| rcsMediaConfiguration | rcsMediaConfiguration | false | Configuration du média RCS |
Sequence
Une séquence d’envoi permet de définir pour chaque destinataire l’ordre des médias et des éventuels rebonds vers une seconde coordonnée ou vers un autre média (sur échec ou sur durée de vie du message SMS atteinte par exemple).
Une séquence est une liste de point de communication (CommunicationPoint[])
CommunicationPoint
Les valeurs possibles sont : RCS_1, RCS_2, SMS_1, SMS_2, EMAIL, FAX, VOICE_CELL1, VOICE_CELL2, VOICE_FIXED1, VOICE_FIXED2.
MediaConfiguration
Les champs suivants sont partagés par tous les types de configurations
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| monday | Timeslot[] | false | Les créneaux d'envoi pour le lundi |
| tuesday | Timeslot[] | false | Les créneaux d'envoi pour le mardi |
| wednesday | Timeslot[] | false | Les créneaux d'envoi pour le mercredi |
| thursday | Timeslot[] | false | Les créneaux d'envoi pour le jeudi |
| friday | Timeslot[] | false | Les créneaux d'envoi pour le vendredi |
| saturday | Timeslot[] | false | Les créneaux d'envoi pour le samedi |
| sunday | Timeslot[] | false | Les créneaux d'envoi pour le dimanche |
Les champs suivant sont spécifiques à chaque type de configuration
RCS
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| lifetime | long | false | Durée de vie du message en minutes dans le réseau opérateur (doit être inférieure ou égal à la durée de vie de la campagne et compris entre 10 et 4320) |
SMS
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| lifetime | long | false | Durée de vie du message en minutes dans le réseau opérateur (doit être inférieure ou égal à la durée de vie de la campagne et compris entre 10 et 4320) |
| linksTracking | boolean | false | Active/désactive le suivi des liens raccourcis |
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| linksTracking | boolean | false | Active/désactive le suivi des liens |
| openingsTracking | boolean | false | Active/désactive le suivi des ouvertures |
VOCAL
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| Champ | Type | Read-Only | Description |
| bodyAckDTMF | DTMF | false | Touche d'acquittement du corps du message |
| introAckDTMF | DTMF | false | Touche d'acquittement de l'introduction |
| bodyReplayDTMF | DTMF | false | Touche de réécoute du corps du message |
| bodyAckCode | boolean | false | Active/désactive l'acquittement des messages via code personnel |
Timeslot
Les timeslots définissent les plages horaires pendant lesquels votre diffusion est active
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| start | String (HHmm) |
false | Heure de début du créneau |
| end | String (HHmm) |
false | Heure de fin du créneau |
- Créer une stratégie
:id-group/strategies
Ce point d'accès permet de créer une stratégie dans un groupe donné.
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.2/groups/[id_group]/strategies" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '{
"name":"stratégie 1",
"lifetime": 1440,
"sequences": [
[
"EMAIL"
]
],
"emailMediaConfiguration": {
"monday": [{"start": "1200", "end": "1800"}],
"tuesday": [{"start": "1200", "end": "1800"}],
"wednesday": [{"start": "1200", "end": "1800"}],
"thursday": [{"start": "1200", "end": "1800"}],
"friday": [{"start": "1200", "end": "1800"}],
"saturday": [{"start": "1200", "end": "1800"}],
"sunday": [{"start": "1200", "end": "1800"}],
"linksTracking": false,
"openingsTracking": true
}
}'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/strategies");
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\":\"stratégie 1\","
+ "\"lifetime\": 1440,"
+ "\"sequences\": ["
+ "["
+ "\"EMAIL\""
+ "]"
+ "],"
+ "\"emailMediaConfiguration\": {"
+ "\"monday\": [{\"start\": \"1200\", \"end\": \"1800\"}],"
+ "\"tuesday\": [{\"start\": \"1200\", \"end\": \"1800\"}],"
+ "\"wednesday\": [{\"start\": \"1200\", \"end\": \"1800\"}],"
+ "\"thursday\": [{\"start\": \"1200\", \"end\": \"1800\"}],"
+ "\"friday\": [{\"start\": \"1200\", \"end\": \"1800\"}],"
+ "\"saturday\": [{\"start\": \"1200\", \"end\": \"1800\"}],"
+ "\"sunday\": [{\"start\": \"1200\", \"end\": \"1800\"}],"
+ "\"linksTracking\": false,"
+ "\"openingsTracking\": true"
+ "}"
"}";
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.2");
var request = new RestRequest("/groups/[id_group]/strategies", Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
var json = @"{
""name"":""stratégie 1"",
""lifetime"": 1440,
""sequences"": [
[
""EMAIL""
]
],
""emailMediaConfiguration"": {
""monday"": [{""start"": ""1200"", ""end"": ""1800""}],
""tuesday"": [{""start"": ""1200"", ""end"": ""1800""}],
""wednesday"": [{""start"": ""1200"", ""end"": ""1800""}],
""thursday"": [{""start"": ""1200"", ""end"": ""1800""}],
""friday"": [{""start"": ""1200"", ""end"": ""1800""}],
""saturday"": [{""start"": ""1200"", ""end"": ""1800""}],
""sunday"": [{""start"": ""1200"", ""end"": ""1800""}],
""linksTracking"": false,
""openingsTracking"": true
}
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/strategies", Method.POST)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{
""name"":""stratégie 1"",
""lifetime"": 1440,
""sequences"": [
[
""EMAIL""
]
],
""emailMediaConfiguration"": {
""monday"": [{""start"": ""1200"", ""end"": ""1800""}],
""tuesday"": [{""start"": ""1200"", ""end"": ""1800""}],
""wednesday"": [{""start"": ""1200"", ""end"": ""1800""}],
""thursday"": [{""start"": ""1200"", ""end"": ""1800""}],
""friday"": [{""start"": ""1200"", ""end"": ""1800""}],
""saturday"": [{""start"": ""1200"", ""end"": ""1800""}],
""sunday"": [{""start"": ""1200"", ""end"": ""1800""}],
""linksTracking"": false,
""openingsTracking"": true
}
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/strategies";
$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":"stratégie 1",
"lifetime": 1440,
"sequences": [["EMAIL"]],
"emailMediaConfiguration": {
"monday": [{"start": "1200", "end": "1800"}],
"tuesday": [{"start": "1200", "end": "1800"}],
"wednesday": [{"start": "1200", "end": "1800"}],
"thursday": [{"start": "1200", "end": "1800"}],
"friday": [{"start": "1200", "end": "1800"}],
"saturday": [{"start": "1200", "end": "1800"}],
"sunday": [{"start": "1200", "end": "1800"}],
"linksTracking": false,
"openingsTracking": true
}
}';
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.2/groups/[id_group]/strategies"
json := `{
"name":"stratégie 1",
"lifetime": 1440,
"sequences": [
[
"EMAIL"
]
],
"emailMediaConfiguration": {
"monday": [{"start": "1200", "end": "1800"}],
"tuesday": [{"start": "1200", "end": "1800"}],
"wednesday": [{"start": "1200", "end": "1800"}],
"thursday": [{"start": "1200", "end": "1800"}],
"friday": [{"start": "1200", "end": "1800"}],
"saturday": [{"start": "1200", "end": "1800"}],
"sunday": [{"start": "1200", "end": "1800"}],
"linksTracking": false,
"openingsTracking": true
}
}`
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 unique du groupe. |
Format de réponse
Format de réponse
{
"id": "8249e746-f243-437d-afe7-47751dfb5996",
"name":"stratégie 1",
"lifetime": 1440,
"sequences": [
[
"EMAIL"
]
],
"emailMediaConfiguration": {
"monday": [{"start": "1200", "end": "1800"}],
"tuesday": [{"start": "1200", "end": "1800"}],
"wednesday": [{"start": "1200", "end": "1800"}],
"thursday": [{"start": "1200", "end": "1800"}],
"friday": [{"start": "1200", "end": "1800"}],
"saturday": [{"start": "1200", "end": "1800"}],
"sunday": [{"start": "1200", "end": "1800"}],
"linksTracking": false,
"openingsTracking": true
}
}
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Format de la donnée |
| Location | /api/v1.2/groups/:id-group/strategies/:id-strategy |
Emplacement de la stratégie créée |
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é |
| 400 BadRequest | NotEmpty | Un ou plusieurs champs obligatoires sont manquants dans votre objet |
| 400 BadRequest | Duplicate | Un ou plusieurs points de communications sont présent plus d'une fois |
| 400 BadRequest | NotConfigured | Un média présent dans une séquence n'est pas configuré. |
| 400 BadRequest | NotInSequences | Une configuration existe pour un média non présent dans les séquences. |
| 400 BadRequest | StartAfterEnd | La date de début d'une permission est après la date de fin. |
- Modifier une statégie
:id-group/strategies/:id-strategy
Ce point d'accès permet de modifier une stratégie dans un groupe donné.
Format de requête
Format de requête
curl -X PUT "https://[SERVER_URL]/api/v1.2/groups/[id_group]/strategies/[id_stategy]" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '{
"name":"stratégie 1",
"lifetime": 1440,
"sequences": [
[
"EMAIL"
]
],
"emailMediaConfiguration": {
"monday": [{"start": "1200", "end": "1800"}],
"tuesday": [{"start": "1200", "end": "1800"}],
"wednesday": [{"start": "1200", "end": "1800"}],
"thursday": [{"start": "1200", "end": "1800"}],
"friday": [{"start": "1200", "end": "1800"}],
"saturday": [{"start": "1200", "end": "1800"}],
"sunday": [{"start": "1200", "end": "1800"}],
"linksTracking": false,
"openingsTracking": true
}
}'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/strategies/[id_stategy]");
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\":\"stratégie 1\","
+ "\"lifetime\": 1440,"
+ "\"sequences\": ["
+ "["
+ "\"EMAIL\""
+ "]"
+ "],"
+ "\"emailMediaConfiguration\": {"
+ "\"monday\": [{\"start\": \"1200\", \"end\": \"1800\"}],"
+ "\"tuesday\": [{\"start\": \"1200\", \"end\": \"1800\"}],"
+ "\"wednesday\": [{\"start\": \"1200\", \"end\": \"1800\"}],"
+ "\"thursday\": [{\"start\": \"1200\", \"end\": \"1800\"}],"
+ "\"friday\": [{\"start\": \"1200\", \"end\": \"1800\"}],"
+ "\"saturday\": [{\"start\": \"1200\", \"end\": \"1800\"}],"
+ "\"sunday\": [{\"start\": \"1200\", \"end\": \"1800\"}],"
+ "\"linksTracking\": false,"
+ "\"openingsTracking\": true"
+ "}"
"}";
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.2");
var request = new RestRequest("/groups/[id_group]/strategies/[id_strategy]", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
var json = @"{
""name"":""stratégie 1"",
""lifetime"": 1440,
""sequences"": [
[
""EMAIL""
]
],
""emailMediaConfiguration"": {
""monday"": [{""start"": ""1200"", ""end"": ""1800""}],
""tuesday"": [{""start"": ""1200"", ""end"": ""1800""}],
""wednesday"": [{""start"": ""1200"", ""end"": ""1800""}],
""thursday"": [{""start"": ""1200"", ""end"": ""1800""}],
""friday"": [{""start"": ""1200"", ""end"": ""1800""}],
""saturday"": [{""start"": ""1200"", ""end"": ""1800""}],
""sunday"": [{""start"": ""1200"", ""end"": ""1800""}],
""linksTracking"": false,
""openingsTracking"": true
}
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/strategies/[id_strategy]", Method.PUT)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{
""name"":""stratégie 1"",
""lifetime"": 1440,
""sequences"": [
[
""EMAIL""
]
],
""emailMediaConfiguration"": {
""monday"": [{""start"": ""1200"", ""end"": ""1800""}],
""tuesday"": [{""start"": ""1200"", ""end"": ""1800""}],
""wednesday"": [{""start"": ""1200"", ""end"": ""1800""}],
""thursday"": [{""start"": ""1200"", ""end"": ""1800""}],
""friday"": [{""start"": ""1200"", ""end"": ""1800""}],
""saturday"": [{""start"": ""1200"", ""end"": ""1800""}],
""sunday"": [{""start"": ""1200"", ""end"": ""1800""}],
""linksTracking"": false,
""openingsTracking"": true
}
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/strategies/[id_strategy]";
$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":"stratégie 1",
"lifetime": 1440,
"sequences": [["EMAIL"]],
"emailMediaConfiguration": {
"monday": [{"start": "1200", "end": "1800"}],
"tuesday": [{"start": "1200", "end": "1800"}],
"wednesday": [{"start": "1200", "end": "1800"}],
"thursday": [{"start": "1200", "end": "1800"}],
"friday": [{"start": "1200", "end": "1800"}],
"saturday": [{"start": "1200", "end": "1800"}],
"sunday": [{"start": "1200", "end": "1800"}],
"linksTracking": false,
"openingsTracking": true
}
}';
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.2/groups/[id_group]/strategies/[id_strategy]"
json := `{
"name":"stratégie 1",
"lifetime": 1440,
"sequences": [
[
"EMAIL"
]
],
"emailMediaConfiguration": {
"monday": [{"start": "1200", "end": "1800"}],
"tuesday": [{"start": "1200", "end": "1800"}],
"wednesday": [{"start": "1200", "end": "1800"}],
"thursday": [{"start": "1200", "end": "1800"}],
"friday": [{"start": "1200", "end": "1800"}],
"saturday": [{"start": "1200", "end": "1800"}],
"sunday": [{"start": "1200", "end": "1800"}],
"linksTracking": false,
"openingsTracking": true
}
}`
payload := strings.NewReader(json)
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
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 unique du groupe. |
| id-stategy | String | L'identifiant unique de la stratégie. |
Format de réponse
Format de réponse
{
"id": "8249e746-f243-437d-afe7-47751dfb5996",
"name":"stratégie 1",
"lifetime": 1440,
"sequences": [
[
"EMAIL"
]
],
"emailMediaConfiguration": {
"monday": [{"start": "1200", "end": "1800"}],
"tuesday": [{"start": "1200", "end": "1800"}],
"wednesday": [{"start": "1200", "end": "1800"}],
"thursday": [{"start": "1200", "end": "1800"}],
"friday": [{"start": "1200", "end": "1800"}],
"saturday": [{"start": "1200", "end": "1800"}],
"sunday": [{"start": "1200", "end": "1800"}],
"linksTracking": false,
"openingsTracking": true
}
}
- Status code : 200 OK
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Format de la donnée |
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de la strategie à 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 | Duplicate | Un ou plusieurs points de communications sont présent plus d'une fois |
| 400 BadRequest | EmailStrategyNeededByAPIMultimediaStrategy | Le média email ne peut être retiré de cette stratégie car elle est utilisée comme stratégie email api |
| 400 BadRequest | EmailStrategyNeededByDefaultEmailStrategy | Le média email ne peut être retiré de cette stratégie car elle est utilisée comme stratégie email par défaut |
| 400 BadRequest | EmailStrategyNeededByDefaultMultimediaStrategy | Le média email ne peut être retiré de cette stratégie car elle est utilisée comme stratégie multimédia par défaut |
| 400 BadRequest | NotConfigured | Un média présent dans une séquence n'est pas configuré. |
| 400 BadRequest | NotInSequences | Une configuration existe pour un média non présent dans les séquences. |
| 400 BadRequest | SmsStrategyNeededByAPIMultimediaStrategy | Le média SMS ne peut être retiré de cette stratégie car elle est utilisée comme stratégie multimédia api |
| 400 BadRequest | SmsStrategyNeededByAPISmsStrategy | Le média SMS ne peut être retiré de cette stratégie car elle est utilisée comme stratégie SMS api |
| 400 BadRequest | SmsStrategyNeededByDefaultMultimediaStrategy | Le média SMS ne peut être retiré de cette stratégie car elle est utilisée comme stratégie multimédia par défaut |
| 400 BadRequest | SmsStrategyNeededByDefaultSmsStrategy | Le média SMS ne peut être retiré de cette stratégie car elle est utilisée comme stratégie SMS par défaut |
| 400 BadRequest | SmsStrategyNeededByLightApi | Le média SMS ne peut être retiré de cette stratégie car elle est utilisée par l'api light |
| 400 BadRequest | SmsStrategyNeededByMail2Sms | Le média SMS ne peut être retiré de cette stratégie car elle est utilisée par l'interface mail |
| 400 BadRequest | VoiceStrategyNeededByLightApi | Le média vocal ne peut être retiré de cette stratégie car elle est utilisée par l'API light |
| 400 BadRequest | StartAfterEnd | La date de début d'une permission est après la date de fin. |
- Supprimer une stratégie
:id-group/strategies/:id-strategy
Ce point d'accès permet de supprimer une stratégie d'un groupe donné.
Format de requête
Format de requête
curl -X DELETE \
"https://[SERVER_URL]/api/v1.2/groups/[id_group]/strategies/[id_strategy]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/strategies/[id_strategy]");
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.2");
var request = new RestRequest("/groups/[id_group]/strategies/[id_strategy]", Method.DELETE);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/strategies/[id_strategy]", Method.DELETE)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/strategies/[id_strategy]";
$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.2/groups/[id_group]/strategies/[id_strategy]"
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 unique du groupe. |
| id-strategy | String | L'identifiant unique de la stratégie. |
- Payload
N/A
Format de réponse
- Status code : 204 No Content
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de la stratégie à 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 | StrategyUsedByAPIEmailStrategy | La stratégie ne peut pas être supprimée, car elle est utilisée comme stratégie email api |
| 400 BadRequest | StrategyUsedByAPIMultimediaStrategy | La stratégie ne peut pas être supprimée, car elle est utilisée comme stratégie multimédia api |
| 400 BadRequest | StrategyUsedByAPISmsStrategy | La stratégie ne peut pas être supprimée, car elle est utilisée comme stratégie SMS api |
| 400 BadRequest | StrategyUsedByAPIFaxStrategy | La stratégie ne peut pas être supprimée, car elle est utilisée comme stratégie fax api |
| 400 BadRequest | StrategyUsedByAPIVoiceStrategy | La stratégie ne peut pas être supprimée, car elle est utilisée comme stratégie vocale api |
| 400 BadRequest | StrategyUsedByDefaultEmailStrategy | La stratégie ne peut pas être supprimée, car elle est utilisée par défaut sur l'interface web email |
| 400 BadRequest | StrategyUsedByDefaultMultimediaStrategy | La stratégie ne peut pas être supprimée, car elle est utilisée par défaut sur l'interface web multimedia |
| 400 BadRequest | StrategyUsedByDefaultSmsStrategy | La stratégie ne peut pas être supprimée, car elle est utilisée par défaut sur l'interface web sms |
| 400 BadRequest | StrategyUsedByDefaultFaxStrategy | La stratégie ne peut pas être supprimée, car elle est utilisée par défaut sur l'interface web fax |
| 400 BadRequest | StrategyUsedByDefaultVoiceStrategy | La stratégie ne peut pas être supprimée, car elle est utilisée par défaut sur l'interface web vocale |
| 400 BadRequest | StrategyUsedByLightApi | La stratégie ne peut pas être supprimée, car elle est utilisée par l'api light |
| 400 BadRequest | StrategyUsedByEmailInterfaceSmsStrategy | La stratégie ne peut pas être supprimée, car elle est utilisée par l'interface mail sms |
| 400 BadRequest | StrategyUsedByEmailInterfaceVoiceStrategy | La stratégie ne peut pas être supprimée, car elle est utilisée par l'interface mail vocale |
- Récupérer une stratégie
:id-group/strategies/:id-strategy
Ce point d'accès permet de récupérer une stratégie dans un groupe donné, à partir de son identifiant.
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api/v1.2/groups/[id_group]/strategies/[id_strategy]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/strategies/[id_strategy]");
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.2");
var request = new RestRequest("/groups/[id_group]/strategies/[id_strategy]", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/strategies/[id_strategy]", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/strategies/[id_strategy]";
$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.2/groups/[id_group]/strategies/[id_strategy]"
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 unique du groupe. |
| id-strategy | String | L'identifiant unique de la stratégie. |
Format de réponse
Format de réponse
{
"id": "8249e746-f243-437d-afe7-47751dfb5996",
"name":"stratégie 1",
"lifetime": 1440,
"sequences": [
[
"EMAIL"
]
],
"emailMediaConfiguration": {
"monday": [{"start": "1200", "end": "1800"}],
"tuesday": [{"start": "1200", "end": "1800"}],
"wednesday": [{"start": "1200", "end": "1800"}],
"thursday": [{"start": "1200", "end": "1800"}],
"friday": [{"start": "1200", "end": "1800"}],
"saturday": [{"start": "1200", "end": "1800"}],
"sunday": [{"start": "1200", "end": "1800"}],
"linksTracking": false,
"openingsTracking": true
}
}
- Status code : 200 Ok
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de la stratégie à 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 stratégies
:id-group/strategies
Ce point d'accès permet de lister toutes les stratégies d'un groupe donné.
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/groups/[id_group]/strategies" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/strategies");
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.2");
var request = new RestRequest("/groups/[id_group]/strategies", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/strategies", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/strategies";
$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.2/groups/[id_group]/strategies"
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 unique du groupe. |
- Payload
N/A
Format de réponse
Format de réponse
[
{
"id": "8249e746-f243-437d-afe7-47751dfb5996",
"name":"stratégie 1",
"lifetime": 1440,
"sequences": [
[
"EMAIL"
]
],
"emailMediaConfiguration": {
"monday": [{"start": "1200", "end": "1800"}],
"tuesday": [{"start": "1200", "end": "1800"}],
"wednesday": [{"start": "1200", "end": "1800"}],
"thursday": [{"start": "1200", "end": "1800"}],
"friday": [{"start": "1200", "end": "1800"}],
"saturday": [{"start": "1200", "end": "1800"}],
"sunday": [{"start": "1200", "end": "1800"}],
"linksTracking": false,
"openingsTracking": true
}
},
{
"id": "8249e746-f243-437d-afe7-47751dfb85z6",
"name":"stratégie 2",
"lifetime": 1440,
"sequences": [
[
"EMAIL"
]
],
"emailMediaConfiguration": {
"monday": [{"start": "1200", "end": "1800"}],
"tuesday": [{"start": "1200", "end": "1800"}],
"wednesday": [{"start": "1200", "end": "1800"}],
"thursday": [{"start": "1200", "end": "1800"}],
"friday": [{"start": "1200", "end": "1800"}],
"saturday": [{"start": "1200", "end": "1800"}],
"sunday": [{"start": "1200", "end": "1800"}],
"linksTracking": false,
"openingsTracking": true
}
}
]
- 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é |
15. Modèle de diffusion
Un modèle de diffusion est une diffusion prédéfinie pouvant être chargée lors d'une demande de diffusion
Structure d'un modèle de diffusion
| Champ | Type | Read-Only | Requis | Description |
|---|---|---|---|---|
| id | String | true | N/A | L'identifiant du modèle de diffusion |
| name | String | false | false | Le nom du modèle de diffusion |
| msisdns | String[] | false | false | Liste des numéros de mobile ciblés par la diffusion |
| faxes | String[] | false | false | Liste des numéros de fax ciblés par la diffusion |
| landlines | String[] | false | false | Liste des numéros de fixe ciblés par la diffusion |
| emails | String[] | false | false | Liste des adresses emails ciblées par la diffusion |
| mailingListIds | String[] | false | false | Identifiants des listes de diffusions utilisées par la diffusion |
| categoryIds | String[] | false | false | Identifiants des catégories utilisées par la diffusion |
| contactIds | String[] | false | false | Identifiants des contacts utilisés par la diffusion |
| excludedContactIds | String[] | false | false | Identifiants des contacts à exclure (lors de l'utilisation d'une liste de diffusion) pour la diffusion |
| strategyId | String | false | true | Identifiant de la stratégie à associer à la diffusion |
| smsParam | SmsParam | false | false | Paramètres de l'envoi SMS |
| emailParam | EmailParam | false | false | Paramètres de l'envoi EMAIL |
| faxParam | FaxParam | false | false | Paramètres de l'envoi FAX |
| voiceParam | VoiceParam | false | false | Paramètres de l'envoi vocal |
| createdAt | Date | true | N/A | La date de création du modèle |
| updatedAt | Date | true | N/A | La date de dernière mise à jour du modèle |
NB: Dans le cas d'un modèle de diffusion vocale, les champs msisdnset landlines sont indicatifs. Un numéro de mobile renseigné dans les landlines sera facturé en tant que mobile,
et un numéro fixe renseigné dans msisdns sera facturé en tant que fixe.
Utilisation d'un message prédéfini lors de la création/modification d'un modèle de diffusion
Il est possible d'utiliser un message prédéfini en utilisant le champ templateId dans les objets SmsParam, EmailParam, FaxParam et VoiceParam.
Attention, les champs non nuls des objets xxxParam du modèle de diffusion écraseront les valeurs issues du message prédéfini (il est ainsi possible de n'utiliser qu'une partie d'un message prédéfini).
Le modèle de diffusion est alors créé avec les valeurs du message prédéfini, mais ne conserve pas de lien vers celui-ci. Le message prédéfini peut donc être modifié ou supprimé sans impact sur le modèle de diffusion.
- Créer un modèle de diffusion
:id-group/diffusion-templates
Ce point d'accès permet de créer un modèle de diffusion dans un groupe donné.
Les modèles de type EMAIL, FAX et VOCAL peuvent être créés de deux manières:
- En positionnant les identifiants de fichiers préalablement téléversés dans les champs correspondants
- En envoyant les fichiers lors de la création du modèle au moyen d'une requête au format
multipart/form-data, avec les parties suivantes:- partie
diffusionTemplate(requise): définition du modèle au formatapplication/json - partie
attachmentN: fichiers utilisés comme pièces jointes pour les modèles EMAIL oùNest le numéro du fichier (de 1 à 5) - parties
fax,fax2,fax3,fax4,fax5: fichiers utilisés pour les modèles FAX - partie
audio-intro: fichier audio utilisé pour l'introduction des modèles VOCAL - partie
audio-body: fichier audio utilisé pour le corps des modèles VOCAL - partie
audio-outro: fichier audio utilisé pour la conclusion des modèles VOCAL
- partie
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-templates" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '{
"name": "template SMS",
"msisdns": ["+33611549692"],
"strategyId": "id_strategy",
"smsParam": {
"body": "test body sms",
"encoding": "GSM7",
"senderName": "senderName"
}
}'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-templates");
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\": \"template SMS\","
+ "\"msisdns\": [\"+33611549692\"],"
+ "\"strategyId\": \"id_strategy\","
+ "\"smsParam\": {"
+ "\"body\": \"test body sms\","
+ "\"encoding\": \"GSM7\","
+ "\"senderName\": \"senderName\""
+ "}"
+"}"
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.2");
var request = new RestRequest("/groups/[id_group]/diffusion-templates", Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
var json = @"{
""name"": ""template SMS"",
""msisdns"": [""+33611549692""],
""strategyId"": ""id_strategy"",
""smsParam"": {
""body"": ""test body sms"",
""encoding"": ""GSM7"",
""senderName"": ""senderName""
}
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/diffusion-templates ", Method.POST)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{
""name"": ""template SMS"",
""msisdns"": [""+33611549692""],
""strategyId"": ""id_strategy"",
""smsParam"": {
""body"": ""test body sms"",
""encoding"": ""GSM7"",
""senderName"": ""senderName""
}
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-templates";
$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": "template SMS",
"msisdns": ["+33611549692"],
"strategyId": "id_strategy",
"smsParam": {
"body": "test body sms",
"encoding": "GSM7",
"senderName": "senderName"
}
}';
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.2/groups/[id_group]/diffusion-templates"
json := `{
"name": "template SMS",
"msisdns": ["+33611549692"],
"strategyId": "id_strategy",
"smsParam": {
"body": "test body sms",
"encoding": "GSM7",
"senderName": "senderName"
}
}`
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 unique du groupe. |
Format de réponse
Format de réponse
{
"id": "a8369d2a-fb39-4287-9540-a452e9cdb7be",
"name": "template SMS",
"msisdns": [
"+33611549692"
],
"mailingListIds": [],
"categoryIds": [],
"contactIds": [],
"excludedContactIds": [],
"strategyId": "d38f29ff-0f4b-4a01-a3f7-33ac348fc879",
"smsParam": {
"senderName": "senderName",
"encoding": "GSM7",
"body": "test body sms"
},
"createdAt": "2018-07-13T09:44:09.809+02:00",
"updatedAt": "2018-07-13T09:44:09.809+02:00"
}
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Format de la donnée |
| Location | /api/v1.2/groups/:id-group/diffusion-templates/:id-template |
Emplacement du modèle créé |
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é |
| 400 BadRequest | NotEmpty | Un ou plusieurs champs obligatoires sont manquants dans votre objet |
| 400 BadRequest | MediaAbsentInStrategy | Le média sur lequel vous essayez de créer le modèle n'est pas présent dans la stratégie sélectionnée |
| 400 BadRequest | ConsistencyError | Des listes de diffusions ou contacts que vous avez sélectionnés n'appartiennent pas au groupe auquel vous tentez d'accéder |
| 400 BadRequest | BadFileType | Le format du document fax ou du contenu vocal n'est pas valide |
| 400 BadRequest | MaxFileSizeExceeded | La taille du document fax ou du contenu vocal dépasse la limite autorisée |
| 400 BadRequest | Invalid | La valeur du champ locale est invalide |
| 400 BadRequest | Invalid | Vous n'avez fourni ni contenu texte à vocaliser ni fichier audio pour le modèle vocal |
- Modifier un modèle de diffusion
:id-group/diffusion-templates/:id-template
Ce point d'accès permet de modifier un modèle de diffusion dans un groupe donné.
Les modèles de type EMAIL, FAX et VOCAL peuvent être modifiés de deux manières:
- En positionnant les identifiants de fichiers préalablement téléversés dans les champs correspondants
- En envoyant les fichiers lors de la création du modèle au moyen d'une requête au format
multipart/form-data, avec les parties suivantes:- partie
messageTemplate(requise): définition du modèle au formatapplication/json - partie
attachmentN: fichiers utilisés comme pièces jointes pour les modèles EMAIL oùNest le numéro du fichier (de 1 à 5) - parties
fax,fax2,fax3,fax4,fax5: fichiers utilisés pour les modèles FAX - partie
audio-intro: fichier audio utilisé pour l'introduction des modèles VOCAL - partie
audio-body: fichier audio utilisé pour le corps des modèles VOCAL - partie
audio-outro: fichier audio utilisé pour la conclusion des modèles VOCAL
- partie
Format de requête
Format de requête
curl -X PUT "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-templates/[id_template]" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '{
"name": "template EMAIL",
"emails": ["monemail@orange.fr"],
"strategyId": "id_strategy",
"emailParam": {
"senderEmail": "sender@email.com",
"subject": "template",
"body": "Ceci est un template email"
}
}'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-templates/[id_template]");
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\": \"template EMAIL\","
+ "\"emails\": [\"monemail@orange.fr\"],"
+ "\"strategyId\": \"id_strategy\","
+ "\"emailParam\": {"
+ "\"senderEmail\": \"sender@email.com\","
+ "\"subject\": \"template\","
+ "\"body\": \"Ceci est un template email\""
+ "}"
+ "}";
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.2");
var request = new RestRequest("/groups/[id_group]/diffusion-templates/[id_template]", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
var json = @"{
""name"": ""template EMAIL"",
""emails"": [""monemail@orange.fr""],
""strategyId"": ""id_strategy"",
""emailParam"": {
""senderEmail"": ""sender@email.com"",
""subject"": ""template"",
""body"": ""Ceci est un template email""
}
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/diffusion-templates/[id_template]", Method.PUT)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{
""name"": ""template EMAIL"",
""emails"": [""monemail@orange.fr""],
""strategyId"": ""id_strategy"",
""emailParam"": {
""senderEmail"": ""sender@email.com"",
""subject"": ""template"",
""body"": ""Ceci est un template email""
}
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-templates/[id_template]";
$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": "template EMAIL",
"emails": ["monemail@orange.fr"],
"strategyId": "id_strategy",
"emailParam": {
"senderEmail": "sender@email.com",
"subject": "template",
"body": "Ceci est un template email"
}
}';
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.2/groups/[id_group]/diffusion-templates/[id_template]"
json := `{
"name": "template EMAIL",
"emails": ["monemail@orange.fr"],
"strategyId": "id_strategy",
"emailParam": {
"senderEmail": "sender@email.com",
"subject": "template",
"body": "Ceci est un template email"
}
}`
payload := strings.NewReader(json)
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
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 unique du groupe. |
| id-template | String | L'identifiant unique du modèle. |
Format de réponse
Format de réponse
{
"id": "ed2b74c7-2243-432c-9077-e9528f49e2f7",
"name": "template EMAIL",
"emails": [
"monemail@orange.fr"
],
"mailingListIds": [],
"categoryIds": [],
"contactIds": [],
"excludedContactIds": [],
"strategyId": "d38f29ff-0f4b-4a01-a3f7-33ac348fc879",
"emailParam": {
"senderEmail": "sender@email.com",
"subject": "template",
"body": "Ceci est un template email"
},
"createdAt": "2018-07-13T10:27:07.568+02:00",
"updatedAt": "2018-07-13T10:27:07.568+02:00"
}
- Status code : 200 OK
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Format de la donnée |
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du modèle de diffusion 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 | BadFileType | Le format du document fax ou du contenu vocal n'est pas valide |
| 400 BadRequest | MaxFileSizeExceeded | La taille du document fax ou du contenu vocal dépasse la limite autorisée |
| 400 BadRequest | Invalid | La valeur du champ locale est invalide |
| 400 BadRequest | Invalid | Vous n'avez fourni ni contenu texte à vocaliser ni fichier audio pour le modèle vocal |
- Supprimer un modèle de diffusion
:id-group/diffusion-templates/:id-template
Ce point d'accès permet de supprimer un modèle de diffusion d'un groupe donné.
Format de requête
Format de requête
curl -X DELETE \
"https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-templates/[id_template]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-templates/[id_template]");
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.2");
var request = new RestRequest("/groups/[id_group]/diffusion-templates/[id_template]", Method.DELETE);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/diffusion-templates/[id_template]", Method.DELETE)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-templates/[id_template]";
$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.2/groups/[id_group]/diffusion-templates/[id_template]"
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 unique du groupe. |
| id-template | String | L'identifiant unique du modèle. |
- Payload
N/A
Format de réponse
- Status code : 204 No Content
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du modèle de diffusion 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é |
- Récupérer un modèle de diffusion
:id-group/diffusion-templates/:id-template
Ce point d'accès permet de récupérer un modèle de diffusion dans un groupe donné, à partir de son identifiant.
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-templates/[id_template]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-templates/[id_template]");
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.2");
var request = new RestRequest("/groups/[id_group]/diffusion-templates/[id_template]", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/diffusion-templates/[id_template]", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-templates/[id_template]";
$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.2/groups/[id_group]/diffusion-templates/[id_template]"
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 unique du groupe. |
| id-template | String | L'identifiant unique du modèle. |
Format de réponse
Format de réponse
{
"id": "b1c29944-ab0f-444e-a476-ed2bb30a7c48",
"name": "template VOICE",
"msisdns": [],
"landlines": [
"+33557857493"
],
"mailingListIds": [],
"categoryIds": [],
"contactIds": [],
"excludedContactIds": [],
"strategyId": "d38f29ff-0f4b-4a01-a3f7-33ac348fc879",
"voiceParam": {
"body": {
"text": "ceci est un template voice"
},
"locale": "fr_FR"
},
"createdAt": "2018-07-13T10:45:58.529+02:00",
"updatedAt": "2018-07-13T10:45:58.529+02:00"
}
- Status code : 200 Ok
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du modèle 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 modèles de diffusion
:id-group/diffusion-templates
Ce point d'accès permet de lister tous les modèles de diffusion d'un groupe donné.
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-templates" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-templates");
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.2");
var request = new RestRequest("/groups/[id_group]/diffusion-templates", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/diffusion-templates", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-templates";
$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.2/groups/[id_group]/diffusion-templates"
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 unique du groupe. |
- Payload
N/A
Format de réponse
Format de réponse
[
{
"id": "b1c29944-ab0f-444e-a476-ed2bb30a7c48",
"name": "template VOICE",
"msisdns": [],
"landlines": [
"+33557857493"
],
"mailingListIds": [],
"categoryIds": [],
"contactIds": [],
"excludedContactIds": [],
"strategyId": "d38f29ff-0f4b-4a01-a3f7-33ac348fc879",
"voiceParam": {
"body": {
"text": "ceci est un template voice"
},
"locale": "fr_FR"
},
"createdAt": "2018-07-13T10:45:58.529+02:00",
"updatedAt": "2018-07-13T10:45:58.529+02:00"
},
{
"id": "ab0b0f1c-e7f8-4e45-873d-16813ee1460b",
"name": "template FAX",
"mailingListIds": [],
"categoryIds": [],
"contactIds": [],
"excludedContactIds": [],
"strategyId": "d38f29ff-0f4b-4a01-a3f7-33ac348fc879",
"createdAt": "2018-07-13T10:47:04.840+02:00",
"updatedAt": "2018-07-13T10:47:04.840+02:00"
}
]
- 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é |
16. Message prédéfini
Un message prédéfini est un message pouvant être chargé lors d'une demande de diffusion ou lors de l'édition d'un modèle de diffusion.
Un message prédéfini ne porte que sur un média à la fois
Structure d'un message prédéfini
Les champs listés ci-dessous sont communs à tous les médias.
| Champ | Type | Read-Only | Requis | Description |
|---|---|---|---|---|
| id | String | true | N/A | L'identifiant du message prédéfini |
| name | String | false | true | Le nom du message prédéfini |
| media | Media | false | true | Le média sur lequel porte le message prédéfini |
Les champs listés ci-dessous sont spécifiques à chaque média et s'ajoutent aux champs listés ci-dessus
Structure d'un messages prédéfinis SMS
| Champ | Type | Read-Only | Requis | Description |
|---|---|---|---|---|
| body | String | false | true | Le corps du message SMS |
| urlToShorten | String | false | false | L'URL à raccourcir (cf Créer une diffusion SMS). Dans un contexte conversationnel cette donnée est ignorée |
| landingPageParam | LandingPageParam | false | false | Les paramètres pour la génération d'une landing page (cf Créer une diffusion SMS) |
Structure d'un messages prédéfinis EMAIL
| Champ | Type | Read-Only | Requis | Description |
|---|---|---|---|---|
| body | String | false | true | Le corps du message EMAIL |
| attachmentIds | String[] | false | false | Les identifiants des pièces jointes de l'email (dans le cas de pièces jointes préalablement téléversées |
Structure d'un messages prédéfinis FAX
| Champ | Type | Read-Only | Requis | Description |
|---|---|---|---|---|
| attachmentIds | String[] | false | false | Les identifiants des documents que vous souhaitez faxer (dans le cas documents préalablement téléversées |
Structure d'un messages prédéfinis VOCAL
Les contenus audio doivent soit être renseignés via les paramètres ci-dessous, soit être fournis au moyen d'une requête de type multipart/form-data
| Champ | Type | Read-Only | Requis | Description |
|---|---|---|---|---|
| locale | String | false | true | La locale utilisée pour la synthèse vocale: fr_FR (France) ou en_GB (Royaume Uni) |
| intro | AudioContent | false | false | Le contenu audio à jouer pour l'introduction du message |
| body | AudioContent | false | true | Le contenu audio à jouer pour le corps du message |
| outro | AudioContent | false | false | Le contenu audio à jouer pour la conclusion du message |
- Créer un message prédéfini
:id-group/message-templates
Ce point d'accès permet de créer un message prédéfini dans un groupe donné.
Les messages prédéfinis de type EMAIL, FAX et VOCAL peuvent être créés de deux manières:
- En positionnant les identifiants de fichiers préalablement téléversés dans les champs correspondants
- En envoyant les fichiers lors de la création du message prédéfini au moyen d'une requête au format
multipart/form-data, avec les parties suivantes:- partie
messageTemplate(requis): définition du message prédéfini au formatapplication/json - partie
attachmentN: fichiers utilisés comme pièces jointes pour les messages prédéfinis EMAIL oùNest le numéro du fichier (de 1 à 5) - partie
fax: fichier utilisé pour les messages prédéfinis FAX - partie
audio-intro: fichier audio utilisé pour l'introduction des messages prédéfinis VOCAL - partie
audio-body: fichier audio utilisé pour le corps des messages prédéfinis VOCAL - partie
audio-outro: fichier audio utilisé pour la conclusion des messages prédéfinis VOCAL
- partie
Format de requête
curl -X POST "https://[SERVER_URL]/api/v1.2/groups/[id_group]/message-templates" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '{
"name": "template sms",
"media": "SMS",
"body": "Ceci est un message SMS"
}'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/message-templates");
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\": \"template sms\","
+ "\"media\": \"SMS\","
+ "\"body\": \"Ceci est un message 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.2");
var request = new RestRequest("/groups/[id_group]/message-templates", Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
var json = @"{
""name"": ""template sms"",
""media"": ""SMS"",
""body"": ""Ceci est un message SMS""
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/message-templates ", Method.POST)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{
""name"": ""template sms"",
""media"": ""SMS"",
""body"": ""Ceci est un message SMS""
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/message-templates";
$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": "template sms",
"media": "SMS",
"body": "Ceci est un message 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.2/groups/[id_group]/message-templates"
json := `{
"name": "template sms",
"media": "SMS",
"body": "Ceci est un message 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 unique du groupe. |
Format de réponse
Format de réponse
{
"id": "8249e746-f243-437d-afe7-47751dfb5996",
"name": "template sms",
"media": "SMS",
"body": "Ceci est un message SMS"
}
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Format de la donnée |
| Location | /api/v1.2/groups/:id-group/message-template/:id-template |
Emplacement du message prédéfini créé |
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é |
| 400 BadRequest | NotEmpty | Un ou plusieurs champs obligatoires sont manquants dans votre objet |
| 400 BadRequest | BadFileType | Le format du document fax ou du contenu vocal n'est pas valide |
| 400 BadRequest | MaxFileSizeExceeded | La taille du document fax ou du contenu vocal dépasse la limite autorisée |
| 400 BadRequest | Invalid | La valeur du champ locale est invalide |
| 400 BadRequest | Invalid | Vous n'avez fourni ni contenu texte à vocaliser ni fichier audio pour le message prédéfini vocal |
- Modifier un message prédéfini
:id-group/message-templates/:id-template
Ce point d'accès permet de modifier un message prédéfini dans un groupe donné.
Les messages prédéfinis de type EMAIL, FAX et VOCAL peuvent être modifiés de deux manières:
- En positionnant les identifiants de fichiers préalablement téléversés dans les champs correspondants
- En envoyant les fichiers lors de la création du message prédéfini au moyen d'une requête au format
multipart/form-data, avec les parties suivantes:- partie
messageTemplate(requis): définition du message prédéfini au formatapplication/json - partie
attachmentN: fichiers utilisés comme pièces jointes pour les messages prédéfinis EMAIL oùNest le numéro du fichier (de 1 à 5) - partie
fax: fichier utilisé pour les messages prédéfinis FAX - partie
audio-intro: fichier audio utilisé pour l'introduction des messages prédéfinis VOCAL - partie
audio-body: fichier audio utilisé pour le corps des messages prédéfinis VOCAL - partie
audio-outro: fichier audio utilisé pour la conclusion des messages prédéfinis VOCAL
- partie
Format de requête
Format de requête
curl -X PUT "https://[SERVER_URL]/api/v1.2/groups/[id_group]/message-templates/[id_template]" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]" \
-d '{
"name": "template email",
"media": "EMAIL",
"body": "Ceci est un message SMS",
"attachements": ["id_attachment_1"]
}'
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/message-templates/[id_template]");
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\": \"template email\","
+ "\"media\": \"EMAIL\","
+ "\"body\": \"Ceci est un message SMS\","
+ "\"attachements\": [\"id_attachment_1\"]"
+ "}";
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.2");
var request = new RestRequest("/groups/[id_group]/message-templates/[id_template]", Method.PUT);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
var json = @"{
""name"": ""template email"",
""media"": ""EMAIL"",
""body"": ""Ceci est un message SMS"",
""attachements"": [""id_attachment_1""]
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/message-templates/[id_template]", Method.PUT)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{
""name"": ""template email"",
""media"": ""EMAIL"",
""body"": ""Ceci est un message SMS"",
""attachements"": [""id_attachment_1""]
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/message-templates/[id_template]";
$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": "template email",
"media": "EMAIL",
"body": "Ceci est un message SMS",
"attachements": ["id_attachment_1"]
}';
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.2/groups/[id_group]/message-templates/[id_template]"
json := `{
"name": "template email",
"media": "EMAIL",
"body": "Ceci est un message SMS",
"attachements": ["id_attachment_1"]
}`
payload := strings.NewReader(json)
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
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 unique du groupe. |
| id-template | String | L'identifiant unique du message prédéfini. |
Format de réponse
Format de réponse
{
"id": "8249e746-f243-437d-afe7-47751dfb5996",
"name": "template email",
"media": "EMAIL",
"body": "Ceci est un message SMS",
"attachements": ["id_attachment_1"]
}
- Status code : 200 OK
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Format de la donnée |
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du message prédéfini 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 | BadFileType | Le format du document fax ou du contenu vocal n'est pas valide |
| 400 BadRequest | MaxFileSizeExceeded | La taille du document fax ou du contenu vocal dépasse la limite autorisée |
| 400 BadRequest | Invalid | La valeur du champ locale est invalide |
| 400 BadRequest | Invalid | Vous n'avez fourni ni contenu texte à vocaliser ni fichier audio pour le message prédéfini vocal |
- Supprimer un message prédéfini
:id-group/message-templates/:id-template
Ce point d'accès permet de supprimer un message prédéfini d'un groupe donné.
Format de requête
Format de requête
curl -X DELETE \
"https://[SERVER_URL]/api/v1.2/groups/[id_group]/message-templates/[id_template]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/message-templates/[id_template]");
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.2");
var request = new RestRequest("/groups/[id_group]/message-templates/[id_template]", Method.DELETE);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/message-templates/[id_template]", Method.DELETE)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/message-templates/[id_template]";
$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.2/groups/[id_group]/message-templates/[id_template]"
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 unique du groupe. |
| id-template | String | L'identifiant unique du message prédéfini. |
- Payload
N/A
Format de réponse
- Status code : 204 No Content
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du message 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é |
- Récupérer un message prédéfini
:id-group/message-templates/:id-template
Ce point d'accès permet de récupérer un message prédéfini dans un groupe donné, à partir de son identifiant.
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api/v1.2/groups/[id_group]/message-templates/[id_template]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/message-templates/[id_template]");
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.2");
var request = new RestRequest("/groups/[id_group]/message-templates/[id_template]", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/message-templates/[id_template]", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/message-templates/[id_template]";
$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.2/groups/[id_group]/message-templates/[id_template]"
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 unique du groupe. |
| id-template | String | L'identifiant unique du message prédéfini. |
Format de réponse
Format de réponse
{
"id": "8249e746-f243-437d-afe7-47751dfb5996",
"name": "template vocal",
"media": "VOCAL",
"intro": {"text": "ceci est l'introduction"},
"body": {"contentId": "id_fichier_audio"}
}
- Status code : 200 Ok
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du message prédéfini 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 messages prédéfinis
:id-group/message-templates
Ce point d'accès permet de lister tous les messages prédéfinis d'un groupe donné.
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/groups/[id_group]/message-templates" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/message-templates");
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.2");
var request = new RestRequest("/groups/[id_group]/message-templates", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/message-templates", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/message-templates";
$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.2/groups/[id_group]/message-templates"
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 unique du groupe. |
- Payload
N/A
Format de réponse
Format de réponse
[
{
"id": "8249e746-f243-437d-afe7-47751dfb5996",
"name": "template sms",
"media": "SMS",
"body": "Ceci est un message SMS"
},
{
"id": "8249e746-f243-437d-afe7-47751dfb5996",
"name": "template email",
"media": "EMAIL",
"body": "Ceci est un message Email",
"attachements": ["id_attachment_1"]
},
{
"id": "8249e746-f243-437d-afe7-47751dfc6355f",
"name": "template fax",
"media": "FAX",
"attachements": ["id_attachment_fax"]
},
{
"id": "8249e746-f243-437d-afe7-47751dfb5996",
"name": "template vocal",
"media": "VOCAL",
"intro": {"text": "ceci est l'introduction"},
"body": {"contentId": "id_fichier_audio"}
}
]
- 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é |
17. Fichiers téléversés
Un fichier téléversé est un fichier qui a été stocké sur le serveur de fichiers de l'application contact everyone.
Ils peuvent être utilisés lors de l'envoi d'une diffusion ou lors de la création d'un modèle.
Structure d'un fichier téléversé
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | L'identifiant du fichier |
| name | String | true | Le nom du fichier |
| url | String | true | L'url sur laquelle le fichier est disponible au téléchargement |
| contentType | String | true | Le type du fichier |
| size | Long | true | La taille du fichier en octet |
- Envoyer un fichier
:id-group/attachments
Ce point d'accès permet de téléverser un fichier dans un groupe donné.
Format de requête
1 - Avec le contenu du fichier dans la requète :
curl -X POST "https://[SERVER_URL]/api/v1.2/groups/[id_group]/attachments" \
-H "Content-Type: multipart/form-data; boundary=MY_BOUNDARY" \
-H "Authorization: Bearer [Access-Token]" \
-d $'--MY_BOUNDARY\r
Content-Disposition: form-data; name="attachments"; filename="filename.txt"\r
Content-Type: text/plain\r
\r
my text file content\r
--MY_BOUNDARY--\r
'
2 - Avec les chemins vers les fichiers :
curl -X POST "https://[SERVER_URL]/api/v1.2/groups/[id_group]/attachments" \
-H "Content-Type: multipart/form-data" \
-H "Authorization: Bearer [Access-Token]" \
-F attachments=@/path/to/file1.txt
-F attachments=@/path/to/file2.txt
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/attachments");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Authorization", "Bearer [Access-Token]");
con.setRequestProperty("Content-Type", "multipart/form-data; boundary=MY_BOUNDARY");
con.setDoOutput(true);
String postJsonData = "--MY_BOUNDARY\r\n"
+ "Content-Disposition: form-data; name=\"attachments\"; filename=\"filename.txt\"\r\n"
+ "Content-Type: text/plain\r\n"
+ "\r\n"
+ "Hello World!"
+ "\r\n--MY_BOUNDARY\r\n"
+ "Content-Disposition: form-data; name=\"attachments\"; filename=\"filename.pdf\"\r\n"
+ "Content-Type: application/pdf\r\n"
+ "\r\n";
byte[] pdfDataAsBytes = Files.readAllBytes(Paths.get("/path/to/file.pdf"));
DataOutputStream dataOutputStream = new DataOutputStream(con.getOutputStream());
dataOutputStream.write(postJsonData.getBytes(StandardCharsets.UTF_8));
dataOutputStream.write(pdfDataAsBytes);
dataOutputStream.write("\r\n--MY_BOUNDARY--\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();
1 - Avec le contenu du fichier dans la requète :
var client = new RestClient("https://[SERVER_URL]/api/v1.2");
var request = new RestRequest("/groups/[id_group]/attachments", Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "multipart/form-data; boundary=MY_BOUNDARY");
var body = @"--MY_BOUNDARY\r\n
Content-Disposition: form-data; name=""attachments""; filename=""filename.txt""\r\n
Content-Type: text/plain\r\n
\r\n
my text file content\r\n
--MY_BOUNDARY--\r\n";
request.AddParameter("text/plain", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
2 - Avec les chemins vers les fichiers :
var client = new RestClient("https://[SERVER_URL]/api/v1.2");
var request = new RestRequest("/groups/[id_group]/attachments", Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddFile("attachments", @"c:\myFirstFile.jpg", "image/jpg");
request.AddFile("attachments", @"c:\mySecondFile.txt", "plain/text");
IRestResponse r = client.Execute(request);
1 - Avec le contenu du fichier dans la requète :
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/attachments ", Method.POST)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "multipart/form-data; boundary=MY_BOUNDARY")
Dim body = "--MY_BOUNDARY\r\n
Content-Disposition: form-data; name=""attachments""; filename=""filename.txt""\r\n
Content-Type: text/plain\r\n
\r\n
my text file content\r\n
--MY_BOUNDARY--\r\n"
request.AddParameter("text/plain", body, ParameterType.RequestBody);
Dim response as IRestResponse = client.Execute(request)
2 - Avec les chemins vers les fichiers :
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/attachments ", Method.POST)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddFile("attachments", "c:\myFirstFile.jpg", "image/jpg")
request.AddFile("attachments", "c:\mySecondFile.txt", "plain/text")
Dim r as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/attachments";
$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=MY_BOUNDARY'
));
$content = '--MY_BOUNDARY\r
Content-Disposition: form-data; name="attachments"; filename="filename.txt"\r
Content-Type: text/plain\r
\r
my text file content\r
--MY_BOUNDARY--';
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.2/groups/[id_group]/attachments"
json := `--MY_BOUNDARY\r\n
Content-Disposition: form-data; name="attachments"; filename="filename.txt"\r\n
Content-Type: text/plain\r\n
\r\n
my text file content\r\n
--MY_BOUNDARY--\r\n`
payload := strings.NewReader(json)
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "multipart/form-data; boundary=MY_BOUNDARY")
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 unique du groupe. |
Format de réponse
Format de réponse
{
"id": "f815ca23-4de4-4fa6-8e9a-ea418c981acc",
"url": "http://localhost:8000/attachments/5b475c0cae480625c61839dd",
"name": "filename.txt",
"contentType": "text/plain",
"size": 5925
}
- Status code : 201 Created
- Headers Response :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Format de la donnée |
| Location | /api/v1.2/groups/:id-group/attachments/:id-attachement |
Emplacement du fichier téléversé |
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 |
| 400 BadRequest | MaxFileSizeExceeded | La pièce jointe est trop grosse. Se référer à la documentation du média concerné pour connaître la taille maximale autorisée. |
| 400 BadRequest | InvalidFileType | Le format de la pièce jointe est invalide. |
- Récupérer un fichier téléversé
:id-group/attachments/:id-attachment
Ce point d'accès permet de récupérer un fichier téléversé dans un groupe donné, à partir de son identifiant.
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api/v1.2/groups/[id_group]/attachments/[id_attachment]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/attachments/[id_attachment]");
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.2");
var request = new RestRequest("/groups/[id_group]/attachments/[id_attachment]", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/attachments/[id_attachment]", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/attachments/[id_attachment]";
$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.2/groups/[id_group]/attachments/[id_attachment]"
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 unique du groupe. |
| id-attachment | String | L'identifiant unique du fichier. |
Format de réponse
Format de réponse
{
"id": "f815ca23-4de4-4fa6-8e9a-ea418c981acc",
"url": "http://localhost:8000/attachments/5b475c0cae480625c61839dd",
"name": "filename.txt",
"contentType": "text/plain",
"size": 5925
}
- Status code : 200 Ok
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant du fichier 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 fichiers téléversés
:id-group/attachments
Ce point d'accès permet de lister tous les fichiers téléversés d'un groupe donné.
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/groups/[id_group]/attachments" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups/[id_group]/attachments");
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.2");
var request = new RestRequest("/groups/[id_group]/attachments", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/attachments", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/groups/[id_group]/attachments";
$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.2/groups/[id_group]/attachments"
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 unique du groupe. |
- Payload
N/A
Format de réponse
Format de réponse
[
{
"id": "f815ca23-4de4-4fa6-8e9a-ea418c981acc",
"url": "http://localhost:8000/attachments/5b475c0cae480625c61839dd",
"name": "filename.txt",
"contentType": "text/plain",
"size": 5925
},
{
"id": "f815ca23-4de4-4fa6-8e9a-ze9881ez",
"url": "http://localhost:8000/attachments/5b475c0cae480625c61ez512a",
"name": "filename2.txt",
"contentType": "text/plain",
"size": 5925
}
]
- 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é |
18. Emetteurs personnalisés
Lister les émetteurs personnalisés disponibles
:type
Ce point d'accès permet de récupérer les émetteurs personnalisés pour un type donné que vous pouvez utiliser pour :
- Associer à un groupe
- Associer à un subordonné
- Créer des emails personnalisés
Types possibles : OADC, EMAIL, DOMAIN, FAX, VOICE
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/custom-senders/[type]" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/custom-senders/[type]");
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.2");
var request = new RestRequest("/custom-senders/[type]", Method.GET);
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
Dim request as RestRequest = new RestRequest("/custom-senders/[type]", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/custom-senders/[type]";
$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.2/custom-senders/[type]"
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
Format de réponse
Format de réponse
["monemail@domain.com", "monemail2@domain.com"]
- Status code : 200 Ok
- Response Body :
Renvoie une liste d'émetteurs personnalisés au format String
19 - Consulter le détail des messages
Le bilan des messages permet d'accéder à l'ensemble des messages envoyés par la plateforme, toutes diffusions confondues, ainsi que les réponses aux SMS entrants (si option), sur les 7 derniers mois.
Structure
| Champ | Type | Description |
|---|---|---|
| messageId | String | L'identifiant du message |
| diffusionId | String | L'identifiant de la diffusion présent uniquement pour une diffusion |
| groupId | String | L'identifiant du groupe |
| authorId | String | L'identifiant de l'auteur |
| messageOrigin | MessageOrigin | L'origine du message |
| address | String | L'adresse cible du message |
| recipient | String | Destinataire du message |
| media | Media | Le média sur lequel le message a été envoyé |
| sentDate | String | Date d'envoi du message |
| creationDate | Date | Date de création du message |
| lastUpdateDate | Date | Date de dernière mise à jour du message |
| status | Status | Statut du message |
| cause | Cause | Cause du statut |
| details | String | Détails sur la cause |
| customId | String | L'identifiant personnalisé associé au destinataire présent uniquement à la demande |
MessageOrigin
Les valeurs suivantes sont possibles
DIFFUSION: message envoyé depuis une campagneSMSPLUS_REPLY: message envoyé en réponse à un SMS+ entrantSINGLE_MESSAGE: message envoyé via une API bas niveau (SMPP)
Status
Les valeurs suivantes sont possibles
WAITING: en attenteCANCELED: annuléREJECTED: rejetéUNREACHABLE: injoignableINPROGRESS: en coursFAILED: échecSUCCESS: succès
Cause
Les valeurs suivantes sont possibles
BLACKLISTED: désinscritEMPTY_ADDRESS: pas d'adresse joignableUNREACHABLE_ADDRESS: coordonnée injoignableINVALID_ADDRESS: coordonnée invalideDOM_NOT_ENABLED: vos options ne vous permettent pas d'émettre vers les DROMUSA_NOT_ENABLED: vos options ne vous permettent pas d'émettre vers les USAINTERNATIONAL_NOT_ENABLED: vos options ne vous permettent pas d'émettre vers l'étrangerOVERCHARGED_NUMBER: les numéros surtaxés ne sont pas autorisésQUOTA_REACHED: quota du compte atteintEXPIRED: expiréEXPIRED_DIFFUSION: pas d'accusé de réception opérateurDROPPED: pas d'accusé de réception opérateurDUPLICATE_ADDRESS: doublonDELIVERED: remis au destinataireSENT: transmis à l'opérateurACK: lu par le destinataireNO_ACK: non acquittéNACK: rejetéBUSY: correspondant occupéNO_REPLY: pas de réponse du correspondantNO_RING: pas de tonalité
Récupérer le bilan des messages
Ce point d'accès permet de récupérer le bilan des messages
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api/v1.2/communications" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api/v1.2/communications");
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);
}
<?php
$url = "https://[SERVER_URL]/api/v1.2/communications";
$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.2/communications"
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.2");
var request = new RestRequest("/communications", 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.2")
Dim request as RestRequest = new RestRequest("/communications", Method.GET)
request.AddHeader("Content-Type", "application/json")
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
- Query Parameters
| Parameter | Type | Requis | Description |
|---|---|---|---|
| scrollId | String | false | Identifiant pour récupérer la suite des résultats (voir Déroulement des résultats) |
| withCustomIds | Boolean | false | Inclure le champ customId dans les résultats |
Filtres
Il est possible de filtrer les résultats du bilan des messages à l'aide des paramètres ci-dessous
| Champ | Type | Requis | Description |
|---|---|---|---|
| address | String | false | L'adresse à rechercher |
| media | Media | false | Le média à rechercher |
| dateMin | Date | false | La date de création minimale à rechercher |
| dateMax | Date | false | La date de création maximale à rechercher |
| lastUpdateDateMin | Date | false | La date de dernière mise à jour minimale à rechercher |
| lastUpdateDateMax | Date | false | La date de dernière mise à jour maximale à rechercher |
| authorIds | String[] | false | Les auteurs à rechercher |
| groupIds | String[] | false | Les groupes à rechercher |
| statuses | Status[] | false | Les statuts à rechercher |
| causes | Cause[] | false | Les causes à rechercher |
| emissionChannels | EmissionChannel[] | false | Les canaux d'emission à rechercher |
| customId | String | false | L'identifiant personnalisé associé au destinataire |
Format de réponse
Format de réponse
{
"scrollId": "[scroll_id]",
"content": [
{
"messageId": "5b508d12df79be41bd585757#SMS_1",
"diffusionId": "e10dcf62-57b1-4754-8776-3298cdb7b15e",
"groupId": "0fafcea2-ce8f-4144-8701-25155d052238",
"authorId": "3f4545ae-b98f-4758-8d4c-fa87a08a5f0a",
"messageOrigin": "DIFFUSION",
"address": "+33699328340",
"media": "SMS",
"sentDate": "2018-07-19T15:07:31.063+02:00",
"creationDate": "2018-07-19T15:07:31.035+02:00",
"lastUpdateDate": "2018-07-19T15:07:31.063+02:00",
"status": "SUCCESS",
"cause": "DELIVERED",
"details":"Submitted",
"smInfo":
{
"country":"FRA",
"operatorCode":"FRTE",
"msgCount":1
}
},
{
"messageId": "5b508d12df79be41bd585756#SMS_1",
"diffusionId": "e10dcf62-57b1-4754-8776-3298cdb7b15e",
"groupId": "0fafcea2-ce8f-4144-8701-25155d052238",
"authorId": "3f4545ae-b98f-4758-8d4c-fa87a08a5f0a",
"messageOrigin": "DIFFUSION",
"address": "+33736710955",
"media": "SMS",
"sentDate": "2018-07-19T15:07:31.052+02:00",
"creationDate": "2018-07-19T15:07:31.026+02:00",
"lastUpdateDate": "2018-07-19T15:07:31.052+02:00",
"status": "INPROGRESS",
"cause": "SENT",
"smInfo":
{
"msgCount":1
}
},
{
"messageId": "5b508d12df79be41bd585755#SMS_1",
"diffusionId": "e10dcf62-57b1-4754-8776-3298cdb7b15e",
"groupId": "0fafcea2-ce8f-4144-8701-25155d052238",
"authorId": "3f4545ae-b98f-4758-8d4c-fa87a08a5f0a",
"messageOrigin": "DIFFUSION",
"address": "+33799584222",
"media": "SMS",
"sentDate": "2018-07-19T15:07:31.039+02:00",
"creationDate": "2018-07-19T15:07:31.016+02:00",
"lastUpdateDate": "2018-07-19T15:07:31.039+02:00",
"status": "INPROGRESS",
"cause": "SENT",
"smInfo":
{
"msgCount":1
}
}
]
}
- Status code : 200 OK
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é |
| 400 BadRequest | InvalidScrollId | L'identifiant de scroll fourni est invalide |
20. Conversationnel
Le Service SMS conversationnel est une plateforme conçue pour faciliter la communication entre une entreprise et ses usagers. Son objectif principal est de permettre une interaction bidirectionnelle continue et instantanée, créant ainsi une véritable conversation entre les deux parties.
La particularité de ce service réside dans le fait qu'une conversation peut être initiée soit par l'entreprise soit par l'usager lui-même. Cela signifie que les usagers ont la possibilité de prendre l'initiative de communiquer avec l'entreprise, renforçant ainsi l'accessibilité et l'engagement.
Cette solution permet à un utilisateur CEO Conversationnel d’envoyer des campagnes SMS à un groupe de destinataires, avec une limite configurable pouvant aller jusqu’à 1000 contacts par campagne. Cette limite est fixée par défaut à 1000, mais reste ajustable dynamiquement via un script, selon les droits associés au compte. Elle est appliquée côté API et reflétée dans l’interface utilisateur, garantissant une flexibilité optimale dans la gestion des interactions avec les destinataires.
Cela signifie que l'entreprise peut créer des messages interactifs et les diffuser à un ensemble d'usagers ou de prospects, favorisant ainsi une communication efficace et ciblée.
En résumé, le Service SMS conversationnel vise à établir une communication fluide et réactive entre une entreprise et ses usagers, en offrant la flexibilité nécessaire pour initier des conversations des deux côtés et la possibilité d'envoyer des messages interactifs à un large public. Il s'agit d'un outil puissant pour renforcer la relation client, améliorer l'engagement et promouvoir des campagnes ciblées.
- Structure d'un envoi de campagne conversationnelle
| Champ | Type | Requis | Description |
|---|---|---|---|
| id | String | false | Identifiant de la campagne conversationnelle |
| msisdns | []String | false | Liste des numéros sur lesquels la campagne est envoyée |
| smsParam | ConversationalSmsParam | false | Numéro émetteur/encoding/body |
| contactIds | []String | false | Les identifiants de contacts |
| mailingListIds | []String | false | Les identifiants de liste de diffusion de contacts |
| categoryIds | []String | false | Les identifiants des catégories incluses |
ConversationalSmsParam
Ceci représente le numéro émetteur et le body qui contient le message envoyé dans la campagne. Dans le conversationnel, l'encoding est GSM7 ou UCS2.
| Champ | Type | Requis | Description |
|---|---|---|---|
| conversationalSmsSender | String | true | Numéro émetteur |
| body | String | false | Message envoyé dans la campagne |
| templateId | String | false | Identifiant du message prédéfini à appliquer. Si une url raccourcie est positionnée dans le template de message, celle-ci sera ignorée. dans le cas des modèles de diffusion et des diffusions ce champ est utilisé en entrée, mais n'est jamais retourné |
| encoding | String | true | Le charset utilisé pour l'envoi (GSM7 ou UCS2) |
La communication se poursuivra exclusivement en utilisant le format GSM7 ou UCS2 pour le reste de la conversation.
- Envoyer une campagne conversationnelle
:id-group/conversations/messages
Ce point d'accès permet d' envoyer une campagne conversationnelle
Format de requête
Format de requête
curl -X POST \
"https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/messages" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '
{
"msisdns": [
"+33600000000",
"0611111111",
"0622222222",
"0633333333",
"0644444444",
"0655555555"
],
"smsParam": {
"conversationalSmsSender": "0900000001",
"body": "Test envoi campagne",
"encoding": "GSM7"
}
}
'
URL url = new URL("https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/messages");
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\": [\"+33600000000\",\"0611111111\"],\"smsParam\": {\"conversationalSmsSender\": \"0900000001\",\"body\": \"Test envoi campagne\"}}";
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();
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/messages"
method := "POST"
json := `{"msisdns": ["+33600000000","0611111111"],"smsParam": {"conversationalSmsSender": "0900000001","body": "Test envoi campagne"}}`
payload := strings.NewReader(json)
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("Content-Type", "application/json")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/messages',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{"msisdns": ["+33600000000","0611111111"],"smsParam": {"conversationalSmsSender": "0900000001","body": "Test envoi campagne"}}',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer [Access-Token]',
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
var client = new RestClient("https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/messages");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
var body = @"{""msisdns"": [""+33600000000"",""0611111111""],""smsParam"": {""conversationalSmsSender"": ""0900000001"",""body"": ""Test envoi campagne""}}";
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api-conversational/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/conversations/messages", Method.POST)
request.AddHeader("Authorization", "Bearer [access-token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{""msisdns"": [""+33600000000"",""0611111111""],""smsParam"": {""conversationalSmsSender"": ""0900000001"",""body"": ""Test envoi campagne""}}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
- Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id_group | String | L'identifiant du groupe concerné |
Format de réponse
Format de réponse
[
{
"messageId": "12a6e2c4-e345-42ee-a3e3-fc2b7c1e1e37",
"msisdn": "+33601010103"
},
{
"messageId": "4d4cd92a-19b8-4491-8095-3b0ab64d9e6d",
"msisdn": "+33601010101"
},
{
"messageId": "0196cce3-a005-44c4-a965-20700e033c62",
"contactId": "cf04690d-2ec9-4ba0-a466-6e88209b7ba9",
"msisdn": "+33601010102"
}
]
- Status code : 200 OK
- Response Body : Une liste d'objets, chacun contenant un messageId, un msisdn, et, si présent, un contactId..
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 400 BadRequest | SenderNumberAndCVONotAssociated | Ce numéro d'émetteur n'est pas associé à ce CVO |
| 400 BadRequest | SenderNumberAndGroupNotAssociated | Ce numéro d'émetteur n'est pas associé à ce Groupe |
| 400 BadRequest | InactiveAffectedContract | Votre contrat est inactif. |
| 400 BadRequest | TooManyContacts | Trop de contacts dans le champ identifié par field pour une conversation active. La limite maximale (par défaut 1000) est définie pour chaque CVO. |
| 400 BadRequest | InvalidPhoneNumberFormat | Il y a des erreurs de format dans le champ identifié par field dans les numéros de téléphone des destinataires. |
| 400 BadRequest | BadOrMissingEncoding | L'encodage du message SMS doit être spécifié. Il peut prendre les valeurs : "GSM7" ou "UCS2" |
| 400 BadRequest | NotEmpty | Le champ identifié par field est obligatoire. |
| 400 BadRequest | SmsTooLong | Le champ identifié par body qui représente le corps du SMS est trop long. |
| 404 NotFound | TemplateNotFound | Le template demandé n'existe pas |
| 404 NotFound | NoValidRecipients | Les destinataires sont invalides (identifiants des contactIds ou mailingListIds n'existent pas) |
| 403 Forbidden | N/A | Vous n'avez pas les droits d'accéder. |
- Structure d'envoi d'un message unitaire
| Champ | Type | Requis | Description |
|---|---|---|---|
| body | String | true | Message envoyé dans la campagne |
| encoding | String | false | Le charset utilisé pour l'envoi (GSM7 ou UCS2) |
Si le champ encoding n'est pas renseigné, il prendra par défaut la valeur GSM7.
- Envoyer un message unitaire
:id-group/conversations/:id-conversation/messages
Format de requête
Format de requête
curl -X POST \
"https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/[id_conversation]/messages" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '
{
"body": "Message envoyé dans la conversation",
"encoding": "GSM7"
}
'
URL url = new URL("https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/[id_conversation]/messages");
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 = "{\"body\": \"Message envoyé dans la conversation\", \"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-conversational/v1.2");
var request = new RestRequest("/groups/[id_group]/conversations/[id_conversation]/messages", Method.POST);
request.AddHeader("Authorization", "Bearer [access-token]");
request.AddHeader("Content-Type", "application/json");
var json = @"{
""body"":""Message envoyé dans la conversation"",
""encoding"":""GSM7""
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api-conversational/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/conversations/[id_conversation]/messages", Method.POST)
request.AddHeader("Authorization", "Bearer [access-token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{
""body"":""Message envoyé dans la conversation"",
""encoding"":""GSM7""
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/[id_conversation]/messages";
$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":"Message envoyé dans la conversation",
"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-conversational/v1.2/groups/[id_group]/conversations/[id_conversation]/messages"
json := `{
"body":"Message envoyé dans la conversation",
"encoding":"GSM7"
}`
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))
}
- Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id_group | String | L'identifiant du groupe concerné |
| id_conversation | String | L'identifiant de la conversation |
Format de réponse
Format de réponse
{
"messageId": "8ccd0188-03ff-498f-a8b9-7eca025eb3c4",
"msisdn": "+33601010188"
}
- Status code : 200 OK
- Response Body : Un objet contenant un messageId et un msisdn.
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 400 BadRequest | NotEmpty | Le champ identifié par field est obligatoire. |
| 404 NotFound | N/A | La Conversation n'a pas été trouvée |
| 403 Forbidden | N/A | Accès refusé, compte non conversationnel. |
| 403 Forbidden | N/A | Le groupe demandé n'existe pas ou a été supprimé. |
| 403 Forbidden | N/A | L’utilisateur n’appartient pas au groupe demandé. |
- Récupérer la liste des aperçus des conversations
:id-group/conversations/previews
Ce point d'accès permet de récupérer la liste paginée des aperçus de conversations associées à un groupe.
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]//api-conversational/v1.2/groups/[id_group]/conversations/previews" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/previews");
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();
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/previews"
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-conversational/v1.2/groups/[id_group]/conversations/previews";
$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);
?>
var client = new RestClient("https://[SERVER_URL]/api-conversational/v1.2");
var request = new RestRequest("/groups/[id_group]/conversations/previews", 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-conversational/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/conversations/previews", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim response as IRestResponse = client.Execute(request)
- Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id_group | String | L'identifiant du groupe concerné |
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
search |
String | Texte de recherche. Ce paramètre permet de filtrer par contactName ou par contactNumber |
Format de réponse
Format de réponse
{
"content": [
{
"id": "64c8fa5c2be7fad96c254748",
"contactName": "John DOE",
"senderNumber": "+33900000012",
"contactNumber": "+33611111111",
"lastMessagePreview": "Envoi unitaire API",
"lastMessageDate": "2023-08-04T13:31:30Z",
"lastMessageDirection": "P2A"
"lastTag": "TO_DO"
},
{
"id": "64ca0f802be7fad96c254777",
"contactName": "Jeanne DOE",
"senderNumber": "+33900000012",
"contactNumber": "+33611111111",
"lastMessagePreview": "test",
"lastMessageDate": "2023-08-02T08:10:40Z",
"lastMessageDirection": "A2P"
"lastTag": "IN_PROGRESS"
}
],
"last": true,
"totalElements": 2,
"totalPages": 1,
"numberOfElements": 2,
"first": true,
"size": 5,
"number": 1
}
- Status code : 200 OK
- Response Body : Renvoie une liste paginée contenant les aperçus des conversations liées à un groupe.
Filtres
Il est possible de filtrer les résultats des aperçus des conversations à l'aide du paramètre d'URL ci-dessous.
| Champ | Type | Description |
|---|---|---|
| search | string | Texte de recherche. Ce paramètre permet de filtrer par contactNumber ou par une partie du contactName |
Par exemple, la requête ci-dessous renvoie les aperçus des conversations ayant un contactName qui contientjohn.
curl -X GET "https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/previews?search=john"
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Accès refusé, compte non conversationnel. |
| 404 NotFound | N/A | Le groupe demandé n'existe pas ou a été supprimé. |
| 403 Forbidden | N/A | L’utilisateur n’appartient pas au groupe demandé. |
- Récupérer les messages d'une conversation
:id-group/conversations/:id-conversation
Ce point d'accès permet de récupérer la liste paginée des messages d'une conversation associée à un groupe.
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/[id_conversation]" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/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();
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/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(body)
}
<?php
$url = "https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/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);
?>
var client = new RestClient("https://[SERVER_URL]/api-conversational/v1.2");
var request = new RestRequest("/groups/[id_group]/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-conversational/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/conversations/[id_conversation]", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim response as IRestResponse = client.Execute(request)
- Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id_group | String | L'identifiant du groupe concerné |
| id_conversation | String | L'identifiant de la conversation |
Format de réponse
Format de réponse
{
"id": "64c8fa5c2be7fad96c254748",
"contactName": "",
"contactNumber": "+33611111111",
"senderNumber": "0911111111",
"unreachable" : false,
"unsubscribed" : false,
"messages": {
"content": [
{
"id": "0db29c6c-5bff-488f-9f7a-c5948410a64d",
"body": "message simple",
"messageDate": "2024-06-28T21:01:43Z",
"messageAuthor": "John doe",
"direction": "A2P",
"status": "SUCCESS",
"cause": "DELIVERED",
"details": "Submitted",
"encoding": "GSM7"
},
{
"id": "0126a03f9e2b4e69bf547d66998e0722",
"body": "Envoi msg unitaire",
"messageDate": "2023-06-14T12:34:56Z",
"messageAuthor": " ",
"direction": "P2A",
"encoding": "GSM7"
},
{
"id": "65efad73-45bc-4518-83c9-7198fadf8bbd",
"body": "message simple 2",
"messageDate": "2024-07-16T14:59:15Z",
"messageAuthor": "John doe",
"direction": "A2P",
"status": "SUCCESS",
"cause": "DELIVERED",
"details": "Submitted",
"encoding": "GSM7"
},
{
"id": "e7cbf92d-88c4-4298-a990-915dc22c5aeb",
"body": "message simple 3",
"messageDate": "2024-07-16T14:59:32Z",
"messageAuthor": "John doe",
"direction": "A2P",
"status": "SUCCESS",
"cause": "DELIVERED",
"details": "Submitted",
"encoding": "GSM7"
},
{
"id": "241c59df-15f6-47f0-89cc-860ee44dc1e2",
"body": "message simple 4",
"messageDate": "2024-07-17T19:22:59Z",
"messageAuthor": "John doe",
"direction": "A2P",
"status": "SUCCESS",
"cause": "DELIVERED",
"details": "Submitted",
"encoding": "GSM7"
}
],
"last": false,
"totalElements": 36,
"totalPages": 8,
"numberOfElements": 5,
"first": true,
"size": 5,
"number": 1
}
]
}
- Status code : 200 OK
- Response Body : Renvoie une liste paginée des messages d'une conversation associée à un groupe.
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | L'identifiant de la conversation n'existe pas |
- Récupérer la liste des conversations
:id-group/conversations
Ce point d'accès permet de récupérer la liste paginée des conversations associées à un groupe.
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]//api-conversational/v1.2/groups/[id_group]/conversations" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations");
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-conversational/v1.2");
var request = new RestRequest("/groups/[id_group]/conversations", Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api-conversational/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/conversations", Method.GET)
request.AddHeader("cache-control", "no-cache")
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations";
$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-conversational/v1.2/groups/[id_group]/conversations"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(String(body))
}
- Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id_group | String | L'identifiant du groupe concerné |
Format de réponse
Format de réponse
{
"content": [
{
"id": "659d5eb7f02565f7880f1c88",
"contactName": "John DOE",
"contactNumber": "+33601010186",
"senderNumber": "0900000002",
"unreachable": false,
"unsubscribed": false,
"messages": [
{
"id": "95a125ac-181f-4a5e-b81b-06ed0d019c5f",
"body": "Bonjour",
"messageDate": "2024-01-09T14:56:55Z",
"messageAuthor": "Daniel Plante",
"direction": "A2P",
"status": "INPROGRESS",
"cause": "SENT"
},
{
"id": "9cba799b-17db-424f-b35a-a88a38c8de51",
"body": "Salut",
"messageDate": "2024-01-09T15:40:27Z",
"messageAuthor": "Daniel Plante",
"direction": "A2P",
"status": "INPROGRESS",
"cause": "SENT"
},
]
},
{
"id": "65a7ec5f0983d6afbb217d5f",
"contactName": "Jeanne DOE",
"contactNumber": "+33601010188",
"senderNumber": "0900000001",
"unreachable": false,
"unsubscribed": true,
"messages": [
{
"id": "95a125ac-181f-4a5e-b81b-06ed0d019c5f",
"body": "Bonsoir",
"messageDate": "2024-01-17T15:03:58Z",
"messageAuthor": "Daniel Plante",
"direction": "A2P",
"status": "SUCCESS",
"cause": "DELIVERED",
"details": "Submitted"
}
]
}
],
"last": false,
"totalElements": 2,
"totalPages": 1,
"numberOfElements": 2,
"first": true,
"size": 5,
"number": 1
}
- Status code : 200 Ok
- Response Body : Renvoie une liste paginée des conversations associées à un groupe.
Filtres
Il est possible de filtrer les résultats de la recherche à l'aide des paramètres d'URL ci-dessous.
| Parameter | Type | Requis | Description |
|---|---|---|---|
| startDate | date | false | La conversation inclue au moins un message avec une date ultérieure |
| endDate | date | false | La conversation inclue au moins un message avec une date antérieure |
| msisdn | String | false | Le numéro mobile du destinataire de la conversation |
| senderNumber | String | false | Le numéro de l'émetteur de la conversation |
| pageSize | int | false | Nombre d'éléments contenus par page |
| pageNumber | int | false | Page que vous souhaitez visualiser |
Les dates sont formattées au format suivant : "yyyy-MM-dd'T'HH:mm:ss'Z'".
Le caractére + du msisdn doit être encodé en %2B.
Par exemple, la requête ci-dessous recherche les conversations avec le numéro de l'émetteur 0900000001, le numéro du destinataire +33601010188, et la date de début2024-02-05T08:49:00Z.
curl -X GET "https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations?senderNumber=0900000001&msisdn=%2B33601010188&startDate=2024-02-05T08:49:00Z
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe auquel vous tentez d'accéder |
- Récupérer la liste des messages de toutes les conversations d’un groupe
:id-group/conversations/messages
Ce point d'accès permet de récupérer la liste paginée des messages de toutes les conversations d'un groupe.
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]//api-conversational/v1.2/groups/[id_group]/conversations/messages" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/messages");
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-conversational/v1.2");
var request = new RestRequest("/groups/[id_group]/conversations/messages", Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api-conversational/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/conversations/messages", Method.GET)
request.AddHeader("cache-control", "no-cache")
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/messages";
$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-conversational/v1.2/groups/[id_group]/conversations/messages"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(String(body))
}
- Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id_group | String | L'identifiant du groupe concerné |
Format de réponse
Format de réponse
{
"content": [
{
"conversationId": "65a7ec5f0983d6afbb217d5f",
"contactName": "Jeanne DOE",
"contactNumber": "+33601010188",
"senderNumber": "0900000001",
"id": "95a125ac-181f-4a5e-b81b-06ed0d019c5f",
"body": "Bonsoir",
"date": "2024-01-17T15:03:58Z",
"author": "Daniel Plante",
"direction": "A2P",
"status": "SUCCESS",
"cause": "DELIVERED",
"details": "Submitted"
},
{
"conversationId": "659d5eb7f02565f7880f1c88",
"contactName": "John DOE",
"contactNumber": "+33601010186",
"senderNumber": "0900000002",
"id": "95a125ac-181f-4a5e-b81b-06ed0d019c5f",
"body": "Bonjour",
"date": "2024-01-09T16:56:55Z",
"author": "Daniel Plante",
"direction": "A2P",
"status": "INPROGRESS",
"cause": "SENT"
},
{
"conversationId": "659d5eb7f02565f7880f1c88",
"contactName": "John DOE",
"contactNumber": "+33601010186",
"senderNumber": "0900000002",
"id": "9cba799b-17db-424f-b35a-a88a38c8de51",
"body": "Salut",
"date": "2024-01-09T15:40:27Z",
"author": "Daniel Plante",
"direction": "A2P",
"status": "INPROGRESS",
"cause": "SENT"
}
],
"last": true,
"totalElements": 3,
"totalPages": 1,
"numberOfElements": 3,
"first": true,
"size": 5,
"number": 1
}
- Status code : 200 Ok
- Response Body : Renvoie une liste paginée des messages de toutes les conversations associées à un groupe.
Filtres
Il est possible de filtrer les résultats de la recherche à l'aide des paramètres d'URL ci-dessous.
| Parameter | Type | Requis | Description |
|---|---|---|---|
| startDate | date | false | La date du message est une date ultérieure |
| endDate | date | false | La date du message est une date antérieure |
| msisdn | String | false | Le numéro mobile du destinataire du message |
| senderNumber | String | false | Le numéro de l'émetteur du message |
| pageSize | int | false | Nombre de messages contenus par page |
| pageNumber | int | false | Page que vous souhaitez visualiser |
Les dates sont formattées au format suivant : "yyyy-MM-dd'T'HH:mm:ss'Z'".
Le caractére + du msisdn doit être encodé en %2B.
Par exemple, la requête ci-dessous recherche les messages des conversations avec le numéro de l'émetteur 0900000001, le numéro du destinataire +33601010188, et la date de début2024-02-05T08:49:00Z.
curl -X GET "https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/messages?senderNumber=0900000001&msisdn=%2B33601010188&startDate=2024-02-05T08:49:00Z
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Vous n'avez pas les droits sur le groupe auquel vous tentez d'accéder |
- Récupérer un message d'une conversation
:id-group/conversations/messages/:id-message
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/messages/[id_message]" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/messages/[id_message]");
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();
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/messages/[id_message]"
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-conversational/v1.2/groups/[id_group]/conversations/messages/[id_message]";
$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);
?>
var client = new RestClient("https://[SERVER_URL]/api-conversational/v1.2");
var request = new RestRequest("/groups/[id_group]/conversations/messages/[id_message]", 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-conversational/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/conversations/messages/[id_message]", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim response as IRestResponse = client.Execute(request)
- Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id_group | String | L'identifiant du groupe concerné |
| id_message | String | L'identifiant du message |
Format de réponse
Format de réponse
{
"id": "bf25935215db473bbfba0ce6752dee7f",
"mainCvo": "CVOSI19224216",
"conversationId": "6580164a42e785156ea09676",
"contactName": "John DOE",
"contactNumber": "+33601010101",
"senderNumber": "0900000002",
"groupId": "21497ac0-9d41-4153-a006-0b66fb309719",
"body": "Hello",
"date": "2023-12-18T09:52:09Z",
"author": {
"id": "cce5e83a-c61c-4ee9-9705-c360abd9ee49",
"firstName": "Daniel",
"lastName": "Plante"
},
"direction": "A2P",
"status": "SUCCESS",
"cause": "DELIVERED",
"details": "Submitted"
}
- Status code : 200 OK
- Response Body : Renvoie un message d'une conversation associée à un groupe.
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 404 NotFound | N/A | Le message n'existe pas |
- Récupérer les statistiques
Ce point d'accès permet d'obtenir les statistiques tableau visibles par l'utilisateur.
Format de requête
Format de requête
curl -X GET "https://[SERVER_URL]/api-conversational/v1.2/statistics/messages" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api-conversational/v1.2/statistics/messages");
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-conversational/v1.2");
var request = new RestRequest("/statistics/messages", Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Authorization", "Bearer [Access-Token]");
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api-conversational/v1.2")
Dim request as RestRequest = new RestRequest("/statistics/messages", Method.GET)
request.AddHeader("cache-control", "no-cache")
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api-conversational/v1.2/statistics/messages";
$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]',
'Cache-Control' => 'no-cache',
));
$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-conversational/v1.2/statistics/messages"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("cache-control", "no-cache")
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
Filtres
Les statistisques sont filtrés à l'aide des paramètres d'URL ci-dessous.
| Champ | Type | Obligatoire ? | Description |
|---|---|---|---|
| from | Date | oui | Date de début |
| to | Date | oui | Date de fin |
Par exemple, la requête ci-dessous demande les statistiques tableau sur les messages :
- envoyés entre le 26 avril 2017 à 20h00 et le 27 avril 2017 à 20h00
curl -X GET "https://[SERVER_URL]/api-conversational/v1.2/statistics/messages?from=2017-04-26T20:00:00.000Z&to=2017-04-27T20:00:00.000Z"
Format de réponse
Format de réponse
[
{
"mainCvo": "CVOSI00000001",
"entityCvo": "CVOSI00000001",
"mtNumber": "0900000002",
"moNumber": "+33000000001",
"direction": "A2P",
"messageDate": "2023-10-18T10:48:00Z",
"encoding": "GSM7",
"state": "Success",
"cause": "Delivered",
"details": "Submitted",
"emissionChannel": "WEB",
"billingType": "OSA tech",
"categories": "category1,category2",
"numberOfMessages": 1
},
{
"mainCvo": "CVOSI00000001",
"entityCvo": "CVOSI00000001",
"mtNumber": "0900000002",
"moNumber": "+33000000001",
"direction": "P2A",
"messageDate": "2023-10-18T10:48:02Z",
"encoding": "",
"state": "",
"cause": "",
"details": "",
"emissionChannel": "",
"billingType": "OSA tech",
"categories": "",
"numberOfMessages": 1
}
]
- Status code : 200 Ok
- Response Body : Renvoie une liste contenant des messages.
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Le conversationnel n'est pas disponible |
| 403 Forbidden | N/A | Accès refusé |
| 400 BadRequest | NotNull | Le filtre indiqué par la propriété "field" dans le message d'erreur est obligatoire |
- Récuperer numéros emétteurs d'un groupe
:id-group
Ce point d'accès permet d'obtenir les numéros emétteurs d'un groupe.
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api-conversational/v1.2/sender-configuration/groups/[id_group]" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api-conversational/v1.2/sender-configuration/groups/[id_group]");
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();
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api-conversational/v1.2/sender-configuration/groups/[id_group]]"
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-conversational/v1.2/sender-configuration/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);
?>
var client = new RestClient("https://[SERVER_URL]/api-conversational/v1.2");
var request = new RestRequest("/sender-configuration/groups/[id_group]", 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-conversational/v1.2")
Dim request as RestRequest = new RestRequest("sender-configuration/groups/[id_group]", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim response as IRestResponse = client.Execute(request)
- Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id_group | String | L'identifiant du groupe concerné |
Format de réponse
Format de réponse
[
{
"id": "8e9abe6a-3303-11ef-b6a4-0242ac110003",
"mainCvo": "CVOSI19224216",
"phoneNumber": "0900000002",
"groupId": "be251bc2-7aa2-4562-8c00-4c35149d0391"
},
{
"id": "8ea356fd-3303-11ef-b6a4-0242ac110003",
"mainCvo": "CVOSI19224216",
"phoneNumber": "0900000003",
"groupId": "be251bc2-7aa2-4562-8c00-4c35149d0391"
}
]
- Status code : 200 OK
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Vous n'avez pas les droits d'accéder. |
- Structure d'association d'un tag à une conversation
| Champ | Type | Requis | Description |
|---|---|---|---|
| tag | String | true | Tag à associer à la conversation (TO_DO, IN_PROGRESS ou FINISHED) |
- Associer un tag à une conversation
:id-group/conversations/:id-conversation/tags
Ce point d'accès permet d'ajouter un tag à une conversation. Les tags acceptés : TO_DO (À FAIRE), IN_PROGRESS (EN COURS), FINISHED (TERMINÉ)
Format de requête
Format de requête
curl -X POST \
"https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/[id_conversation]/tags" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '
{
"tag": "IN_PROGRESS"
}
'
URL url = new URL("[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/[id_conversation]/tags");
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 = "{\"tag\": \"IN_PROGRESS\"}";
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();
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/[id_conversation]/tags"
method := "POST"
json := `{"tag": "IN_PROGRESS"}`
payload := strings.NewReader(json)
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Authorization", "Bearer [Access-Token]")
req.Header.Add("Content-Type", "application/json")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/[id_conversation]/tags',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{"tag": "IN_PROGRESS"}',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer [Access-Token]',
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>
var client = new RestClient("https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/[id_conversation]/tags");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer [Access-Token]");
request.AddHeader("Content-Type", "application/json");
var body = @"{""tag"": ""IN_PROGRESS""}";
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api-conversational/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/conversations/[id_conversation]/tags", Method.POST)
request.AddHeader("Authorization", "Bearer [access-token]")
request.AddHeader("Content-Type", "application/json")
Dim json = "{""tag"": ""IN_PROGRESS""}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
- Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id_group | String | L'identifiant du groupe concerné |
| id_conversation | String | L'identifiant de la conversation |
Format de réponse
Format de réponse
[
{
"id": "ea638e7d-3a4c-4490-8894-10da5e5fa5b6",
"status": "IN_PROGRESS",
"date": "2025-01-15T10:38:19+01:00"
}
]
- Status code : 201 Created
- Response Body : Un objet tag contenant un id, un status et une date
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Accès refusé, compte non conversationnel. |
| 404 NotFound | N/A | La conversation demandée n'existe pas. |
| 403 Forbidden | N/A | Le groupe demandé n'existe pas ou a été supprimé. |
| 403 Forbidden | N/A | L’utilisateur n’appartient pas au groupe demandé. |
| 400 BadRequest | InvalidTagStatus | Le tag fourni n'est pas valide. |
| 400 BadRequest | DuplicateTag | Le tag fourni est déjà activé pour la conversation. |
- Récupérer les événements d'une conversation
:id-group/conversations/:id-conversation/events
Ce point d'accès permet de récupérer la liste paginée des événements d'une conversation associée à un groupe.
Format de requête
Format de requête
curl -X GET \
"https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/[id_conversation]/events" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/[id_conversation]/events");
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();
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://[SERVER_URL]/api-conversational/v1.2/groups/[id_group]/conversations/[id_conversation]/events"
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-conversational/v1.2/groups/[id_group]/conversations/[id_conversation]/events";
$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);
?>
var client = new RestClient("https://[SERVER_URL]/api-conversational/v1.2");
var request = new RestRequest("/groups/[id_group]/conversations/[id_conversation]/events", 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-conversational/v1.2")
Dim request as RestRequest = new RestRequest("/groups/[id_group]/conversations/[id_conversation]/events", Method.GET)
request.AddHeader("Authorization", "Bearer [Access-Token]")
request.AddHeader("Content-Type", "application/json")
Dim response as IRestResponse = client.Execute(request)
- Path Parameters
| Parameter | Type | Description |
|---|---|---|
| id_group | String | L'identifiant du groupe concerné |
| id_conversation | String | L'identifiant de la conversation |
Format de réponse
Format de réponse
{
"conversationID": "67d1871903a17d1a3009eb0c",
"contactNumber": "+33658111986",
"senderNumber": "0900000003",
"unreachable": false,
"unsubscribed": false,
"lastTag": "IN_PROGRESS",
"events": {
"content": [
{
"tag": {
"TagId": "19771482-720a-4899-b814-a56923d754b7",
"status": "IN_PROGRESS",
"date": "2025-03-13T10:13:02.744Z"
}
},
{
"tag": {
"TagId": "5f793726-1eb6-418e-81df-466167928c7b",
"status": "TO_DO",
"date": "2025-03-13T10:16:46.794Z"
}
},
{
"message": {
"id": "b0790296-4ab8-430b-828c-3eda0be1329d",
"body": "Hello",
"messageDate": "2025-03-12T17:07:37Z",
"messageAuthor": "John Doe",
"direction": "A2P",
"status": "INPROGRESS",
"cause": "SENT",
"encoding": "GSM7"
}
}
],
"last": true,
"totalElements": 6,
"totalPages": 2,
"numberOfElements": 1,
"first": false,
"size": 5,
"number": 2
}
}
- Status code : 200 OK
- Response Body : Renvoie une liste paginée des événements d'une conversation associée à un groupe.
Erreurs possibles
| Status HTTP | Code d'erreur | Description |
|---|---|---|
| 403 Forbidden | N/A | Accès refusé, compte non conversationnel. |
| 404 NotFound | N/A | La conversation demandée n'existe pas. |
| 404 NotFound | N/A | Le groupe demandé n'existe pas ou a été supprimé. |
| 403 Forbidden | N/A | L’utilisateur n’appartient pas au groupe demandé. |
Contact Everyone
This page documents the REST API of the Contact Everyone messaging solution.
Contact Everyone is an Orange Business offering:
https://www.orange-business.com/fr/solutions/relation-client/contact-everyone
Access to Contact Everyone and to the REST API requires a subscription.
Please contact your Orange Business sales representative for more information.
Important information
This documentation is non-contractual, provided as-is, and does not in any way engage the liability of Orange Business Services.
As Contact Everyone is constantly evolving, users of this documentation must ensure they are using the version available online on the official site at
https://contact-everyone.orange-business.com/api/docs/guides/index.html
and not a saved copy or a cached version.
Corrections and adjustments are regularly made to the API and the documentation, so implementations may sometimes differ slightly.
Because this documentation may become obsolete without notice, Orange Business Services cannot be held responsible for work based on an outdated version of the documentation.
0. Getting started
The complete solution for your broadcasts
The Contact-Everyone platform is a bulk message delivery service offered by Orange.
This service is aimed at professionals and gives you the means to carry out your RCS, SMS, email, voice and/or fax campaigns in a few clicks via its online application and to view delivery statistics and your customers' responses.
In addition, the Contact-Everyone platform provides:
- A comprehensive API to efficiently set up your campaigns and quickly deliver your messages via RCS, SMS, email, voice and fax channels.
- A fast, scalable and fully secure architecture ensuring exceptional delivery reliability.
- Advanced message tracking to analyze and measure the effectiveness of your campaign.
As the API may be extended after publication, it is essential that the API client does not perform strict parsing of the responses provided by CEO: the API client must ignore data that is not required for its operation.

Secure connection protocol
Your applications must connect over HTTPS using the TLS 1.3 protocol.
TLS 1.2 is also supported, but we recommend TLS 1.3.
You must not use TLS 1.0 and TLS 1.1 protocols.
The supported protocols and ciphers may evolve according to security recommendations and policies, platform security risks, application security and data protection, discovered vulnerabilities, and/or any other unlisted case that would justify it.
You must therefore be able to adjust your applications within a reasonable time frame when such a situation occurs.
Authentication
The Contact-Everyone V5 API is fully secured by the OAuth2 protocol. This standardized protocol allows third-party applications to obtain secure access to a service via HTTPS through a prior authorization granted to the client.
Access to the API resources is done in two steps:
- The user authenticates using their username and password in application/x-www-form-urlencoded format. Once authenticated, an access token called
[Access-Token]is returned to the client.
To retrieve an access token, make an HTTP POST request to the URL below.
Do not forget to urlEncode the login and the password.
- The user queries the service by adding their access token in the
Authorizationheader of each of their HTTP requests
NOTE
- To use the service, the user account password must have been personalized on the online application
- The access token is issued with an initial validity period of one hour, extended by the same amount on each use. The token expires after one hour of inactivity, and must be renewed (via the same authentication request).
- Requesting a token does not invalidate other still-valid tokens: distributed applications can each request their own token.
- All requests to the REST API must be executed over HTTPS.
⚠ The access token must be cached on the application side.
Repeated use of the token generation API will result in rate limiting being activated.
In general, as the platform is shared, abusive behavior by the client application may be subject to deterrent measures.
Request format
Request format
curl -X POST 'https://[SERVER_URL]/api/v1.2/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.2/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.2");
var request = new RestRequest("/oauth/token", 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.2")
Dim request as RestRequest = new RestRequest("/oauth/token", 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.2/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.2/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))
}
| Field | Type | Description |
|---|---|---|
| username | String | The identifier used to log in to the application |
| password | String | The password used to log in to the application |
Note: The username and password must be provided in application/x-www-form-urlencoded format
Response format
Response format
{
"access_token":"[access_token]",
"token_type":"Bearer",
"scope":"api",
"ttl":3600
}
- Status code : 200 Ok
- Response Body : Returns a JSON object containing, among other things, the [Access-Token]
| Field | Type | Description |
|---|---|---|
| access_token | String | The access token |
| token_type | String | The OAuth2.0 token type, always "Bearer" |
| scope | String | The token scope, always "api" |
| ttl | String | The token lifetime, in seconds |
Possible errors
| HTTP Status | Description |
|---|---|
| 401 Unauthorized | Verify that the user and password provided are correct and that the parameters were provided in x-www-form-urlencoded format |
| 404 NotFound | Ensure that the provided HTTP path is: /api/v1.2/oauth/token |
Logout
Request format
curl -X GET 'https://[SERVER_URL]/api/v1.2/logout' \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/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.2/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.2/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.2/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.2/logout"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer [Access-Token]")
res, _ := http.DefaultClient.Do(req)
res.Body.Close()
}
A user can revoke their access by asking the application to invalidate their access token.
To invalidate an access token, perform an HTTP GET request to the URL below.
Note: The Authorization: Bearer header must be set.
Quick Start Guide
In this quick start guide, we will discover the simple steps to trigger an SMS message send to multiple recipients identified by their mobile numbers.

1. Retrieve a work group
Request format
curl -X GET "https://[SERVER_URL]/api/v1.2/groups" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api/v1.2/groups");
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.2");
var request = new RestRequest("/groups", 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.2")
dim request as RestRequest = new RestRequest("/groups", 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.2/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.2/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))
}
In the Contact-Everyone V5 application everything is organized by group. Using groups makes it possible, among other things, to group your contacts and distribution lists in order to share them with other users.
To begin, you should therefore retrieve a group identifier.
To do this, use the following URL to list your groups.
Then retrieve the identifier of the group on which you will perform your message send.
For more details on group management, see the Manage your groups section
2. Create a simple SMS broadcast
Request format
curl -X POST "https://[SERVER_URL]/api/v1.2/groups/[id-group]/diffusion-requests" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '{
"msisdns":["+33693847755", "0764536453", "+447564110766"],
"smsParam":{
"encoding" : "GSM7",
"body":"Hello friends, meet at Plan B at 18:00"
}
}'
URL url = new URL("https://[SERVER_URL]/api/v1.2/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 = "{"+
"\"msisdns\":[\"+33693847755\",\"0764536453\",\"+447564110766\"],"+
"\"smsParam\":{\"encoding\":\"GSM7\", \"body\":\"my SMS content\"}}";
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.2");
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"":""my SMS content""
}
}";
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.2")
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"": ""my SMS content""
}
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/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": "my SMS content"
}
}';
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.2/groups/[id_group]/diffusion-requests"
json := `{
"msisdns":"+33693847755","0764536453","+447564110766",
"smsParam":{
"encoding": "GSM7",
"body": "my SMS content"
}
}`
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))
}
Consider sending an SMS message to three mobile numbers.
Build a JSON document conforming to the structure of a broadcast, like the one shown on the right.
The trigger of a broadcast will be done using an HTTP POST request to the URL below.
:id-group/diffusion-requests
You can refer to the cURL example in the right-hand panel.
3. Check the status of your broadcast
Request format
curl -X GET \
"https://[SERVER_URL]/api/v1.2/diffusions/[id-diffusion]" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer [Access-Token]"
Once the broadcast request has been created, retrieve its identifier (the id attribute of the returned document).
You can then follow its progress using an HTTP GET request to the URL below.
:id-diffusion
Again, you can refer to the cURL example in the right-hand panel.
The returned document contains many fields providing information about the progress of your broadcast, the number of successful and failed recipients, the success ratio, etc.
For detailed information, see the status of a broadcast section
General information
- API version
The current API version is 1.2
HTTP format and headers
- All dates are returned in ISO8601 format as follows:
yyyy-MM-ddTHH:mm:ss.SSSXXX. Ex: 2017-11-02T11:28:23.000+02:00 - All requests sent to the API must contain the required HTTP headers:
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Specifies the data format |
| Authorization | Bearer [Access-Token] |
Allows you to authenticate on the API. |
- Result pagination
Some resources return lists that may contain a very large number of items (e.g.: querying contacts or replies). These results are paginated, i.e., wrapped in a higher-level JSON document containing information about the paging structure.
This document contains the properties below.
| Attribute | Description |
|---|---|
| content | Array of results |
| size | Number of items on the current page min : 5, max : 100 |
| totalElements | Total number of elements |
| number | Current page number (starts at 1) |
| totalPages | Total number of pages |
| first | True if first page, false otherwise |
| last | True if last page, false otherwise |
You can use the pageNumber and pageSize parameters as query params in your HTTP requests.
For example, the following request will return the second page of a list that contains 8 items per page
:id-group/replies?pageNumber=2&pageSize=8
Scrollable results
Some resources return lists that may contain a very large number of items. These results can be consulted in a scrollable manner; they are wrapped in a higher-level JSON document containing information about the scroll structure.
This document contains the properties below.
| Attribute | Description |
|---|---|
| content | Array of results |
| scrollId | Identifier to pass as a parameter to the next request to retrieve the next set of results. This identifier can be very long (>300 bytes). |
- Error codes
If an operation fails (i.e., HTTP status code different from 2XX), the detailed error codes returned by our server are defined below.
| Error Code | HTTP Code | Description |
|---|---|---|
| N/A | 5XX | Server error, retry again |
| N/A | 404 NotFound | The pointed resource does not exist or no longer exists |
| UnparsableRequest | 400 BadRequest | The request format is incorrect, check the structure of your JSON document |
| NotEmpty | 400 BadRequest | The field identified by field cannot be empty |
| 400 BadRequest | The email format of the field identified by field is incorrect |
|
| Msisdn | 400 BadRequest | The mobile number format of the field identified by field is incorrect |
| NameNotAvailable | 400 BadRequest | The used name is not available |
- Code examples
If you want to use the C# (.NET) code examples from this documentation you will need to install a third-party library.
Indeed we used the RestSharp library to simplify consuming the REST and HTTP web service for .Net.
You will find more info on the site: RestSharp - Simple REST and HTTP API Client for .NET
To be able to install the packages required for the API to work
PM> Install-Package RestSharp -Version 105.2.3
- SMS character counts and long SMS
Depending on your account and the character set used (UNICODE or GSM7), the maximum number of characters allowed in an SMS varies:
| usage type | Sender Number Personalization option | character set | Without Long SMS option | With Long SMS option |
|---|---|---|---|---|
| Marketing | yes | GSM | 145 | 1515 |
| Marketing | yes | UNICODE | 55 | 655 |
| Marketing | no | GSM | 160 | 1530 |
| Marketing | no | GSM | 70 | 670 |
| Professional | yes | GSM | 160 | 1530 |
| Professional | yes | UNICODE | 70 | 670 |
| Professional | no | GSM | 160 | 1530 |
| Professional | no | UNICODE | 70 | 670 |
| Interpersonal | yes | GSM | forbidden | forbidden |
| Interpersonal | yes | UNICODE | forbidden | forbidden |
| Interpersonal | no | GSM | 160 | 1530 |
| Interpersonal | no | UNICODE | 70 | 670 |
If you have the Long SMS option, your messages longer than 160 characters in GSM, or longer than 70 characters in UNICODE, will be split and billed as multiple SMS, according to the rules described in the tables below.
Marketing usage:
| character set | sender personalized | number of characters | number of SMS billed |
|---|---|---|---|
| GSM | no | from 1 to 160 inclusive | 1 |
| GSM | no | from 161 to 306 inclusive | 2 |
| GSM | no | from 307 to 459 inclusive | 3 |
| GSM | no | from 460 to 612 inclusive | 4 |
| GSM | no | from 613 to 765 inclusive | 5 |
| GSM | no | from 766 to 918 inclusive | 6 |
| GSM | no | from 919 to 1071 inclusive | 7 |
| GSM | no | from 1072 to 1224 inclusive | 8 |
| GSM | no | from 1225 to 1377 inclusive | 9 |
| GSM | no | from 1378 to 1530 inclusive | 10 |
| UNICODE | no | from 1 to 70 inclusive | 1 |
| UNICODE | no | from 71 to 134 inclusive | 2 |
| UNICODE | no | from 135 to 201 inclusive | 3 |
| UNICODE | no | from 202 to 268 inclusive | 4 |
| UNICODE | no | from 269 to 335 inclusive | 5 |
| UNICODE | no | from 336 to 402 inclusive | 6 |
| UNICODE | no | from 403 to 469 inclusive | 7 |
| UNICODE | no | from 470 to 536 inclusive | 8 |
| UNICODE | no | from 537 to 603 inclusive | 9 |
| UNICODE | no | from 604 to 670 inclusive | 10 |
| GSM | yes | from 1 to 145 inclusive | 1 |
| GSM | yes | from 146 to 291 inclusive | 2 |
| GSM | yes | from 292 to 444 inclusive | 3 |
| GSM | yes | from 445 to 597 inclusive | 4 |
| GSM | yes | from 598 to 750 inclusive | 5 |
| GSM | yes | from 751 to 903 inclusive | 6 |
| GSM | yes | from 904 to 1056 inclusive | 7 |
| GSM | yes | from 1057 to 1209 inclusive | 8 |
| GSM | yes | from 1210 to 1362 inclusive | 9 |
| GSM | yes | from 1363 to 1515 inclusive | 10 |
| UNICODE | yes | from 1 to 55 inclusive | 1 |
| UNICODE | yes | from 56 to 119 inclusive | 2 |
| UNICODE | yes | from 120 to 186 inclusive | 3 |
| UNICODE | yes | from 187 to 253 inclusive | 4 |
| UNICODE | yes | from 254 to 320 inclusive | 5 |
| UNICODE | yes | from 321 to 387 inclusive | 6 |
| UNICODE | yes | from 388 to 454 inclusive | 7 |
| UNICODE | yes | from 455 to 521 inclusive | 8 |
| UNICODE | yes | from 522 to 588 inclusive | 9 |
| UNICODE | yes | from 589 to 655 inclusive | 10 |
Other usages:
| character set | sender personalized | number of characters | number of SMS billed |
|---|---|---|---|
| GSM | with or without | from 1 to 160 inclusive | 1 |
| GSM | with or without | from 161 to 306 inclusive | 2 |
| GSM | with or without | from 307 to 459 inclusive | 3 |
| GSM | with or without | from 460 to 612 inclusive | 4 |
| GSM | with or without | from 613 to 765 inclusive | 5 |
| GSM | with or without | from 766 to 918 inclusive | 6 |
| GSM | with or without | from 919 to 1071 inclusive | 7 |
| GSM | with or without | from 1072 to 1224 inclusive | 8 |
| GSM | with or without | from 1225 to 1377 inclusive | 9 |
| GSM | with or without | from 1378 to 1530 inclusive | 10 |
| UNICODE | with or without | from 1 to 70 inclusive | 1 |
| UNICODE | with or without | from 71 to 134 inclusive | 2 |
| UNICODE | with or without | from 135 to 201 inclusive | 3 |
| UNICODE | with or without | from 202 to 268 inclusive | 4 |
| UNICODE | with or without | from 269 to 335 inclusive | 5 |
| UNICODE | with or without | from 336 to 402 inclusive | 6 |
| UNICODE | with or without | from 403 to 469 inclusive | 7 |
| UNICODE | with or without | from 470 to 536 inclusive | 8 |
| UNICODE | with or without | from 537 to 603 inclusive | 9 |
| UNICODE | with or without | from 604 to 670 inclusive | 10 |
This information is not contractual.
Media
Possible values are: RCS, SMS, EMAIL, FAX, VOICE.
DTMF
Possible values are: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *, #.
EmissionChannel
Possible values are:
WEB, EMAIL, API_LIGHT, API, SMPP
AudioContent
One of the two parameters must be provided
| Parameter | Type | Description |
|---|---|---|
| text | String | The voiced content |
| contentId | String | The identifier of a previously uploaded audio content |
RcsParam
| Field | Type | Required | Description |
|---|---|---|---|
| agentId | String | true | The identifier of the agent used for sending |
| body | String | true | The message body (JSON string) |
SmsParam
| Field | Type | Required | Description |
|---|---|---|---|
| senderName | String | false | The sender name |
| encoding | String | true | The charset used for sending (GSM7 or UCS2) |
| body | String | true | The message body (text format) |
| templateId | String | false | Identifier of the predefined message to apply for diffusion templates and diffusions this field is used in input but is never returned |
| urlToShorten | String | false | The URL to shorten (see Create an SMS diffusion) |
| landingPageParam | LandingPageParam | false | Parameters for generating a landing page (see Create an SMS diffusion) |
LandingPageParam
| Field | Type | Required | Description |
|---|---|---|---|
| landingPageId | String | true | The identifier of the Sinch for marketing template to use to generate the landing page |
| fields | Map{String,String} | false | A set of key:value where key is a character between B and Z and value is a mail-merge field (see Structure of a diffusion). At send time, value will be replaced by a value corresponding to the recipient and the map will be sent to Sinch for marketing to replace the variables used in the landing page template. |
EmailParam
| Field | Type | Required | Description |
|---|---|---|---|
| senderName | String | false | The sender name |
| senderEmail | String | true | The sender email address |
| replyTo | String | false | The reply-to email address |
| subject | String | true | The mail subject |
| body | String | true | The mail body (HTML format) |
| attachmentIds | String[] | false | Identifiers of files to attach |
| templateId | String | false | Identifier of the predefined message to apply for diffusion templates and diffusions this field is used in input but is never returned |
FaxParam
| Field | Type | Required | Description |
|---|---|---|---|
| attachmentIds | String[] | false | Identifiers of fax documents |
| headingHTML | String | false | The HTML cover page of the fax |
| templateId | String | false | Identifier of the predefined message to apply for diffusion templates and diffusions this field is used in input but is never returned |
| senderNumber | String | false | Custom fax number appears as the sender number, must be part of the list of numbers associated with your account |
VoiceParam
Audio contents must either be provided via the parameters below, or supplied through a multipart/form-data request
| Parameter | Type | Required | Description |
|---|---|---|---|
| intro | AudioContent | false | The introduction content of the message (max 2000 chars). |
| body | AudioContent | true | The message content (max 2000 chars). |
| outro | AudioContent | false | The conclusion content of the message (max 2000 chars). |
| locale | String | true | The locale used for text-to-speech: fr_FR (France) or en_GB (United Kingdom) |
| templateId | String | false | Identifier of the predefined message to apply for diffusion templates and diffusions this field is used in input but is never returned |
| senderNumber | String | false | Custom landline number appears as the sender number, must be part of the list of numbers associated with your account |
6. Trigger a broadcast
A broadcast is a sending of one or more messages to contacts, distribution lists or directly to addresses (mobile, landline, email...).
A broadcast is identified by the resource DiffusionRequest, which defines the message content by media as well as the recipients' details, contact identifiers, or distribution list.
A broadcast can be sent over any combination of the media RCS, SMS, EMAIL, VOICE, FAX (subject to subscription to the media).
To send a simple broadcast to an RCS, the fields agentId, msisdns and rcsParam must be provided.
To send a simple broadcast to an SMS, the fields msisdns and smsParam must be provided.
To send a simple broadcast to an EMAIL, the fields emails and emailParam must be provided.
To send a simple voice broadcast, the fields msisdns, landlines and voiceParam must be provided.
To send a simple fax broadcast, the field faxes and the faxParam section must be provided.
To send a scheduled broadcast, the scheduledDate field must be provided
The sending strategy, namely the management of retries on contacts' communication points in case of failure, can be configured in the Contact-Everyone application.
TO KNOW
- Only the custom sender numbers assigned to you are usable in the API (field
smsParam.senderName) - Only the custom sender emails assigned to you are usable in the API (field
emailParam.senderEmail) - In the case of a voice broadcast, the fields
msisdnsandlandlinesare indicative. A mobile number placed inlandlineswill be billed as a mobile, and a landline number placed inmsisdnswill be billed as a landline.
To familiarize yourself with the API, it is recommended to start with the quick start guide
Structure of a broadcast
- Broadcast Object
| Field | Type | Required | Description |
|---|---|---|---|
| id | String | false | The unique identifier of the broadcast. |
| name | String | false | The name of the broadcast |
| msisdns | []String | false | The list of mobile phone numbers |
| additionalMsisdns | []String | false | The additional list of mobile phone numbers if using a broadcast template |
| landlines | []String | false | The list of landline phone numbers |
| additionalLandlines | []String | false | The additional list of landline phone numbers if using a broadcast template |
| emails | []String | false | The list of email addresses |
| additionalEmails | []String | false | The additional list of email addresses if using a broadcast template |
| faxes | []String | false | The list of fax numbers |
| additionalFaxes | []String | false | The additional list of fax numbers if using a broadcast template |
| contactIds | []String | false | The contact identifiers |
| additionalContactIds | []String | false | The additional contact identifiers if using a broadcast template |
| mailingListIds | []String | false | The distribution list identifiers |
| additionalMailingListIds | []String | false | The additional distribution list identifiers if using a broadcast template |
| excludedContactIds | []String | false | The identifiers of excluded contacts |
| additionalExcludedContactIds | []String | false | The additional identifiers of excluded contacts if using a broadcast template |
| categoryIds | []String | false | The identifiers of included categories |
| rcsParam | RcsParam | false | RCS sending parameters |
| smsParam | SmsParam | false | SMS sending parameters |
| emailParam | EmailParam | false | Email sending parameters |
| faxParam | FaxParam | false | Fax sending parameters |
| voiceParam | VoiceParam | false | Voice sending parameters |
| mailingRecipients | []Recipient | false | The recipients of the mail merge |
| mailingFields | []String | false | The list of mail merge fields |
| strategyId | String | false | The identifier of the strategy |
| strategy | Strategie | false | An ad-hoc strategy |
| createdAt | Date | N/A (read only) | Creation date |
| updatedAt | Date | N/A (read only) | Last modification date |
| scheduledDate | Date | false | Scheduled send date |
| diffusionTemplateId | String | false | The identifier of a broadcast template |
| customIds | Map{String,String} | false | A set of key:value where key is a recipient and value is its custom identifier "recipient" must be either a phone number present in msisdns, landlines or faxes, or an email address present in emails |
Recipient Object
| Field | Type | Required | Description |
|---|---|---|---|
| mobile | String | false | The recipient's mobile number |
| mobile2 | String | false | The recipient's second mobile number |
| String | false | The recipient's email address | |
| fields | JSON Object | true | Hash table containing the variables |
| customId | String | false | The custom identifier associated with the recipient in this broadcast |
Using a broadcast template
It is possible to use a previously created broadcast template by filling in the diffusionTemplateId field.
In this case, the broadcast template data will be used to create the broadcast request. Be careful, non-null fields present in the broadcast request will overwrite those of the broadcast template. It is thus for example possible to use a broadcast template but specify a different strategy or a different list of attachments in emailParam, etc.
The broadcast request is then created, but does not keep a link to the broadcast template. This is important in the case of a scheduled broadcast: modification/deletion of the broadcast template has no impact on the broadcast request itself.
If you want to preserve the contacts, excludedContacts, msisdns, emails, faxes, landlines, mailingLists present in the broadcast template and you want to add others, you can use the additional lists in that case.
Example:
- If you provide contact identifiers in the
contactIdsfield, these will be used instead of those from the broadcast template. - If you provide contact identifiers in the
additionnalContactIdsfield, these will be used in addition to those from the broadcast template.
Using a predefined message
It is possible to use a predefined message by using the templateId field in the RcsParam, SmsParam, EmailParam, FaxParam and VoiceParam objects.
Be careful, non-null fields of the diffusion's xxxParam objects will overwrite the values coming from the predefined message (it is thus possible to use only part of a predefined message).
The broadcast request is then created with the values of the predefined message, but does not keep a link to it. The predefined message can therefore be modified or deleted without impact on the broadcast.
Using both a broadcast template AND a predefined message
It is of course possible to use both a broadcast template and predefined messages when making a broadcast request. Just as in the UI you would choose a broadcast template and then perhaps select a predefined message and finally manually modify some fields of your broadcast, the order of loading data in the API is as follows:
- The broadcast is prepared with the values from the broadcast template
- Non-null fields of the predefined message(s) overwrite those of the broadcast template
- Non-null fields of the broadcast request itself then overwrite the present values
Strategy
If it is not provided, the default strategy will be applied to the broadcast.
If it is not provided and you provided a broadcast template that has a strategy, that strategy will be used.
To specify a strategy, 2 possibilities:
- fill the
strategyIdfield with the identifier of an existing strategy - fill the
strategyfield with an ad-hoc strategy, therefore unique for this broadcast
- Create an RCS broadcast
:id-group/diffusion-requests
This endpoint allows creating a broadcast in a given group.
The RCS-specific content is specified in the RcsParam field.
Request format
Request format
curl -X POST "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-requests" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '
{
"name":"mon nom de diffusion",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["id_mailing_list_1","id_mailing_list_2", ...],
"msisdns":["0600000000"],
"rcsParam":{
"agentId":"test__3las1ddy_agent",
"body":"{\"contentMessage\":{\"text\":\"mon contenu RCS\"}}"
}
}
'
URL url = new URL("https://[SERVER_URL]/api/v1.2/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\"," +
"\"contactIds\":[\"id_contact_1\", \"id_contact_2\"]," +
"\"mailingListIds\":[\"id_mailing_list_1\", \"id_mailing_list_2\"]," +
"\"msisdns\":[\"0600000000\"]," +
"\"rcsParam\":{" +
"\"agentId\":\"test__3las1ddy_agent\", " +
"\"body\":\"{\\\"contentMessage\\\":{\\\"text\\\":\\\"mon contenu RCS\\\"}}\"" +
"}" +
"}";
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.2");
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"",
""contactIds"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingListIds"":[""id_mailing_list_1"",""id_mailing_list_2"", ...],
""msisdns"":[""0600000000""],
""rcsParam"": {
""agentId"": ""test__3las1ddy_agent"",
""body"": ""{\""contentMessage\"":{\""text\"":\""mon contenu RCS\""}}""
}
}";
request.AddParameter("application/json", json, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Dim client as RestClient = new RestClient("https://[SERVER_URL]/api/v1.2")
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"",
""contactIds"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingListIds"":[""id_mailing_list_1"",""id_mailing_list_2"", ...],
""msisdns"":[""0600000000""],
""rcsParam"": {
""agentId"": ""test__3las1ddy_agent"",
""body"": ""{\""contentMessage\"":{\""text\"":\""mon contenu RCS\""}}""
}
}"
request.AddParameter("application/json", json, ParameterType.RequestBody)
Dim response as IRestResponse = client.Execute(request)
<?php
$url = "https://[SERVER_URL]/api/v1.2/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",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["id_mailing_list_1","id_mailing_list_2", ...],
"msisdns":["0600000000"],
"rcsParam": {
"agentId": "test__3las1ddy_agent",
"body": "{\"contentMessage\":{\"text\":\"mon contenu RCS\"}}"
}
}';
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.2/groups/[id_group]/diffusion-requests"
json := `{
"name":"mon nom de diffusion",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["id_mailing_list_1","id_mailing_list_2", ...],
"msisdns":["0600000000"],
"rcsParam": {
"agentId": "test__3las1ddy_agent",
"body": "{\"contentMessage\":{\"text\":\"mon contenu RCS\"}}"
}
}`
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 | The unique identifier of the group. |
Response format
Response format
{
"id": "4a0c8b08-cc7e-4cee-a6a5-2407c9cba5d4",
"name": "mon nom de diffusion",
"msisdns": ["+33699832919"],
"emails": [],
"contactIds": [],
"mailingListIds": ["81eb68cb-051b-4e9a-9ac2-aa774583f0f4"],
"excludedContactIds": [],
"rcsParam": {
"agentId": "test__3las1ddy_agent",
"body": "{\"contentMessage\":{\"text\":\"mon contenu RCS\"}}"
},
"createdAt": "2018-04-27T16:50:42.625+02:00",
"updatedAt": "2018-04-27T16:50:42.625+02:00"
}
- Status code : 201 Created
- Response Headers :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Content type used |
| Location | For an immediate broadcast: /api/v1.2/diffusions/ :id-diffusion For a scheduled broadcast: /api/v1.2/groups/ :id-group/diffusion-requests/:id-diffusion |
Resource location |
Possible errors
| HTTP Status | Error code | Description |
|---|---|---|
| 403 Forbidden | N/A | You do not have rights on the group or the object you are trying to access, or the object does not belong to the indicated group |
| 400 BadRequest | NotEmpty | One or more required fields are missing in your object. A NotEmpty on the recipients field means that no contact, mailing list or MSISDN has been defined on your broadcast |
| 400 BadRequest | Msisdn | The format of one of the provided phone numbers is not correct |
| 400 BadRequest | InconsistentTimeSlots | You cannot issue a broadcast outside the time slots defined in the application |
| 400 BadRequest | InactiveAffectedContract | Your contract is inactive |
| 400 BadRequest | MediaAbsentInStrategy | The strategy does not contain the media specified in your broadcast request |
| 400 BadRequest | MediaNotEnabled | The media for your broadcast is not enabled on your client account |
| 400 BadRequest | MissingMedia | The broadcast must contain at least one media |
| 400 BadRequest | MissingAgentId | The RCS agent identifier must be specified |
| 400 BadRequest | UnparsableRequest | The JSON contained in the body field is invalid or malformed |
| 400 BadRequest | NoDefaultStrategyAvailable | The group has no default strategy available |
- Create an SMS broadcast
:id-group/diffusion-requests
This endpoint allows creating a broadcast in a given group.
The SMS-specific content is specified in the SmsParam field.
Request format
Request format
curl -X POST "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-requests" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json" \
-d '
{
"name":"mon nom de diffusion",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["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.2/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\","+
"\"contactIds\":[id_contact_1, id_contact_2, ...],"+
"\"mailingListIds\":[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.2");
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"",
""contactIds"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingListIds"":[""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.2")
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"",
""contactIds"":[""id_contact_1"", ""id_contact_2"", ...],
""mailingListIds"":[""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.2/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",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["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.2/groups/[id_group]/diffusion-requests"
json := `{
"name":"mon nom de diffusion",
"contactIds":["id_contact_1", "id_contact_2", ...],
"mailingListIds":["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("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 | The unique identifier of the group. |
Response format
Response format
{
"id": "4a0c8b08-cc7e-4cee-a6a5-2407c9cba5d4",
"name": "mon nom de diffusion",
"msisdns": ["+33699832919"],
"emails": [],
"contactIds": [],
"mailingListIds": ["81eb68cb-051b-4e9a-9ac2-aa774583f0f4"],
"excludedContactIds": [],
"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
- Response Headers :
| Header | Value | Description |
|---|---|---|
| Content-Type | application/json | Content type used |
| Location | For an immediate broadcast: /api/v1.2/diffusions/ :id-diffusion For a scheduled broadcast: /api/v1.2/groups/ :id-group/diffusion-requests/:id-diffusion |
Resource location |
Possible errors
| HTTP Status | Error code | Description |
|---|---|---|
| 403 Forbidden | N/A | You do not have rights on the group or the object you are trying to access, or the object does not belong to the indicated group |
| 400 BadRequest | NotEmpty | One or more required fields are missing in your object. A NotEmpty on the recipients field means that no contact, mailing list or MSISDN has been defined on your broadcast |
| 400 BadRequest | Msisdn | The format of one of the provided phone numbers is not correct |
| 400 BadRequest | InconsistentTimeSlots | You cannot issue a broadcast outside the time slots defined in the application |
| 400 BadRequest | MissingEncoding | The SMS message encoding must be specified. It can take the values: "GSM7" or "UCS2" |
| 400 BadRequest | MissingSenderOption | The SenderName field was provided while you do not have the sender name replacement option enabled |
| 400 BadRequest | InactiveAffectedContract | Your contract is inactive |
| 400 BadRequest | MediaAbsentInStrategy | The strategy does not contain the media specified in your broadcast request |
| 400 BadRequest | MediaNotEnabled | The media for your broadcast is not enabled on your client account |
| 400 BadRequest | SmsTooLong | The content of the SMS message is too long |
| 400 BadRequest | SenderNameNotAllowed | The sender is not allowed by the configuration |
| 400 BadRequest | SenderEmailNotAllowed | The email is not allowed by the configuration |
| 400 BadRequest | MissingMedia | The broadcast must contain at least one media |
| 400 BadRequest | MissingOneEndpoint | The contacts in the mailing must have at least one means of communication. |
| 400 BadRequest | NoDefaultStrategyAvailable | The group has no default strategy available. |
| 400 BadRequest | MissingEnrichedSmsOption | The LandingPageParam field was provided while you do not have the enriched SMS option enabled |
| 400 BadRequest | MissingEnrichedSmsPlaceholder | The LandingPageParam field was provided while the text !!CEO_URL_LANDING_PAGE!! is not present in the message body |
| 400 BadRequest | UnknownEnrichedSmsField | The map LandingPageParam.fields contains one or more invalid keys/values |
Shortening your link
To use this feature, you must first set the urlToShorten field in the SmsParam.
Then it will be possible to insert into the message body the text !!CEO_URL_RACCOURCIE!! which, when sent to recipients, will be replaced by a URL of the format https://ce1.io/ABCDEFG (22 characters). This URL:
- Redirects to the link entered in
urlToShorten - Is unique for each communication endpoint of each recipient of your broadcast. This allows tracking/link-open tracking for each send.
For example, we have the following SmsParam:
"smsParam":{
"encoding":"GSM7",
"body":"Voici le lien court: !!CEO_URL_RACCOURCIE!!",
"urlToShorten":"https://www.google.com?q=Contact+Everyone+Orange"
}
With this smsParam, if you create a broadcast targeted to two contacts: Mr. Dupont who has two phone numbers 06 00 00 00 01 and 06 00 00 00 02 and Mr. Martin who has one 07 00 00 00 01, the messages they will receive are as follows:
| Target number | Received message |
|---|---|
| 06 00 00 00 01 (Dupont) | Voici le lien court: https://ce1.io/ORANGE1 |
| 06 00 00 00 02 (Dupont) | Voici le lien court: https://ce1.io/ORANGE2 |
| 07 00 00 00 01 (Martin) | Voici le lien court: https://ce1.io/ORANGE3 |
When the recipient visits the received link, they will be redirected to https://www.google.com?q=Contact+Everyone+Orange.
Note: ORANGE1, ORANGE2 and ORANGE3 are for example purposes. In reality these identifiers are generated quasi-randomly and are not enumerable.
Generating a landing page
To use this feature, you must set the landingPageParam field in the SmsParam.
Then it will be possible to insert into the message body the text !!CEO_URL_LANDING_PAGE!! which, when sent to recipients, will be replaced by a URL of the format https://rsms.co/ABCDEFGH (24 characters). This URL is unique for each communication endpoint of each recipient and redirects to a landing page hosted by our partner Sinch for marketing.
For example, with the following SmsParam:
"smsParam":{
"encoding":"GSM7",
"body":"Voici la landing page: !!CEO_URL_LANDING_PAGE!!",
"landingPageParam": {
"landingPageId": "891deb35-6450-4f16-89cc-e1dc58f560fc"
}
}
if you create a broadcast targeted to two contacts: Mr. Dupont who has two phone numbers 06 00 00 00 01 and 06 00 00 00 02 and Mr. Martin who has one 07 00 00 00 01, the messages they will receive are as follows:
| Target number | Received message |
|---|---|
| 06 00 00 00 01 (Dupont) | Voici la landing page: https://rsms.co/aaa00001 |
| 06 00 00 00 02 (Dupont) | Voici la landing page: https://rsms.co/aaa00002 |
| 07 00 00 00 01 (Martin) | Voici la landing page: https://rsms.co/aaa00003 |
Note: The identifiers aaa00001, aaa00002 and aaa00003 are for example purposes.
7. Viewing the status of a broadcast
Once the broadcast has been sent, its progress status can be viewed through the Diffusion object.
Structure of a broadcast state
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | The unique identifier of the broadcast |
| mainCvo | String | true | The CVO of the CEO account |
| name | String | true | The name of the broadcast |
| emissionChannel | EmissionChannel | true | The emission channel |
| sendDate | Date | true | The send date |
| creationDate | Date | true | The creation date |
| group | Group | true | The group through which the broadcast was sent |
| author | User | true | The author |
| medias | []Media | true | The media used in the broadcast |
| state | []State | true | The state of the broadcast |
In the case of retrieval by identifier, if you specify withContent=true in the URL, the following elements will be returned:
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| rcsParam | RcsParam | true | RCS send parameters |
| smsParam | SmsParam | true | SMS send parameters |
| emailParam | EmailParam | true | EMAIL send parameters |
| faxParam | FaxParam | true | FAX send parameters |
| voiceParam | VoiceParam | true | Voice send parameters |
Group
See the detailed structure of the object in the groupe section
User
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | The unique identifier of the user |
| name | String | true | The name |
| firstName | String | true | The first name |
| String | true | The user's email |
State
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| status | Status | true | The status of the broadcast |
| startedAt | Date | true | The start date |
| endedAt | Date | true | The end date |
| nbSelected | int | true | The number of selected recipients |
| nbReachable | int | true | The number of reachable recipients |
| nbSuccess | int | true | The number of reached recipients |
| ratio | double | true | The success percentage |
Status
Possible values are: WAITING, ONGOING, COMPLETED, CANCELING, CANCELED.
| Valeur | Description |
|---|---|
| WAITING | The broadcast is being prepared for sending |
| ONGOING | The broadcast is in progress |
| COMPLETED | The broadcast is finished |
| CANCELING | The broadcast is in the process of being canceled |
| CANCELED | The broadcast has been canceled |
- List broadcasts
This endpoint allows you to retrieve the paginated list of sent broadcasts.
Request format
Request format
curl -X GET "https://[SERVER_URL]/api/v1.2/diffusions" \
-H "Authorization: Bearer [Access-Token]"
URL url = new URL("https://[SERVER_URL]/api/v1.2/diffusions");
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();
<?php
$url = "https://[SERVER_URL]/api/v1.2/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.2/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))
}
var client = new RestClient("https://[SERVER_URL]/api/v1.2");
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.2")
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)
Response format
Response format
{
"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"
},
"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
},
"categoryIds": [],
"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"
},
"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
},
"categoryIds": [],
"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
Filters
It is possible to filter broadcast results using the URL parameters below.
| Field | Type | Description |
|---|---|---|
| dateMin | date in RFC3339 format | The minimum send date |
| dateMax | date in RFC3339 format | The maximum send date |
| medias | 'EMAIL', 'RCS', 'SMS', 'FAX' or 'VOICE' | The type of media used in the broadcast |
| recipientFullName | String | The name of a recipient contact |
| recipientEmail | The email address of a recipient | |
| recipientPhoneNumber | msisdn | The phone number of a recipient |
| recipientCustomId | String | The custom identifier associated with one or more recipients of this broadcast |
| groupIds | []String | List of group identifiers |
For example, the request below searches for broadcasts sent between April 25 and April 29, 2017, that use the EMAIL media, whose name contains the string interne, and for which at least one recipient is johndoe@domain.com.
curl -X GET "https://[SERVER_URL]/api/v1.2/diffusions?dateMax=2017-04-30T00:00:00.000Z&dateMin=2017-04-25T22:00:00.000Z&medias=EMAIL&name=interne&recipientEmail=johndoe@domain.com"
- Retrieve a broadcast
:id-diffusion?withContent=:with-content
This endpoint allows you to retrieve a broadcast.
Request format
Request format
curl -X GET "https://[SERVER_URL]/api/v1.2/diffusions/[id_diffusion]" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api/v1.2/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.2");
var request = new RestRequest("/diffusions/[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.2")
Dim request as RestRequest = new RestRequest("/diffusions/[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.2/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.2/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 | The unique identifier of the broadcast. |
with-content |
bool | true if you want to have the broadcast content in the response false by default |
Response format
Response format
{
"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"
}
Possible errors
| HTTP Status | Error code | Description |
|---|---|---|
| 404 NotFound | N/A | The identifier of the broadcast you are trying to access does not exist |
| 403 Forbidden | N/A | You do not have rights on the object you are trying to access |
8. Retrieve delivery details
The delivery results of a broadcast are defined by recipients.
A recipient can be a contact or a one-off address (email address or mobile number).
A recipient, if it is a contact, can group several target communication points (email addresses or mobile numbers).
Structure of a joined recipient
- Recipient
| Champ | Type | Read-Only | Description |
|---|---|---|---|
| id | String | true | The unique identifier of the recipient. |
| status | Status | true | The status of the recipient. |
| label | String | true | The recipient's name/first name or address |
| communications | Communication[] | true | List of the recipient's communication points |
| mailingFields | Map{String,String} | true | Set of mail merge variables with their value |
| customId | String | true | The custom identifier associated with the recipient present only on request |
- Status
Possible values are: WAITING, SUCCESS, FAILED, UNREACHABLE
| Valeur | Description |
|---|---|
| WAITING | The message is waiting to be sent |
| SUCCESS | The recipient has been successfully reached |
| FAILED | The success condition has not been met |
| UNREACHABLE | The recipient is unreachable, no message is sent |
- Communication
| Champ | Type | Description |
|---|---|---|
| address | String | The address of the communication point |
| status | Communication Status | The delivery status to this communication point |
| cause | Communication Cause | The cause of the status |
| details | String | Details about the cause (optional field) |
| timestamp | Date | The date of the status update |
| sminfo | SMInfo | Details of the SMS sent |
| faxinfo | FaxInfo | Details of the fax sent |
| vcinfo | VCInfo | Details of the voice call made |
Fields sminfo, faxinfo and vcinfo are only populated
if the communication is respectively an SMS, fax or voice call.
- SMInfo (Short Message information)
| Champ | Type | Description |
|---|---|---|
| operatorCode | String | The telephone operator used (if detected) |
| country | String | The target country's ISO3 code (if detected) |
| msgCount | Integer | The number of SMS messages used to carry the message (long SMS) |
- FaxInfo
| Champ | Type | Description |
|---|---|---|
| operatorCode | String | The telephone operator used (if detected) |
| country | String | The target country's ISO3 code (if detected) |
| sentPages | Integer | The number of pages transmitted |
| retryCount | Integer | The number of fax retries |
- VCInfo (Voice Call information)
| Champ | Type | Description |
|---|---|---|
| operatorCode | String | The telephone operator used (if detected) |
| country | String | The target country's ISO3 code (if detected) |
| duration | Integer | The duration of the call in seconds |
| status | Integer | The detailed status of the call (see below) |
| replayCount | Integer | The number of times the message was replayed |
| dtmfs | String | The list of keys pressed during the call |
- Status detail
The detail of the status field of a voice call encodes 4
additional pieces of information in its first 4 bits.
| Bit | Description |
|---|---|
| 0 | introAcked: the introduction of the message was acknowledged by the recipient |
| 1 | bodyAcked: the body of the message was acknowledged by the recipient |
| 2 | fullyPlayed: the body of the message was fully played |
| 3 | voicemail: voicemail detected |
For example a status equal to 5 (101) corresponds to introduction
acknowledged and message fully played.
- Communication Status
| Valeur | Description |
|---|---|
| WAITING | The message is waiting to be sent |
| CANCELED | The message was canceled before sending |
| REJECTED | technical error before operator acknowledgement |
| UNREACHABLE | The communication point is unreachable |
| INPROGRESS | The message is currently being sent |
| FAILED | The message resulted in an error |
| SUCCESS | The message was successfully delivered to the communication point |
- Communication Cause
| Valeur | Description |
|---|---|
| BLACKLISTED | unsubscribed |
| EMPTY_ADDRESS | no reachable address |
| UNREACHABLE_ADDRESS | unreachable contact detail |
| INVALID_ADDRESS | invalid address |
| DOM_NOT_ENABLED | sending to DOM not allowed |
| USA_NOT_ENABLED | sending to the USA not allowed |
| INTERNATIONAL_NOT_ENABLED | sending abroad not allowed |
| OVERCHARGED_NUMBER | premium-rate number not allowed |
| QUOTA_REACHED | account quota reached |
| EXPIRED | expired |
| DROPPED | no operator delivery acknowledgement |
| DUPLICATE_ADDRESS | duplicate |
| DELIVERED | delivered to recipient |
| SENT | transmitted to operator |
| NO_ACK | no operator acknowledgement |
| ACK | read by the recipient |
| NACK | rejected by the operator |
| BUSY | correspondent busy |
| NO_REPLY | no reply from the correspondent |
| NO_RING | no ring |
| NO_ROUTE | number not reachable |
Correspondence between statuses and possible causes
| Statut | Cause |
|---|---|
| WAITING | null |
| CANCELED | null |
| REJECTED | NO_ACK, NACK, QUOTA_REACHED, EXPIRED |
| UNREACHABLE | EMPTY_ADDRESS, INVALID_ADDRESS, DUPLICATE_ADDRESS, BLACKLISTED, UNREACHABLE_ADDRESS, DOM_NOT_ENABLED, USA_NOT_ENABLED, INTERNATIONAL_NOT_ENABLED, OVERCHARGED_NUMBER |
| INPROGRESS | SENT |
| FAILED | DROPPED, EXPIRED, UNREACHABLE_ADDRESS, BLACKLISTED, BUSY, NO_REPLY, NO_RING, NO_ROUTE |
| SUCCESS | DELIVERED, ACK |
List delivered messages
:id-diffusion/recipients
This endpoint allows you to retrieve the paginated list of recipients for a broadcast.
Request format
Request format
curl -X GET "https://[SERVER_URL]/api/v1.2/diffusions/[id_diffusion]/recipients" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api/v1.2/diffusions/[id_diffusion]/recipients");
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);
}
<?php
$url = "https://[SERVER_URL]/api/v1.2/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.2/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.2");
var request = new RestRequest("/diffusions/[id_diffusion]/recipients", 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.2")
Dim request as RestRequest = new RestRequest("/diffusions/[id_diffusion]/recipients", Method.GET)
request.AddHeader("Content-Type", "application/json")
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
- Query Parameters
| Parameter | Type | Description |
|---|---|---|
id-diffusion |
String | The unique identifier of the broadcast. |
withDetails |
boolean | Adds the details field in Communication objects |
withMailingFields |
boolean | Adds the mail merge variables |
withCustomIds |
boolean | Adds the customId field in the results |
Response format
Response format
{
"content": [{
"id": "5b69581b8d4f7f52c78d46a8",
"status": "FAILED",
"label": "Perez Alice",
"communications": [
{
"timestamp": "2018-08-07T10:28:11.000+02:00",
"status": "FAILED",
"cause": "UNREACHABLE_ADDRESS",
"address": "+33735488649",
"details": "Recipient barred"
},
{
"timestamp": "2018-08-07T10:28:11.000+02:00",
"status": "FAILED",
"cause": "UNREACHABLE_ADDRESS",
"address": "+33699206906",
"details": "Recipient barred"
},
{
"timestamp":"2025-02-24T16:28:58.249+01:00",
"status":"SUCCESS",
"cause":"DELIVERED",
"sminfo":
{
"msgCount":1,
"operatorCode":"FRTE",
"country":"FRA"
},
"address":"+33612457818"
}
]
}],
"totalElements": 3,
"last": true,
"totalPages": 1,
"numberOfElements": 3,
"first": true,
"size": 10,
"number": 0
}
- Status code : 200 OK
Filters
It is possible to filter the results of delivered messages using the URL parameters below.
| Field | Type | Description |
|---|---|---|
| communicationMedia | Media | The media type on which the recipient was reached |
| label | String | The contact's last name or first name |
| address | String | The recipient's address |
| customId | String | The custom identifier associated with the recipient |
For example, the request below searches for the recipient with address johndoe@domain.com, of type EMAIL and whose name contains john.
curl -X GET "https://[SERVER_URL]/api/v1.2/diffusion/id_diffusion/recipients?address=johndoe@domain.com&communicationMedia=EMAIL&label=john
Possible errors
| HTTP Status | Error code | Description |
|---|---|---|
| 404 NotFound | N/A | The broadcast identifier you are trying to access does not exist |
| 403 Forbidden | N/A | You do not have rights on the group or the object you are trying to access, or the object does not belong to the indicated group |
19 - Consult the detail of messages
The message report allows access to all messages sent by the platform, across all broadcasts, as well as replies to incoming SMS (if option), over the last 7 months.
Structure
| Field | Type | Description |
|---|---|---|
| messageId | String | The message identifier |
| diffusionId | String | The identifier of the broadcast present only for a broadcast |
| groupId | String | The group identifier |
| authorId | String | The author identifier |
| messageOrigin | MessageOrigin | The origin of the message |
| address | String | The target address of the message |
| recipient | String | Message recipient |
| media | Media | The media on which the message was sent |
| sentDate | String | Message send date |
| creationDate | Date | Message creation date |
| lastUpdateDate | Date | Message last update date |
| status | Status | Message status |
| cause | Cause | Cause of the status |
| details | String | Details about the cause |
| customId | String | The custom identifier associated with the recipient present only on request |
MessageOrigin
The following values are possible
DIFFUSION: message sent from a campaignSMSPLUS_REPLY: message sent in response to an incoming SMS+SINGLE_MESSAGE: message sent via a low-level API (SMPP)
Status
The following values are possible
WAITING: waitingCANCELED: canceledREJECTED: rejectedUNREACHABLE: unreachableINPROGRESS: in progressFAILED: failedSUCCESS: success
Cause
The following values are possible
BLACKLISTED: unsubscribedEMPTY_ADDRESS: no reachable addressUNREACHABLE_ADDRESS: unreachable contactINVALID_ADDRESS: invalid contactDOM_NOT_ENABLED: your options do not allow sending to the DOMUSA_NOT_ENABLED: your options do not allow sending to the USAINTERNATIONAL_NOT_ENABLED: your options do not allow international sendingOVERCHARGED_NUMBER: premium numbers are not allowedQUOTA_REACHED: account quota reachedEXPIRED: expiredEXPIRED_DIFFUSION: no operator receiptDROPPED: no operator receiptDUPLICATE_ADDRESS: duplicateDELIVERED: delivered to the recipientSENT: transmitted to the operatorACK: read by the recipientNO_ACK: not acknowledgedNACK: rejectedBUSY: correspondent busyNO_REPLY: no reply from the correspondentNO_RING: no ring tone
Retrieve the message report
This endpoint allows retrieving the message report
Request format
Request format
curl -X GET "https://[SERVER_URL]/api/v1.2/communications" \
-H "Authorization: Bearer [Access-Token]" \
-H "Content-Type: application/json"
URL url = new URL("https://[SERVER_URL]/api/v1.2/communications");
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);
}
<?php
$url = "https://[SERVER_URL]/api/v1.2/communications";
$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.2/communications"
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.2");
var request = new RestRequest("/communications", 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.2")
Dim request as RestRequest = new RestRequest("/communications", Method.GET)
request.AddHeader("Content-Type", "application/json")
request.AddHeader("Authorization", "Bearer [Access-Token]")
Dim response as IRestResponse = client.Execute(request)
- Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| scrollId | String | false | Identifier to retrieve the next results (see Result pagination) |
| withCustomIds | Boolean | false | Include the customId field in the results |
Filters
It is possible to filter the message report results using the parameters below
| Field | Type | Required | Description |
|---|---|---|---|
| address | String | false | The address to search for |
| media | Media | false | The media to search for |
| dateMin | Date | false | The minimal creation date to search for |
| dateMax | Date | false | The maximal creation date to search for |
| lastUpdateDateMin | Date | false | The minimal last update date to search for |
| lastUpdateDateMax | Date | false | The maximal last update date to search for |
| authorIds | String[] | false | The authors to search for |
| groupIds | String[] | false | The groups to search for |
| statuses | Status[] | false | The statuses to search for |
| causes | Cause[] | false | The causes to search for |
| emissionChannels | EmissionChannel[] | false | The emission channels to search for |
| customId | String | false | The custom identifier associated with the recipient |
Response format
Response format
{
"scrollId": "[scroll_id]",
"content": [
{
"messageId": "5b508d12df79be41bd585757#SMS_1",
"diffusionId": "e10dcf62-57b1-4754-8776-3298cdb7b15e",
"groupId": "0fafcea2-ce8f-4144-8701-25155d052238",
"authorId": "3f4545ae-b98f-4758-8d4c-fa87a08a5f0a",
"messageOrigin": "DIFFUSION",
"address": "+33699328340",
"media": "SMS",
"sentDate": "2018-07-19T15:07:31.063+02:00",
"creationDate": "2018-07-19T15:07:31.035+02:00",
"lastUpdateDate": "2018-07-19T15:07:31.063+02:00",
"status": "SUCCESS",
"cause": "DELIVERED",
"details":"Submitted",
"smInfo":
{
"country":"FRA",
"operatorCode":"FRTE",
"msgCount":1
}
},
{
"messageId": "5b508d12df79be41bd585756#SMS_1",
"diffusionId": "e10dcf62-57b1-4754-8776-3298cdb7b15e",
"groupId": "0fafcea2-ce8f-4144-8701-25155d052238",
"authorId": "3f4545ae-b98f-4758-8d4c-fa87a08a5f0a",
"messageOrigin": "DIFFUSION",
"address": "+33736710955",
"media": "SMS",
"sentDate": "2018-07-19T15:07:31.052+02:00",
"creationDate": "2018-07-19T15:07:31.026+02:00",
"lastUpdateDate": "2018-07-19T15:07:31.052+02:00",
"status": "INPROGRESS",
"cause": "SENT",
"smInfo":
{
"msgCount":1
}
},
{
"messageId": "5b508d12df79be41bd585755#SMS_1",
"diffusionId": "e10dcf62-57b1-4754-8776-3298cdb7b15e",
"groupId": "0fafcea2-ce8f-4144-8701-25155d052238",
"authorId": "3f4545ae-b98f-4758-8d4c-fa87a08a5f0a",
"messageOrigin": "DIFFUSION",
"address": "+33799584222",
"media": "SMS",
"sentDate": "2018-07-19T15:07:31.039+02:00",
"creationDate": "2018-07-19T15:07:31.016+02:00",
"lastUpdateDate": "2018-07-19T15:07:31.039+02:00",
"status": "INPROGRESS",
"cause": "SENT",
"smInfo":
{
"msgCount":1
}
}
]
}
- Status code : 200 OK
Possible errors
| HTTP Status | Error code | Description |
|---|---|---|
| 404 NotFound | N/A | The diffusion identifier you are trying to access does not exist |
| 403 Forbidden | N/A | You do not have rights on the group or the object you are trying to access, or the object does not belong to the indicated group |
| 400 BadRequest | InvalidScrollId | The provided scroll identifier is invalid |