NAV Navbar
cURL Java C# (.NET) vb (.NET) PHP Go

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

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 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

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.

POST /api/v1.2/oauth/token

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

⚠ 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.

GET /api/v1.2/logout

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.

GET /api/v1.2/groups

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.

POST /api/v1.2/groups/: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.

GET /api/v1.2/diffusions/: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

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

GET /api/v1.2/groups/: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
Email 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 : 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é

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é:valeurclé 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

GET /api/v1.2/groups

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

GET /api/v1.2/groups/: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

POST /api/v1.2/groups

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

PUT /api/v1.2/groups/: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

DELETE /api/v1.2/groups/: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

PUT /api/v1.2/groups/: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

PUT /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

PUT /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

PUT /api/v1.2/groups/: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é

POST /api/v1.2/groups/: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
email String false true Email
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

GET /api/v1.2/users

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

GET /api/v1.2/users/: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

POST /api/v1.2/users

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
email String true Email
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

PUT /api/v1.2/users/: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
email String true Email
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

DELETE /api/v1.2/users/: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

POST /api/v1.2/users/[id_user]/change-password

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

GET /api/v1.2/users/: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

PUT /api/v1.2/users/: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

PUT /api/v1.2/users/[id_user]/send-connection-kit

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

GET /api/v1.2/users/: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

PUT /api/v1.2/users/: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

GET /api/v1.2/users/: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

PUT /api/v1.2/users/: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é

POST /api/v1.2/users/: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
email 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

POST /api/v1.2/groups/: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 Email 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

PUT /api/v1.2/groups/: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 Email 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

DELETE /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

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

POST /api/v1.2/groups/: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

PUT /api/v1.2/groups/: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

DELETE /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

PUT /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

DELETE /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

POST /api/v1.2/groups/: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

PUT /api/v1.2/groups/: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

DELETE /api/v1.2/groups/: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 SMS, EMAIL, VOICE, FAX (sous réserve de souscription aux médias).

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

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
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é:valeurclé 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
email 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 :

Utilisation de message prédéfini

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 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:

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 :

- Créer une diffusion SMS

POST /api/v1.2/groups/:id-group/diffusion-requests

Ce point d'accès permet de créer une diffusion dans un groupe donné.

Le contenu spécifique aux 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:

  1. Redirige vers le lien saisi dans urlToShorten
  2. 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

POST /api/v1.2/groups/: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 :

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

POST /api/v1.2/groups/: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 :

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

POST /api/v1.2/groups/: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

POST /api/v1.2/groups/: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

POST /api/v1.2/groups/: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 :

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

POST /api/v1.2/groups/: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

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 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 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.
email 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",
            "smsParam":{
              "encoding":"GSM7",
              "body":"Bonjour #prenom# #nom#, la nouvelle collection est arrivée chez Flush. 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 savonette est arrivée chez Flush. 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 chez flush. Venez vite, un cadeau vous attend en magasin."}
           },
           "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\"," +
    "\"smsParam\":{" +
      "\"encoding\":\"GSM7\"," +
      "\"body\":\"Bonjour #prenom# #nom#, la nouvelle collection est arrivée chez Flush. 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 savonette est arrivée chez Flush. Venez vite, un cadeau vous attend en magasin.</p></body></html>\"," +
      "\"subject\":\"Mon objet de mail\"" +
    "}," +
    "\"mailingFields\" : [\"nom\", \"prenom\"]," +
    "\"mailingRecipients\": [" +
        "{" +
            "\"mobile\" : \"+33647365520\"," +
            "\"mobile2\" : \"+33647365521\"," +
            "\"email\" : \"p.jane@techtv.com\"," +
            "\"fields\" : {" +
                "\"prenom\" : \"Patrick\"," +
                "\"nom\" : \"Jane\"" +
            "}" +
        "}," +
        "{" +
            "\"mobile\" : \"+33647365524\"," +
            "\"mobile2\" : \"+33654389908\"," +
            "\"email\" : \"Jess344@techtv.com\"," +
            "\"fields\" : {" +
                "\"prenom\" : \"Jessica\"," +
                "\"nom\" : \"Alba\"" +
            "}" +
        "}" +       
    "]}";

DataOutputStream dataOutputStream = new DataOutputStream(con.getOutputStream());
dataOutputStream.write(postJsonData.getBytes(StandardCharsets.UTF_8));
dataOutputStream.flush();
dataOutputStream.close();

BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String output;
StringBuilder response = new StringBuilder();

while ((output = in.readLine()) != null){
    response.append(output);
}

in.close();
var client = new RestClient("https://[SERVER_URL]/api/v1.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"",
    ""smsParam"":{
        ""encoding"":""GSM7"",
        ""body"":""Bonjour #prenom# #nom#, la nouvelle collection est arrivée chez Flush. 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 savonette est arrivée chez Flush. Venez vite, un cadeau vous attend en magasin.</p></body></html>"",
        ""subject"":""Mon objet de mail""
    },
    ""mailingFields"" : [""nom"", ""prenom""],
    ""mailingRecipients"": [
        {
            ""mobile"" : ""+33647365520"",
            ""mobile2"" : ""+33647365521"",
            ""email"" : ""p.jane@techtv.com"",
            ""fields"" : {""prenom"" : ""Patrick"",""nom"" : ""Jane""}
        },
        {
            ""mobile"" : ""+33647365524"",
            ""mobile2"" : ""+33654389908"",
            ""email"" : ""Jess344@techtv.com"",
            ""fields"" : {""prenom"" : ""Jessica"",""nom"" : ""Alba""}
        }
    ]
}";
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"",
    ""smsParam"":{
        ""encoding"":""GSM7"",
        ""body"":""Bonjour #prenom# #nom#, la nouvelle collection est arrivée chez Flush. 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 savonette est arrivée chez Flush. Venez vite, un cadeau vous attend en magasin.</p></body></html>"",
        ""subject"":""Mon objet de mail""
    },
    ""mailingFields"" : [""nom"", ""prenom""],
    ""mailingRecipients"": [
        {
            ""mobile"" : ""+33647365520"",
            ""mobile2"" : ""+33647365521"",
            ""email"" : ""p.jane@techtv.com"",
            ""fields"" : {""prenom"" : ""Patrick"",""nom"" : ""Jane""}
        },
        {
            ""mobile"" : ""+33647365524"",
            ""mobile2"" : ""+33654389908"",
            ""email"" : ""Jess344@techtv.com"",
            ""fields"" : {""prenom"" : ""Jessica"",""nom"" : ""Alba""}
        }
    ]
}"
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",
      "smsParam":{
          "encoding":"GSM7",
          "body":"Bonjour #prenom# #nom#, Mon body SMS."
      },
      "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>Mon body Email.</p></body></html>",
          "subject":"Mon objet de mail"
      },
     "mailingFields" : ["nom", "prenom"],
     "mailingRecipients": [
          {
              "mobile" : "+33647365520",
              "mobile2" : "+33647365521",
              "email" : "p.jane@techtv.com",
              "fields" : {
                  "prenom" : "Patrick",
                  "nom" : "Jane"
              }
          },
          {
              "mobile" : "+33647365524",
              "mobile2" : "+33654389908",
              "email" : "Jess344@techtv.com",
              "fields" : {
                  "prenom" : "Jessica",
                  "nom" : "Alba"
              }
          }
      ]
}';
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
$head = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

curl_close($ch); 
echo $httpCode . "\r\n";
var_dump($head);

?>
package main

import (
    "fmt"
    "strings"
    "net/http"
    "io/ioutil"
)

func main() {

    url := "https://[SERVER_URL]/api/v1.2/groups/[id_group]/diffusion-requests"

    json := `{
         "name": "Campagne avec publipostage"
         "smsParam":{
            "encoding":"GSM7",
            "body":"Bonjour #prenom# #nom#, Mon body de SMS."
         },
         "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>Mon body de mail.</p></body></html>",
            "subject":"Mon objet de mail"
         },
         "mailingFields" : ["nom", "prenom"],
         "mailingRecipients": [
             {
                 "mobile" : "+33647365520",
                 "mobile2" : "+33647365521",
                 "email" : "p.jane@techtv.com",
                 "fields" : {
                     "prenom" : "Patrick",
                     "nom" : "Jane"
                 }
             },
             {
                 "mobile" : "+33647365524",
                 "mobile2" : "+33654389908",
                 "email" : "Jess344@techtv.com",
                 "fields" : {
                     "prenom" : "Jessica",
                     "nom" : "Alba"
                 }
             }      
         ]
    }`
    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": [],
    "emails": [],
    "contactIds": [],
    "mailingListIds": [],
    "excludedContactIds": [],
    "categoryIds": [],
    "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>Mon body Email.</p></body></html>"
    },
    "smsParam": {
        "encoding": "GSM7",
        "body": "Bonjour #prenom# #nom#, Mon body SMS.",
        "estimatedMsgCount": 1
    },
    "mailingRecipients": [{
        "mobile": "+33647365520",
        "mobile2": "+33647365521",
        "email": "p.jane@techtv.com",
        "fields": {
            "prenom": "Patrick",
            "nom": "Jane"
        }
    }, {
        "mobile": "+33647365524",
        "mobile2": "+33654389908",
        "email": "Jess344@techtv.com",
        "fields": {
            "prenom": "Jessica",
            "nom": "Alba"
        }
    }],
    "mailingFields": ["mobile2", "mobile", "nom", "prenom", "email"],
    "createdAt": "2018-05-22T17: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 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

DELETE /api/v1.2/groups/: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
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
email 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

GET /api/v1.2/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', 'SMS', 'FAX' ou 'VOICE' Le type de média utilisé dans la diffusion
recipientFullName String Le nom d'un contact destinataire
recipientEmail email 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

GET /api/v1.2/diffusions/: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

GET /api/v1.2/diffusions/: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

GET /api/v1.2/groups/: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

GET /api/v1.2/smsplus

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

POST /api/v1.2/smsplus/conversations/: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+

GET /api/v1.2/smsplus/conversations/: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+

GET /api/v1.2/smsplus/[groupId]/campaigns

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

GET /api/v1.2/statistics/array

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 :

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 : SMS, EMAIL, FAX et VOICE.

- Lister les coordonnées injoignables

GET /api/v1.2/groups/: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

DELETE /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

DELETE /api/v1.2/groups/: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

POST /api/v1.2/groups/: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
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

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 : 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

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

EMAIL

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

POST /api/v1.2/groups/: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

PUT /api/v1.2/groups/: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

DELETE /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

POST /api/v1.2/groups/: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:

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

PUT /api/v1.2/groups/: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:

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

DELETE /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

POST /api/v1.2/groups/: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:

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

PUT /api/v1.2/groups/: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:

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

DELETE /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

POST /api/v1.2/groups/: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.

- Récupérer un fichier téléversé

GET /api/v1.2/groups/: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

GET /api/v1.2/groups/: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

GET /api/v1.2/custom-senders/:type

Ce point d'accès permet de récupérer les émetteurs personnalisés pour un type donné que vous pouvez utiliser pour :

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

Status

Les valeurs suivantes sont possibles

Cause

Les valeurs suivantes sont possibles

Récupérer le bilan des messages

GET /api/v1.2/communications

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
mailingId String false Identifiant import/telechargement de contacts
contactIds []String false Les identifiants de contacts
mailingListIds []String false Les identifiants de liste de diffusion de contacts
excludedContactIds []String false Les identifiants des contacts exclus
categoryIds []String false Les identifiants des catégories incluses
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

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

POST /api-conversational/v1.2/groups/: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 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 DiffusionContactMissing Au moins un contact est manquant
400 BadRequest SendDateExpired La date du calendrier de diffusion doit être postérieure à maintenant.
400 BadRequest SendDateTooFar La date du calendrier de diffusion doit être comprise dans les 6 prochains mois.
400 BadRequest NotEmpty Le champ identifié par field est obligatoire.
400 BadRequest SmsTooLong Le champ identifié par field qui représente le corps du SMS est trop long.
400 BadRequest MissingEncoding L'encodage du message SMS doit être spécifié. Il peut prendre les valeurs : "GSM7" ou "UCS2"
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

POST /api-conversational/v1.2/groups/: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

- Récupérer la liste des aperçus des conversations

GET /api-conversational/v1.2/groups/: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é.

- Récupérer les messages d'une conversation

GET /api-conversational/v1.2/groups/: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

GET /api-conversational/v1.2/groups/: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

GET /api-conversational/v1.2/groups/: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

GET /api-conversational/v1.2/groups/: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

GET /api-conversational/v1.2/statistics/messages

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 :

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

GET /api-conversational/v1.2/sender-configuration/groups/: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

POST /api-conversational/v1.2/groups/: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.
404 NotFound N/A Le groupe demandé n'existe pas ou a été supprimé.
400 BadRequest N/A Le tag fourni n'est pas valide.
400 BadRequest N/A Le tag fourni est déjà activé pour la conversation.

- Récupérer les événements d'une conversation

GET /api-conversational/v1.2/groups/: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": 8,
        "totalPages": 2,
        "numberOfElements": 3,
        "first": true,
        "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é.