Chargement en cours...





























































































































API SMS HTTPS Rest JSON iSendPro Telecom

Prérequis

Munissez vous de votre keyid

Votre keyid (clé d'identification) est visible sur votre espace client dans Mon compte -> Mon api
Cette clé vous identifie et vous devrez l'utiliser pour effectuer toutes vos requêtes via l'API

Protocole de chiffrement

Pour les appels en https, il est impératif d'utiliser au minimum la version 1.2 du protocole TLS

Envois marketing

L’envoi de SMS commerciaux est formellement interdit entre 20h00 et 08h00 les jours calendaires.
Ces restrictions contractuelles avec les opérateurs sont édictées par l’AFMM et ne sont pas spécifiques à notre site.
En cas de changement d'émetteur, la mention STOP en fin de message est obligatoire.
Le client s'engage à respecter ces obligations sous peine de fortes amendes et de suspension immédiate du compte.

Envois transactionnels

Ces envois correspondent à des messages de type non marketing (confirmation de commande, rendez vous, message d‘alerte, etc).
Ils peuvent etre envoyés à toute heure, une fois la restriction horaires du compte levée.
En cas de changement d'émetteur, vous pouvez retirer la mention STOP SMS en fin de message en utilisant l'argument nostop avec la valeur 1 (cf tableau), une fois la restriction STOP du compte levée.
Pour lever les restrictions horaires et STOP, envoyez un email à contact@isendpro.com

Configurer le contrôle IP

Un contrôle IP, basé sur un système de type «liste blanche» est activé par défaut.
Vous pouvez soit renseigner cette liste blanche, soit désactiver le contrôle IP.
Ce paramètrage peut s'effectuer sur Mon compte -> Mon api

Liste noire

Une liste des numéros de téléphone vers lesquels les messages ne sont pas envoyés est gérée.
Les numéros de téléphone y sont ajoutés à la demande des opérateurs ou de nos partenaires.
Tous les messages envoyés vers des clients en liste noire ne sont pas routés.
Dans ce cas, le code erreur 11 est retourné par la requête.

Encodage

  • Les appels à l'API doivent etre encodés en UTF-8
  • Les SMS et les noms de répertoires doivent être encodés en utf-8. Par défaut, les SMS sont réencodés en GSM7 lors de la transmission à l'opérateur. De ce fait, seuls les caractères précisés en annexe sont acceptés (ou remplacés).
  • Les retours d'API sont effectués en iso-8859-15 (latin1 + euro sign).
  • En cas d'envoi en ucs-2, la totalité des caractères utf-8 est supportée.

Remarques et bonnes pratiques

Logs

Nous vous recommandons de logguer (avec horodatage) vos appels à l'API ainsi que les réponses de cette dernière.

Traitement des erreurs

L'API REST/JSON répondra un code HTTP 200 à vos appels.
Si le code d'erreur est différent de 200, une erreur s'est produite et nous vous recommandons d'investiguer le problème, avec l'aide de notre support technique si nécessaire.
Les wrappers lèvent des exceptions en cas d'erreur, exceptions que nous vous recommandons de rattraper.

Traitement des retours

Certains retours vous remontent des problèmes sans déclencher d'erreur HTTP (ni exception dans les wrappers).
Par un exemple si vous soumettez des SMS à une liste de numéros de téléphone dont certains sont mal formatés, vous aurez un code HTTP 200 mais avec des codes retour indiquant ce problème

Dans l'exemple ci-dessous, le 0600208432 est un numéro invalide et le 0771058335 est un numéro en liste noire. Nous vous recommandons donc de traiter ces retours.
{
    "etat":{
        "etat":[
            {
                "code":"21",
                "tel":"0600208432",
                "message":"Le numéro de téléphone n'est pas attribué!"
            },
            {
                "code":"11",
                "tel":"0771058335",
                "message":"Le numéro de téléphone est dans la liste noire!"
            },
            {
                "code":"0",
                "tel":"0695208432",
                "message":"Votre message a bien ete envoye"v
            }
        ]
    }
}

Package supplémentaires pour les scripts

Python
Java

Traitement des accusés de réception

Nous vous recommandons de mettre en place une URL de traitement des retours des accusés de réception.

Retour des sms envoyés par les clients

Nous vous recommandons de mettre en place une URL de traitement des retours des sms envoyés par les clients.

Contact

Vous pouvez contacter le support technique à l'adresse suivante: support@isendpro.com

Important: Merci de préciser dans votre email votre identifiant client
Si la question concerne la remise d'un SMS, merci de rajouter les infos suivantes :
  • Numéro de téléphone (MSISDN)
  • Message
  • Date et heure d'envoi

Le support technique est joignable tous les jours de la semaine de 09h à 13h et de 14h à 17h au 04 83 66 05 10

Utilisation API



Changement d'émetteur

L'émetteur du message est par défaut un numéro court sur 5 chiffres. Il est possible de le remplacer par une chaine alpha numérique avec les contraintes suivantes:
  • Entre 4 et 11 caractères
  • Chiffre entre 0 et 9
  • Uniquement lettre alphabet français sans accent
  • Pas de caractères spéciaux
  • Pas uniquement des chiffres
  • Utilisation de nom de marques uniquement si le client en est propriétaire
  • Sauf si nostop=1, ajout automatique de la mention STOP XXXXX en fin de message qui utilise 12 caractères

Il faut renseigner la variable emetteur lors des appels à l'API comme indiqué dans les tableaux des paramètres sur cette documentation

Remarque:
  • En France, fonctionne pour tous les opérateurs sauf NRJ
  • A l'étranger, varie suivant les destinations, merci de nous consulter pour plus d'informations

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/sms' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "num":         "33601020304",
   "sms":         "Bonjour! Bienvenue sur iSendPro!",
   "emetteur":    "isendpro"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/sms';
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num'       =>  '33601020304',
    'sms'       =>  'Bonjour! Bienvenue sur iSendPro!',
    'emetteur'  =>  'isendpro'
);
$params = json_encode($params); 
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);
echo $response;
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->tel)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
// Erreur specifique au numero de telephone 
}else if (isset($repetat->tel) && ($repetat->code!=0)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'Tel: '.$repetat->tel;
// Envoi OK    
}else if (isset($repetat->tel) && ($repetat->code==0)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'Tel: '.$repetat->tel;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/sms'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num':      '33601020304',
    'sms':      'Bonjour! Bienvenue sur iSendPro!',
    'emetteur': 'isendpro'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('tel'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Erreur specifique au numero de telephone 
elif repetat.has_key('tel') and repetat['code']!=0:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'Tel: '+repetat['tel']
# Envoi OK    
elif repetat.has_key('tel') and repetat['code']==0:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'Tel: '+repetat['tel']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/sms";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      "33601020304");
        paramsTablo.put("sms",      "Bonjour! Bienvenue sur iSendPro!");
        paramsTablo.put("emetteur", "isendpro");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("tel")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Erreur specifique au numero de telephone 
            }else if(repetat.containsKey("tel") && repetat.get("code")!="0"){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("Tel: "+repetat.get("tel")); 
            // Envoi OK    
            }else if(repetat.containsKey("tel") && repetat.get("code")=="0"){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("Tel: "+repetat.get("tel"));     
            }

        } finally {
            con.disconnect();
        }
    }
}


Envoi d'émojis/émoticones

Il est possible d'envoyer des émojis/émoticones avec les contraintes suivantes:
  • Requête encodée au format UTF-8
  • 1 emoji comptera pour 2 caractères
  • La longueur max passe de 160 à 70 caractères par SMS (67 caractères si SMS Long)
  • Certains opérateurs ne supportent pas l'UCS2 (par exemple BOUYGUES en France), les caractères non supportés peuvent alors être supprimés du message.

Il faut renseigner la variable ucs2 avec pour valeur 1 lors des appels à l'API comme indiqué dans les tableaux des paramètres sur cette documentation.
La liste des emjois possible est disponible ICI
Remarque:
  • A l'étranger, varie suivant les destinations, merci de nous consulter pour plus d'informations

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/sms' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "num":         "33601020304",
   "sms":         "Bonjour! Bienvenue sur iSendPro! 🙂",
   "ucs2":         "1"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/sms';
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num'       =>  '33601020304',
    'sms'       =>  'Bonjour! Bienvenue sur iSendPro! 🙂',
    'ucs2'      =>  '1'
);
$params = json_encode($params); 
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);
echo $response;
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->tel)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
// Erreur specifique au numero de telephone 
}else if (isset($repetat->tel) && ($repetat->code!=0)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'Tel: '.$repetat->tel;
// Envoi OK    
}else if (isset($repetat->tel) && ($repetat->code==0)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'Tel: '.$repetat->tel;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/sms'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num':      '33601020304',
    'sms':      'Bonjour! Bienvenue sur iSendPro! 🙂',
    'ucs2':     '1'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('tel'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Erreur specifique au numero de telephone 
elif repetat.has_key('tel') and repetat['code']!=0:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'Tel: '+repetat['tel']
# Envoi OK    
elif repetat.has_key('tel') and repetat['code']==0:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'Tel: '+repetat['tel']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/sms";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      "33601020304");
        paramsTablo.put("sms",      "Bonjour! Bienvenue sur iSendPro! 🙂");
        paramsTablo.put("ucs2",     "1");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("tel")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Erreur specifique au numero de telephone 
            }else if(repetat.containsKey("tel") && repetat.get("code")!="0"){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("Tel: "+repetat.get("tel")); 
            // Envoi OK    
            }else if(repetat.containsKey("tel") && repetat.get("code")=="0"){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("Tel: "+repetat.get("tel"));     
            }

        } finally {
            con.disconnect();
        }
    }
}


Envoi à l'international

Les numéros de téléphones sont attendus au format international avec l'indicatif pays sans le "+" au début.
Ex: Pour la Belgique, l'indicatif international est +32
Si le numéro de téléphone est 0601020304 alors pour la mise au format international, il faut supprimer le "0" de début et ajouter l'indicatif pays sans le "+" au début
Le numéro devenant alors 32601020304

Certaines destinations peuvent avoir des contraintes particulières (émetteurs acceptés, smslong, etc), merci de nous consulter pour plus d'informations


Envoi de SMS unitaire

Envoi d'un message à 1 seul destinataire par requete

Appel

https://apirest.isendpro.com/cgi-bin/sms
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
sms String Oui Message envoyé au destinataire
1 SMS peut contenir jusqu'à 160 caractères
Possibilité d'envoyer des messages plus long (jusqu'à 6 SMS concaténés) pour un total de 918 caractères (6 x 153)
(7 caractères étant réserves pour des entêtes techniques)
Le cout unitaire sera alors multiplié par le nombre de SMS correspondants
Cf Argument smslong
emetteur String Non Emetteur du message
Par défaut, un numéro court sur 5 chiffres
Ex: 36007
Contraintes:
  • Entre 4 et 11 caractères
  • Chiffre entre 0 et 9
  • Uniquement lettre alphabet français sans accent
  • Pas de caractères spéciaux
  • Pas uniquement des chiffres
  • Sauf si nostop=1, ajout automatique de la mention STOP XXXXX en fin de message et augmente de 12 caractères la longueur globale
tracker String Non Généré par le client
Renvoyé en paramètre des urls pour les retours des accusés de réception et les retours des sms réponses
Longueur max de 50 caractères
Ex: order-ab78pq9
smslong Number Non Argument indiquant le nombre de SMS concaténés
Si le nombre de SMS exact est connu alors indiquer ce nombre
Si le nombre calculé par l'API diffère alors un message d'erreur sera retourné (code 32)
Pour éviter ce controle et autoriser les messages sur plus de 1 SMS, utiliser la valeur 999
Nombre de SMS concaténés Nombre de caractères
SANS modification émetteur
Nombre de caractères
AVEC modification émetteur
et SANS nostop=1
1 160 148
2 306 294
3 459 447
4 612 600
5 765 753
6 918 906
nostop Number Non Argument pour ne pas afficher automatiquement la mention STOP SMS en fin de message
Utiliser la valeur 1
date_envoi Date au format
YYYY-MM-DD hh:mm
Non Date à laquelle le message sera envoyé
gmt_zone Fuseau horaire Non A renseigner, en cas d'envoi différé sur un autre fuseau horaire que celui par défaut (GMT+1 Europe/Brussels)
Ex: Pour un envoi vers des destinataires en Argentine à l'horaire local et non celui de la France, la valeur de l'argument gmt_zone serait America/Havana
ucs2 Number Non Permet l'utilisation de caractères en alphabet non latin (russe, chinois, arabe, etc) et/ou avec des émojis
Contraintes:
  • Requête encodée au format UTF-8
  • 1 emoji comptera pour 2 caractères
  • La longueur max passe de 160 à 70 caractères par SMS (67 caractères si SMS Long)
  • Certains opérateurs ne supportent pas l'UCS2 (par exemple BOUYGUES en France), les caractères non supportés peuvent alors être supprimés du message.
Utiliser la valeur 1
numAzur Number Non Dans le cadre d'une utilisation combinée entre SMS Azur et l'API, il est possible de forcer le numéro d'expéditeur à être le même que celui utilisé sur SMS Azur
Utiliser la valeur 1
domtom Number Non Les envois vers les préfixes opérateurs à destination des DOM TOM (ou DROM-COM) sans l'indicatif pays associé (ex: +262 pour La Réunion) seront acceptés par l'API mais ne pourront etre délivrés
Pour forcer leur traitement au tarif en vigueur, utiliser la valeur 1
sandbox Number Non Activation du mode "bac à sable"
Ce champ permet de ne pas envoyer réellement les SMS lors de la requête
Les envois ne sont pas facturés
Utiliser la valeur 1

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
tel String Numéro de téléphone associé au code retour
message String Libellé correspondant au tableau des erreurs
sandbox Number Si 'sandbox' était dans les paramètres d'appels alors sa valeur est 1
Sinon le paramètre n'est pas affiché du tout
{
 "etat":{
     "etat":[
         {
             "code":    "0",
             "tel":     "0680010203",
             "message": "Votre message a bien été envoyé"
         }
     ]
 }
}
{
 "etat":{
     "etat":[
         {
             "code":    "6",
             "message": "Vous devez saisir un numéro de téléphone"
         }
     ]
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/sms' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "num":         "33601020304",
   "sms":         "Bonjour! Bienvenue sur iSendPro!",
   "emetteur":    "isendpro"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/sms';
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num'       =>  '33601020304',
    'sms'       =>  'Bonjour! Bienvenue sur iSendPro!',
    'emetteur'  =>  'isendpro'
);
$params = json_encode($params); 
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);
echo $response;
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->tel)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
// Erreur specifique au numero de telephone 
}else if (isset($repetat->tel) && ($repetat->code!=0)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'Tel: '.$repetat->tel;
// Envoi OK    
}else if (isset($repetat->tel) && ($repetat->code==0)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'Tel: '.$repetat->tel;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/sms'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num':      '33601020304',
    'sms':      'Bonjour! Bienvenue sur iSendPro!',
    'emetteur': 'isendpro'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('tel'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Erreur specifique au numero de telephone 
elif repetat.has_key('tel') and repetat['code']!=0:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'Tel: '+repetat['tel']
# Envoi OK    
elif repetat.has_key('tel') and repetat['code']==0:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'Tel: '+repetat['tel']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/sms";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      "33601020304");
        paramsTablo.put("sms",      "Bonjour! Bienvenue sur iSendPro!");
        paramsTablo.put("emetteur", "isendpro");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("tel")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Erreur specifique au numero de telephone 
            }else if(repetat.containsKey("tel") && repetat.get("code")!="0"){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("Tel: "+repetat.get("tel")); 
            // Envoi OK    
            }else if(repetat.containsKey("tel") && repetat.get("code")=="0"){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("Tel: "+repetat.get("tel"));     
            }

        } finally {
            con.disconnect();
        }
    }
}


Envoi de SMS multiples

Envoi d'un message à plusieurs destinataires par requête via une liste de numéros de téléphone avec un maximum de 500 numéros de téléphone par requête

Appel

https://apirest.isendpro.com/cgi-bin/smsmulti
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num Array Oui Liste des numéros de téléphone du destinataire
Au format international sans le +
Ex: [ "33601020304", "33601020305", "33601020306" ]
sms String Oui Message envoyé au destinataire
1 SMS peut contenir jusqu'à 160 caractères
Possibilité d'envoyer des messages plus long (jusqu'à 6 SMS concaténés) pour un total de 918 caractères (6 x 153)
(7 caractères étant réserves pour des entêtes techniques)
Le cout unitaire sera alors multiplié par le nombre de SMS correspondants
Cf Argument smslong

Un message différent peut etre fourni pour chaque destinataire. Pour cela, il faut fournir une liste de message où chaque message devra etre à la meme position dans la liste que le destinataire
emetteur String Non Emetteur du message
Par défaut, un numéro court sur 5 chiffres
Ex: 36007
Contraintes:
  • Entre 4 et 11 caractères
  • Chiffre entre 0 et 9
  • Uniquement lettre alphabet français sans accent
  • Pas de caractères spéciaux
  • Pas uniquement des chiffres
  • Sauf si nostop=1, ajout automatique de la mention STOP XXXXX en fin de message et augmente de 12 caractères la longueur globale
tracker String Non Généré par le client
Renvoyé en paramètre des urls pour les retours des accusés de réception et les retours des sms réponses
Longueur max de 50 caractères
Ex: order-ab78pq9

Un tracker différent peut etre fourni pour chaque destinataire. Pour cela, il faut fournir une liste de tracker où chaque tracker devra etre à la meme position dans la liste que le destinataire
smslong Number Non Argument indiquant le nombre de SMS concaténés
Si le nombre de SMS exactes est connu alors indiquer ce nombre
Si le nombre calculé par l'API diffère alors un message d'erreur sera retourné (code 32)
Pour éviter ce controle et autoriser les messages sur plus de 1 SMS, utiliser la valeur 999
Nombre de SMS concaténés Nombre de caractères
SANS modification émetteur
Nombre de caractères
AVEC modification émetteur
et SANS nostop=1
1 160 148
2 306 294
3 459 447
4 612 600
5 765 753
6 918 906
nostop Number Non Argument pour ne pas afficher automatiquement la mention STOP SMS en fin de message
Utiliser la valeur 1
date_envoi Date au format
YYYY-MM-DD hh:mm
Non Date à laquelle le message sera envoyé
Envoi immédiat si non renseigné
gmt_zone Fuseau horaire Non A renseigner, en cas d'envoi différé sur un autre fuseau horaire que celui par défaut (GMT+1 Europe/Brussels)
Ex: Pour un envoi vers des destinataires en Argentine à l'horaire local et non celui de la France, la valeur de l'argument gmt_zone serait America/Havana
ucs2 Number Non Permet l'utilisation de caractères en alphabet non latin (russe, chinois, arabe, etc) et/ou avec des émojis
Contraintes:
  • Requête encodée au format UTF-8
  • 1 emoji comptera pour 2 caractères
  • La longueur max passe de 160 à 70 caractères par SMS (67 caractères si SMS Long)
  • Certains opérateurs ne supportent pas l'UCS2 (par exemple BOUYGUES en France), les caractères non supportés peuvent alors être supprimés du message.
Utiliser la valeur 1
numAzur Number Non Dans le cadre d'une utilisation combinée entre SMS Azur et l'API, il est possible de forcer le numéro d'expéditeur à être le même que celui utilisé sur SMS Azur
Utiliser la valeur 1
domtom Number Non Les envois vers les préfixes opérateurs à destination des DOM TOM (ou DROM-COM) sans l'indicatif pays associé (ex: +262 pour La Réunion) seront acceptés par l'API mais ne pourront etre délivrés
Pour forcer leur traitement au tarif en vigueur, utiliser la valeur 1
sandbox Number Non Activation du mode "bac à sable"
Ce champ permet de ne pas envoyer réellement les SMS lors de la requête
Les envois ne sont pas facturés
Utiliser la valeur 1

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
tel String Numéro de téléphone associé au code retour
message String Libellé correspondant au tableau des erreurs
sandbox Number Si 'sandbox' était dans les paramètres d'appels alors sa valeur est 1
Sinon le paramètre n'est pas affiché du tout
{
    "etat":{
        "etat":[
            {
                "code":     "0",
                "tel":      "33601020304",
                "message":  "Votre message a bien ete envoye"
            },
            {
                "code":     "0",
                "tel":      "33601020305",
                "message":  "Votre message a bien ete envoye"
            }
        ]
    }
}
{
    "etat":{
        "etat":[
            {
                "code":     "21",
                "tel":      "33601020304",
                "message":  "Le numéro de téléphone n'est pas attribué!"
            },
            {
                "code":     "11",
                "tel":      "33601020305",
                "message":  "Le numero de telephone est dans la liste noire!""
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/smsmulti' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "num":         ["33601020304","33601020305","33601020306"],
   "sms":         "Bonjour! Bienvenue sur iSendPro!",
   "emetteur":    "isendpro"
}'

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/smsmulti' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "num":         ["33601020304","33601020305"],
   "sms":         ["Bonjour! Message pour destinataire 1","Bonjour! Message pour destinataire 2"],
   "tracker":     ["TrackerDestinataire_1","TrackerDestinataire_2"],
   "emetteur":    "isendpro"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/smsmulti';
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num'       =>  ['33601020304','33601020305'],
    'sms'       =>  'Bonjour! Bienvenue sur iSendPro!',
    'emetteur'  =>  'isendpro'
);
$params = json_encode($params);     
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params,    
    CURLOPT_HTTPHEADER => array(                                                                          
        'Content-Type' => 'application/json',                                                                                
        'Content-Length: ' =>  strlen($params)                                                                       
    )
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetatList=$reponsejson->etat->etat;
if(!is_array($repetatList)){
    $repetatList=array($repetatList);
}

$cpt=1;
foreach($repetatList as $repetat){
    echo '-----------';
    echo $sautligne;
    echo 'Data '.$cpt;
    echo $sautligne;
    // Erreur generale
    if (!isset($repetat->tel)){
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;
    // Erreur specifique au numero de telephone    
    }else if (isset($repetat->tel) && ($repetat->code!=0)){
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;
        echo 'Tel: '.$repetat->tel;
        echo $sautligne;
    // Envoi OK    
    }else if (isset($repetat->tel) && ($repetat->code==0)){
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;
        echo 'Tel: '.$repetat->tel;
        echo $sautligne;
    }
    $cpt+=1;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import types

url = 'https://apirest.isendpro.com/cgi-bin/smsmulti'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num':      ['33601020304','33601020305','33601020306'],
    'sms':      'Bonjour! Bienvenue sur iSendPro!',
    'emetteur': 'isendpro'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetatList=reponsejson['etat']['etat']
if not type(repetatList) is types.ListType:
    repetatList=[repetatList]

cpt=1
for repetat in repetatList:
    print '-----------'    
    print 'Data '+str(cpt)    
    # Erreur generale
    if not repetat.has_key('tel'):
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        
    # Erreur specifique au numero de telephone    
    elif repetat.has_key('tel') and repetat['code']!=0:
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        print 'Tel: '+repetat['tel']
        
    # Envoi OK    
    elif repetat.has_key('tel') and repetat['code']==0:
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        print 'Tel: '+repetat['tel']   
    
    cpt+=1
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/smsmulti";
        
        ArrayList<String> listData = new ArrayList<String>();
        listData.add("33601020304");
        listData.add("33601020305");
        listData.add("33601020306");
        
        Map<String, Object> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      listData);
        paramsTablo.put("sms",      "Bonjour! Bienvenue sur iSendPro!");
        paramsTablo.put("emetteur", "isendpro");     
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            ArrayList repetatList = (ArrayList)repetat.get("etat");
            if(! (repetatList instanceof ArrayList)){
                repetatList.add(repetatList);                
            }            
            
            for (int i = 0; i < repetatList.size(); i++) {
                repetat = (Map)repetatList.get(i);
                
                System.out.println("-----------");
                System.out.println("Data "+i);                
                // Erreur generale
                if (! repetat.containsKey("tel")){           
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));    
                // Erreur specifique au numero de telephone 
                }else if(repetat.containsKey("tel") && repetat.get("code")!="0"){
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));  
                    System.out.println("Tel: "+repetat.get("tel")); 
                // Envoi OK    
                }else if(repetat.containsKey("tel") && repetat.get("code")=="0"){
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));  
                    System.out.println("Tel: "+repetat.get("tel"));     
                }
            }
        } finally {
            con.disconnect();
        }
    }
}


Envoi de SMS multiples à un répertoire

Envoi d'un message à plusieurs destinataires par requête via un répertoire de numéros de téléphone

Appel

https://apirest.isendpro.com/cgi-bin/smsmulti
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
repertoireId String Oui Identifiant du répertoire cible
sms String Oui Message envoyé au destinataire
1 SMS peut contenir jusqu'à 160 caractères
Possibilité d'envoyer des messages plus long (jusqu'à 6 SMS concaténés) pour un total de 918 caractères (6 x 153)
(7 caractères étant réserves pour des entêtes techniques)
Le cout unitaire sera alors multiplié par le nombre de SMS correspondants
Cf Argument smslong
emetteur String Non Emetteur du message
Par défaut, un numéro court sur 5 chiffres
Ex: 36007
Contraintes:
  • Entre 4 et 11 caractères
  • Chiffre entre 0 et 9
  • Uniquement lettre alphabet français sans accent
  • Pas de caractères spéciaux
  • Pas uniquement des chiffres
  • Sauf si nostop=1, ajout automatique de la mention STOP XXXXX en fin de message et augmente de 12 caractères la longueur globale
tracker String Non Argument généré par le client afin d'associer les accusés de réception ou les réponses
Longueur max de 50 caractères
Ex: order-ab78pq9
smslong Number Non Argument indiquant le nombre de SMS concaténés
Si le nombre de SMS exactes est connu alors indiquer ce nombre
Si le nombre calculé par l'API diffère alors un message d'erreur sera retourné (code 32)
Pour éviter ce controle et autoriser les messages sur plus de 1 SMS, utiliser la valeur 999
nostop Number Non Argument pour ne pas afficher automatiquement la mention STOP SMS en fin de message
Utiliser la valeur 1
date_envoi Date au format
YYYY-MM-DD hh:mm
Non Date à laquelle le message sera envoyé
Envoi immédiat si non renseigné
gmt_zone Fuseau horaire Non A renseigner, en cas d'envoi différé sur un autre fuseau horaire que celui par défaut (Europe/London)
ucs2 Number Non Permet l'utilisation de caractères en alphabet non latin (russe, chinois, arabe, etc) et/ou avec des émojis
Contraintes:
  • Requête encodée au format UTF-8
  • 1 emoji comptera pour 2 caractères
  • La longueur max passe de 160 à 70 caractères par SMS (67 caractères si SMS Long)
  • Certains opérateurs ne supportent pas l'UCS2 (par exemple BOUYGUES en France), les caractères non supportés peuvent alors être supprimés du message.
Utiliser la valeur 1
numAzur Number Non Dans le cadre d'une utilisation combinée entre SMS Azur et l'API, il est possible de forcer le numéro d'expéditeur à être le même que celui utilisé sur SMS Azur
Utiliser la valeur 1
domtom Number Non Les envois vers les préfixes opérateurs à destination des DOM TOM (ou DROM-COM) sans l'indicatif pays associé (ex: +262 pour La Réunion) seront acceptés par l'API mais ne pourront etre délivrés
Pour forcer leur traitement au tarif en vigueur, utiliser la valeur 1
sandbox Number Non Activation du mode "bac à sable"
Ce champ permet de ne pas envoyer réellement les SMS lors de la requête
Les envois ne sont pas facturés
Utiliser la valeur 1

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
repertoireId String Identifiant du répertoire cible
message String Libellé correspondant au tableau des erreurs
sandbox Number Si 'sandbox' était dans les paramètres d'appels alors sa valeur est 1
Sinon le paramètre n'est pas affiché du tout
{
    "etat":{
        "etat":[
            {
                "code":         "0",
                "repertoireId": "123456789",
                "message":      "Votre message a bien ete envoye"
            }
        ]
    }
}
{
    "etat":{
        "etat":[
            {
                "code":         "108",
                "repertoireId": "123456789",
                "message":      "Cet identifiant ne correspond a aucun repertoire!"
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/smsmulti' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "repertoireId":"123456789",
   "sms":         "Bonjour! Bienvenue sur iSendPro!",
   "emetteur":    "isendpro"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/smsmulti';
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'repertoireId'  =>  '123456789',
    'sms'           =>  'Bonjour! Bienvenue sur iSendPro!',
    'emetteur'      =>  'isendpro'
);
$params = json_encode($params); 
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->repertoireId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
// Erreur specifique au repertoire
}else if (isset($repetat->repertoireId) && ($repetat->code!=0)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'RepertoireId: '.$repetat->repertoireId;
// Envoi OK    
}else if (isset($repetat->repertoireId) && ($repetat->code==0)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'RepertoireId: '.$repetat->repertoireId;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/smsmulti'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'repertoireId': '123456789',
    'sms':          'Bonjour! Bienvenue sur iSendPro!',
    'emetteur':     'isendpro'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('repertoireId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Erreur specifique au repertoire
elif repetat.has_key('repertoireId') and repetat['code']!=0:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'RepertoireId: '+repetat['repertoireId']
# Envoi OK    
elif repetat.has_key('repertoireId') and repetat['code']==0:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'RepertoireId: '+repetat['repertoireId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/smsmulti";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",        "a296464ce012b8ab710a");
        paramsTablo.put("repertoireId", "123456789");
        paramsTablo.put("sms",          "Bonjour! Bienvenue sur iSendPro!");
        paramsTablo.put("emetteur",     "isendpro");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("repertoireId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Erreur specifique au repertoire
            }else if(repetat.containsKey("repertoireId") && repetat.get("code")!="0"){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("repertoireId: "+repetat.get("repertoireId")); 
            // Envoi OK    
            }else if(repetat.containsKey("repertoireId") && repetat.get("code")=="0"){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("repertoireId: "+repetat.get("repertoireId"));     
            }

        } finally {
            con.disconnect();
        }
    }
}


Création de lien court

Création d'un lien court à partir d'une url longue
Remarque: Ces liens courts ont une durée de vie de 1 mois à compter de leur création

Appel

https://apirest.isendpro.com/cgi-bin/shortlink
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
type_shortlink Number Non Type d'url raccourcie
0: www.sms.ht (valeur par défaut)
1: url2.fr
shortlink String Oui Url à raccourcir

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs (cf Annexes)
shortlink String Url raccourcie
Format: www.sms.ht/[XXXX] ou url2.fr/[XXXX]
Ex: www.sms.ht/6gHw ou url2.fr/6gHw
{
    "etat": {
        "etat": [
            {
                "code":     "250",
                "message":  "Le lien court a ete genere",
                "shortlink":"www.sms.ht/6X8Y"
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/shortlink' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "shortlink":   "https://www.google.com/"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/shortlink';
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'shortlink' =>  'https://www.google.com/'
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->shortlink)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
// Infos du lien court
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'shortlink: '.$repetat->shortlink;
    echo $sautligne;
    echo 'message: '.$repetat->message;

}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/shortlink'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'shortlink':    'https://www.google.com/'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('shortlink'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos du lien court
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'Shortlink: '+repetat['shortlink']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/shortlink";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",        "a296464ce012b8ab710a");
        paramsTablo.put("shortlink",    "https://www.google.com/");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("shortlink")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos du lien court
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("shortlink: "+repetat.get("shortlink"));     
            }

        } finally {
            con.disconnect();
        }
    }
}


Rapport de campagne CSV

Récupération de la liste des envois sur une période donnée dans un fichier .csv

Pour des raisons de performance, cette fonctionnalité ne peut pas etre sollicitée plus de 10 fois par heure
Dépassé ce quota, vous obtiendrez un message d'erreur (code 260)

Pour récupérer les informations liées aux accusés de réceptions ou aux réponses des destinataires, merci d'utiliser nos webhooks dédiés

Appel

https://apirest.isendpro.com/cgi-bin/campagne
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
rapportCampagne Number Oui Utiliser la valeur suivante:
  • 1: Détails par envoi
  • 2: Regroupement par jour et par émetteur
date_deb Date au format
YYYY-MM-DD hh:mm
Oui Date de début des envois de la sélection
date_fin Date au format
YYYY-MM-DD hh:mm
Oui Date de fin des envois de la sélection

Réponse

La réponse est un fichier CSV zippé avec les colonnes suivantes suivant la valeur de l'argument rapportCampagne

Exemples de scripts

Paramètre Type Détails
Date d'envoi date Date d'envoi du SMS
Emetteur String Emetteur du message
Destinataire String Numéro de téléphone destinataire du message
Message String Message envoyé
Information complémentaire String Indique l'opérateur et l'état du message
Infos details String Indique l'accusé de réception fourni par l'opérateur
Statut String Statut du message
SMS retour String Eventuelle réponse du destinataire
Canal String Haute Qualite
Prix Number Cout du message
STOP Number Indique si le destinataire a répondu STOP
Tracker String Argument éventuellement fourni lors de l'envoi pour une identification simplifiée
Operateur String Opérateur associé au destinataire
Date AR date Date de réception de l'accusé de réception opérateur
Code erreur Number Code associé à l'accusé de réception
Paramètre Type Détails
Date d'envoi date Date d'envoi du SMS
Campagne String Libellé de la campagne
Répertoire String Répertoire(s) associé(s) aux envois
Emetteur String Emetteur du message
Message String Message de la campagne si hors API
Pays String Pays des destinataires
Envois prévus Number Quantité d'envois prévus
Envois reels Number Quantité d'envois réels
Envois non aboutis Number Quantité d'envois non aboutis
SMS Long Number Nombre de SMS pour le message
STOP Number Quantités de STOP recus
clics Number Quantités de clics
Visiteur unique Number Quantités de visiteurs uniques
Taux visite Number Taux de visite
Cout HT Number Cout de la campagne en euros HT

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/campagne' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":           "a296464ce012b8ab710a",
   "rapportCampagne": 1,
   "date_deb":        "2020-01-01 10:00",
   "date_fin":        "2020-01-07 20:00"
}' \
-o rapportCampagne.zip
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();
$zipName = 'rapportCampagne.zip';
$zipDirectory = '/VOTRE_REPERTOIRE/';
$fp = fopen($zipDirectory.$zipName, 'w');

$url = 'https://apirest.isendpro.com/cgi-bin/campagne';
$params = array(
    'keyid'             =>  'a296464ce012b8ab710a',
    'rapportCampagne'   =>  1,
    'date_deb'          =>  '2020-01-01 10:00',
    'date_fin'          =>  '2020-01-07 20:00',
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
curl_setopt($ch, CURLOPT_FILE, $fp);

$response = curl_exec($ch);
fwrite($fp, $response);

curl_close($ch);
fclose($fp);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html

// Unzip du fichier
$za = new ZipArchive(); 
$za->open($zipDirectory.$zipName); 
for( $i = 0; $i < $za->numFiles; $i++ ){ 
    $stat = $za->statIndex( $i ); 
    $fileName = basename($stat['name']);
    print_r($fileName.PHP_EOL);     
    $za->extractTo($zipDirectory);
    $za->close();    
    // Lecture du fichier csv dans le zip
    $fn = fopen($fileName, 'r');    
    // Liste des titres de colonnes
    $titres = fgetcsv($fn, 1000, ';');
    while (($data = fgetcsv($fn, 1000, ';')) !== FALSE){
        foreach($data as $i => $d){
            if($d){
                // Affichage des donnees de la ligne
                echo $titres[$i].' => '.$d.PHP_EOL;
            }            
        }
        // Saut de ligne
        echo PHP_EOL;
    }   
    // Suppression du fichier .csv
    unlink($zipDirectory.$fileName);
}
// Suppression du fichier .zip
unlink($zipDirectory.$zipName);
?>
####################################################################################
#- Envoi requete
####################################################################################
import shutil
import requests
import zipfile
import os

zipName = 'rapportCampagne.zip'
zipDirectory = '/VOTRE_REPERTOIRE/'

url = 'https://apirest.isendpro.com/cgi-bin/campagne'
params = {
    'keyid':            'a296464ce012b8ab710a',
    'rapportCampagne':  1,
    'date_deb':         '2020-01-01 10:00',
    'date_fin':         '2020-01-07 20:00',
}

response = requests.post(url, params, stream=True)
with open(zipDirectory+zipName, 'wb') as f:
    response.raw.decode_content = True
    shutil.copyfileobj(response.raw, f) 

####################################################################################
#- Traitement du retour
####################################################################################
myzipfile = zipfile.ZipFile(zipDirectory+zipName)
for fileName in myzipfile.namelist():
    # Unzip du fichier vers zipDirectory
    with zipfile.ZipFile(zipDirectory+zipName, 'r') as zip_ref:
        zip_ref.extractall(zipDirectory)    
    # Lecture du fichier csv dans le zip
    fichier = open(zipDirectory+fileName)   
    lines = fichier.readlines()    
    firstLine=1
    for line in lines:
        line=line.strip()   
        line=line.split(';')    
        if firstLine:
            # Liste des titres de colonnes
            firstLine=0
            titres=line
        else:
            i=0
            for data in line:
                if data:
                    # Affichage des donnees de la ligne
                    print titres[i]+' => '+data
                    i+=1 

    # Suppression du fichier .csv
    os.remove(zipDirectory+fileName)

# Suppression du fichier .zip
os.remove(zipDirectory+zipName)
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.io.BufferedReader;
import java.io.FileReader;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;
    /**
     * Size of the buffer to read/write data
     */
    private static final int BUFFER_SIZE = 4096;    

    public static void main(String[] args) throws IOException {

        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/campagne";
        
        var zipName = "rapportCampagne.zip";
        var zipDirectory = "/VOTRE_REPERTOIRE/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("rapportCampagne",  "1");
        paramsTablo.put("date_deb",         "2020-01-01 10:00");
        paramsTablo.put("date_fin",         "2020-01-07 20:00");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            File myzipfile = new File(zipDirectory+zipName);
            OutputStream outStream = new FileOutputStream(myzipfile);
            InputStream inputStream = con.getInputStream();
            int read;
            byte[] bytes = new byte[1024];
            while ((read = inputStream.read(bytes)) != -1) {
                outStream.write(bytes, 0, read);
            }  
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////            
            File destDir = new File(zipDirectory);

            ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipDirectory+zipName));
            ZipEntry entry = zipIn.getNextEntry();
            // iterates over entries in the zip file
            while (entry != null) {
                File mycsvfile = new File(zipDirectory+entry.getName());
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(zipDirectory+entry.getName()));
                byte[] bytesIn = new byte[BUFFER_SIZE];
                int read2 = 0;
                while ((read2 = zipIn.read(bytesIn)) != -1) {
                    bos.write(bytesIn, 0, read2);
                }
                bos.close();              
                        
                BufferedReader reader;
                String lineD;
                String data;  		
                ArrayList<String> titres=new ArrayList<String>();
                reader = new BufferedReader(new FileReader(zipDirectory+entry.getName()));
                String line = reader.readLine();
                // Liste des titres de colonnes
                if (line != null) {	
                    lineD = line.trim();
                    titres=new ArrayList<String>(Arrays.asList(lineD.split(";")));    
                }
                while (line != null) {				
                    line = reader.readLine();
                    if (line != null) {	
                        lineD = line.trim();
                        ArrayList<String> lineList = new ArrayList<String>(Arrays.asList(lineD.split(";")));                  
                        for (int i = 0; i < lineList.size(); i++) {
                            data = (String)lineList.get(i);            
                            data = data.trim();
                            System.out.println(titres.get(i)+" => "+data);
                        }
                        System.out.println(" ");
                    }
                }
                reader.close(); 
                // Suppression du fichier .csv
                mycsvfile.delete();

                zipIn.closeEntry();
                entry = zipIn.getNextEntry();            
            }
            zipIn.close();
            // Suppression du fichier .zip
            myzipfile.delete();            
            
        } finally {
            con.disconnect();
        }
    }  
}


Rapport de campagne JSON

Récupération de la liste des envois sur une période donnée, sur un numéro de téléphone et un tracker en JSON
La requête ne peut concerner plus de 1000 données à la fois sinon un message d'erreur sera retourné
Si la requete est trop grande alors il faudra utiliser les champs select_deb et select_pas

Pour des raisons de performance, cette fonctionnalité ne peut pas etre sollicitée plus de 10 fois par heure
Dépassé ce quota, vous obtiendrez un message d'erreur (code 260)

Pour récupérer les informations liées aux accusés de réceptions ou aux réponses des destinataires, merci d'utiliser nos webhooks dédiés

Appel

https://apirest.isendpro.com/cgi-bin/campagne
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
rapportCampagneData Number Oui Utiliser la valeur 1
date_deb Date au format
YYYY-MM-DD hh:mm
Oui Date de début des envois de la sélection
date_fin Date au format
YYYY-MM-DD hh:mm
Oui Date de fin des envois de la sélection
select_deb Number Non Ce nombre indique la position de début des résultats de la sélection
Ex: select_deb=1000 pour obtenir les données après les 1000ers résultats
select_pas Number Non Ce nombre indique la quantité de résultats dans la sélection
La valeur maximum acceptée est 1000
Ex: select_pas=500 pour obtenir 500 données
select_msisdn Array Non Ajout de cette liste dans la requête de rapport de campagne Au format international sans le +
Ex: [ "33601020304", "33601020305", "33601020306" ]
select_tracker String Non Ajout de ce critère dans la requête de rapport de campagne
La recherche sera étendue à tous les trackers commençant par le tracker indiqué
Ex: Si select_tracker=camp001 alors seront recherchés les trackers camp001-001 et camp001-002

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
tel String Numéro de téléphone associé au code retour
message String Libellé correspondant au tableau des erreurs
historySender String Emetteur du message
historyMsg String Message envoyé au destinataire
historyDate String Date d'envoi du message au destinataire au format AAAA-MM-JJ HH:MM:SS
historyTracker String tracker associé au message envoyé au destinataire
historyOperator String Opérateur associé au message envoyé au destinataire
historyResponse String Réponse éventuelle retournée par le destinataire
Si aucune réponse la valeur est "-"
historyResponseTime String Date de la réponse éventuelle retournée par le destinataire
Si aucune réponse la valeur est "0000-00-00 00:00:00"
historyDeliveryAR String Indique si le message a bien été livré
Les valeurs possibles sont:
  • OK
  • NOK
historyDeliveryARtime String Date de la notification de livraison du message au destinataire au format AAAA-MM-JJ HH:MM:SS
historyDelivery1 String Complément d'information sur la notification
historyDelivery2 String Complément d'information sur la notification
historyNbSMSlong Number Nombre de SMS pour ce message
{
    "etat": {
        "etat": [
            {
                "code":                     "207",
                "tel":                      "33601020304",
                "message":                  "Historique des envois",
                "historySender":            "MaSociete",
                "historyMsg":               "Votre test 1 a bien été recu",
                "historyDate":              "2020-04-14 14:58:02",
                "historyTracker":           "camp001-002",
                "historyOperator":          "SFR",
                "historyResponse":          "-",
                "historyResponseTime":      "0000-00-00 00:00:00",                                
                "historyDeliveryAR":        "OK",
                "historyDeliveryARtime":    "2020-04-14 14:58:03",
                "historyDelivery1":         "SFR: SMS remis",
                "historyDelivery2":         "Message for 0033601020304 has been delivered",
                "historyNbSMSlong":         "1"
            },
            {
                "code":                     "207",
                "tel":                      "33601020305",
                "message":                  "Historique des envois",
                "historySender":            "MaSociete",
                "historyMsg":               "Votre test 1 a bien été recu",
                "historyDate":              "2020-04-14 14:58:08",
                "historyTracker":           "camp001-001",
                "historyOperator":          "ORAN",
                "historyResponse":          "-",
                "historyResponseTime":      "0000-00-00 00:00:00",         
                "historyDeliveryAR":        "OK",
                "historyDeliveryARtime":    "2020-04-14 14:58:10",
                "historyDelivery1":         "ORAN: SMS remis",
                "historyDelivery2":         "SMS remis le 14.04.20 a 14:58:10",
                "historyNbSMSlong":         "1"                
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/campagne' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                 "a296464ce012b8ab710a",
   "rapportCampagneData":   "1",
   "select_tracker":        "camp001",
   "date_deb":              "2020-04-01 00:00",
   "date_fin":              "2020-04-30 00:00",
   "select_deb":            "0",
   "select_pas":            "500"   
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();
$url = 'https://apirest.isendpro.com/cgi-bin/campagne';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'rapportCampagneData'   =>  '1',
    'date_deb'              =>  '2020-01-01 00:00',
    'date_fin'              =>  '2020-01-10 00:00',
    'select_deb'            =>  '0',
    'select_pas'            =>  '500',
    'select_tracker'        =>  'camp001',    
    'select_msisdn'         =>  ['33601020304','33601020305']
);
$params = json_encode($params);     
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params,    
    CURLOPT_HTTPHEADER => array(                                                                          
        'Content-Type' => 'application/json',                                                                                
        'Content-Length: ' =>  strlen($params)                                                                       
    )
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetatList=$reponsejson->etat->etat;
if(!is_array($repetatList)){
    $repetatList=array($repetatList);
}

$cpt=1;
foreach($repetatList as $repetat){
    echo '-----------';
    echo $sautligne;
    echo 'Data '.$cpt;
    echo $sautligne;
    // Erreur generale
    if (!isset($repetat->tel)){
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;
    // infos sur le retour
    }else{
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;
        echo 'Tel: '.$repetat->tel;
        echo $sautligne;
        echo 'historySender: '.$repetat->historySender;
        echo $sautligne;
        echo 'historyMsg: '.$repetat->historyMsg;
        echo $sautligne;        
        echo 'historyDate: '.$repetat->historyDate;
        echo $sautligne;        
        echo 'historyTracker: '.$repetat->historyTracker;
        echo $sautligne;        
        echo 'historyOperator: '.$repetat->historyOperator;
        echo $sautligne;        
        echo 'historyResponse: '.$repetat->historyResponse;
        echo $sautligne;        
        echo 'historyResponseTime: '.$repetat->historyResponseTime;        
        echo $sautligne;        
        echo 'historyDeliveryAR: '.$repetat->historyDeliveryAR;
        echo $sautligne;        
        echo 'historyDeliveryARtime: '.$repetat->historyDeliveryARtime;
        echo $sautligne;        
        echo 'historyDelivery1: '.$repetat->historyDelivery1;
        echo $sautligne;        
        echo 'historyDelivery2: '.$repetat->historyDelivery2;
        echo $sautligne;                
        echo 'historyNbSMSlong: '.$repetat->historyNbSMSlong;
        echo $sautligne;          
    }
    $cpt+=1;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import types

url = 'https://apirest.isendpro.com/cgi-bin/campagne'
params = {
    'keyid'                 :  'a296464ce012b8ab710a',
    'rapportCampagneData'   :  '1',
    'date_deb'              :  '2020-01-01 00:00',
    'date_fin'              :  '2020-01-10 00:00',
    'select_deb'            :  '0',
    'select_pas'            :  '500',
    'select_msisdn'         :  ['33601020304','33601020305'],    
    'select_tracker'        :  'camp001'    
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetatList=reponsejson['etat']['etat']
if not type(repetatList) is types.ListType:
    repetatList=[repetatList]

cpt=1
for repetat in repetatList:
    print '-----------'    
    print 'Data '+str(cpt)    
    # Erreur generale
    if not repetat.has_key('tel'):
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']

    # Infos sur le retour
    else:
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        print 'Tel: '+repetat['tel']           
        print 'historySender: '+repetat['historySender']               
        print 'historyMsg: '+repetat['historyMsg']       
        print 'historyDate: '+repetat['historyDate']
        print 'historyTracker: '+repetat['historyTracker']   
        print 'historyOperator: '+repetat['historyOperator']
        print 'historyResponse: '+repetat['historyResponse']
        print 'historyResponseTime: '+repetat['historyResponseTime']                
        print 'historyDeliveryAR: '+repetat['historyDeliveryAR']
        print 'historyDeliveryARtime: '+repetat['historyDeliveryARtime']
        print 'historyDelivery1: '+repetat['historyDelivery1']
        print 'historyDelivery2: '+repetat['historyDelivery2']
        print 'historyNbSMSlong: '+repetat['historyNbSMSlong']                
    
    cpt+=1
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/campagne";
        
        ArrayList<String> listData = new ArrayList<String>();
        listData.add("33601020304");
        listData.add("33601020305");
        
        Map<String, Object> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                "a296464ce012b8ab710a");
        paramsTablo.put("rapportCampagneData", "1");
        paramsTablo.put("date_deb",             "2020-01-01 00:00");     
        paramsTablo.put("date_fin",             "2020-01-10 00:00");     
        paramsTablo.put("select_deb",           "0");     
        paramsTablo.put("select_pas",           "500");     
        paramsTablo.put("select_tracker",       "camp001");             
        paramsTablo.put("select_msisdn",        listData);            
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            ArrayList repetatList = (ArrayList)repetat.get("etat");
            if(! (repetatList instanceof ArrayList)){
                repetatList.add(repetatList);                
            }            
            
            for (int i = 0; i < repetatList.size(); i++) {
                repetat = (Map)repetatList.get(i);
                
                System.out.println("-----------");
                System.out.println("Data "+i);                
                // Erreur generale
                if (! repetat.containsKey("tel")){           
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));    
                // Infos sur le retour
                }else{
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));  
                    System.out.println("Tel: "+repetat.get("tel"));                         
                    System.out.println("historySender: "+repetat.get("historySender"));                           
                    System.out.println("historyMsg: "+repetat.get("historyMsg"));       
                    System.out.println("historyDate: "+repetat.get("historyDate"));
                    System.out.println("historyTracker: "+repetat.get("historyTracker"));   
                    System.out.println("historyOperator: "+repetat.get("historyOperator"));
                    System.out.println("historyResponse: "+repetat.get("historyResponse"));
                    System.out.println("historyResponseTime: "+repetat.get("historyResponseTime"));                                        
                    System.out.println("historyDeliveryAR: "+repetat.get("historyDeliveryAR"));
                    System.out.println("historyDeliveryARtime: "+repetat.get("historyDeliveryARtime"));
                    System.out.println("historyDelivery1: "+repetat.get("historyDelivery1"));
                    System.out.println("historyDelivery2: "+repetat.get("historyDelivery2"));  
                    System.out.println("historyNbSMSlong: "+repetat.get("historyNbSMSlong"));                                          
                }
            }
        } finally {
            con.disconnect();
        }
    }
}


Comptage du nombre de caractères et de SMS

Comptage de la longueur d'un message en nombre de caractères et nombre de SMS avant l'envoi réel

Appel

https://apirest.isendpro.com/cgi-bin/comptage
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
sms String Oui Message envoyé au destinataire
1 SMS peut contenir jusqu'à 160 caractères
Possibilité d'envoyer des messages plus long (jusqu'à 6 SMS concaténés) pour un total de 918 caractères (6 x 153)
(7 caractères étant réserves pour des entêtes techniques)
Le cout unitaire sera alors multiplié par le nombre de SMS correspondants
Cf Argument smslong
emetteur String Non Emetteur du message
Par défaut, un numéro court sur 5 chiffres
Ex: 36007
Contraintes:
  • Entre 4 et 11 caractères
  • Chiffre entre 0 et 9
  • Uniquement lettre alphabet français sans accent
  • Pas de caractères spéciaux
  • Pas uniquement des chiffres
  • Sauf si nostop=1, ajout automatique de la mention STOP XXXXX en fin de message et augmente de 12 caractères la longueur globale
comptage Number Oui Utiliser la valeur 1

Réponse

Paramètre Type Détails
tel String Numéro de téléphone associé au code retour
nb_sms number Nombre de SMS pour contenir le message
nb_caractere number Nombre de caractères pour contenir le message
{
 "etat":{
     "etat":[
         {
             "tel":             "0680010203",
             "nb_sms":          "1",             
             "nb_caractere":    "65"
         }
     ]
 }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/comptage' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "num":         "33601020304",
   "sms":         "Bonjour! Bienvenue sur iSendPro!",
   "emetteur":    "isendpro",
   "comptage":    1
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/comptage';
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num'       =>  '33601020304',
    'sms'       =>  'Bonjour! Bienvenue sur iSendPro!',
    'emetteur'  =>  'isendpro',
    'comptage'  =>  1
);
$params = json_encode($params); 
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->tel)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
// Infos de comptage
}else{
    echo 'tel: '.$repetat->tel;
    echo $sautligne;
    echo 'nb_sms: '.$repetat->nb_sms;
    echo $sautligne;
    echo 'nb_caractere: '.$repetat->nb_caractere;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/comptage'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num':      '33601020304',
    'sms':      'Bonjour! Bienvenue sur iSendPro!',
    'emetteur': 'isendpro',
    'comptage': 1
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('tel'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de comptage
else:
    print 'tel: '+repetat['tel']
    print 'nb_sms: '+repetat['nb_sms']
    print 'nb_caractere: '+repetat['nb_caractere']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/comptage";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      "33601020304");
        paramsTablo.put("sms",      "Bonjour! Bienvenue sur iSendPro!");
        paramsTablo.put("emetteur", "isendpro"); 
        paramsTablo.put("comptage", "1");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("tel")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de comptage
            }else{
                System.out.println("tel: "+repetat.get("tel"));
                System.out.println("nb_sms: "+repetat.get("nb_sms"));  
                System.out.println("nb_caractere: "+repetat.get("nb_caractere"));     
            }

        } finally {
            con.disconnect();
        }
    }
}


Consultation du crédit

Consultation du crédit restant en quantité de SMS ou en euros Ht

Appel

https://apirest.isendpro.com/cgi-bin/credit
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
credit Number Oui Number indiquant le type de crédit restant
  • 1: Pour le montant en euros HT
  • 2: Pour la quantité de SMS

Réponse

Paramètre Type Détails
credit String Nombre à virgule indiquant le crédit restant en euros HT
Ex: 561.20
quantite Number Nombre indiquant le nombre de crédits restants en quantité de SMS
Ex: 8974
{
    "etat": 
    {
        "credit":   "13.066",
        "quantite": "326"
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/credit' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":   "a296464ce012b8ab710a",
   "credit":  2
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/credit';
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'credit'    =>  2
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat;

// Erreur generale
if (!isset($repetat->credit)){
    $repetat=$reponsejson->etat->etat[0];
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
// Infos de quantites
}else{
    echo 'credit: '.$repetat->credit;
    if (isset($repetat->quantite)){
        echo $sautligne;
        echo 'quantite: '.$repetat->quantite;
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/credit'
params = {
    'keyid'     : 'a296464ce012b8ab710a',
    'credit'    : 2
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']

# Erreur generale
if not repetat.has_key('credit'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de quantites
else:
    print 'credit: '+repetat['credit']
    if repetat.has_key('quantite'):
        print 'quantite: '+repetat['quantite']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/credit";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid", "a296464ce012b8ab710a");
        paramsTablo.put("credit", "2");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");

            // Erreur generale
            if (! repetat.containsKey("credit")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }            
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("credit: "+repetat.get("credit"));
                if (repetat.containsKey("quantite")){
                    System.out.println("quantite: "+repetat.get("quantite"));  
                }
            }

        } finally {
            con.disconnect();
        }
    }
}


Récupération du prix unitaire par pays

Récupération du prix unitaire par pays en euros HT

Appel

https://apirest.isendpro.com/cgi-bin/credit
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
countryCode String Oui Indicatif international du pays sans le +
getPrice String Oui Utiliser la valeur '1'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
countryCode Number Indicatif international du pays sans le +
accountPrice String Prix unitaire en euros HT avec le point (.) comme séparateur des centimes
Ex: 0.067
{
    "etat":{
        "etat":[
            {
                "code":         "251",
                "message":      "Le prix unitaire",
                "countryCode":  "44",
                "accountPrice":  "0.067"
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/credit' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "countryCode": "33",
   "getPrice":    "1"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/credit';
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'countryCode'   =>  '33',
    'getPrice'      =>  '1'    
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->countryCode)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'countryCode: '.$repetat->countryCode;
    echo $sautligne;
    echo 'accountPrice: '.$repetat->accountPrice;
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/credit'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'countryCode':  '33',
    'getPrice':     '1'    
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('countryCode'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'countryCode: '+repetat['countryCode']
    print 'accountPrice: '+repetat['accountPrice']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/credit";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("countryCode",      "33");
        paramsTablo.put("getPrice",         "1");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("countryCode")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message")); 
                System.out.println("countryCode: "+repetat.get("countryCode"));  
                System.out.println("accountPrice: "+repetat.get("accountPrice"));     
            }

        } finally {
            con.disconnect();
        }
    }
}


Appel au LookUp HLR

Service Payant Merci de vous rapprocher de votre conseiller commercial concernant la tarification de ce service
Appel au LookUp HLR pour tester les numéros de téléphone et obtenir l'opérateur associé en retour
Les numéros de téléphone sont placés dans les variables numXX est un entier allant de 1 à 500 au maximum

Appel

https://apirest.isendpro.com/cgi-bin/hlr
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num Array Oui Liste des numéros de téléphone du destinataire
Au format international sans le +
Ex: [ "33601020304", "33601020305", "33601020306" ]
getHLR Number Oui Utiliser la valeur 1

Réponse

Paramètre Type Détails
tel String Numéro de téléphone associé au code retour
operateur String Chaine de caracteres indiquant la valeur de l'opérateur
Liste des opérateur:
  • ORAN: Orange
  • SFR: SFR
  • BOUY: Bouygues Telecom
  • FREE: FREE
  • NRJ: NRJ Mobile
  • LYCA: LYCA Mobile
  • CORI: Coriolis
  • MUND: Mundio
  • TRAT: Transatel
  • COMP: Completel
  • LEGO: Legos
  • MOQU: SFR
  • INTE: Numéro international
  • INVALIDE: Numéro non reconnu
Si le numéro est en liste noire alors il sera ajouté "-LISTE NOIRE" au nom de l'opérateur
{
    "etat": {
        "etat": [
            {
                "tel":      "33601020304", 
                "operateur":"INVALIDE"
            }, 
            {
                "tel":      "33601020305",
                "operateur":"SFR"
            },
            {
                "tel":      "33601020306",
                "operateur":"BOUY-LISTE NOIRE"
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/hlr' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":   "a296464ce012b8ab710a",
   "num":     ["33601020304","33601020305","33601020306"],
   "getHLR":  1
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/hlr';
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num'       =>  ['33601020304','33601020305'],
    'getHLR'    =>  1
);
$params = json_encode($params);     
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params,    
    CURLOPT_HTTPHEADER => array(                                                                          
        'Content-Type' => 'application/json',                                                                                
        'Content-Length: ' =>  strlen($params)                                                                       
    )
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetatList=$reponsejson->etat->etat;
if(!is_array($repetatList)){
    $repetatList=array($repetatList);
}

$cpt=1;
foreach($repetatList as $repetat){
    echo '-----------';
    echo $sautligne;
    echo 'Data '.$cpt;
    echo $sautligne;
    // Erreur generale
    if (!isset($repetat->tel)){
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;
    // Infos sur le numero
    }else{
        echo 'Tel: '.$repetat->tel;
        echo $sautligne;
        echo 'Operateur: '.$repetat->operateur;
        echo $sautligne;
    }
    $cpt+=1;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import types

url = 'https://apirest.isendpro.com/cgi-bin/hlr'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num':      ['33601020304','33601020305','33601020306'],
    'getHLR':   1
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetatList=reponsejson['etat']['etat']
if not type(repetatList) is types.ListType:
    repetatList=[repetatList]

cpt=1
for repetat in repetatList:
    print '-----------'    
    print 'Data '+str(cpt)    
    # Erreur generale
    if not repetat.has_key('tel'):
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        
    # Infos sur le numero
    elif repetat.has_key('tel'):
        print 'Tel: '+repetat['tel']
        print 'Operateur: '+repetat['operateur']
    
    cpt+=1
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/hlr";
        
        ArrayList<String> listData = new ArrayList<String>();
        listData.add("33601020304");
        listData.add("33601020305");
        listData.add("33601020306");
        
        Map<String, Object> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      listData);
        paramsTablo.put("getHLR",   "1");     
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            ArrayList repetatList = (ArrayList)repetat.get("etat");
            if(! (repetatList instanceof ArrayList)){
                repetatList.add(repetatList);                
            }            
            
            for (int i = 0; i < repetatList.size(); i++) {
                repetat = (Map)repetatList.get(i);
                
                System.out.println("-----------");
                System.out.println("Data "+i);                
                // Erreur generale
                if (! repetat.containsKey("tel")){           
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));    
                // Erreur specifique au numero de telephone 
                }else{
                    System.out.println("tel: "+repetat.get("tel"));
                    System.out.println("operateur: "+repetat.get("operateur"));     
                }
            }
        } finally {
            con.disconnect();
        }
    }
}


Ajout en liste noire

Ajout de numéros de téléphone dans votre liste noire

Appel

https://apirest.isendpro.com/cgi-bin/setlistenoire
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
setlisteNoire Number Oui Utiliser la valeur 1

Réponse

Paramètre Type Détails
tel String Numéro de téléphone associé au code retour
listeNoire String Confirmation de l'ajout: OK
{
    "etat": {
        "etat": [
            {
                "tel":          "33601020304", 
                "listeNoire":   "OK"
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/setlistenoire' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":           "a296464ce012b8ab710a",
   "num":             "33601020304",
   "setlisteNoire":   1
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/setlistenoire';
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'num'           =>  '33601020304',
    'setlisteNoire' =>  1
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->tel)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'tel: '.$repetat->tel;
    echo $sautligne;
    echo 'listeNoire: '.$repetat->listeNoire;
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/setlistenoire'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'num':          '33601020304',
    'setlisteNoire':1
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('tel'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'tel: '+repetat['tel']
    print 'listeNoire: '+repetat['listeNoire']

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/setlistenoire";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      "33601020304");
        paramsTablo.put("setlisteNoire", "1");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("tel")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("tel: "+repetat.get("tel"));
                System.out.println("listeNoire: "+repetat.get("listeNoire"));    
            }

        } finally {
            con.disconnect();
        }
    }
}


Suppression de la liste noire

Suppression de numéros de téléphone dans votre liste noire

Appel

https://apirest.isendpro.com/cgi-bin/dellistenoire
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
delListeNoire Number Oui Utiliser la valeur 1

Réponse

Paramètre Type Détails
tel String Numéro de téléphone associé au code retour
listeNoire String Retour sur la tentative de suppression
  • SUPPRESSION OK
  • SUPPRESSION NOK
{
    "etat": {
        "etat": [
            {
                "tel":          "33601020304", 
                "listeNoire":   "SUPPRESSION OK"
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "tel":          "33601020304", 
                "listeNoire":   "SUPPRESSION NOK"
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/dellistenoire' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":           "a296464ce012b8ab710a",
   "num":             "33601020304",
   "delListeNoire":   1
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/dellistenoire';
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'num'           =>  '33601020304',
    'delListeNoire' =>  1
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->tel)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'tel: '.$repetat->tel;
    echo $sautligne;
    echo 'listeNoire: '.$repetat->listeNoire;
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/dellistenoire'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'num':          '33601020304',
    'delListeNoire':1
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('tel'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'tel: '+repetat['tel']
    print 'listeNoire: '+repetat['listeNoire']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/dellistenoire";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      "33601020304");
        paramsTablo.put("delListeNoire", "1");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("tel")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("tel: "+repetat.get("tel"));
                System.out.println("listeNoire: "+repetat.get("listeNoire"));    
            }

        } finally {
            con.disconnect();
        }
    }
}


Récupération de la liste noire

Récupération de la liste des numéros de téléphone en liste noire dans un fichier .csv

Appel

https://apirest.isendpro.com/cgi-bin/getlistenoire
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
getListeNoire Number Oui Utiliser la valeur 1

Réponse

La réponse est un fichier CSV zippé avec une seule colonne contenant le numéro de téléphone

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/getlistenoire' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":           "a296464ce012b8ab710a",
   "getListeNoire":   1
}' \
-o listenoire.zip
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();
$zipName = 'listenoire.zip';
$zipDirectory = '/VOTRE_REPERTOIRE/';
$fp = fopen($zipDirectory.$zipName, 'w');

$url = 'https://apirest.isendpro.com/cgi-bin/getlistenoire';
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'getListeNoire' =>  1
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
curl_setopt($ch, CURLOPT_FILE, $fp);

$response = curl_exec($ch);
fwrite($fp, $response);

curl_close($ch);
fclose($fp);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html

// Unzip du fichier
$za = new ZipArchive(); 
$za->open($zipDirectory.$zipName); 
for( $i = 0; $i < $za->numFiles; $i++ ){ 
    $stat = $za->statIndex( $i ); 
    $fileName = basename($stat['name']);
    print_r($fileName.PHP_EOL);     
    $za->extractTo($zipDirectory);
    $za->close();    
    // Lecture du fichier csv dans le zip
    $fn = fopen($fileName, 'r');    
    // Liste des titres de colonnes
    $titres = fgetcsv($fn, 1000, ';');
    while (($data = fgetcsv($fn, 1000, ';')) !== FALSE){
        foreach($data as $i => $d){
            if($d){
                // Affichage des donnees de la ligne
                echo $titres[$i].' => '.$d.PHP_EOL;
            }            
        }
        // Saut de ligne
        echo PHP_EOL;
    }   
    // Suppression du fichier .csv
    unlink($zipDirectory.$fileName);
}
// Suppression du fichier .zip
unlink($zipDirectory.$zipName);
?>
####################################################################################
#- Envoi requete
####################################################################################
import shutil
import requests
import zipfile
import os

zipName = 'listenoire.zip'
zipDirectory = '/VOTRE_REPERTOIRE/'

url = 'https://apirest.isendpro.com/cgi-bin/getlistenoire'
params = {
    'keyid':            'a296464ce012b8ab710a',
    'getListeNoire':    1
}

response = requests.post(url, params, stream=True)
with open(zipDirectory+zipName, 'wb') as f:
    response.raw.decode_content = True
    shutil.copyfileobj(response.raw, f) 

####################################################################################
#- Traitement du retour
####################################################################################
myzipfile = zipfile.ZipFile(zipDirectory+zipName)
for fileName in myzipfile.namelist():
    # Unzip du fichier vers zipDirectory
    with zipfile.ZipFile(zipDirectory+zipName, 'r') as zip_ref:
        zip_ref.extractall(zipDirectory)    
    # Lecture du fichier csv dans le zip
    fichier = open(zipDirectory+fileName)   
    lines = fichier.readlines()    
    firstLine=1
    for line in lines:
        line=line.strip()   
        line=line.split(';')    
        if firstLine:
            # Liste des titres de colonnes
            firstLine=0
            titres=line
        else:
            i=0
            for data in line:
                if data:
                    # Affichage des donnees de la ligne
                    print titres[i]+' => '+data
                    i+=1 

    # Suppression du fichier .csv
    os.remove(zipDirectory+fileName)

# Suppression du fichier .zip
os.remove(zipDirectory+zipName)        
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.io.BufferedReader;
import java.io.FileReader;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;
    /**
     * Size of the buffer to read/write data
     */
    private static final int BUFFER_SIZE = 4096;    

    public static void main(String[] args) throws IOException {

        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/getlistenoire";
        
        var zipName = "listenoire.zip";
        var zipDirectory = "/VOTRE_REPERTOIRE/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("getListeNoire",    "1");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            File myzipfile = new File(zipDirectory+zipName);
            OutputStream outStream = new FileOutputStream(myzipfile);
            InputStream inputStream = con.getInputStream();
            int read;
            byte[] bytes = new byte[1024];
            while ((read = inputStream.read(bytes)) != -1) {
                outStream.write(bytes, 0, read);
            }  
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////            
            File destDir = new File(zipDirectory);

            ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipDirectory+zipName));
            ZipEntry entry = zipIn.getNextEntry();
            // iterates over entries in the zip file
            while (entry != null) {
                File mycsvfile = new File(zipDirectory+entry.getName());
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(zipDirectory+entry.getName()));
                byte[] bytesIn = new byte[BUFFER_SIZE];
                int read2 = 0;
                while ((read2 = zipIn.read(bytesIn)) != -1) {
                    bos.write(bytesIn, 0, read2);
                }
                bos.close();              
                        
                BufferedReader reader;
                String lineD;
                String data;  		
                ArrayList<String> titres=new ArrayList<String>();
                reader = new BufferedReader(new FileReader(zipDirectory+entry.getName()));
                String line = reader.readLine();
                // Liste des titres de colonnes
                if (line != null) {	
                    lineD = line.trim();
                    titres=new ArrayList<String>(Arrays.asList(lineD.split(";")));    
                }
                while (line != null) {				
                    line = reader.readLine();
                    if (line != null) {	
                        lineD = line.trim();
                        ArrayList<String> lineList = new ArrayList<String>(Arrays.asList(lineD.split(";")));                  
                        for (int i = 0; i < lineList.size(); i++) {
                            data = (String)lineList.get(i);            
                            data = data.trim();
                            System.out.println(titres.get(i)+" => "+data);
                        }
                        System.out.println(" ");
                    }
                }
                reader.close(); 
                // Suppression du fichier .csv
                mycsvfile.delete();

                zipIn.closeEntry();
                entry = zipIn.getNextEntry();            
            }
            zipIn.close();
            // Suppression du fichier .zip
            myzipfile.delete();            
            
        } finally {
            con.disconnect();
        }
    }  
}


Création d'un nouveau répertoire

Création d'un nouveau répertoire de numéros de téléphone

Appel

https://apirest.isendpro.com/cgi-bin/repertoire
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
repertoireNom String Oui Nom du nouveau répertoire
repertoireEdit String Oui Utiliser la valeur 'create'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
repertoireId String Identifiant du répertoire créé
message String Libellé correspondant au tableau des erreurs
{
    "etat":{
        "etat":[
            {
                "code":         "100",
                "repertoireId": "39258",
                "message":      "Votre repertoire a ete cree!"
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/repertoire' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":           "a296464ce012b8ab710a",
   "repertoireNom":   "MonNouveauRepertoire",
   "repertoireEdit":  "create"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/repertoire';
$params = array(
    'keyid'             =>  'a296464ce012b8ab710a',
    'repertoireNom'     =>  'MonNouveauRepertoire',
    'repertoireEdit'    =>  'create'
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->repertoireId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'RepertoireId: '.$repetat->repertoireId;
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/repertoire'
params = {
    'keyid':            'a296464ce012b8ab710a',
    'repertoireNom':    'repertoireNom',
    'repertoireEdit':   'create'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('repertoireId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'RepertoireId: '+repetat['repertoireId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/repertoire";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("repertoireNom",    "repertoireNom");
        paramsTablo.put("repertoireEdit",   "create");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("repertoireId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message")); 
                System.out.println("repertoireId: "+repetat.get("repertoireId"));    
            }

        } finally {
            con.disconnect();
        }
    }
}


Ajout dans un répertoire

Ajout de numéros de téléphone dans un répertoire

Appel

https://apirest.isendpro.com/cgi-bin/repertoire
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num Array Oui Liste des numéros de téléphone à ajouter
Au format international sans le +
Ex: [ "33601020304", "33601020305", "33601020306" ]
repertoireId String Oui Identifiant du répertoire à modifier
repertoireEdit String Oui Utiliser la valeur 'add'
champ[X] Array Non Liste des données à associer au champ pour chaque numéro
[X] est à remplacer par un entier entre 1 et 27 inclus
Par défaut:
  • champ1 <=> Nom
  • champ2 <=> Champ A
  • champ27 <=> Champ Z
La position dans la liste des champs doit correspondre à celle du numéro de téléphone dans la liste des téléphones

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
repertoireId Number Identifiant du répertoire créé
tel String Numéro de téléphone associé au code retour
message String Libellé correspondant au tableau des erreurs
{
    "etat":{
        "etat":[
            {
                "code":         "103",
                "repertoireId": "39258",
                "tel":          "33601020304",
                "message":      "Votre donnee a ete ajoutee dans le repertoire!"
            },
            {
                "code":         "103",
                "repertoireId": "39258",
                "tel":          "33601020305",
                "message":      "Votre donnee a ete ajoutee dans le repertoire!"
            }            
        ]
    }
}
{
    "etat":{
        "etat":[
            {
                "code":         "105",
                "repertoireId": "39258",
                "tel":          "33601020304",
                "message":      "La donnee est deja presente dans le repertoire!"
            },
            {
                "code":         "105",
                "repertoireId": "39258",
                "tel":          "33601020305",
                "message":      "La donnee est deja presente dans le repertoire!"
            }            
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/repertoire' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":           "a296464ce012b8ab710a",
   "repertoireEdit":  "add",
   "repertoireId":    "39258",
   "num":             ["33601020304","33601020305","33601020306"],
   "champ1":          ["Pierre","Paul","Jacques"],
   "champ2":          ["Paris","Lyon","Marseille"]
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/repertoire';
$params = array(
    'keyid'             =>  'a296464ce012b8ab710a',
    'repertoireEdit'    =>  'add',
    'repertoireId'      =>  '39258',
    'num'               =>  ['33601020304','33601020305','33601020306'],
    'champ1'            =>  ['Pierre','Paul','Jacques'],
    'champ2'            =>  ['Paris','Lyon','Marseille']
);
$params = json_encode($params);     
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params,    
    CURLOPT_HTTPHEADER => array(                                                                          
        'Content-Type' => 'application/json',                                                                                
        'Content-Length: ' =>  strlen($params)                                                                       
    )
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetatList=$reponsejson->etat->etat;
if(!is_array($repetatList)){
    $repetatList=array($repetatList);
}

$cpt=1;
foreach($repetatList as $repetat){
    echo '-----------';
    echo $sautligne;
    echo 'Data '.$cpt;
    echo $sautligne;
    // Erreur generale
    if (!isset($repetat->tel)){
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;
    // Infos sur le numero
    }else{
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;    
        echo 'Tel: '.$repetat->tel;
        echo $sautligne;
        echo 'RepertoireId: '.$repetat->repertoireId;
        echo $sautligne;
    }
    $cpt+=1;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import types

url = 'https://apirest.isendpro.com/cgi-bin/repertoire'
params = {
    'keyid':            'a296464ce012b8ab710a',
    'repertoireEdit':   'add',
    'repertoireId':     '39258',
    'num':              ['33601020304','33601020305','33601020306'],
    'champ1':           ['Pierre','Paul','Jacques'],
    'champ2':           ['Paris','Lyon','Marseille']
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetatList=reponsejson['etat']['etat']
if not type(repetatList) is types.ListType:
    repetatList=[repetatList]

cpt=1
for repetat in repetatList:
    print '-----------'    
    print 'Data '+str(cpt)    
    # Erreur generale
    if not repetat.has_key('tel'):
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        
    # Infos sur le numero
    else:
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        print 'Tel: '+repetat['tel']
        print 'RepertoireId: '+repetat['repertoireId']
        
    cpt+=1
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/repertoire";

        ArrayList<String> listData = new ArrayList<String>();
        listData.add("33601020304");
        listData.add("33601020305");
        listData.add("33601020306");        

        ArrayList<String> listChamp1 = new ArrayList<String>();
        listChamp1.add("Pierre");
        listChamp1.add("Paul");
        listChamp1.add("Jacques");  

        ArrayList<String> listChamp2 = new ArrayList<String>();
        listChamp2.add("Paris");
        listChamp2.add("Lyon");
        listChamp2.add("Marseille");  
        
        Map<String, Object> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("repertoireEdit",   "add");
        paramsTablo.put("repertoireId",     "39258");
        paramsTablo.put("num",              listData);
        paramsTablo.put("champ1",           listChamp1);
        paramsTablo.put("champ2",           listChamp2);    
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            ArrayList repetatList = (ArrayList)repetat.get("etat");
            if(! (repetatList instanceof ArrayList)){
                repetatList.add(repetatList);                
            }            
            
            for (int i = 0; i < repetatList.size(); i++) {
                repetat = (Map)repetatList.get(i);
                
                System.out.println("-----------");
                System.out.println("Data "+i);                
                // Erreur generale
                if (! repetat.containsKey("tel")){           
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));    
                // Erreur specifique au numero de telephone 
                }else{
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));                  
                    System.out.println("tel: "+repetat.get("tel"));
                    System.out.println("RepertoireId: "+repetat.get("RepertoireId"));     
                }
            }
        } finally {
            con.disconnect();
        }
    }
}


Suppression dans un répertoire

Suppression de numéros de téléphone d'un répertoire

Appel

https://apirest.isendpro.com/cgi-bin/repertoire
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num Array Oui Liste des numéros de téléphone à ajouter
Au format international sans le +
Ex: [ "33601020304", "33601020305", "33601020306" ]
repertoireId String Oui Identifiant du répertoire à modifier
repertoireEdit String Oui Utiliser la valeur 'del'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
repertoireId Number Identifiant du répertoire créé
tel String Numéro de téléphone associé au code retour
message String Libellé correspondant au tableau des erreurs
{
    "etat":{
        "etat":[
            {
                "code":         "106",
                "repertoireId": "39258",
                "tel":          "33601020304",
                "message":      "Votre donnee a ete supprimee du repertoire"
            },
            {
                "code":         "106",
                "repertoireId": "39258",
                "tel":          "33601020305",
                "message":      "Votre donnee a ete supprimee du repertoire"
            }            
        ]
    }
}
{
    "etat":{
        "etat":[
            {
                "code":         "107",
                "repertoireId": "39258",
                "tel":          "33601020304",
                "message":      "La donnee n'est pas presente dans le repertoire!"
            },
            {
                "code":         "107",
                "repertoireId": "39258",
                "tel":          "33601020305",
                "message":      "La donnee n'est pas presente dans le repertoire!"
            }            
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/repertoire' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":           "a296464ce012b8ab710a",
   "repertoireEdit":  "del",
   "repertoireId":    "39258",
   "num":             ["33601020304","33601020305","33601020306"]
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/repertoire';
$params = array(
    'keyid'             =>  'a296464ce012b8ab710a',
    'repertoireEdit'    =>  'del',
    'repertoireId'      =>  '39258',
    'num'               =>  ['33601020304','33601020305','33601020306']
);
$params = json_encode($params);     
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params,    
    CURLOPT_HTTPHEADER => array(                                                                          
        'Content-Type' => 'application/json',                                                                                
        'Content-Length: ' =>  strlen($params)                                                                       
    )
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetatList=$reponsejson->etat->etat;
if(!is_array($repetatList)){
    $repetatList=array($repetatList);
}

$cpt=1;
foreach($repetatList as $repetat){
    echo '-----------';
    echo $sautligne;
    echo 'Data '.$cpt;
    echo $sautligne;
    // Erreur generale
    if (!isset($repetat->tel)){
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;
    // Infos sur le numero
    }else{
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;    
        echo 'Tel: '.$repetat->tel;
        echo $sautligne;
        echo 'RepertoireId: '.$repetat->repertoireId;
        echo $sautligne;
    }
    $cpt+=1;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import types

url = 'https://apirest.isendpro.com/cgi-bin/repertoire'
params = {
    'keyid':            'a296464ce012b8ab710a',
    'repertoireEdit':   'del',
    'repertoireId':     '39258',
    'num':              ['33601020304','33601020305','33601020306']
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetatList=reponsejson['etat']['etat']
if not type(repetatList) is types.ListType:
    repetatList=[repetatList]

cpt=1
for repetat in repetatList:
    print '-----------'    
    print 'Data '+str(cpt)    
    # Erreur generale
    if not repetat.has_key('tel'):
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        
    # Infos sur le numero
    else:
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        print 'Tel: '+repetat['tel']
        print 'RepertoireId: '+repetat['repertoireId']
        
    cpt+=1
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/repertoire";

        ArrayList<String> listData = new ArrayList<String>();
        listData.add("33601020304");
        listData.add("33601020305");
        listData.add("33601020306");        
        
        Map<String, Object> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("repertoireEdit",   "del");
        paramsTablo.put("repertoireId",     "39258");
        paramsTablo.put("num",              listData);
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            ArrayList repetatList = (ArrayList)repetat.get("etat");
            if(! (repetatList instanceof ArrayList)){
                repetatList.add(repetatList);                
            }            
            
            for (int i = 0; i < repetatList.size(); i++) {
                repetat = (Map)repetatList.get(i);
                
                System.out.println("-----------");
                System.out.println("Data "+i);                
                // Erreur generale
                if (! repetat.containsKey("tel")){           
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));    
                // Erreur specifique au numero de telephone 
                }else{
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));                  
                    System.out.println("tel: "+repetat.get("tel"));
                    System.out.println("RepertoireId: "+repetat.get("RepertoireId"));     
                }
            }
        } finally {
            con.disconnect();
        }
    }
}


Webhook des accusés de réception

Présentation de la structure de renvoi des accusés de réception sur une url donnée

Appel

Le client devra développer une page Web qui traitera les données reçues.
Contraintes
  • Page accessible sans système d'authentification
  • Page accessible en direct sans aucune redirection
  • Définir le lien sur votre espace client Mon compte -> Mon API -> AR des SMS
  • Afficher la chaine de caractères 'validation' en réponse à l'appel
Remarque: Si la réponse 'validation' n'est pas obtenue, 3 autres tentatives d'envois de la notification seront effectuées à 30 minutes d'intervalle.

L'API ajoutera automatiquement la liste des arguments lors de l'appel à votre url.
Il ne faut donc pas les saisir sur votre espace client

Votre url devra etre de la forme
www.votre_adresse.com/votre_page_web
L'API appellera alors
www.votre_adresse.com/votre_page_web?tel=[TEL]&libelle=[LIBELLE]&statut=[STATUT]&code_erreur=[CODE_ERREUR]&date=[DATE]&heure=[HEURE]&id=[ID]&operateur=[OPERATEUR]&tracker=[TRACKER]
Paramètre Type Obligatoire Détails
tel String Oui Numéro de téléphone du destinataire
Au format 06XXXXXXXX ou 07XXXXXXXX pour la France métropolitaine
Au format international sans le + pour les autres pays
Ex: 0601020304 ou 32101020304
libelle String Oui Libellé sur le statut de l'accusé de réception
statut Number Oui Statut du message
  • 0 -> ok
  • 2 -> erreur
Code erreur String Oui Code associé à l'accusé de réception (cf Annexes)
date Date au format
AAAA-MM-JJ
Oui La date de réception de l'accusé
heure Date au format
HH:MM:SS
Oui L'heure de réception de l'accusé
id Number Oui Identifiant unique de l'accusé
operateur String Oui Chaine de caracteres indiquant la valeur de l'opérateur (cf Annexes)
tracker String Oui Argument éventuellement fourni lors de l'envoi pour une identification simplifiée

Réponse

Vous devez répondre la chaine de caractères 'validation'
Remarque: Si la réponse 'validation' n'est pas obtenue, 2 autres tentatives d'envois de la notification seront effectuées à un jour d'intervalle à 02h00 du matin.
validation


Webhook des réponses

Les réponses correspondent au SMS que le destinataire va (éventuellement) répondre à votre envoi.

Remarque:
  • En cas de changement d'émetteur, le destinataire ne pourra pas répondre directement à votre envoi
  • Pour le reste du monde, merci de vous rapprocher de votre chargé de clientèle

Ci-dessous la liste des opérateur qui supportent la fonctionnalité de réponse en France.
Opérateur Réponse
Orange Oui
SFR Oui
Bouygues Oui
Free Oui
NRJ Oui
Coriolis Oui
Syma Oui
Truphone Oui
OnOff Oui
Lebara Oui
Lyca Non
Legos Non
Transatel Non

Présentation de la structure de renvoi des réponses sur une url donnée

Appel

Le client devra développer une page Web qui traitera les données reçues.
Contraintes
  • Page accessible sans système d'authentification
  • Page accessible en direct sans aucune redirection
  • Définir le lien sur votre espace client Mon compte -> Mon API -> Réponses SMS
  • Afficher la chaine de caractères 'validation' en réponse à l'appel
Remarque: Si la réponse 'validation' n'est pas obtenue, 3 autres tentatives d'envois de la notification seront effectuées à 30 minutes d'intervalle.

L'API ajoutera automatiquement la liste des arguments lors de l'appel à votre url.
Il ne faut donc pas les saisir sur votre espace client

Votre url devra etre de la forme
www.votre_adresse.com/votre_page_web
L'API appellera alors
www.votre_adresse.com/votre_page_web?tel=[TEL]&id_retour=[ID_RETOUR]&msg_sms=[MSG_SMS]&tracker=[TRACKER]
Paramètre Type Obligatoire Détails
tel String Oui Numéro de téléphone du destinataire
Au format 06XXXXXXXX ou 07XXXXXXXX pour la France métropolitaine
Au format international sans le + pour les autres pays
Ex: 0601020304 ou 32101020304
id_retour Number Oui Identifiant unique de l'accusé
msg_sms String Oui Réponse envoyée par le destinataire
tracker String Oui Argument éventuellement fourni lors de l'envoi pour une identification simplifiée
indicatif_pays Number Oui Indicatif du pays du numéro
datetime Datetime Oui Horodatage de réception de la réponse sur notre plateforme au format AAAA-MM-JJ HH:MM:SS

Réponse

Vous devez répondre la chaine de caractères 'validation'
validation


Création d'un sous compte

Création d'un nouveau sous compte pour un compte maitre

Appel

https://apirest.isendpro.com/cgi-bin/subaccount
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountLogin String Oui Identifiant de connexion pour le nouveau sous compte
subAccountPassword String Oui Mot de passe de connexion pour le nouveau sous compte
subAccountEdit String Oui Utiliser la valeur 'addAccount'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountLogin String Identifiant de connexion pour le nouveau sous compte
subAccountId String Id pour le nouveau sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le nouveau sous compte
{
    "etat": {
        "etat": [
            {
                "code":             "230",
                "message":          "Le sous compte a ete ajoute",
                "subAccountLogin":  "subaccount2018",
                "subAccountId":     "20474",
                "subAccountKeyId":  "ber296464ce018ab710a"
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":               "a296464ce012b8ab710a",
   "subAccountLogin":     "MonIdentifiant",
   "subAccountPassword":  "MonMotdpasse",
   "subAccountEdit":      "addAccount"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'             =>  'a296464ce012b8ab710a',
    'subAccountLogin'   =>  'MonIdentifiant',
    'subAccountPassword'=>  'MonMotdpasse',
    'subAccountEdit'    =>  'addAccount'
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->subAccountLogin)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountLogin: '.$repetat->subAccountLogin;
    if (isset($repetat->subAccountId)){
        echo $sautligne;
        echo 'subAccountId: '.$repetat->subAccountId;
    }
    if (isset($repetat->subAccountKeyId)){
        echo $sautligne;
        echo 'subAccountKeyId: '.$repetat->subAccountKeyId;
    }
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid':                'a296464ce012b8ab710a',
    'subAccountLogin':      'MonIdentifiant',
    'subAccountPassword':   'MonMotdpasse',
    'subAccountEdit':       'addAccount'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('subAccountLogin'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountLogin: '+repetat['subAccountLogin']
    if repetat.has_key('subAccountId'):
        print 'subAccountId: '+repetat['subAccountId']    
    if repetat.has_key('subAccountKeyId'):
        print 'subAccountKeyId: '+repetat['subAccountKeyId']   
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                "a296464ce012b8ab710a");
        paramsTablo.put("subAccountLogin",      "MonIdentifiantJava");
        paramsTablo.put("subAccountPassword",   "MonMotdpasse");
        paramsTablo.put("subAccountEdit",       "addAccount");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("subAccountLogin")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message")); 
                System.out.println("subAccountLogin: "+repetat.get("subAccountLogin"));    
                if (repetat.containsKey("subAccountId")){
                    System.out.println("subAccountId: "+repetat.get("subAccountId"));   
                }
                if (repetat.containsKey("subAccountKeyId")){
                    System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));   
                }                
            }

        } finally {
            con.disconnect();
        }
    }
}


Définition du prix du SMS d'un sous compte

Définition du prix du SMS d'un sous compte en euros HT

Appel

https://apirest.isendpro.com/cgi-bin/subaccount
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountPrice String Oui Valeur du prix unitaire en euro HT pour 1 SMS
Le séparateur de centimes est le point (.)
Ex: 0.044
subAccountCountryCode String Oui Indicatif international du pays associé au prix sans le +
Ex: 39 pour Italie ou 32 pour Belgique
subAccountEdit String Oui Utiliser la valeur 'setPrice'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour le nouveau sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le nouveau sous compte
{
    "etat": {
        "etat": [
            {
                "code":                 "241",
                "message":              "Le prix a ete mis a jour",
                "subAccountId":         "20474",
                "subAccountKeyId":      "ber296464ce018ab710a",
                "subAccountCountryCode":"39"
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "234",
                "message":              "Aucun sous compte avec ces identifiants",
                "subAccountKeyId":      "ber296464ce018ab710a",                      
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                   "a296464ce012b8ab710a",
   "subAccountKeyId":         "ber296464ce018ab710a",
   "subAccountPrice":         "0.068",
   "subAccountCountryCode":   "39",
   "subAccountEdit":          "setPrice"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'subAccountKeyId'       =>  'ber296464ce018ab710a',
    'subAccountPrice'       =>  '0.068',
    'subAccountCountryCode' =>  '39',
    'subAccountEdit'        =>  'setPrice'
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountKeyId: '.$repetat->subAccountKeyId;
    if (isset($repetat->subAccountId)){
        echo $sautligne;
        echo 'subAccountId: '.$repetat->subAccountId;
    }
    if (isset($repetat->subAccountCountryCode)){
        echo $sautligne;
        echo 'subAccountCountryCode: '.$repetat->subAccountCountryCode;
    }    
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid'                 :  'a296464ce012b8ab710a',
    'subAccountKeyId'       :  'ber296464ce018ab710a',
    'subAccountPrice'       :  '0.068',
    'subAccountCountryCode' :  '39',
    'subAccountEdit'        :  'setPrice'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountKeyId: '+repetat['subAccountKeyId'] 
    if repetat.has_key('subAccountId'):
        print 'subAccountId: '+repetat['subAccountId']    
    if repetat.has_key('subAccountCountryCode'):
        print 'subAccountCountryCode: '+repetat['subAccountCountryCode']  
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountPrice",          "0.068");
        paramsTablo.put("subAccountCountryCode",    "39");
        paramsTablo.put("subAccountEdit",           "setPrice");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                if (repetat.containsKey("subAccountId")){
                    System.out.println("subAccountId: "+repetat.get("subAccountId"));   
                }
                if (repetat.containsKey("subAccountKeyId")){
                    System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));   
                }                
            }

        } finally {
            con.disconnect();
        }
    }
}


Récupération du prix du SMS d'un sous compte

Récupération du prix du SMS d'un sous compte en euros HT

Appel

https://apirest.isendpro.com/cgi-bin/subaccount
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountCountryCode String Oui Indicatif international du pays associé au prix sans le +
Ex: 39 pour Italie ou 32 pour Belgique
subAccountEdit String Oui Utiliser la valeur 'getPrice'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour le sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le sous compte
subAccountCountryCode String Indicatif international du pays associé au prix sans le +
subAccountPrice String Prix unitaire en euros HT avec le point (.) comme séparateur des centimes
{
    "etat": {
        "etat": [
            {
                "code":                 "251",
                "message":              "Le prix unitaire",
                "subAccountId":         "20474",
                "subAccountKeyId":      "ber296464ce018ab710a",
                "subAccountCountryCode":"344",
                "subAccountPrice":      "0.049"    
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                   "a296464ce012b8ab710a",
   "subAccountKeyId":         "ber296464ce018ab710a",
   "subAccountCountryCode":   "39",
   "subAccountEdit":          "getPrice"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'subAccountKeyId'       =>  'ber296464ce018ab710a',
    'subAccountCountryCode' =>  '39',
    'subAccountEdit'        =>  'getPrice'
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountKeyId: '.$repetat->subAccountKeyId;
    if (isset($repetat->subAccountId)){
        echo $sautligne;
        echo 'subAccountId: '.$repetat->subAccountId;
    }
    if (isset($repetat->subAccountCountryCode)){
        echo $sautligne;
        echo 'subAccountCountryCode: '.$repetat->subAccountCountryCode;
    }    
    if (isset($repetat->subAccountPrice)){
        echo $sautligne;
        echo 'subAccountPrice: '.$repetat->subAccountPrice;
    }        
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid'                 :  'a296464ce012b8ab710a',
    'subAccountKeyId'       :  'ber296464ce018ab710a',
    'subAccountCountryCode' :  '39',
    'subAccountEdit'        :  'getPrice'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountKeyId: '+repetat['subAccountKeyId'] 
    if repetat.has_key('subAccountId'):
        print 'subAccountId: '+repetat['subAccountId']    
    if repetat.has_key('subAccountCountryCode'):
        print 'subAccountCountryCode: '+repetat['subAccountCountryCode']    
    if repetat.has_key('subAccountPrice'):
        print 'subAccountPrice: '+repetat['subAccountPrice']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountCountryCode",    "39");
        paramsTablo.put("subAccountEdit",           "getPrice");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                if (repetat.containsKey("subAccountId")){
                    System.out.println("subAccountId: "+repetat.get("subAccountId"));   
                }
                if (repetat.containsKey("subAccountCountryCode")){
                    System.out.println("subAccountCountryCode: "+repetat.get("subAccountCountryCode"));   
                }        
                if (repetat.containsKey("subAccountPrice")){
                    System.out.println("subAccountPrice: "+repetat.get("subAccountPrice"));   
                }                  
            }

        } finally {
            con.disconnect();
        }
    }
}


Augmenter le crédit SMS d'un sous compte

Augmenter le crédit SMS d'un sous compte

Appel

https://apirest.isendpro.com/cgi-bin/subaccount
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountAddCredit Number Oui Montant en euros HT à ajouter
Le séparateur de centimes est le point (.)
Ex: 150.0
subAccountEdit String Oui Utiliser la valeur 'addCredit'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour le nouveau sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le nouveau sous compte
{
    "etat": {
        "etat": [
            {
                "code":             "239",
                "message":          "Le credit a ete ajoute au sous compte",
                "subAccountId":     "20474",
                "subAccountKeyId":  "ber296464ce018ab710a"                
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "234",
                "message":              "Aucun sous compte avec ces identifiants",
                "subAccountKeyId":      "ber296464ce018ab710a",                    
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                   "a296464ce012b8ab710a",
   "subAccountKeyId":         "ber296464ce018ab710a",
   "subAccountAddCredit":     "150",
   "subAccountEdit":          "addCredit"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'subAccountKeyId'       =>  'ber296464ce018ab710a',
    'subAccountAddCredit'   =>  '150',
    'subAccountEdit'        =>  'addCredit'
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountId: '.$repetat->subAccountKeyId;
    echo $sautligne;
    echo 'subAccountKeyId: '.$repetat->subAccountId;
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid':                'a296464ce012b8ab710a',
    'subAccountKeyId':      'ber296464ce018ab710a',
    'subAccountAddCredit':  '150',
    'subAccountEdit':       'addCredit'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountId: '+repetat['subAccountId']    
    print 'subAccountKeyId: '+repetat['subAccountKeyId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",      "ber296464ce018ab710a");
        paramsTablo.put("subAccountAddCredit",  "150");
        paramsTablo.put("subAccountEdit",       "addCredit");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("subAccountId: "+repetat.get("subAccountId"));   
                System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));   
            }

        } finally {
            con.disconnect();
        }
    }
}


Modifier l'encours SMS d'un sous compte

Modifier l'encours SMS d'un sous compte

Appel

https://apirest.isendpro.com/cgi-bin/subaccount
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountOutstanding Number Oui Nouveau montant en euros HT de l'encours
subAccountEdit String Oui Utiliser la valeur 'setOutstanding'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour le nouveau sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le nouveau sous compte
{
    "etat": {
        "etat": [
            {
                "code":             "252",
                "message":          "L encours a ete defini pour le sous compte",
                "subAccountId":     "20474",
                "subAccountKeyId":  "ber296464ce018ab710a"                
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "234",
                "message":              "Aucun sous compte avec ces identifiants",
                "subAccountKeyId":      "ber296464ce018ab710a"                     
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                   "a296464ce012b8ab710a",
   "subAccountKeyId":         "ber296464ce018ab710a",
   "subAccountOutstanding":   "150",
   "subAccountEdit":          "setOutstanding"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'subAccountKeyId'       =>  'ber296464ce018ab710a',
    'subAccountOutstanding' =>  '150',
    'subAccountEdit'        =>  'setOutstanding'
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountId: '.$repetat->subAccountKeyId;    
    echo $sautligne;
    echo 'subAccountKeyId: '.$repetat->subAccountId;
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid'                 :  'a296464ce012b8ab710a',
    'subAccountKeyId'       :  'ber296464ce018ab710a',
    'subAccountOutstanding' :  '150',
    'subAccountEdit'        :  'setOutstanding'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountId: '+repetat['subAccountId']    
    print 'subAccountKeyId: '+repetat['subAccountKeyId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountOutstanding",    "150");
        paramsTablo.put("subAccountEdit",           "setOutstanding");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("subAccountId: "+repetat.get("subAccountId"));   
                System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));   
            }

        } finally {
            con.disconnect();
        }
    }
}


Consulter l'encours SMS d'un sous compte

Consulter l'encours SMS d'un sous compte

Appel

https://apirest.isendpro.com/cgi-bin/subaccount
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountEdit String Oui Utiliser la valeur 'getOutstanding'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour le nouveau sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le nouveau sous compte
subAccountOutstanding String Montant de l'encours en euros HT
{
    "etat": {
        "etat": [
            {
                "code":                     "254",
                "message":                  "L encours",
                "subAccountId":             "20474",
                "subAccountKeyId":          "ber296464ce018ab710a",
                "subAccountOutstanding":    "150"                                
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "234",
                "message":              "Aucun sous compte avec ces identifiants",
                "subAccountKeyId":      "ber296464ce018ab710a"    
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                   "a296464ce012b8ab710a",
   "subAccountKeyId":         "ber296464ce018ab710a",
   "subAccountEdit":          "getOutstanding"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'subAccountKeyId'       =>  'ber296464ce018ab710a',
    'subAccountEdit'        =>  'getOutstanding'
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountKeyId: '.$repetat->subAccountKeyId;
    echo $sautligne;
    }      
    if (isset($repetat->subAccountOutstanding)){
        echo $sautligne;
        echo 'subAccountOutstanding: '.$repetat->subAccountOutstanding;
    }      
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid'                 :  'a296464ce012b8ab710a',
    'subAccountKeyId'       :  'ber296464ce018ab710a',
    'subAccountEdit'        :  'getOutstanding'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountKeyId: '+repetat['subAccountKeyId']
    if repetat.has_key('subAccountOutstanding'):
        print 'subAccountOutstanding: '+repetat['subAccountOutstanding']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",  "ber296464ce018ab710a");
        paramsTablo.put("subAccountEdit",   "getOutstanding");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));
                if (repetat.containsKey("subAccountOutstanding")){
                    System.out.println("subAccountOutstanding: "+repetat.get("subAccountOutstanding"));
                }                
            }

        } finally {
            con.disconnect();
        }
    }
}


Gestion de la restriction STOP SMS d'un sous compte

Gestion de la restriction STOP SMS d'un sous compte

Appel

https://apirest.isendpro.com/cgi-bin/subaccount
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountRestrictionStop Number Oui Activation ou désactivation de la restriction STOP SMS
  • 0: Désactivée
  • 1: Activée
subAccountEdit String Oui Utiliser la valeur 'setRestriction'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour le nouveau sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le nouveau sous compte
{
    "etat": {
        "etat": [
            {
                "code":             "244",
                "message":          "La restriction STOP a ete desactivee",
                "subAccountId":     "20474",
                "subAccountKeyId":  "ber296464ce018ab710a"                
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "234",
                "message":              "Aucun sous compte avec ces identifiants",
                "subAccountKeyId":      "ber296464ce018ab710a"     
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                       "a296464ce012b8ab710a",
   "subAccountKeyId":             "ber296464ce018ab710a",
   "subAccountRestrictionStop":   "0",
   "subAccountEdit":              "setRestriction"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                     =>  'a296464ce012b8ab710a',
    'subAccountKeyId'           =>  'ber296464ce018ab710a',
    'subAccountRestrictionStop' =>  '0',
    'subAccountEdit'            =>  'setRestriction'
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountId: '.$repetat->subAccountKeyId;    
    echo $sautligne;
    echo 'subAccountKeyId: '.$repetat->subAccountId;
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid'                     :  'a296464ce012b8ab710a',
    'subAccountKeyId'           :  'ber296464ce018ab710a',
    'subAccountRestrictionStop' :  '0',
    'subAccountEdit'            :  'setRestriction'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountId: '+repetat['subAccountId']
    print 'subAccountKeyId: '+repetat['subAccountKeyId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountRestrictionStop","0");
        paramsTablo.put("subAccountEdit",           "setRestriction");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("subAccountId: "+repetat.get("subAccountId"));
                System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));
            }

        } finally {
            con.disconnect();
        }
    }
}


Gestion de la restriction horaire d'un sous compte

Gestion de la restriction horaire d'un sous compte

Appel

https://apirest.isendpro.com/cgi-bin/subaccount
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountRestrictionTime Number Oui Activation ou désactivation de la restriction horaire
  • 0: Désactivée
  • 1: Activée
subAccountEdit String Oui Utiliser la valeur 'setRestriction'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id du sous compte
subAccountKeyId String Clé d'identification (KeyId) du sous compte
{
    "etat": {
        "etat": [
            {
                "code":             "246",
                "message":          "La restriction horaire a ete desactivee",
                "subAccountId":     "20474",
                "subAccountKeyId":  "ber296464ce018ab710a"                
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "234",
                "message":              "Aucun sous compte avec ces identifiants",
                "subAccountKeyId":      "ber296464ce018ab710a"    
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                       "a296464ce012b8ab710a",
   "subAccountKeyId":             "ber296464ce018ab710a",
   "subAccountRestrictionTime":   "0",
   "subAccountEdit":              "setRestriction"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                     =>  'a296464ce012b8ab710a',
    'subAccountKeyId'           =>  'ber296464ce018ab710a',
    'subAccountRestrictionTime' =>  '0',
    'subAccountEdit'            =>  'setRestriction'
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountId: '.$repetat->subAccountKeyId;    
    echo $sautligne;
    echo 'subAccountKeyId: '.$repetat->subAccountId;
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid'                     :  'a296464a296464ce012b8ab710ae012b8ab710a',
    'subAccountKeyId'           :  'ber296464ce018ab710a',
    'subAccountRestrictionTime' :  '0',
    'subAccountEdit'            :  'setRestriction'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountId: '+repetat['subAccountId']
    print 'subAccountKeyId: '+repetat['subAccountKeyId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountRestrictionTime","0");
        paramsTablo.put("subAccountEdit",           "setRestriction");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("subAccountId: "+repetat.get("subAccountId"));
                System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));
            }

        } finally {
            con.disconnect();
        }
    }
}


Gestion des autorisations des indicatifs internationaux des numéros de mobiles d'un sous compte

Gestion des autorisations des indicatifs internationaux d'un sous compte

Appel

https://apirest.isendpro.com/cgi-bin/subaccount
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountCountryAccess Number Oui Gestion des autorisations
  • -1: Autoriser tous les pays
  •  1: Autoriser les pays de la liste (Liste blanche)
  •  0: Bloquer les pays de la liste (Liste noire)

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour du sous compte
{
    "etat": {
        "etat": [
            {
                "code":             "265",
                "message":          "Tous les pays sont autorises",
                "subAccountId":     "20474"           
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "264",
                "message":              "Vous devez saisir une valeur valide pour subAccountCountryAccess: -1, 0 ou 1",
                "subAccountId":     "20474"      
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                       "a296464ce012b8ab710a",
   "subAccountKeyId":             "ber296464ce018ab710a",
   "subAccountEdit":              "setCountryList",
   "subAccountRestrictionStop":   "1"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                     =>  'a296464ce012b8ab710a',
    'subAccountKeyId'           =>  'ber296464ce018ab710a',
    'subAccountEdit'            =>  'setCountryList',
    'subAccountCountryAccess'   =>  '1'
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;   
    echo $sautligne;
    echo 'subAccountKeyId: '.$repetat->subAccountId;
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid'                     :  'a296464ce012b8ab710a',
    'subAccountKeyId'           :  'ber296464ce018ab710a',
    'subAccountEdit'            :  'setCountryList',    
    'subAccountCountryAccess'   :  '1'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountId: '+repetat['subAccountId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountEdit",           "setCountryList");        
        paramsTablo.put("subAccountCountryAccess",  "1");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("subAccountId: "+repetat.get("subAccountId"));
            }

        } finally {
            con.disconnect();
        }
    }
}


Gestion des listes des indicatifs internationaux des numéros de mobiles d'un sous compte

Gestion des listes des indicatifs internationaux d'un sous compte

Appel

https://apirest.isendpro.com/cgi-bin/subaccount
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountCountryFunction String Oui Type de modification
  • 'add': Ajout d'un indicatif à la liste
  • 'del': Suppression d'un indicatif à la liste
subAccountCountryType String Oui Type de liste
  • 0: Liste noire
  • 1: Liste blanche
subAccountCountryCode String Oui Indicatif international du pays associé au prix sans le +
Ex: 39 pour Italie ou 32 pour Belgique

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour du sous compte
subAccountCountryCode Number Indicatif international du pays
{
    "etat": {
        "etat": [
            {
                "code":                     "272",
                "message":                  "Le pays est ajoute en liste noire",
                "subAccountId":             "20474",
                "subAccountCountryCode":    "32",
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                     "275",
                "message":                  "Ajout impossible, aucun pays correspondant",
                "subAccountId":             "20474",
                "subAccountCountryCode":    "320",   
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                       "a296464ce012b8ab710a",
   "subAccountKeyId":             "ber296464ce018ab710a",
   "subAccountEdit":              "setCountryList",
   "subAccountCountryFunction":   "add",
   "subAccountCountryType":       "1",
   "subAccountCountryCode":       "32"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                     =>  'a296464ce012b8ab710a',
    'subAccountKeyId'           =>  'ber296464ce018ab710a',
    'subAccountEdit'            =>  'setCountryList',
    'subAccountCountryFunction' =>  'add',
    'subAccountCountryType'     =>  '1',
    'subAccountCountryCode'     =>  '32'    
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;   
    echo $sautligne;
    echo 'subAccountKeyId: '.$repetat->subAccountId;
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid'                     :  'a296464ce012b8ab710a',
    'subAccountKeyId'           :  'ber296464ce018ab710a',
    'subAccountEdit'            :  'setCountryList',    
    'subAccountCountryFunction' :  'add',  
    'subAccountCountryType'     :  '1',      
    'subAccountCountryCode'     :  '32'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountId: '+repetat['subAccountId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountEdit",           "setCountryList");        
        paramsTablo.put("subAccountCountryFunction",    "add"); 
        paramsTablo.put("subAccountCountryType",    "1");         
        paramsTablo.put("subAccountCountryCode",    "32");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("subAccountId: "+repetat.get("subAccountId"));
            }

        } finally {
            con.disconnect();
        }
    }
}


Modification du webhook de retour des AR pour un sous-compte

Modifier l'url de webhook de retour des AR pour un sous-compte vers laquelle les accusés de réception opérateurs seront envoyés

Appel

https://apirest.isendpro.com/cgi-bin/subaccount
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountAdresseRetour String Oui Adresse de retour vers lequel sera envoyé les accusés de réception
Ex: https://monurlderetour.php
subAccountEdit String Oui Utiliser la valeur 'setAdresseRetour'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id du sous compte
subAccountKeyId String Clé d'identification (KeyId) du sous compte
{
    "etat": {
        "etat": [
            {
                "code":             "258",
                "message":          "L url de retour a ete defini pour le sous compte",
                "subAccountId":     "20474",
                "subAccountKeyId":  "ber296464ce018ab710a"                
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "257",
                "message":              "Vous devez renseigner une url de retour valide",
                "subAccountKeyId":      "ber296464ce018ab710a"
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                       "a296464ce012b8ab710a",
   "subAccountKeyId":             "ber296464ce018ab710a",
   "subAccountAdresseRetour":     "https://monurlderetour.php",
   "subAccountEdit":              "setAdresseRetour"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                     =>  'a296464ce012b8ab710a',
    'subAccountKeyId'           =>  'ber296464ce018ab710a',
    'subAccountAdresseRetour'   =>  'https://monurlderetour.php',
    'subAccountEdit'            =>  'setAdresseRetour'
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;
////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountId: '.$repetat->subAccountKeyId;    
    echo $sautligne;
    echo 'subAccountKeyId: '.$repetat->subAccountId;
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid'                     :  'a296464ce012b8ab710a',
    'subAccountKeyId'           :  'ber296464ce018ab710a',
    'subAccountAdresseRetour'   :  'https://monurlderetour.php',
    'subAccountEdit'            :  'setAdresseRetour'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountId: '+repetat['subAccountId']
    print 'subAccountKeyId: '+repetat['subAccountKeyId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountAdresseRetour",  "https://monurlderetour.php");
        paramsTablo.put("subAccountEdit",           "setAdresseRetour");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("subAccountId: "+repetat.get("subAccountId"));
                System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));
            }

        } finally {
            con.disconnect();
        }
    }
}


Modification du webhook des réponses pour un sous-compte

Modifier l'url de webhook des réponses pour un sous-compte vers laquelle les réponses SMS seront envoyées

Appel

https://apirest.isendpro.com/cgi-bin/subaccount
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountAdresseSMSretour String Oui Adresse de retour vers lequel sera envoyé les réponses
Ex: https://monurlderetour.php
subAccountEdit String Oui Utiliser la valeur 'setAdresseSMSretour'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour le nouveau sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le nouveau sous compte
{
    "etat": {
        "etat": [
            {
                "code":             "256",
                "message":          "L url de retour SMS a ete defini pour le sous compte",
                "subAccountId":     "20474",
                "subAccountKeyId":  "ber296464ce018ab710a"                
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "255",
                "message":              "Vous devez renseigner une url de retour SMS valide",
                "subAccountKeyId":      "ber296464ce018ab710a"
            }
        ]
    }
}

Exemples de scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                       "a296464ce012b8ab710a",
   "subAccountKeyId":             "ber296464ce018ab710a",
   "subAccountAdresseSMSretour":  "https://monurlderetour.php",
   "subAccountEdit":              "setAdresseSMSretour"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                     =>  'a296464ce012b8ab710a',
    'subAccountKeyId'           =>  'ber296464ce018ab710a',
    'subAccountAdresseSMSretour'=>  'https://monurlderetour.php',
    'subAccountEdit'            =>  'setAdresseSMSretour'
);
$params = json_encode($params);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;
////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// Erreur generale
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountId: '.$repetat->subAccountKeyId;
    echo $sautligne;
    echo 'subAccountKeyId: '.$repetat->subAccountId;
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid':                        'a296464ce012b8ab710a',
    'subAccountKeyId':              'ber296464ce018ab710a',
    'subAccountAdresseSMSretour':   'https://monurlderetour.php',
    'subAccountEdit':               'setAdresseSMSretour'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# Erreur generale
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountId: '+repetat['subAccountId']
    print 'subAccountKeyId: '+repetat['subAccountKeyId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://apirest.isendpro.com/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                        "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",              "ber296464ce018ab710a");
        paramsTablo.put("subAccountAdresseSMSretour",   "https://monurlderetour.php");
        paramsTablo.put("subAccountEdit",               "setAdresseSMSretour");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // Erreur generale
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("subAccountId: "+repetat.get("subAccountId"));
                System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));
            }

        } finally {
            con.disconnect();
        }
    }
}


Codes opérateurs en France

Tableau des opérateurs en France métropolitaine
Code Opérateur
ORAN Orange
SFR SFR
BOUY Bouygues Telecom
FREE FREE Mobile
NRJ NRJ Mobile
LYCA LYCA Mobile
MUND Mundio Mobile
CORI Coriolis Telecom
LBRA Lebara
TRAT Transatel
COMP Completel
LEGO Legos
MOQU Mobiquithings
TRUP Truphone
SMAA Syma Mobile
AIRM Airtel


Codes erreurs API

Tableau des codes erreurs retournés par l'API
Code erreur Message
0 Votre message a bien ete envoye
1 The login is empty
2 The password is empty
3 Your credentials are incorrect
4 Vous devez saisir un message!
5 Le message ne doit pas depasser XXX caracteres!
6 Vous devez saisir un numero de telephone valide!
7 Un numero de telephone est sur 10 chiffres!
9 La route que vous avez saisie n'existe pas!
10 Vous n'avez pas les droits necessaires pour utiliser cette route!
11 Le numero de telephone est dans la liste noire!
12 Votre credit de MT est epuise!
13 La route Lowcost est down!
14 L'adresse IP n'est pas autorisee!
15 Vous devez indiquer un canal d'envoi!
16 L'emetteur ne peut pas etre vide!
17 L'emetteur doit etre sur plus de 3 caracteres et sur 11 caracteres maximum!
18 L'emetteur ne peut pas comporter que des chiffres!
19 Si un emetteur est indique, le message ne doit pas depasser 149 caracteres afin de pouvoir ajouter le texte 'STOP XXXXX'
20 L'emetteur ne peut pas etre modifie sur le canal LowCost!
21 Le numero de telephone n'est pas attribue!
22 Le numero de telephone est attribue a un Full MVNO
23 Le nombre maximum de telephones par requete est de 500
24 Pas d'envoi commercial entre 20h et 08h, ni les jours feries
25 Il est obligatoire d'indiquer le cout vers les numeros en 0899. Ex: Pour plus de renseignements appelez le 0899 XX XX XX (1E35/apl+0.34E/min)
26 Il est obligatoire d'indiquer le cout vers les numeros en 0892. Ex: Pour plus de renseignements appelez le 0892 XX XX XX (0.34E/min)
27 L'indicatif pays du telephone n'est pas autorise!
28 Votre credit de qualification est epuise!
29 Nous ne pouvons donner suite a votre demande (overflow)
30 Erreur sur le domaine de connexion
31 Le message ne doit pas depasser XXX caracteres!
32 Le message est sur XXX SMS (XXX caracteres) alors que la demande est sur XXX SMS
33 Cet emetteur n'est pas autorise!
34 La valeur de smslong doit etre un entier!
35 Votre credit de HLR est epuise!
36 Vous n'etes pas autorise a retirer le STOP SMS!
37 Les numeros de telephone ne sont pas tous a destination du meme pays!
38 Le message ne doit pas depasser XXX caracteres!
39 Le message ne doit pas depasser XXX caracteres!
40 Le format de message ucs2 n'est pas autorise pour les numeros en France metropolitaine!
41 Vous n'etes pas autorise aux requetes HLR!
42 L'emetteur ne peut pas comporter de caracteres speciaux!
43 La date d'envoi n'est pas au bon format (AAAA-MM-JJ HH:MM)!
44 La zone GMT n'existe pas!
45 L'emetteur ne peut pas contenir 5 chiffres consecutifs!
100 Votre repertoire a ete cree!
101 Vous devez saisir un nom de repertoire!
102 Votre identifiant de repertoire ne correspond a aucune donnee!
103 Votre donnee a ete ajoutee dans le repertoire!
104 Ce repertoire ne peut pas etre modifie car une campagne est programme dessus!
105 La donnee est deja presente dans le repertoire!
106 Votre donnee a ete supprimee du repertoire
107 La donnee n'est pas presente dans le repertoire!
108 Cet identifiant ne correspond a aucun repertoire!
201 Vous devez saisir une date de debut de selection!
202 Vous devez saisir une date de fin de selection!
203 La date de debut de selection n'est pas au bon format (AAAA-MM-JJ HH:MM)!
204 La date de fin de selection n'est pas au bon format (AAAA-MM-JJ HH:MM)!
205 La selection depasse 200 000 donnees! Merci de la reduire!
206 La selection ne correspond a aucune donnee!
207 Historique des envois
210 Le mot cle a ete ajoute
211 Le mot cle a ete supprime
212 Liste des mot cles pour ce compte
213 Le mot cle n'est pas disponible
214 Le mot cle n'existe pas pour ce compte
215 Aucun mot cle pour ce compte
216 Le mot cle ne doit contenir ni espace, ni caractere speciaux
217 Le mot cle doit etre entre 3 et 20 caracteres
220 L emetteur a ete ajoute
221 L emetteur a ete supprime
222 Liste des emetteurs pour ce compte
223 L emetteur n'est pas disponible
224 L emetteur n'existe pas pour ce compte
225 Aucun emetteur pour ce compte
230 Le sous compte a ete ajoute
231 Vous devez saisir un identifiant/login pour la creation du sous compte
232 Vous devez saisir un mot de passe pour la creation du sous compte
233 Un sous compte existe deja avec cet identifiant
234 Aucun sous compte avec ces identifiants
235 Vous devez renseigner l indicatif du pays associe au prix
236 Vous devez renseigner un prix
237 Le prix a ete cree
238 Vous devez renseigner le montant du credit a ajouter
239 Le credit a ete ajoute au sous compte
240 La commande saisie ne correspond a aucune fonctionnalite
241 Le prix a ete mis a jour
242 Vous devez saisir la cle d identifcation du sous compte
243 Un sous compte ne peut pas avoir de sous compte
244 La restriction STOP a ete desactivee
245 La restriction STOP a ete activee
246 La restriction horaire a ete desactivee
247 La restriction horaire a ete activee
248 Les donnees de restriction ne sont pas correctes
250 Le lien court a ete genere
251 Le prix unitaire
252 L encours a ete defini pour le sous compte
253 Vous devez renseigner un encours positif
254 L encours
255 Vous devez renseigner une url de retour SMS valide
256 L url de retour SMS a ete defini pour le sous compte
257 Vous devez renseigner une url de retour valide
258 L url de retour a ete defini pour le sous compte
259 Le mot de passe du sous compte n est pas conforme! Minimum de 10 caracteres, une minuscule, une majuscule, un chiffre et un caractere special
260 Le quota max de requete rapportCampagne a ete depasse
261 Le quota max de requete shortlink a ete depasse
262 Suppression des campagnes effectue
263 Vous devez saisir un tracker
264 Vous devez saisir une valeur valide pour subAccountCountryAccess: -1, 0 ou 1
265 Tous les pays sont autorises
266 Tous les pays en liste noire sont bloques
267 Tous les pays en liste blanche sont autorises
268 Vous devez saisir une valeur valide pour subAccountCountryFunction: add ou del
269 Vous devez saisir une valeur valide pour subAccountCountryType: 0 ou 1
270 Suppression impossible, aucun pays correspondant
271 Le pays est ajoute en liste blanche
272 Le pays est ajoute en liste noire
273 Le pays est supprime de la blanche
274 Le pays est supprime de la noire
275 Ajout impossible, aucun pays correspondant
777 Le service est en maintenance.
900 keyId is valid
901 keyId is not valid
998 L encodage du message est incorrect
999 Une erreur est survenue. Merci de contacter le service technique


Table GSM des caractères autorisés

Attention: les crochets ouvrants [ et fermant ] et le symbole Euro comptent pour 2 caractères
Caractère Signification Caractère Signification
LF Line Feed (saut de ligne) CR Carriage Return (retour chariot)
SP Espace (Space en anglais) ! Point d'exclamation
" Guillemet droit # Croisillon et parfois Dièse ou (aussi dénommé signe numéro 8)
% Pourcent & Esperluette
Apostrophe (guillemet fermant simple ou accent aigu) ( Parenthèse ouvrante
) Parenthèse fermante * Astérisque
+ Plus , Virgule
- Moins (aussi dénommé tiret8 ou trait d'union13) . Point
/ Barre oblique (Slash en anglais) 0 Le chiffre zéro
1 Le chiffre un 2 Le chiffre deux
3 Le chiffre trois 4 Le chiffre quatre
5 Le chiffre cinq 6 Le chiffre six
7 Le chiffre sept 8 Le chiffre huit
9 Le chiffre neuf : Deux-points
; Point-virgule < Inférieur
= Égal > Supérieur
? Point d'interrogation @ Arobace (aussi dénommé Arobase ou A commercial8)
A B
C D
E F
G H
I J
K L
M N
O P
Q R
S T
U V
W X
Y Z
[ Crochet ouvrant ] Crochet fermant
_ trait bas 8 aussi dénommé Tiret bas, ou souligné (underscore en anglais) a
b c
d e
f g
h i
j k
l m
n o
p q
r s
t u
v w
x y
z à
è é
ù Euro


Table GSM des caractères remplacés

Caractère Remplacé par Caractère Remplacé par
À A Á A
 A à A
Ä A Å A
È E É E
Ë E Ì I
Í I Î I
Ï I Ò O
Ó O Ô O
Õ O Ö O
Ù U Ú U
Û U Ü U
á a â a
ã a ä a
å a ç c
ê e ë e
ì i í i
î i ï i
ð o ñ n
ò o ó o
ô o õ o
ö o ù u
ú u û u
ü u ý y
ÿ y


Table d'encodage des caractères spéciaux

Caractère Encodage Caractère Encodage
Espace %20 $ %24
& %26 + %2B
, %2C / %2F
: %3A ; %3B
? %3D @ %40
Ê ou %ca Saut de ligne Õ ou %d5


Librairie PHP de conversion des caractères GSM



Tableau des zones GMT

Zone GMT Correspondance Zone GMT Correspondance
Pacific/Midway (GMT-11:00) Midway Island, Samoa America/Adak (GMT-10:00) Hawaii-Aleutian
Etc/GMT+10 (GMT-10:00) Hawaii Pacific/Marquesas (GMT-09:30) Marquesas Islands
Pacific/Gambier (GMT-09:00) Gambier Islands America/Anchorage (GMT-09:00) Alaska
America/Ensenada (GMT-08:00) Tijuana, Baja California Etc/GMT+8 (GMT-08:00) Pitcairn Islands
America/Los_Angeles (GMT-08:00) Pacific Time (US & Canada) America/Denver (GMT-07:00) Mountain Time (US & Canada)
America/Chihuahua (GMT-07:00) Chihuahua, La Paz, Mazatlan America/Dawson_Creek (GMT-07:00) Arizona
America/Belize (GMT-06:00) Saskatchewan, Central America America/Cancun (GMT-06:00) Guadalajara, Mexico City, Monterrey
Chile/EasterIsland (GMT-06:00) Easter Island America/Chicago (GMT-06:00) Central Time (US & Canada)
America/New_York (GMT-05:00) Eastern Time (US & Canada) America/Havana (GMT-05:00) Cuba
America/Bogota (GMT-05:00) Bogota, Lima, Quito, Rio Branco America/Caracas (GMT-04:30) Caracas
America/Santiago (GMT-04:00) Santiago America/La_Paz (GMT-04:00) La Paz
Atlantic/Stanley (GMT-04:00) Faukland Islands America/Campo_Grande (GMT-04:00) Brazil
America/Goose_Bay (GMT-04:00) Atlantic Time (Goose Bay) America/Glace_Bay (GMT-04:00) Atlantic Time (Canada)
America/St_Johns (GMT-03:30) Newfoundland America/Araguaina (GMT-03:00) UTC-3
America/Montevideo (GMT-03:00) Montevideo America/Miquelon (GMT-03:00) Miquelon, St. Pierre
America/Godthab (GMT-03:00) Greenland America/Argentina/Buenos_Aires (GMT-03:00) Buenos Aires
America/Sao_Paulo (GMT-03:00) Brasilia America/Noronha (GMT-02:00) Mid-Atlantic
Atlantic/Cape_Verde (GMT-01:00) Cape Verde Is. Atlantic/Azores (GMT-01:00) Azores
Europe/Belfast (GMT) Greenwich Mean Time : Belfast Europe/Dublin (GMT) Greenwich Mean Time : Dublin
Europe/Lisbon (GMT) Greenwich Mean Time : Lisbon Europe/London (GMT) Greenwich Mean Time : London
Africa/Abidjan (GMT) Monrovia, Reykjavik Europe/Amsterdam (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
Europe/Belgrade (GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague Europe/Brussels (GMT+01:00) Brussels, Copenhagen, Madrid, Paris
Africa/Algiers (GMT+01:00) West Central Africa Africa/Windhoek (GMT+01:00) Windhoek
Asia/Beirut (GMT+02:00) Beirut Africa/Cairo (GMT+02:00) Cairo
Asia/Gaza (GMT+02:00) Gaza Africa/Blantyre (GMT+02:00) Harare, Pretoria
Asia/Jerusalem (GMT+02:00) Jerusalem Europe/Minsk (GMT+02:00) Minsk
Asia/Damascus (GMT+02:00) Syria Europe/Moscow (GMT+03:00) Moscow, St. Petersburg, Volgograd
Africa/Addis_Ababa (GMT+03:00) Nairobi Asia/Tehran (GMT+03:30) Tehran
Asia/Dubai (GMT+04:00) Abu Dhabi, Muscat Asia/Yerevan (GMT+04:00) Yerevan
Asia/Kabul (GMT+04:30) Kabul Asia/Yekaterinburg (GMT+05:00) Ekaterinburg
Asia/Tashkent (GMT+05:00) Tashkent Asia/Kolkata (GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi
Asia/Katmandu (GMT+05:45) Kathmandu Asia/Dhaka (GMT+06:00) Astana, Dhaka
Asia/Novosibirsk (GMT+06:00) Novosibirsk Asia/Rangoon (GMT+06:30) Yangon (Rangoon)
Asia/Bangkok (GMT+07:00) Bangkok, Hanoi, Jakarta Asia/Krasnoyarsk (GMT+07:00) Krasnoyarsk
Asia/Hong_Kong (GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi Asia/Irkutsk (GMT+08:00) Irkutsk, Ulaan Bataar
Australia/Perth (GMT+08:00) Perth Australia/Eucla (GMT+08:45) Eucla
Asia/Tokyo (GMT+09:00) Osaka, Sapporo, Tokyo Asia/Seoul (GMT+09:00) Seoul
Asia/Yakutsk (GMT+09:00) Yakutsk Australia/Adelaide (GMT+09:30) Adelaide
Australia/Darwin (GMT+09:30) Darwin Australia/Brisbane (GMT+10:00) Brisbane
Australia/Hobart (GMT+10:00) Hobart Asia/Vladivostok (GMT+10:00) Vladivostok
Australia/Lord_Howe (GMT+10:30) Lord Howe Island Etc/GMT-11 (GMT+11:00) Solomon Is., New Caledonia
Asia/Magadan (GMT+11:00) Magadan Pacific/Norfolk (GMT+11:30) Norfolk Island
Asia/Anadyr (GMT+12:00) Anadyr, Kamchatka Pacific/Auckland (GMT+12:00) Auckland, Wellington
Etc/GMT-12 (GMT+12:00) Fiji, Kamchatka, Marshall Is. Pacific/Chatham (GMT+12:45) Chatham Islands
Pacific/Tongatapu (GMT+13:00) Nuku'alofa Pacific/Kiritimati (GMT+14:00) Kiritimati


Codes des AR Orange et SFR

Tableau des codes des accusés de réception retournés par les opérateurs Orange et SFR
Code Message Code Message
000 Service temporairement indisponible 002 Service temporairement indisponible
003 Service temporairement indisponible 004 Service temporairement indisponible
005 Service temporairement indisponible 006 Service temporairement indisponible
007 Service temporairement indisponible 008 Service temporairement indisponible
009 Code d'erreur illégal 010 Expiration de la temporisation du réseau
100 Fonctionnalité non supportée 101 Abonné inconnu
102 Fonctionnalité non offerte 103 Appel bloqué
104 Opération bloquée 105 Surcharge du SMS-C
106 Fonctionnalité non supportée 107 Abonné absent
108 Echec de remise 109 Surcharge su SMS-C
110 Erreur de protocole 111 Mobile non équipé
112 SMS-C inconnu 113 Surcharge du SMS-C
114 Mobile illégal 115 Mobile pas abonné
116 Erreur dans le mobile 117 Couche basse SMS non provisionnée
118 Echec du système 119 Erreur système du PLMN
120 Erreur système du HLR 121 Erreur du système du VLR
122 Erreur du système du VLR précédent 123 Erreur du système du MSC de contrôle
124 Erreur du système du VMC 125 Erreur du système du EIR
126 Erreur système 127 Valeur inattendue
200 Erreur dans l'adresse du SMS-C 201 Période de validité absolue non valide
202 Message court trop long 203 Impossible de lire le message GSM
204 Impossible de convertir en alphabet IA5 206 Format de période de validité invalide
207 Message dupliqué 208 Indicateur de type de message (MT) invalide


Codes des AR NRJ

Tableau des codes des accusés de réception retournés par les opérateurs
Code Message Description
1 ACK Message is delivered to destination
0 ERROR Message is undeliverable


Codes des AR FREE, BOUYGUES, autres opérateurs français et internationaux

Tableau des codes des accusés de réception retournés par les opérateurs FREE Mobile, Bouygues telecom et les autres opérateurs français et internationaux
Code Message Description
1 ENROUTE The message is in enroute state
2 DELIVERED Message is delivered to destination
3 EXPIRED Message validity period has expired
4 DELETED Message has been deleted
5 UNDELIVERABLE Message is undeliverable
6 ACCEPTED Message is in accepted state (i.e. has been manually read on behalf of the subscriber by customer service)
7 UNKNOWN Message is in an invalid state
8 REJECTED Message is in a rejected state

API MAIL2SMS iSendPro Telecom

Prérequis

Munissez vous de votre keyid

Votre keyid (clé d'identification) est visible sur votre espace client dans Mon compte -> Mon api
Cette clé vous identifie et vous devrez l'utiliser pour effectuer toutes vos requêtes via l'API

Restrictions horaires

L’envoi de SMS commerciaux est formellement interdit entre 20h00 et 8h00 les jours calendaires. Ces restrictions contractuelles avec les opérateurs sont édictées par l’AFMM et ne sont pas spécifiques à notre site.
Vous pouvez soit programmer votre envoi pour plus tard, soit nous demander de lever cette restriction si vos envois ne sont pas à destination commerciale (système d’alerte, de notification de prise de rendez-vous par exemple) en envoyant un email à contact@isendpro.com

Configurer le contrôle des domaines

Un contrôle des domaines emails, basé sur un système de type «liste blanche» est activé par défaut.
Vous pouvez soit renseigner cette liste blanche, soit désactiver le contrôle.
Ce paramètrage peut s'effectuer sur Mon compte -> Mon api

Liste noire

Une liste des numéros de téléphone vers lesquels les messages ne sont pas envoyés est gérée.
Les numéros de téléphone y sont ajoutés à la demande des opérateurs ou de nos partenaires.
Tous les messages envoyés vers des clients en liste noire ne sont pas routés.
Dans ce cas, le code erreur 11 est retourné par la requête.

Remarques et bonnes pratiques

Logs

Nous vous recommandons de logguer (avec horodatage) vos appels à l'API ainsi que les réponses de cette dernière.

Traitement des retours

Certains retours vous remontent des problèmes sans déclencher d'erreur HTTP (ni exception dans les wrappers)..
Par un exemple si vous soumettez des envois à une liste de numéros de téléphone dont certains sont mal formatés, vous aurez un code HTTP 200 mais avec des code retour indiquant ce problème

Traitement des accusés de réception

Nous vous recommandons de mettre en place une URL de traitement des retours des accusés de réception.

Contact

Vous pouvez contacter le support technique à l'adresse suivante: support@isendpro.com

Important: Merci de préciser dans votre mail votre identifiant client
Si la question concerne la remise d'un appel, merci de rajouter les infos suivantes :
  • Numéro de téléphone (MSISDN)
  • Message
  • Date et heure d'envoi

Le support technique est joignable tous les jours de la semaine de 09h à 13h et de 14h à 17h au 04 83 66 05 10

Utilisation API

  • L’email doit être envoyé à sendsms@isendpro-api.com
  • L’e-mail attendu doit contenir des données formatées type XML dans le corps du message de la forme.
  • Les emails doivent être envoyés au format text brut sans aucune mise en forme, sinon l’email ne sera pas traité
  • <envoi>
        <keyid>[CLE_IDENTIFICATION]</keyid>
        <num>[NUMERO_MOBILE]</num>
        <sms>[MESSAGE]</sms>
        <emailId>[ID_UNIQUE]</emailId>
    </envoi>
  • L’argument emailId permet d’identifier de manière unique une demande d’envoi par email
  • Si 2 emails sont reçus avec le même emailId, alors le 2nd ne sera pas traité et un message d’erreur sera remonté sur l’adresse email indiquée dans emailAck

Destinataires:
  • A la place de fournir les numéros de téléphone dans le corps de l’email, il est possible de fournir ces données dans des fichiers en pièces jointes au format .csv
  • Le fichier contenant les numéros de mobiles doit être nommé mobiles.csv
  • Chaque ligne va contenir un numéro de téléphone et éventuellement des données dynamiques supplémentaires séparées par ';;'
  • La structure étant de la forme :
[num];;[1];;[2];;[3]
Exemple sans données dynamiques:
33601020304
Les arguments [sms] et [num] ne doivent plus être renseignés dans le corps du message.

Remarques:
  • Le saut de ligne doit être remplacé par le caractère Õ
  • Si l’adresse email de l’expéditeur n’a pas été autorisée, les envois ne seront pas effectués
  • La clé d’identification est disponible sur votre votre espace client dans Mon compte -> Mon api


Envoi de message unitaire

Envoi d'un SMS à 1 seul destinataire par requete
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
emailId Number Oui identifiant unique de l’email
num String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
Ne pas renseigner si fourni dans le fichier mobiles.csv
sms String Oui Message envoyé au destinataire
1 SMS peut contenir jusqu'à 160 caractères
Possibilité d'envoyer des messages plus long (jusqu'à 6 SMS concaténés) pour un total de 918 caractères (6 x 153)
(7 caractères étant réserves pour des entêtes techniques)
Le cout unitaire sera alors multiplié par le nombre de SMS correspondants
Cf Argument smslong
Ne pas renseigner si fourni dans le fichier mobiles.csv
emetteur String Non Emetteur du message
Par défaut, un numéro de fixe sur 10 chiffres
Ex: 0422850268
Contraintes:
  • La modification pour un émetteur ne commencant pas par 01,02,03,04 ou 05, entraine une surtaxe par appel de 0.042 euros HT vers les mobiles et de 0.002 euros HT vers les fixes
  • Suite à une nouvelle réglementation imposée par l'ARCEP depuis le 01/08/2019, chaque modification d'un émetteur doit etre approuvée. Pour toute demande à ce sujet, vous pouvez nous contacter par email sur contact@isendpro.com
  • Un numéro composé de 10 chiffres, ne commençant pas par 08
smslong Number Non Argument indiquant le nombre de SMS concaténés
Si le nombre de SMS exact est connu alors indiquer ce nombre
Si le nombre calculé par l'API diffère alors un message d'erreur sera retourné (code 32)
Pour éviter ce controle et autoriser les messages sur plus de 1 SMS, utiliser la valeur 999
Nombre de SMS concaténés Nombre de caractères SANS
modification émetteur
Nombre de caractères AVEC
modification émetteur
1 160 148
2 306 294
3 459 447
4 612 600
5 765 753
6 918 906
nostop Number Non Argument pour ne pas afficher automatiquement la mention STOP SMS en fin de message
Utiliser la valeur 1
emailNot String Non Adresse email où envoyer les retours détaillés des envois
Ex: not@masociete.com
emailAck String Non Adresse email où envoyer si l’email a bien été traité ou non
Ex: ack@masociete.com
tracker String Non Généré par le client
Renvoyé en paramètre des urls pour les retours des accusés de réception et les retours des sms réponses
Longueur max de 50 caractères
Ex: order-ab78pq9
date_envoi Date au format
YYYY-MM-DD hh:mm
Non Date à laquelle le message sera envoyé
Envoi immédiat si non renseigné
Voici un exemple de contenu d’un e-mail :
<envoi>
    <keyid>a296464ce012b8ab710a</keyid>
    <num>33601020304</num>
    <sms>L’été est finiÕSuper promo -10% à partir de 50€ d’ achat !!!</sms>
    <emetteur>MaSociete</emetteur>
    <emailNot>not@masociete.com</emailNot>
    <emailAck>ack@masociete.com</emailAck>
    <emailId>1548</emailId>
</envoi>


Envoi de messages multiples

Envoi d'un SMS à plusieurs destinataire par requete
Cette solution permet d’envoyer un message jusqu’à 500 destinataires différents par requête, permettant ainsi une augmentation de la vitesse des envois.
Les numéros de téléphone sont placés dans des variables numX où X est un entier allant de 1 à 500 au maximum.
Si le message est identique pour tous les destinataires, il suffit de le renseigner une seule fois dans la variable sms
Si le message est différent pour chaque destinataire alors les messages sont placés dans des variables smsXX est un entier allant de 1 à 500 au maximum.
Dans ce cas le message smsX sera envoyé au destinataire numX.
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
emailId Number Oui identifiant unique de l’email
num[X] String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
Ne pas renseigner si fourni dans le fichier mobiles.csv
sms[X] String Oui Message envoyé au destinataire
1 SMS peut contenir jusqu'à 160 caractères
Possibilité d'envoyer des messages plus long (jusqu'à 6 SMS concaténés) pour un total de 918 caractères (6 x 153)
(7 caractères étant réserves pour des entêtes techniques)
Le cout unitaire sera alors multiplié par le nombre de SMS correspondants
Cf Argument smslong
Ne pas renseigner si fourni dans le fichier mobiles.csv
emetteur String Non Emetteur du message
Par défaut, un numéro de fixe sur 10 chiffres
Ex: 0422850268
Contraintes:
  • La modification pour un émetteur ne commencant pas par 01,02,03,04 ou 05, entraine une surtaxe par appel de 0.042 euros HT vers les mobiles et de 0.002 euros HT vers les fixes
  • Suite à une nouvelle réglementation imposée par l'ARCEP depuis le 01/08/2019, chaque modification d'un émetteur doit etre approuvée. Pour toute demande à ce sujet, vous pouvez nous contacter par email sur contact@isendpro.com
  • Un numéro composé de 10 chiffres, ne commençant pas par 08
smslong Number Non Argument indiquant le nombre de SMS concaténés
Si le nombre de SMS exact est connu alors indiquer ce nombre
Si le nombre calculé par l'API diffère alors un message d'erreur sera retourné (code 32)
Pour éviter ce controle et autoriser les messages sur plus de 1 SMS, utiliser la valeur 999
Nombre de SMS concaténés Nombre de caractères SANS
modification émetteur
Nombre de caractères AVEC
modification émetteur
1 160 148
2 306 294
3 459 447
4 612 600
5 765 753
6 918 906
nostop Number Non Argument pour ne pas afficher automatiquement la mention STOP SMS en fin de message
Utiliser la valeur 1
emailNot String Non Adresse email où envoyer les retours détaillés des envois
Ex: not@masociete.com
emailAck String Non Adresse email où envoyer si l’email a bien été traité ou non
Ex: ack@masociete.com
tracker[X] String Non Généré par le client
Renvoyé en paramètre des urls pour les retours des accusés de réception et les retours des sms réponses
Longueur max de 50 caractères
Ex: order-ab78pq9
date_envoi Date au format
YYYY-MM-DD hh:mm
Non Date à laquelle le message sera envoyé
Envoi immédiat si non renseigné
Voici un exemple de contenu d’un email pour 2 destinataires avec le même message:
<envoi>
    <keyid>a296464ce012b8ab710a</keyid>
    <num1>33601020304</num1>
    <num2>33601020305</num2>
    <sms>L’été est finiÕSuper promo -10% à partir de 50€ d’ achat !!!</sms>
    <emetteur>MaSociete</emetteur>
    <emailNot>not@masociete.com</emailNot>
    <emailAck>ack@masociete.com</emailAck>
    <emailId>1548</emailId>
</envoi>
Voici un exemple de contenu d’un email pour 2 destinataires avec chacun leur message:
<envoi>
    <keyid>a296464ce012b8ab710a</keyid>
    <num1>33601020304</num1>
    <num2>33601020305</num2>
    <sms1>L’été est finiÕSuper promo -10% à partir de 50€ d’ achat !!!</sms1>
    <sms2>L’été est finiÕSuper promo -20% à partir de 100€ d’achat !!!</sms2>
    <emetteur>MaSociete</emetteur>
    <emailNot>not@masociete.com</emailNot>
    <emailAck>ack@masociete.com</emailAck>
    <emailId>1548</emailId>
</envoi>


Réponses par email

Ack

Paramètre Type Détails
emailId Number Identifiant fourni lors de l'envoi afin d'associer la réponse
code Number Code correspondant au tableau des Ack
message String Libellé correspondant au tableau des ack
<?xml version="1.0" encoding="ISO-8859-1"?>
<etatAck>
    <emailId>[emailId]</emailId>
    <code>[codeAck]</code>
    <message>[messageAck]</message>
</etatAck>

Not

Paramètre Type Détails
emailId Number Identifiant fourni lors de l'envoi afin d'associer la réponse
code Number Code correspondant au tableau des Ack
tel String Numéro de téléphone associé au code retour
message String Libellé correspondant au tableau des ack
<?xml version="1.0" encoding="ISO-8859-1"?>
<etatNot>
    <emailId>[emailId]</emailId>
</etatNot>
<etat>
    <code>[code]</code>
    <tel>[tel]</tel>
    <message>[message]</message>
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etatNot>
    <emailId>[emailId]</emailId>
</etatNot>
<etat1>
    <code1>[code]</code1>
    <tel1>[tel]</tel1>
    <message1>[message]</message1>
</etat1>
...
<etatN>
    <codeN>[code]</codeN>
    <telN>[tel]</telN>
    <messageN>[message]</messageN>
</etatN>


Codes Ack

Tableau des codes ack retournées par l'API
Code erreur Message
0 Votre email a bien ete traite
1 emailId deja traite
2 emailId non renseigne


Codes erreurs

Tableau des codes erreurs retournés par l'API
Code erreur Message
0 Votre message a bien ete envoye
1 The login is empty
2 The password is empty
3 Your credentials are incorrect
4 Vous devez saisir un message!
5 Le message ne doit pas depasser XXX caracteres!
6 Vous devez saisir un numero de telephone valide!
7 Un numero de telephone est sur 10 chiffres!
9 La route que vous avez saisie n'existe pas!
10 Vous n'avez pas les droits necessaires pour utiliser cette route!
11 Le numero de telephone est dans la liste noire!
12 Votre credit de MT est epuise!
13 La route Lowcost est down!
14 L'adresse IP n'est pas autorisee!
15 Vous devez indiquer un canal d'envoi!
16 L'emetteur ne peut pas etre vide!
17 L'emetteur doit etre sur plus de 3 caracteres et sur 11 caracteres maximum!
18 L'emetteur ne peut pas comporter que des chiffres!
19 Si un emetteur est indique, le message ne doit pas depasser 149 caracteres afin de pouvoir ajouter le texte 'STOP XXXXX'
20 L'emetteur ne peut pas etre modifie sur le canal LowCost!
21 Le numero de telephone n'est pas attribue!
22 Le numero de telephone est attribue a un Full MVNO
23 Le nombre maximum de telephones par requete est de 500
24 Pas d'envoi commercial entre 20h et 08h, ni les jours feries
25 Il est obligatoire d'indiquer le cout vers les numeros en 0899. Ex: Pour plus de renseignements appelez le 0899 XX XX XX (1E35/apl+0.34E/min)
26 Il est obligatoire d'indiquer le cout vers les numeros en 0892. Ex: Pour plus de renseignements appelez le 0892 XX XX XX (0.34E/min)
27 L'indicatif pays du telephone n'est pas autorise!
28 Votre credit de qualification est epuise!
29 Nous ne pouvons donner suite a votre demande (overflow)
30 Erreur sur le domaine de connexion
31 Le message ne doit pas depasser XXX caracteres!
32 Le message est sur XXX SMS (XXX caracteres) alors que la demande est sur XXX SMS
33 Cet emetteur n'est pas autorise!
34 La valeur de smslong doit etre un entier!
35 Votre credit de HLR est epuise!
36 Vous n'etes pas autorise a retirer le STOP SMS!
37 Les numeros de telephone ne sont pas tous a destination du meme pays!
38 Le message ne doit pas depasser XXX caracteres!
39 Le message ne doit pas depasser XXX caracteres!
40 Le format de message ucs2 n'est pas autorise pour les numeros en France metropolitaine!
41 Vous n'etes pas autorise aux requetes HLR!
42 L'emetteur ne peut pas comporter de caracteres speciaux!
43 La date d'envoi n'est pas au bon format (AAAA-MM-JJ HH:MM)!
44 La zone GMT n'existe pas!
100 Votre repertoire a ete cree!
101 Vous devez saisir un nom de repertoire!
102 Votre identifiant de repertoire ne correspond a aucune donnee!
103 Votre donnee a ete ajoutee dans le repertoire!
104 Ce repertoire ne peut pas etre modifie car une campagne est programme dessus!
105 La donnee est deja presente dans le repertoire!
106 Votre donnee a ete supprimee du repertoire
107 La donnee n'est pas presente dans le repertoire!
108 Cet identifiant ne correspond a aucun repertoire!
201 Vous devez saisir une date de debut de selection!
202 Vous devez saisir une date de fin de selection!
203 La date de debut de selection n'est pas au bon format (AAAA-MM-JJ HH:MM)!
204 La date de fin de selection n'est pas au bon format (AAAA-MM-JJ HH:MM)!
205 La selection depasse 200 000 donnees! Merci de la reduire!
206 La selection ne correspond a aucune donnee!
207 Historique des envois
210 Le mot cle a ete ajoute
211 Le mot cle a ete supprime
212 Liste des mot cles pour ce compte
213 Le mot cle n'est pas disponible
214 Le mot cle n'existe pas pour ce compte
215 Aucun mot cle pour ce compte
216 Le mot cle ne doit contenir ni espace, ni caractere speciaux
217 Le mot cle doit etre entre 3 et 20 caracteres
220 L emetteur a ete ajoute
221 L emetteur a ete supprime
222 Liste des emetteurs pour ce compte
223 L emetteur n'est pas disponible
224 L emetteur n'existe pas pour ce compte
225 Aucun emetteur pour ce compte
230 Le sous compte a ete ajoute
231 Vous devez saisir un identifiant/login pour la creation du sous compte
232 Vous devez saisir un mot de passe pour la creation du sous compte
233 Un sous compte existe deja avec cet identifiant
234 Aucun sous compte avec ces identifiants
235 Vous devez renseigner l indicatif du pays associe au prix
236 Vous devez renseigner un prix
237 Le prix a ete cree
238 Vous devez renseigner le montant du credit a ajouter
239 Le credit a ete ajoute au sous compte
240 La commande saisie ne correspond a aucune fonctionnalite
241 Le prix a ete mis a jour
242 Vous devez saisir la cle d identifcation du sous compte
243 Un sous compte ne peut pas avoir de sous compte
244 La restriction STOP a ete desactivee
245 La restriction STOP a ete activee
246 La restriction horaire a ete desactivee
247 La restriction horaire a ete activee
248 Les donnees de restriction ne sont pas correctes
250 Le lien court a ete genere
251 Le prix unitaire
252 L encours a ete defini pour le sous compte
253 Vous devez renseigner un encours positif
254 L encours
255 Vous devez renseigner une url de retour SMS valide
256 L url de retour SMS a ete defini pour le sous compte
257 Vous devez renseigner une url de retour valide
258 L url de retour a ete defini pour le sous compte
777 Le service est en maintenance.
900 keyId is valid
901 keyId is not valid
998 L encodage du message est incorrect
999 Une erreur est survenue. Merci de contacter le service technique

API Vocal HTTPS iSendPro Telecom

Prérequis

Munissez vous de votre keyid

Votre keyid (clé d'identification) est visible sur votre espace client dans Mon compte -> Mon api
Cette clé vous identifie et vous devrez l'utiliser pour effectuer toutes vos requêtes via l'API

Protocole de chiffrement

Pour les appels en https, il est impératif d'utiliser au minimum la version 1.2 du protocole TLS

Restrictions horaires

L’envoi de messages vocaux commerciaux est formellement interdit entre 20h00 et 8h00 les jours calendaires. Ces restrictions contractuelles avec les opérateurs sont édictées par l’AFMM et ne sont pas spécifiques à notre site.
Vous pouvez soit programmer votre envoi pour plus tard, soit nous demander de lever cette restriction si vos envois ne sont pas à destination commerciale (système d’alerte, de notification de prise de rendez-vous par exemple) en envoyant un email à contact@isendpro.com

Configurer le contrôle IP

Un contrôle IP, basé sur un système de type «liste blanche» est activé par défaut.
Vous pouvez soit renseigner cette liste blanche, soit désactiver le contrôle IP.
Ce paramètrage peut s'effectuer sur Mon compte -> Mon api

Liste noire

Une liste des numéros de téléphone vers lesquels les messages ne sont pas envoyés est gérée.
Les numéros de téléphone y sont ajoutés à la demande des opérateurs ou de nos partenaires.
Tous les messages envoyés vers des clients en liste noire ne sont pas routés.
Dans ce cas, le code erreur 11 est retourné par la requête.

Encodage

  • L’encodage des urls doit être en ISO-8859-15

Remarques et bonnes pratiques

Logs

Nous vous recommandons de logguer (avec horodatage) vos appels à l'API ainsi que les réponses de cette dernière.

Traitement des erreurs

L'API répondra un code HTTP 200 à vos appels..
Si le code d'erreur est différent de 200, une erreur s'est produite et nous vous recommandons d'investiguer le problème, avec l'aide de notre support technique si nécessaire..
Les wrappers lèvent des exceptions en cas d'erreur, exceptions que nous vous recommandons de rattraper.

Traitement des retours

Certains retours vous remontent des problèmes sans déclencher d'erreur HTTP (ni exception dans les wrappers)..
Par un exemple si vous soumettez des envois à une liste de numéros de téléphone dont certains sont mal formatés, vous aurez un code HTTP 200 mais avec des code retour indiquant ce problème

Traitement des accusés de réception

Nous vous recommandons de mettre en place une URL de traitement des retours des accusés de réception

Packages et fonctions pour les scripts

PHP
<?php
/////////////////////////////////////////////////////////
//	Fonction qui transforme un fichier xml en tableau
/////////////////////////////////////////////////////////
function XML2Array($xml, $recursive=true){
    if(!$recursive){
        $array=simplexml_load_string($xml);
    }else{
        $array=$xml;
    }
    $newArray=array();
    $array=(array)$array;
    foreach($array as $key => $value){
        $value=(array)$value;
        if(isset($value[0])){
            $newArray[$key]=trim($value[0]);
        }else{
            $newArray[$key]=XML2Array($value,true);
        }
    }
    return $newArray ;
}

/////////////////////////////////////////////////////////
//	Fonction qui transforme une chaine en donnee xml
/////////////////////////////////////////////////////////
function string2XML($out){
    $xml='';
    $out=explode("\n", $out);
    foreach($out as $line){
        if( strstr($line, '<etat') || strstr($line, '<credit>')) {
            $xml .= trim($line)."\n";
        }
    }
// Ne pas mettre d'indentation sinon cela ne fonctionne plus
$out = <<<XML
$xml
XML;    

    $xml = simplexml_load_string($out);
    return $xml;   
} 
?>
                    
Python
Java
/*
Fonction pour appel url avec multipart
*/

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
 
/**
 * This utility class provides an abstraction layer for sending multipart HTTP
 * POST requests to a web server.
 * @author www.codejava.net
 *
 */
public class MultipartUtility {
    private final String boundary;
    private static final String LINE_FEED = "\r\n";
    private HttpURLConnection httpConn;
    private String charset;
    private OutputStream outputStream;
    private PrintWriter writer;
 
    /**
     * This constructor initializes a new HTTP POST request with content type
     * is set to multipart/form-data
     * @param requestURL
     * @param charset
     * @throws IOException
     */
    public MultipartUtility(String requestURL, String charset)
            throws IOException {
        this.charset = charset;
         
        // creates a unique boundary based on time stamp
        boundary = "===" + System.currentTimeMillis() + "===";
         
        URL url = new URL(requestURL);
        httpConn = (HttpURLConnection) url.openConnection();
        httpConn.setUseCaches(false);
        httpConn.setDoOutput(true); // indicates POST method
        httpConn.setDoInput(true);
        httpConn.setRequestProperty("Content-Type",
                "multipart/form-data; boundary=" + boundary);
        httpConn.setRequestProperty("User-Agent", "CodeJava Agent");
        httpConn.setRequestProperty("Test", "Bonjour");
        outputStream = httpConn.getOutputStream();
        writer = new PrintWriter(new OutputStreamWriter(outputStream, charset),
                true);
    }
 
    /**
     * Adds a form field to the request
     * @param name field name
     * @param value field value
     */
    public void addFormField(String name, String value) {
        writer.append("--" + boundary).append(LINE_FEED);
        writer.append("Content-Disposition: form-data; name=\"" + name + "\"")
                .append(LINE_FEED);
        writer.append("Content-Type: text/plain; charset=" + charset).append(
                LINE_FEED);
        writer.append(LINE_FEED);
        writer.append(value).append(LINE_FEED);
        writer.flush();
    }
 
    /**
     * Adds a upload file section to the request
     * @param fieldName name attribute in <input type="file" name="..." />
     * @param uploadFile a File to be uploaded
     * @throws IOException
     */
    public void addFilePart(String fieldName, File uploadFile)
            throws IOException {
        String fileName = uploadFile.getName();
        writer.append("--" + boundary).append(LINE_FEED);
        writer.append(
                "Content-Disposition: form-data; name=\"" + fieldName
                        + "\"; filename=\"" + fileName + "\"")
                .append(LINE_FEED);
        writer.append(
                "Content-Type: "
                        + URLConnection.guessContentTypeFromName(fileName))
                .append(LINE_FEED);
        writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED);
        writer.append(LINE_FEED);
        writer.flush();
 
        FileInputStream inputStream = new FileInputStream(uploadFile);
        byte[] buffer = new byte[4096];
        int bytesRead = -1;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }
        outputStream.flush();
        inputStream.close();
         
        writer.append(LINE_FEED);
        writer.flush();    
    }
 
    /**
     * Adds a header field to the request.
     * @param name - name of the header field
     * @param value - value of the header field
     */
    public void addHeaderField(String name, String value) {
        writer.append(name + ": " + value).append(LINE_FEED);
        writer.flush();
    }
     
    /**
     * Completes the request and receives response from the server.
     * @return a list of Strings as response in case the server returned
     * status OK, otherwise an exception is thrown.
     * @throws IOException
     */
    public List<String> finish() throws IOException {
        List<String> response = new ArrayList<String>();
 
        writer.append(LINE_FEED).flush();
        writer.append("--" + boundary + "--").append(LINE_FEED);
        writer.close();
 
        // checks servers status code first
        int status = httpConn.getResponseCode();
        if (status == HttpURLConnection.HTTP_OK) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    httpConn.getInputStream()));
            String line = null;
            while ((line = reader.readLine()) != null) {
                response.add(line);
            }
            reader.close();
            httpConn.disconnect();
        } else {
            throw new IOException("Server returned non-OK status: " + status);
        }
 
        return response;
    }
}                    

Contact

Vous pouvez contacter le support technique à l'adresse suivante: support@isendpro.com

Important: Merci de préciser dans votre mail votre identifiant client
Si la question concerne la remise d'un appel, merci de rajouter les infos suivantes :
  • Numéro de téléphone (MSISDN)
  • Message
  • Date et heure d'envoi

Le support technique est joignable tous les jours de la semaine de 09h à 13h et de 14h à 17h au 04 83 66 05 10

Utilisation API

Envoi d’un fichier vocal

Avant d’envoyer une campagne aux destinataires, il faut au préalable nous envoyer le fichier vocal via une requête http
Les fichiers vocaux doivent être au format .wav ou .wma et avoir une durée comprise entre 20 et 50 secondes.
En cas de réussite, un identifiant unique est retourné dans fichierId, il devra être utilisé lors des envois associés à ce fichier, dans le champ fichierId.

Appel

https://www.isendpro.com/cgi-bin/smv.pyl
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
setFichier Number Oui Utiliser la valeur 1
uploadedfile String Oui Chemin vers le fichier en local

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs (cf Annexes)
fichierId Number Identifiant numérique correspondant au fichier vocal importé
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <fichierId>1574</fichierId>
    <message> Le fichier a bien été importé</message>
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>106</code>
    <message> Seuls les fichiers .wma, .wav sont acceptés!</message>
</etat>

Exemples de scripts

curl -v -include \
'https://www.isendpro.com/cgi-bin/smv.pyl' \
-F 'keyid=a296464ce012b8ab710a' \
-F 'setFichier=1' \
-F uploadedfile=@test.wav
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$url = 'https://www.isendpro.com/cgi-bin/smv.pyl';
$ficVocal='/[PATH]/test.wav';
if(function_exists('curl_file_create')) { // php 5.5+
    $cFile = curl_file_create($ficVocal);
}else{
    $cFile = '@' . realpath($ficVocal);
}

$ch = curl_init();
$params = array(
    'keyid'         => 'a296464ce012b8ab710a',
    'setFichier'    => '1',
    'uploadedfile'  => $cFile    
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => array('Content-type: multipart/form-data'),
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html

$xml = string2XML($out);
$repetat = XML2Array($xml);
// Erreur generale
if (!isset($repetat['fichierId'])){
    echo 'Code: '.$repetat['code'];
    echo $sautligne;
    echo 'Message: '.$repetat['message'];
    echo $sautligne;
}else{
    // Envoi OK
    echo 'fichierId: '.$repetat['fichierId'];
    echo $sautligne;
    echo 'Message: '.$repetat['message'];
    echo $sautligne;
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict

url = 'https://www.isendpro.com/cgi-bin/smv.pyl'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'setFichier':   '1'
}
files = {
    'uploadedfile': open('/[PATH]/test.wav', 'rb')
}
response = requests.post(url, params, files=files)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    repetat=repetat['etat']
    # Erreur generale
    if not repetat.has_key('fichierId'):
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
    # Envoi OK
    else:
        print 'fichierId: '+repetat['fichierId']
        print 'Message: '+repetat['message']
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter;  

public class TestDocs {
 
    public static void main(String[] args) {

        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////    
        String charset = "UTF-8";
        File uploadFile1 = new File("test.wav");
        String requestURL = "https://www.isendpro.com/cgi-bin/smv.pyl";
 
        try {
            MultipartUtility multipart = new MultipartUtility(requestURL, charset);
             
            multipart.addHeaderField("User-Agent", "CodeJava");
            multipart.addHeaderField("Test-Header", "Header-Value");

            multipart.addFormField("keyid", "a296464ce012b8ab710a");
            multipart.addFormField("setFichier", "1");
             
            multipart.addFilePart("uploadedfile", uploadFile1);
 
            List<String> response = multipart.finish();             

            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            for (String line : response) {
                System.out.println(line);
                
                try {                    
                    InputSource is = new InputSource(new StringReader(line));
                    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                    Document doc = dBuilder.parse(is);

                    //System.out.println("Root element :" + doc.getDocumentElement().getNodeName());                    
                    if(doc.getDocumentElement().getNodeName()!="etat"){
                        // Erreur inconnue
                        System.out.println("Erreur inconnue: "+line);
                    }else{
                        NodeList nList = doc.getElementsByTagName("etat");
                        for (int temp = 0; temp < nList.getLength(); temp++) {
                            Node nNode = nList.item(temp);
                            Element eElement = (Element) nNode;                            
                            NodeList nl = eElement.getElementsByTagName("fichierId");
                                                        
                            // Erreur generale
                            if (nl.getLength() == 0) {
                                System.out.println("Code: "+eElement.getElementsByTagName("code").item(0).getTextContent());
                                System.out.println("Message: "+eElement.getElementsByTagName("message").item(0).getTextContent());
                            // Infos de retour
                            }else{
                                System.out.println("fichierId: "+eElement.getElementsByTagName("fichierId").item(0).getTextContent());
                                System.out.println("Message: "+eElement.getElementsByTagName("message").item(0).getTextContent());                              
                            }                            
                        }
                    }            
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Envoi de message unitaire

Envoi d'un message vocal à 1 seul destinataire par requete

Appel

https://www.isendpro.com/cgi-bin/smv.pyl?keyid=[KEYID]&type_appel=[TYPE_APPEL]&fichierid=[FICHIERID]&num=[NUM]&emetteur=[EMETTEUR]&tracker=[TRACKER]
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
fichierid Number Oui Identifiant numérique associé au message vocal à envoyer
type_appel Number Oui Type d'appel à effectuer
  • 1: répondeur mobile
emetteur String Non Emetteur du message
Par défaut, un numéro de fixe sur 10 chiffres
Ex: 0422850268
Contraintes:
  • La modification pour un émetteur ne commencant pas par 01,02,03,04 ou 05, entraine une surtaxe par appel de 0.042 euros HT vers les mobiles et de 0.002 euros HT vers les fixes
  • Suite à une nouvelle réglementation imposée par l'ARCEP depuis le 01/08/2019, chaque modification d'un émetteur doit etre approuvée. Pour toute demande à ce sujet, vous pouvez nous contacter par email sur contact@isendpro.com
  • Un numéro composé de 10 chiffres, ne commençant pas par 08
tracker String Non Généré par le client
Renvoyé en paramètre des urls pour les retours des accusés de réception et les retours des sms réponses
Longueur max de 50 caractères
Ex: order-ab78pq9
date_envoi Date au format
YYYY-MM-DD hh:mm
Non Date à laquelle le message sera envoyé
Envoi immédiat si non renseigné

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
tel String Numéro de téléphone associé au code retour
message String Libellé correspondant au tableau des erreurs
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>0</code>
    <tel>33601020304</tel>
    <message>Votre message a bien ete envoye</message>
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>21</code>
    <tel>33814222448</tel>
    <message>Le numéro de téléphone n'est pas attribué!</message>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/smv.pyl' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&fichierid=5572&type_appel=1&num=33601020304&tracker=test001'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$url = 'https://www.isendpro.com/cgi-bin/smv.pyl';

$ch = curl_init();
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'fichierid'     =>  5572,
    'type_appel'    =>  1,
    'num'           =>  33601020304,
    'tracker'       =>  'test001'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => array('Content-type: multipart/form-data'),
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html

$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['tel'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Erreur specifique au numero de telephone  
        if ($value['code'.$cpt]!=0){
            echo 'Code: '.$value['code'.$cpt];
            echo $sautligne;
            echo 'message: '.$value['message'.$cpt];
            echo $sautligne;
            echo 'tel: '.$value['tel'.$cpt];                
            echo $sautligne;
        // Envoi OK
        }else{
            echo 'Code: '.$value['code'.$cpt];
            echo $sautligne;
            echo 'message: '.$value['message'.$cpt];
            echo $sautligne;  
            echo 'tel: '.$value['tel'.$cpt];                
            echo $sautligne;                
        }
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict

url = 'https://www.isendpro.com/cgi-bin/smv.pyl'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'fichierid':    5572,
    'type_appel':   1,
    'num':          33601020304,
    'tracker':      'test001'
}

response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('tel'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Erreur specifique au numero de telephone  
            if repetat['code'+cpt]!=0:
                print 'Code: '+repetat['code'+cpt]
                print 'Message: '+repetat['message'+cpt]
                print 'Tel: '+repetat['tel'+cpt]        
            # Envoi OK
            else:
                print 'Code: '+repetat['code'+cpt]
                print 'Message: '+repetat['message'+cpt]
                print 'Tel: '+repetat['tel'+cpt] 
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter;  

public class TestDocs {
 
    public static void main(String[] args) {

        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////    
        String charset = "UTF-8";
        File uploadFile1 = new File("test.wav");
        String requestURL = "https://www.isendpro.com/cgi-bin/smv.pyl";
 
        try {
            MultipartUtility multipart = new MultipartUtility(requestURL, charset);             
            
            multipart.addHeaderField("User-Agent", "CodeJava");
            multipart.addHeaderField("Test-Header", "Header-Value");
            
            multipart.addFormField("keyid",     "a296464ce012b8ab710a");
            multipart.addFormField("fichierid", "5572");
            multipart.addFormField("type_appel","1");
            multipart.addFormField("num",       "33601020304");
            multipart.addFormField("tracker",   "test001");
            
            List<String> response = multipart.finish();             

            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            for (String line : response) {
                System.out.println(line);
                
                try {                    
                    InputSource is = new InputSource(new StringReader(line));
                    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                    Document doc = dBuilder.parse(is);

                    //System.out.println("Root element :" + doc.getDocumentElement().getNodeName());                    
                    if(doc.getDocumentElement().getNodeName()!="etat"){
                        // Erreur inconnue
                        System.out.println("Erreur inconnue: "+line);
                    }else{
                        NodeList nList = doc.getElementsByTagName("etat");
                        for (int temp = 0; temp < nList.getLength(); temp++) {
                            Node nNode = nList.item(temp);
                            Element eElement = (Element) nNode;                            
                            NodeList nl = eElement.getElementsByTagName("tel");
                                                        
                            // Erreur generale
                            if (nl.getLength() == 0) {
                                System.out.println("Code: "+eElement.getElementsByTagName("code").item(0).getTextContent());
                                System.out.println("Message: "+eElement.getElementsByTagName("message").item(0).getTextContent());
                            // Infos de retour
                            }else{
                                System.out.println("Code: "+eElement.getElementsByTagName("code").item(0).getTextContent());
                                System.out.println("Message: "+eElement.getElementsByTagName("message").item(0).getTextContent());                              
                                System.out.println("tel: "+eElement.getElementsByTagName("tel").item(0).getTextContent());                                
                            }                            
                        }
                    }            
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Envoi de messages multiples

Envoi d'un message vocal à plusieurs destinataire par requete
Cette solution permet d’envoyer un message jusqu’à 50 destinataires différents par requête, permettant ainsi une augmentation de la vitesse des envois.
Les numéros de téléphone sont placés dans des variables numX où X est un entier allant de 1 à 50 au maximum.
Si le message vocal (ou fichier) est identique pour tous les destinataires, il suffit de le renseigner une seule fois dans la variable fichierid.
Si le message vocal (ou fichier) est différent pour chaque destinataire alors ils sont placés dans des variables fichieridX où X est un entier allant de 1 à 50 au maximum.
Dans ce cas le message vocal fichieridX sera envoyé au destinataire numX.

Appel

http(s)://www.isendpro.com/cgi-bin/smv.pyl?keyid=[KEYID]&type_appel=[TYPE_APPEL]&fichierid1=[FICHIERID1]&num1=[NUM1]&fichierid2=[FICHIERID2]&num2=[NUM2]...&fichierid50=[FICHIERID50]&num50=[NUM50]&emetteur=[EMETTEUR]&tracker=[TRACKER]
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num[X] String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
fichierid[X] Number Oui Identifiant numérique associé au message vocal à envoyer
type_appel Number Oui Type d'appel à effectuer
  • 1: répondeur mobile
emetteur String Non Emetteur du message
Par défaut, un numéro de fixe sur 10 chiffres
Ex: 0422850268
Contraintes:
  • La modification pour un émetteur ne commencant pas par 01,02,03,04 ou 05, entraine une surtaxe par appel de 0.042 euros HT vers les mobiles et de 0.002 euros HT vers les fixes
  • Suite à une nouvelle réglementation imposée par l'ARCEP depuis le 01/08/2019, chaque modification d'un émetteur doit etre approuvée. Pour toute demande à ce sujet, vous pouvez nous contacter par email sur contact@isendpro.com
  • Un numéro composé de 10 chiffres, ne commençant pas par 08
tracker[X] String Non Généré par le client
Renvoyé en paramètre des urls pour les retours des accusés de réception et les retours des sms réponses
Longueur max de 50 caractères
Ex: order-ab78pq9
date_envoi Date au format
YYYY-MM-DD hh:mm
Non Date à laquelle le message sera envoyé
Envoi immédiat si non renseigné

Réponse

Paramètre Type Détails
code[X] Number Code correspondant au tableau des erreurs
tel[X] String Numéro de téléphone associé au code retour
message[X] String Libellé correspondant au tableau des erreurs
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <etat1>
        <code1>0</code1>
        <tel1>33601020304</tel1>
        <message1>Votre message a bien ete envoye</message1>
    </etat1>
    <etat2>
        <code2>0</code2>
        <tel2>0601020305</tel2>
        <message2>Votre message a bien ete envoye</message2>
    </etat2>
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <etat1>
        <code1>21</code1>
        <tel1>33801020304</tel1>
        <message1>Le numéro de téléphone n'est pas attribué!</message1>
    </etat1>
    <etat2>
        <code2>21</code2>
        <tel2>0801020305</tel2>
        <message2>Le numéro de téléphone n'est pas attribué!</message2>
    </etat2>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/smv.pyl' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&fichierid=5572&type_appel=1&num1=33601020304&tracker1=test001X01&num2=0601020305&tracker2=test001X02'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$url = 'https://www.isendpro.com/cgi-bin/smv.pyl';

$ch = curl_init();
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'fichierid'     =>  557200,
    'type_appel'    =>  1,
    'num1'          =>  33601020304,
    'tracker1'      =>  'test001X01',
    'num2'          =>  33601020305,
    'tracker2'      =>  'test001X02'    
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => array('Content-type: multipart/form-data'),
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html

$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['tel'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Erreur specifique au numero de telephone  
        if ($value['code'.$cpt]!=0){
            echo 'Code: '.$value['code'.$cpt];
            echo $sautligne;
            echo 'message: '.$value['message'.$cpt];
            echo $sautligne;
            echo 'tel: '.$value['tel'.$cpt];                
            echo $sautligne;
        // Envoi OK
        }else{
            echo 'Code: '.$value['code'.$cpt];
            echo $sautligne;
            echo 'message: '.$value['message'.$cpt];
            echo $sautligne;  
            echo 'tel: '.$value['tel'.$cpt];                
            echo $sautligne;                
        }
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/smv.pyl'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'fichierid':    5572,
    'type_appel':   1,
    'num1':         33601020304,
    'tracker1':     'test001X01',
    'num2':         33601020305,
    'tracker2':     'test001X02'    
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('tel'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Erreur specifique au numero de telephone  
            if repetat['code'+cpt]!=0:
                print 'Code: '+repetat['code'+cpt]
                print 'Message: '+repetat['message'+cpt]
                print 'Tel: '+repetat['tel'+cpt]        
            # Envoi OK
            else:
                print 'Code: '+repetat['code'+cpt]
                print 'Message: '+repetat['message'+cpt]
                print 'Tel: '+repetat['tel'+cpt] 
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter;  

public class TestDocs {
 
    public static void main(String[] args) {

        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////    
        String charset = "UTF-8";
        File uploadFile1 = new File("test.wav");
        String requestURL = "https://www.isendpro.com/cgi-bin/smv.pyl";
 
        try {
            MultipartUtility multipart = new MultipartUtility(requestURL, charset);             
            
            multipart.addHeaderField("User-Agent", "CodeJava");
            multipart.addHeaderField("Test-Header", "Header-Value");
            
            multipart.addFormField("keyid",         "a296464ce012b8ab710a");
            multipart.addFormField("fichierid",     "5572");
            multipart.addFormField("type_appel",    "1");
            multipart.addFormField("num1",          "33601020304");
            multipart.addFormField("tracker1",      "test001X01");
            multipart.addFormField("num2",          "33601020305");
            multipart.addFormField("tracker2",      "test001X02");    
            
            List<String> response = multipart.finish();             

            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            for (String line : response) {
                System.out.println(line);
                
                try {                    
                    InputSource is = new InputSource(new StringReader(line));
                    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                    Document doc = dBuilder.parse(is);

                    //System.out.println("Root element :" + doc.getDocumentElement().getNodeName());                    
                    if(doc.getDocumentElement().getNodeName()!="etat"){
                        // Erreur inconnue
                        System.out.println("Erreur inconnue: "+line);
                    }else{
                        NodeList nList = doc.getElementsByTagName("etat");
                        for (int temp = 0; temp < nList.getLength(); temp++) {
                            Node nNode = nList.item(temp);
                            NodeList nList2 = nNode.getChildNodes();                                                                                                             
                                                        
                            // Erreur generale
                            if(nList2.item(0).getNodeName()=="code"){                              
                                System.out.println("Code: "+nList2.item(0).getTextContent());
                                System.out.println("Message: "+nList2.item(1).getTextContent());                            
                            }else{      
                                // Infos de retour
                                for(int i=0; i<nList2.getLength(); i++) {
                                    Node n = nList2.item(i);                                                                                    
                                    Element airportElem = (Element)n;
                                    System.out.println("--------------------");
                                    System.out.println("Node :" + n.getNodeName());    
                                                                                    
                                    NodeList nList3 = n.getChildNodes();  
                                    //System.out.println("n3 Length:" + nList3.getLength());  
                                    for(int j=0; j<nList3.getLength(); j++) {
                                        System.out.println(nList3.item(j).getNodeName()+": "+nList3.item(j).getTextContent());
                                    }
                                }                            
                            }
                        }
                    }            
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Consultation du crédit

Consultation du crédit restant en quantité ou en euros HT

Appel

https://www.isendpro.com/cgi-bin/smv.pyl?keyid=[KEYID]&credit=[CREDIT]&type_envoi=[TYPE_ENVOI]
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
credit Number Oui Number indiquant le type de crédit restant
  • 1: Pour le montant en euros HT
  • 2: Pour la quantité de SMS
type_envoi Number Oui Number indiquant le type de crédit concernée
  • 2: répondeur mobile

Réponse

Paramètre Type Détails
credit String Nombre à virgule indiquant le crédit restant en euros HT
Ex: 561.20
quantite Number Nombre indiquant le nombre de crédits restants en quantité d'envois
Ex: 8974
 <?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <credit>110</credit>
    <quantite>4074</quantite>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/smv.pyl' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&credit=2&type_envoi=0'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$url = 'https://www.isendpro.com/cgi-bin/smv.pyl';

$ch = curl_init();
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'credit'        =>  2,
    'type_envoi'    =>  0
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => array('Content-type: multipart/form-data'),
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetat = XML2Array($xml);
// Erreur generale
if (!isset($repetat['credit'])){
    echo 'Code: '.$repetat['code'];
    echo $sautligne;
    echo 'Message: '.$repetat['message'];
    echo $sautligne;
}else{
    // Credit OK
    echo 'credit: '.$repetat['credit'];
    echo $sautligne;
    if (isset($repetat['quantite'])){
        echo 'quantite: '.$repetat['quantite'];
        echo $sautligne;
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict

url = 'https://www.isendpro.com/cgi-bin/smv.pyl'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'credit':       2,
    'type_envoi':   0
}

response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    repetat=repetat['etat']
    # Erreur generale
    if not repetat.has_key('credit'):
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
    # Envoi OK
    else:
        print 'credit: '+repetat['credit']
        if repetat.has_key('quantite'):
            print 'quantite: '+repetat['quantite']
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter;  

public class TestDocs {
 
    public static void main(String[] args) {

        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////    
        String charset = "UTF-8";
        File uploadFile1 = new File("test.wav");
        String requestURL = "https://www.isendpro.com/cgi-bin/smv.pyl";
 
        try {
            MultipartUtility multipart = new MultipartUtility(requestURL, charset);             
            
            multipart.addHeaderField("User-Agent", "CodeJava");
            multipart.addHeaderField("Test-Header", "Header-Value");
            
            multipart.addFormField("keyid",     "a296464ce012b8ab710a");
            multipart.addFormField("credit",    "2");
            multipart.addFormField("type_envoi","0");                        
            
            List<String> response = multipart.finish();             

            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////             
            for (String line : response) {
                System.out.println(line);
                
                try {                    
                    InputSource is = new InputSource(new StringReader(line));
                    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                    Document doc = dBuilder.parse(is);

                    //System.out.println("Root element :" + doc.getDocumentElement().getNodeName());                    
                    if(doc.getDocumentElement().getNodeName()!="etat"){
                        // Erreur inconnue
                        System.out.println("Erreur inconnue: "+line);
                    }else{
                        NodeList nList = doc.getElementsByTagName("etat");
                        for (int temp = 0; temp < nList.getLength(); temp++) {
                            Node nNode = nList.item(temp);
                            Element eElement = (Element) nNode;                            
                            NodeList nl = eElement.getElementsByTagName("credit");
                                                        
                            // Erreur generale
                            if (nl.getLength() == 0) {
                                System.out.println("Code: "+eElement.getElementsByTagName("code").item(0).getTextContent());
                                System.out.println("Message: "+eElement.getElementsByTagName("message").item(0).getTextContent());
                            // Infos de retour
                            }else{
                                System.out.println("credit: "+eElement.getElementsByTagName("credit").item(0).getTextContent());
                                System.out.println("quantite: "+eElement.getElementsByTagName("quantite").item(0).getTextContent());                              
                            }                            
                        }
                    }            
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Webhook des accusés de réception

Présentation de la structure de renvoi des accusés de réception sur une url donnée

Appel

Le client devra développer une page Web qui traitera les données reçues.
Contraintes
  • Page accessible sans système d'authentification
  • Définir le lien sur votre espace client Mon compte -> Mon API -> AR des VOCAUX
  • Afficher la chaine de caractères 'validation' en réponse à l'appel
www.votre_adresse.com/votre_page_web??tel=[TEL]&date=[DATE]&heure=[HEURE]&id=[ID]&tracker=[TRACKER]&erreur=[ERREUR]&decroche=[DECROCHE]&duree=[DUREE]
Paramètre Type Obligatoire Détails
tel String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
date Date au format
AAAA-MM-JJ
Oui La date de réception de l'accusé
heure Date au format
HH:MM:SS
Oui L'heure de réception de l'accusé
id Number Oui Identifiant unique de l'accusé
tracker String Oui Argument éventuellement fourni lors de l'envoi pour une identification simplifiée
erreur Number Oui Indique s'il y a une erreur lors de l'envoi
  • 0: Envoi OK
  • 1: Envoi Non OK
duree Number Oui Durée de l'appel en secondes
Ex: 150


Codes erreurs API

Tableau des codes erreurs retournés par l'API
Code erreur Message
0 Votre message a bien ete envoye
1 Le Champ Login est vide
2 Le Champ PWD est vide
3 Vos identifiants sont incorrectes
4 Vous devez saisir un message!
5 Le message ne doit pas dépasser XXX caractères!
6 Vous devez saisir un numéro de téléphone valide!
7 Un numéro de téléphone est sur 10 chiffres!
9 La route que vous avez saisie n'existe pas!
10 Vous n'avez pas les droits nécessaires pour utiliser cette route!
11 Le numéro de téléphone est dans la liste noire!
12 Votre crédit de MT est épuisé!
13 La route Lowcost est down!
14 L'adresse IP n'est pas autorisée!
15 Vous devez indiquer un canal d'envoi!
16 L'émetteur ne peut pas etre vide!
21 Le numéro de téléphone n'est pas attribué!
22 Le numéro de téléphone est attribue à un Full MVNO
23 Le nombre maximum de téléphones par requete est de 50
24 Pas d'envoi commercial entre 20h et 08h, ni les jours fériés
25 Il est obligatoire d'indiquer le cout vers les numeros en 0899. Ex: Pour plus de renseignements appelez le 0899 XX XX XX (1E35/apl+0.34E/min)
26 Il est obligatoire d'indiquer le cout vers les numeros en 0892. Ex: Pour plus de renseignements appelez le 0892 XX XX XX (0.34E/min)
27 L'indicatif pays du téléphone n'est pas autorisé!
28 Votre crédit de qualification est épuisé!
29 Nous ne pouvons donner suite à votre demande (overflow)
30 Erreur sur le domaine de connexion
31 Le message ne doit pas dépasser XXX caractères!
32 Le message est sur DATA1 SMS (DATA2 caractères) alors que la demande est sur DATA3 SMS
33 Cet émetteur n'est pas autorisé!
34 La valeur de smslong doit etre un entier!
37 Les numeros de telephone ne sont pas tous a destination du meme pays!
43 La date d'envoi n'est pas au bon format (AAAA-MM-JJ HH:MM)!
100 Vous devez saisir un type d'appel valide
101 Les appels répondeurs ne fonctionnent pas avec les numéros de fixe!
102 Vous devez saisir un fichier valide!
103 L'émetteur doit etre sur 10 chiffres!
104 L'émetteur ne doit comporter que des chiffres!
105 L'émetteur ne peut pas etre un numéro en 08!
106 Seuls les fichiers .wma, .wav sont acceptés!
107 Votre fichier dépasse XXX secondes!
108 Votre fichier doit dépasser XXX secondes!
200 Le numéro de téléphone doit etre un fixe
206 Seuls les fichiers .pdf sont acceptés!
207 Votre fichier dépasse XXX pages!
208 Votre fichier doit dépasser 1 page!
209 Votre fichier dépasse XXX Ko par page!
210 Votre fichier converti est trop lourd! Merci de contacter le support!
211 Vous devez saisir un identifiant de fichier
1000 Le fichier a bien été importé
999 Une erreur est survenue. Merci de contacter le service technique

API SMS HTTPS iSendPro Telecom

Prérequis

Munissez vous de votre keyid

Votre keyid (clé d'identification) est visible sur votre espace client dans Mon compte -> Mon api
Cette clé vous identifie et vous devrez l'utiliser pour effectuer toutes vos requêtes via l'API

Protocole de chiffrement

Pour les appels en https, il est impératif d'utiliser au minimum la version 1.2 du protocole TLS

Envois marketing

L’envoi de SMS commerciaux est formellement interdit entre 20h00 et 08h00 les jours calendaires.
Ces restrictions contractuelles avec les opérateurs sont édictées par l’AFMM et ne sont pas spécifiques à notre site.
En cas de changement d'émetteur, la mention STOP en fin de message est obligatoire.
Le client s'engage à respecter ces obligations sous peine de fortes amendes et de suspension immédiate du compte.

Envois transactionnels

Ces envois correspondent à des messages de type non marketing (confirmation de commande, rendez vous, message d‘alerte, etc).
Ils peuvent etre envoyés à toute heure, une fois la restriction horaires du compte levée.
En cas de changement d'émetteur, vous pouvez retirer la mention STOP SMS en fin de message en utilisant l'argument nostop avec la valeur 1 (cf tableau), une fois la restriction STOP du compte levée.
Pour lever les restrictions horaires et STOP, envoyez un email à contact@isendpro.com

Configurer le contrôle IP

Un contrôle IP, basé sur un système de type «liste blanche» est activé par défaut.
Vous pouvez soit renseigner cette liste blanche, soit désactiver le contrôle IP.
Ce paramètrage peut s'effectuer sur Mon compte -> Mon api

Liste noire

Une liste des numéros de téléphone vers lesquels les messages ne sont pas envoyés est gérée.
Les numéros de téléphone y sont ajoutés à la demande des opérateurs ou de nos partenaires.
Tous les messages envoyés vers des clients en liste noire ne sont pas routés.
Dans ce cas, le code erreur 11 est retourné par la requête.

Encodage

  • Les appels à l'API doivent etre encodés en UTF-8
  • Les SMS et les noms de répertoires doivent être encodés en UTF-8. Par défaut, les SMS sont réencodés en GSM7 lors de la transmission à l'opérateur. De ce fait, seuls les caractères précisés en annexe sont acceptés (ou remplacés).
  • Les retours d'API sont effectués en ISO-8859-15 (latin1 + euro sign).
  • En cas d'envoi en ucs-2, la totalité des caractères utf-8 est supportée.

Remarques et bonnes pratiques

Logs

Nous vous recommandons de logguer (avec horodatage) vos appels à l'API ainsi que les réponses de cette dernière.

Traitement des erreurs

L'API répondra un code HTTP 200 à vos appels.

Traitement des retours

Dans l'exemple ci-dessous, le 33601020304 est un numéro invalide et le 33601020305 est un numéro en liste noire. Nous vous recommandons donc de traiter ces retours.
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <etat1>
        <code1>21</code1>
        <tel1>33601020304</tel1>
        <message1>Le numéro de téléphone n'est pas attribué!</message1>
    </etat1>
    <etat2>
        <code2>11</code2>
        <tel2>33601020305</tel2>
        <message2>Le numéro de téléphone est dans la liste noire!</message2>
    </etat2>
    <etat2>
        <code2>0</code2>
        <tel2>33601020306</tel2>
        <message2>Votre message a bien ete envoye</message2>
    </etat2>    
</etat>

Packages et fonctions pour les scripts

PHP
<?php
/////////////////////////////////////////////////////////
//	Fonction qui transforme un fichier xml en tableau
/////////////////////////////////////////////////////////
function XML2Array($xml, $recursive=true){
    if(!$recursive){
        $array=simplexml_load_string($xml);
    }else{
        $array=$xml;
    }
    $newArray=array();
    $array=(array)$array;
    foreach($array as $key => $value){
        $value=(array)$value;
        if(isset($value[0])){
            $newArray[$key]=trim($value[0]);
        }else{
            $newArray[$key]=XML2Array($value,true);
        }
    }
    return $newArray ;
}

/////////////////////////////////////////////////////////
//	Fonction qui transforme une chaine en donnee xml
/////////////////////////////////////////////////////////
function string2XML($out){
    $xml='';
    $out=explode("\n", $out);
    foreach($out as $line){
        if( strstr($line, '<etat') || strstr($line, '<credit>')) {
            $xml .= trim($line)."\n";
        }
    }
// Ne pas mettre d'indentation sinon cela ne fonctionne plus
$out = <<<XML
$xml
XML;    

    $xml = simplexml_load_string($out);
    return $xml;   
} 
?>
Python

Traitement des accusés de réception

Nous vous recommandons de mettre en place une URL de traitement des retours des accusés de réception.

Retour des sms envoyés par les clients

Nous vous recommandons de mettre en place une URL de traitement des retours des sms envoyés par les clients.

Contact

Vous pouvez contacter le support technique à l'adresse suivante: support@isendpro.com

Important: Merci de préciser dans votre email votre identifiant client
Si la question concerne la remise d'un SMS, merci de rajouter les infos suivantes :
  • Numéro de téléphone (MSISDN)
  • Message
  • Date et heure d'envoi

Le support technique est joignable tous les jours de la semaine de 09h à 13h et de 14h à 17h au 04 83 66 05 10

Utilisation API



Changement d'émetteur

L'émetteur du message est par défaut un numéro court sur 5 chiffres. Il est possible de le remplacer par une chaine alpha numérique avec les contraintes suivantes:
  • Entre 4 et 11 caractères
  • Chiffre entre 0 et 9
  • Uniquement lettre alphabet français sans accent
  • Pas de caractères spéciaux
  • Pas uniquement des chiffres
  • Utilisation de nom de marques uniquement si le client en est propriétaire
  • Sauf si nostop=1, ajout automatique de la mention STOP XXXXX en fin de message qui utilise 12 caractères

Il faut renseigner la variable emetteur lors des appels à l'API comme indiqué dans les tableaux des paramètres sur cette documentation

Remarque:
  • En France, fonctionne pour tous les opérateurs sauf NRJ
  • A l'étranger, varie suivant les destinations, merci de nous consulter pour plus d'informations

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&num=33601020304&sms=Bonjour! Bienvenue sur iSendPro!&emetteur=isendpro&tracker=test001'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$url = 'https://www.isendpro.com/cgi-bin/';

$ch = curl_init();
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num'       =>  '33601020304',
    'sms'       =>  'Bonjour! Bienvenue sur iSendPro!',
    'emetteur'  =>  'isendpro'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => array('Content-type: multipart/form-data'),
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['tel'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Erreur specifique au numero de telephone  
        if ($value['code'.$cpt]!=0){
            echo 'Code: '.$value['code'.$cpt];
            echo $sautligne;
            echo 'message: '.$value['message'.$cpt];
            echo $sautligne;
            echo 'tel: '.$value['tel'.$cpt];                
            echo $sautligne;
        // Envoi OK
        }else{
            echo 'Code: '.$value['code'.$cpt];
            echo $sautligne;
            echo 'message: '.$value['message'.$cpt];
            echo $sautligne;  
            echo 'tel: '.$value['tel'.$cpt];                
            echo $sautligne;                
        }
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num':      '33601020304',
    'sms':      'Bonjour! Bienvenue sur iSendPro!',
    'emetteur': 'isendpro'
}
response = requests.post(url, params)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('tel'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Erreur specifique au numero de telephone  
            if repetat['code'+cpt]!=0:
                print 'Code: '+repetat['code'+cpt]
                print 'Message: '+repetat['message'+cpt]
                print 'Tel: '+repetat['tel'+cpt]        
            # Envoi OK
            else:
                print 'Code: '+repetat['code'+cpt]
                print 'Message: '+repetat['message'+cpt]
                print 'Tel: '+repetat['tel'+cpt]                
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;
    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      "33601020304"); 
        paramsTablo.put("sms",      "Bonjour! Bienvenue sur ".$marque_nom_court."!");
        paramsTablo.put("emetteur", "isendpro");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();            
            try {                    
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("code")){
                                    if(n2Value.equals("0")){
                                        erreur=0;
                                    }
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Envoi d'émojis/émoticones

Il est possible d'envoyer des émojis/émoticones avec les contraintes suivantes:
  • Requête encodée au format UTF-8
  • 1 emoji comptera pour 2 caractères
  • La longueur max passe de 160 à 70 caractères par SMS (67 caractères si SMS Long)
  • Certains opérateurs ne supportent pas l'UCS2 (par exemple BOUYGUES en France), les caractères non supportés peuvent alors être supprimés du message.

Il faut renseigner la variable ucs2 avec pour valeur 1 lors des appels à l'API comme indiqué dans les tableaux des paramètres sur cette documentation.
La liste des emjois possible est disponible ICI
Remarque:
  • A l'étranger, varie suivant les destinations, merci de nous consulter pour plus d'informations

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&num=33601020304&sms=Bonjour! Bienvenue sur iSendPro! 🙂&ucs2=1'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$url = 'https://www.isendpro.com/cgi-bin/';

$ch = curl_init();
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num'       =>  '33601020304',
    'sms'       =>  'Bonjour! Bienvenue sur iSendPro! 🙂',
    'ucs2'      =>  '1'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => array('Content-type: multipart/form-data'),
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['tel'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Erreur specifique au numero de telephone  
        if ($value['code'.$cpt]!=0){
            echo 'Code: '.$value['code'.$cpt];
            echo $sautligne;
            echo 'message: '.$value['message'.$cpt];
            echo $sautligne;
            echo 'tel: '.$value['tel'.$cpt];                
            echo $sautligne;
        // Envoi OK
        }else{
            echo 'Code: '.$value['code'.$cpt];
            echo $sautligne;
            echo 'message: '.$value['message'.$cpt];
            echo $sautligne;  
            echo 'tel: '.$value['tel'.$cpt];                
            echo $sautligne;                
        }
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num':      '33601020304',
    'sms':      'Bonjour! Bienvenue sur iSendPro! 🙂',
    'ucs2':     '1'
}
response = requests.post(url, params)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('tel'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Erreur specifique au numero de telephone  
            if repetat['code'+cpt]!=0:
                print 'Code: '+repetat['code'+cpt]
                print 'Message: '+repetat['message'+cpt]
                print 'Tel: '+repetat['tel'+cpt]        
            # Envoi OK
            else:
                print 'Code: '+repetat['code'+cpt]
                print 'Message: '+repetat['message'+cpt]
                print 'Tel: '+repetat['tel'+cpt]                
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;
    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      "33601020304"); 
        paramsTablo.put("sms",      "Bonjour! Bienvenue sur ".$marque_nom_court."! 🙂");
        paramsTablo.put("ucs2",     "1");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();            
            try {                    
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("code")){
                                    if(n2Value.equals("0")){
                                        erreur=0;
                                    }
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Envoi à l'international

Les numéros de téléphones sont attendus au format international avec l'indicatif pays sans le "+" au début.
Ex: Pour la Belgique, l'indicatif international est +32
Si le numéro de téléphone est 0601020304 alors pour la mise au format international, il faut supprimer le "0" de début et ajouter l'indicatif pays sans le "+" au début
Le numéro devenant alors 32601020304

Certaines destinations peuvent avoir des contraintes particulières (émetteurs acceptés, smslong, etc), merci de nous consulter pour plus d'informations


Envoi de SMS unitaire

Envoi d'un message à 1 seul destinataire par requete

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
sms String Oui Message envoyé au destinataire
1 SMS peut contenir jusqu'à 160 caractères
Possibilité d'envoyer des messages plus long (jusqu'à 6 SMS concaténés) pour un total de 918 caractères (6 x 153)
(7 caractères étant réserves pour des entêtes techniques)
Le cout unitaire sera alors multiplié par le nombre de SMS correspondants
Cf Argument smslong
emetteur String Non Emetteur du message
Par défaut, un numéro court sur 5 chiffres
Ex: 36007
Contraintes:
  • Entre 4 et 11 caractères
  • Chiffre entre 0 et 9
  • Uniquement lettre alphabet français sans accent
  • Pas de caractères spéciaux
  • Pas uniquement des chiffres
  • Sauf si nostop=1, ajout automatique de la mention STOP XXXXX en fin de message et augmente de 12 caractères la longueur globale
tracker String Non Généré par le client
Renvoyé en paramètre des urls pour les retours des accusés de réception et les retours des sms réponses
Longueur max de 50 caractères
Ex: order-ab78pq9
smslong Number Non Argument indiquant le nombre de SMS concaténés
Si le nombre de SMS exact est connu alors indiquer ce nombre
Si le nombre calculé par l'API diffère alors un message d'erreur sera retourné (code 32)
Pour éviter ce controle et autoriser les messages sur plus de 1 SMS, utiliser la valeur 999
Nombre de SMS concaténés Nombre de caractères
SANS modification émetteur
Nombre de caractères
AVEC modification émetteur
et SANS nostop=1
1 160 148
2 306 294
3 459 447
4 612 600
5 765 753
6 918 906
nostop Number Non Argument pour ne pas afficher automatiquement la mention STOP SMS en fin de message
Utiliser la valeur 1
date_envoi Date au format
YYYY-MM-DD hh:mm
Non Date à laquelle le message sera envoyé
gmt_zone Fuseau horaire Non A renseigner, en cas d'envoi différé sur un autre fuseau horaire que celui par défaut (GMT+1 Europe/Brussels)
Ex: Pour un envoi vers des destinataires en Argentine à l'horaire local et non celui de la France, la valeur de l'argument gmt_zone serait America/Havana
ucs2 Number Non Permet l'utilisation de caractères en alphabet non latin (russe, chinois, arabe, etc) et/ou avec des émojis
Contraintes:
  • Requête encodée au format UTF-8
  • 1 emoji comptera pour 2 caractères
  • La longueur max passe de 160 à 70 caractères par SMS (67 caractères si SMS Long)
  • Certains opérateurs ne supportent pas l'UCS2 (par exemple BOUYGUES en France), les caractères non supportés peuvent alors être supprimés du message.
Utiliser la valeur 1
numAzur Number Non Dans le cadre d'une utilisation combinée entre SMS Azur et l'API, il est possible de forcer le numéro d'expéditeur à être le même que celui utilisé sur SMS Azur
Utiliser la valeur 1
domtom Number Non Les envois vers les préfixes opérateurs à destination des DOM TOM (ou DROM-COM) sans l'indicatif pays associé (ex: +262 pour La Réunion) seront acceptés par l'API mais ne pourront etre délivrés
Pour forcer leur traitement au tarif en vigueur, utiliser la valeur 1
sandbox Number Non Activation du mode "bac à sable"
Ce champ permet de ne pas envoyer réellement les SMS lors de la requête
Les envois ne sont pas facturés
Utiliser la valeur 1

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
tel String Numéro de téléphone associé au code retour
message String Libellé correspondant au tableau des erreurs
sandbox Number Si 'sandbox' était dans les paramètres d'appels alors sa valeur est 1
Sinon le paramètre n'est pas affiché du tout
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>0</code>
    <tel>33601020304</tel>
    <message>Votre message a bien ete envoye</message>
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>6</code>
    <message>Vous devez saisir un numéro de téléphone</message>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&num=33601020304&sms=Bonjour! Bienvenue sur iSendPro!&emetteur=isendpro&tracker=test001'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$url = 'https://www.isendpro.com/cgi-bin/';

$ch = curl_init();
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num'       =>  '33601020304',
    'sms'       =>  'Bonjour! Bienvenue sur iSendPro!',
    'emetteur'  =>  'isendpro'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => array('Content-type: multipart/form-data'),
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['tel'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Erreur specifique au numero de telephone  
        if ($value['code'.$cpt]!=0){
            echo 'Code: '.$value['code'.$cpt];
            echo $sautligne;
            echo 'message: '.$value['message'.$cpt];
            echo $sautligne;
            echo 'tel: '.$value['tel'.$cpt];                
            echo $sautligne;
        // Envoi OK
        }else{
            echo 'Code: '.$value['code'.$cpt];
            echo $sautligne;
            echo 'message: '.$value['message'.$cpt];
            echo $sautligne;  
            echo 'tel: '.$value['tel'.$cpt];                
            echo $sautligne;                
        }
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num':      '33601020304',
    'sms':      'Bonjour! Bienvenue sur iSendPro!',
    'emetteur': 'isendpro'
}
response = requests.post(url, params)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('tel'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Erreur specifique au numero de telephone  
            if repetat['code'+cpt]!=0:
                print 'Code: '+repetat['code'+cpt]
                print 'Message: '+repetat['message'+cpt]
                print 'Tel: '+repetat['tel'+cpt]        
            # Envoi OK
            else:
                print 'Code: '+repetat['code'+cpt]
                print 'Message: '+repetat['message'+cpt]
                print 'Tel: '+repetat['tel'+cpt]                
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;
    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      "33601020304"); 
        paramsTablo.put("sms",      "Bonjour! Bienvenue sur ".$marque_nom_court."!");
        paramsTablo.put("emetteur", "isendpro");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();            
            try {                    
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("code")){
                                    if(n2Value.equals("0")){
                                        erreur=0;
                                    }
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Envoi de SMS multiples

Envoi d'un message à plusieurs destinataires par requête via une liste de numéros de téléphone avec un maximum de 500 numéros de téléphone par requête
Cette solution permet d’envoyer un message jusqu’à 500 destinataires différents par requête, permettant ainsi une augmentation de la vitesse des envois.
Les numéros de téléphone sont placés dans des variables numX où X est un entier allant de 1 à 500 au maximum.
Si le message est identique pour tous les destinataires, il suffit de le renseigner une seule fois dans la variable sms.
Si le message est différent pour chaque destinataire alors ils sont placés dans des variables smsX est un entier allant de 1 à 500 au maximum.
Dans ce cas le message smsX sera envoyé au destinataire numX.

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num[X] String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
sms[X] String Oui Message envoyé au destinataire
1 SMS peut contenir jusqu'à 160 caractères
Possibilité d'envoyer des messages plus long (jusqu'à 6 SMS concaténés) pour un total de 918 caractères (6 x 153)
(7 caractères étant réserves pour des entêtes techniques)
Le cout unitaire sera alors multiplié par le nombre de SMS correspondants
Cf Argument smslong
emetteur String Non Emetteur du message
Par défaut, un numéro court sur 5 chiffres
Ex: 36007
Contraintes:
  • Entre 4 et 11 caractères
  • Chiffre entre 0 et 9
  • Uniquement lettre alphabet français sans accent
  • Pas de caractères spéciaux
  • Pas uniquement des chiffres
  • Sauf si nostop=1, ajout automatique de la mention STOP XXXXX en fin de message et augmente de 12 caractères la longueur globale
tracker[X] String Non Généré par le client
Renvoyé en paramètre des urls pour les retours des accusés de réception et les retours des sms réponses
Longueur max de 50 caractères
Ex: order-ab78pq9
smslong Number Non Argument indiquant le nombre de SMS concaténés
Si le nombre de SMS exactes est connu alors indiquer ce nombre
Si le nombre calculé par l'API diffère alors un message d'erreur sera retourné (code 32)
Pour éviter ce controle et autoriser les messages sur plus de 1 SMS, utiliser la valeur 999
Nombre de SMS concaténés Nombre de caractères
SANS modification émetteur
Nombre de caractères
AVEC modification émetteur
et SANS nostop=1
1 160 148
2 306 294
3 459 447
4 612 600
5 765 753
6 918 906
nostop Number Non Argument pour ne pas afficher automatiquement la mention STOP SMS en fin de message
Utiliser la valeur 1
date_envoi Date au format
YYYY-MM-DD hh:mm
Non Date à laquelle le message sera envoyé
Envoi immédiat si non renseigné
gmt_zone Fuseau horaire Non A renseigner, en cas d'envoi différé sur un autre fuseau horaire que celui par défaut (GMT+1 Europe/Brussels)
Ex: Pour un envoi vers des destinataires en Argentine à l'horaire local et non celui de la France, la valeur de l'argument gmt_zone serait America/Havana
ucs2 Number Non Permet l'utilisation de caractères en alphabet non latin (russe, chinois, arabe, etc) et/ou avec des émojis
Contraintes:
  • Requête encodée au format UTF-8
  • 1 emoji comptera pour 2 caractères
  • La longueur max passe de 160 à 70 caractères par SMS (67 caractères si SMS Long)
  • Certains opérateurs ne supportent pas l'UCS2 (par exemple BOUYGUES en France), les caractères non supportés peuvent alors être supprimés du message.
Utiliser la valeur 1
numAzur Number Non Dans le cadre d'une utilisation combinée entre SMS Azur et l'API, il est possible de forcer le numéro d'expéditeur à être le même que celui utilisé sur SMS Azur
Utiliser la valeur 1
domtom Number Non Les envois vers les préfixes opérateurs à destination des DOM TOM (ou DROM-COM) sans l'indicatif pays associé (ex: +262 pour La Réunion) seront acceptés par l'API mais ne pourront etre délivrés
Pour forcer leur traitement au tarif en vigueur, utiliser la valeur 1
sandbox Number Non Activation du mode "bac à sable"
Ce champ permet de ne pas envoyer réellement les SMS lors de la requête
Les envois ne sont pas facturés
Utiliser la valeur 1

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
tel String Numéro de téléphone associé au code retour
message String Libellé correspondant au tableau des erreurs
sandbox Number Si 'sandbox' était dans les paramètres d'appels alors sa valeur est 1
Sinon le paramètre n'est pas affiché du tout
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <etat1>
        <code1>0</code1>
        <tel1>33601020304</tel1>
        <message1>Votre message a bien ete envoye</message1>
    </etat1>
    <etat2>
        <code2>0</code2>
        <tel2>33601020304</tel2>
        <message2>Votre message a bien ete envoye</message2>
    </etat2>        
</etat>     
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <etat1>
        <code1>21</code1>
        <tel1>33601020304</tel1>
        <message1>Le numéro de téléphone n'est pas attribué!</message1>
    </etat1>
    <etat2>
        <code2>11</code2>
        <tel2>33601020304</tel2>
        <message2>Le numero de telephone est dans la liste noire!</message2>
    </etat2>        
</etat> 

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&num1=33601020304&num2=33601020305&num3=33601020306&sms=Bonjour! Bienvenue sur iSendPro!&emetteur=isendpro'   
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$url = 'https://www.isendpro.com/cgi-bin/';

$ch = curl_init();
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num1'       => '33601020304',  
    'num2'       => '33601020305',      
    'sms'       =>  'Bonjour! Bienvenue sur iSendPro!',
    'emetteur'  =>  'isendpro'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => array('Content-type: multipart/form-data'),
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['tel'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Erreur specifique au numero de telephone  
        if ($value['code'.$cpt]!=0){
            echo 'Code: '.$value['code'.$cpt];
            echo $sautligne;
            echo 'message: '.$value['message'.$cpt];
            echo $sautligne;
            echo 'tel: '.$value['tel'.$cpt];                
            echo $sautligne;
        // Envoi OK
        }else{
            echo 'Code: '.$value['code'.$cpt];
            echo $sautligne;
            echo 'message: '.$value['message'.$cpt];
            echo $sautligne;  
            echo 'tel: '.$value['tel'.$cpt];                
            echo $sautligne;                
        }
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num1':     '33601020304',  
    'num2':     '33601020305', 
    'sms':      'Bonjour! Bienvenue sur iSendPro!',
    'emetteur': 'isendpro'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('tel'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Erreur specifique au numero de telephone  
            if repetat['code'+cpt]!=0:
                print 'Code: '+repetat['code'+cpt]
                print 'Message: '+repetat['message'+cpt]
                print 'Tel: '+repetat['tel'+cpt]        
            # Envoi OK
            else:
                print 'Code: '+repetat['code'+cpt]
                print 'Message: '+repetat['message'+cpt]
                print 'Tel: '+repetat['tel'+cpt]   
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;
    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num1",     "33601020304");
        paramsTablo.put("num2",     "33601020305");
        paramsTablo.put("num3",     "33601020306"); 
        paramsTablo.put("sms",      "Bonjour! Bienvenue sur ".$marque_nom_court."!");
        paramsTablo.put("emetteur", "isendpro");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();            
            try {                    
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("code")){
                                    if(n2Value.equals("0")){
                                        erreur=0;
                                    }
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Envoi de SMS multiples à un répertoire

Envoi d'un message à plusieurs destinataires par requête via un répertoire de numéros de téléphone

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
repertoireId String Oui Identifiant du répertoire cible
sms String Oui Message envoyé au destinataire
1 SMS peut contenir jusqu'à 160 caractères
Possibilité d'envoyer des messages plus long (jusqu'à 6 SMS concaténés) pour un total de 918 caractères (6 x 153)
(7 caractères étant réserves pour des entêtes techniques)
Le cout unitaire sera alors multiplié par le nombre de SMS correspondants
Cf Argument smslong
emetteur String Non Emetteur du message
Par défaut, un numéro court sur 5 chiffres
Ex: 36007
Contraintes:
  • Entre 4 et 11 caractères
  • Chiffre entre 0 et 9
  • Uniquement lettre alphabet français sans accent
  • Pas de caractères spéciaux
  • Pas uniquement des chiffres
  • Sauf si nostop=1, ajout automatique de la mention STOP XXXXX en fin de message et augmente de 12 caractères la longueur globale
tracker String Non Argument généré par le client afin d'associer les accusés de réception ou les réponses
Longueur max de 50 caractères
Ex: order-ab78pq9
smslong Number Non Argument indiquant le nombre de SMS concaténés
Si le nombre de SMS exactes est connu alors indiquer ce nombre
Si le nombre calculé par l'API diffère alors un message d'erreur sera retourné (code 32)
Pour éviter ce controle et autoriser les messages sur plus de 1 SMS, utiliser la valeur 999
nostop Number Non Argument pour ne pas afficher automatiquement la mention STOP SMS en fin de message
Utiliser la valeur 1
date_envoi Date au format
YYYY-MM-DD hh:mm
Non Date à laquelle le message sera envoyé
Envoi immédiat si non renseigné
gmt_zone Fuseau horaire Non A renseigner, en cas d'envoi différé sur un autre fuseau horaire que celui par défaut (Europe/London)
ucs2 Number Non Permet l'utilisation de caractères en alphabet non latin (russe, chinois, arabe, etc) et/ou avec des émojis
Contraintes:
  • Requête encodée au format UTF-8
  • 1 emoji comptera pour 2 caractères
  • La longueur max passe de 160 à 70 caractères par SMS (67 caractères si SMS Long)
  • Certains opérateurs ne supportent pas l'UCS2 (par exemple BOUYGUES en France), les caractères non supportés peuvent alors être supprimés du message.
Utiliser la valeur 1
numAzur Number Non Dans le cadre d'une utilisation combinée entre SMS Azur et l'API, il est possible de forcer le numéro d'expéditeur à être le même que celui utilisé sur SMS Azur
Utiliser la valeur 1
domtom Number Non Les envois vers les préfixes opérateurs à destination des DOM TOM (ou DROM-COM) sans l'indicatif pays associé (ex: +262 pour La Réunion) seront acceptés par l'API mais ne pourront etre délivrés
Pour forcer leur traitement au tarif en vigueur, utiliser la valeur 1
sandbox Number Non Activation du mode "bac à sable"
Ce champ permet de ne pas envoyer réellement les SMS lors de la requête
Les envois ne sont pas facturés
Utiliser la valeur 1

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
repertoireId String Identifiant du répertoire cible
message String Libellé correspondant au tableau des erreurs
sandbox Number Si 'sandbox' était dans les paramètres d'appels alors sa valeur est 1
Sinon le paramètre n'est pas affiché du tout
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>0</code>
    <message>Votre message a bien ete envoye</message>
    <repertoireId>123456789</repertoireId>
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>108</code>
    <message>Cet identifiant ne correspond a aucun repertoire!</message>
    <repertoireId>123456789</repertoireId>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&repertoireId=123456789&sms=Bonjour! Bienvenue sur iSendPro!&emetteur=isendpro'      
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$url = 'https://www.isendpro.com/cgi-bin/';

$ch = curl_init();
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'repertoireId'  =>  '123456789',
    'sms'           =>  'Bonjour! Bienvenue sur iSendPro!',
    'emetteur'      =>  'isendpro'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => array('Content-type: multipart/form-data'),
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['repertoireId'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Erreur specifique au repertoire
        if ($value['code'.$cpt]!=0){
            echo 'Code: '.$value['code'.$cpt];
            echo $sautligne;
            echo 'message: '.$value['message'.$cpt];
            echo $sautligne;
            echo 'repertoireId: '.$value['repertoireId'.$cpt];                
            echo $sautligne;
        // Envoi OK
        }else{
            echo 'Code: '.$value['code'.$cpt];
            echo $sautligne;
            echo 'message: '.$value['message'.$cpt];
            echo $sautligne;  
            echo 'repertoireId: '.$value['repertoireId'.$cpt];                
            echo $sautligne;                
        }
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'repertoireId': '123456789',
    'sms':          'Bonjour! Bienvenue sur iSendPro!',
    'emetteur':     'isendpro'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('repertoireId'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Erreur specifique au repertoire
            if repetat['code'+cpt]!=0:
                print 'Code: '+repetat['code'+cpt]
                print 'Message: '+repetat['message'+cpt]
                print 'repertoireId: '+repetat['repertoireId'+cpt]        
            # Envoi OK
            else:
                print 'Code: '+repetat['code'+cpt]
                print 'Message: '+repetat['message'+cpt]
                print 'repertoireId: '+repetat['repertoireId'+cpt]   
                
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;
    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",        "a296464ce012b8ab710a");
        paramsTablo.put("repertoireId", "123456789"); 
        paramsTablo.put("sms",          "Bonjour! Bienvenue sur ".$marque_nom_court."!");
        paramsTablo.put("emetteur",     "isendpro");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();            
            try {                    
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("code")){
                                    if(n2Value.equals("0")){
                                        erreur=0;
                                    }
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Création de lien court

Création d'un lien court à partir d'une url longue
Remarque: Ces liens courts ont une durée de vie de 1 mois à compter de leur création

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
type_shortlink Number Non Type d'url raccourcie
0: www.sms.ht (valeur par défaut)
1: url2.fr
shortlink String Oui Url à raccourcir

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs (cf Annexes)
shortlink String Url raccourcie
Format: www.sms.ht/[XXXX] ou url2.fr/[XXXX]
Ex: www.sms.ht/6gHw ou url2.fr/6gHw
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>250</code>
    <message>Le lien court a ete genere</message>
    <shortlink>www.sms.ht/6X8Y</shortlink>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&shortlink=https://www.google.com/'         
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$url = 'https://www.isendpro.com/cgi-bin/';

$ch = curl_init();
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'shortlink' =>  'https://www.google.com/'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => array('Content-type: multipart/form-data'),
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['shortlink'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'Message: '.$value['message'];
        echo $sautligne;
        echo 'shortlink: '.$value['shortlink'];
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'shortlink':    'https://www.google.com/'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('shortlink'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'Code: '+repetat['code'+cpt]
            print 'Message: '+repetat['message'+cpt]
            print 'shortlink: '+repetat['shortlink'+cpt]   
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;
    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",        "a296464ce012b8ab710a");
        paramsTablo.put("shortlink",    "https://www.google.com/");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();            
            try {                    
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("code")){
                                    if(n2Value.equals("0")){
                                        erreur=0;
                                    }
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Rapport de campagne CSV

Récupération de la liste des envois sur une période donnée dans un fichier .csv

Pour des raisons de performance, cette fonctionnalité ne peut pas etre sollicitée plus de 10 fois par heure
Dépassé ce quota, vous obtiendrez un message d'erreur (code 260)

Pour récupérer les informations liées aux accusés de réceptions ou aux réponses des destinataires, merci d'utiliser nos webhooks dédiés

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
rapportCampagne Number Oui Utiliser la valeur suivante:
  • 1: Détails par envoi
  • 2: Regroupement par jour et par émetteur
date_deb Date au format
YYYY-MM-DD hh:mm
Oui Date de début des envois de la sélection
date_fin Date au format
YYYY-MM-DD hh:mm
Oui Date de fin des envois de la sélection

Réponse

La réponse est un fichier CSV zippé avec les colonnes suivantes suivant la valeur de l'argument rapportCampagne

Exemples de scripts

Paramètre Type Détails
Date d'envoi date Date d'envoi du SMS
Emetteur String Emeteur du message
Destinataire String Numéro de téléphone destinataire du message
Message String Message envoyé
Information complémentaire String Indique l'opérateur et l'état du message
Infos details String Indique l'accusé de réception fourni par l'opérateur
Statut String Statut du message
SMS retour String Eventuelle réponse du destinataire
Canal String Haute Qualite
Prix Number Cout du message
STOP Number Indique si le destinataire a répondu STOP
Tracker String Argument éventuellement fourni lors de l'envoi pour une identification simplifiée
Operateur String Opérateur associé au destinataire
Date AR date Date de réception de l'accusé de réception opérateur
Code erreur Number Code associé à l'accusé de réception
Paramètre Type Détails
Date d'envoi date Date d'envoi du SMS
Campagne String Libellé de la campagne
Répertoire String Répertoire(s) associé(s) aux envois
Emetteur String Emeteur du message
Message String Message de la campagne si hors API
Pays String Pays des destinataires
Envois prévus Number Quantité d'envois prévus
Envois reels Number Quantité d'envois réels
Envois non aboutis Number Quantité d'envois non aboutis
SMS Long Number Nombre de SMS pour le message
STOP Number Quantités de STOP recus
clics Number Quantités de clics
Visiteur unique Number Quantités de visiteurs uniques
Taux visite Number Taux de visite
Cout HT Number Cout de la campagne en euros HT

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&rapportCampagne=1&date_deb=2020-01-01 10:00&date_fin=2020-01-07 10:00'      
 -o rapportCampagne.zip
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();
$zipName = 'rapportCampagne.zip';
$zipDirectory = '/VOTRE_REPERTOIRE/';
$fp = fopen($zipDirectory.$zipName, 'w');

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'             =>  'a296464ce012b8ab710a',
    'rapportCampagne'   =>  1,
    'date_deb'          =>  '2020-01-01 10:00',
    'date_fin'          =>  '2020-01-07 20:00',
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
curl_setopt($ch, CURLOPT_FILE, $fp);

$response = curl_exec($ch);
fwrite($fp, $response);

curl_close($ch);
fclose($fp);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html

// Unzip du fichier
$za = new ZipArchive(); 
$za->open($zipDirectory.$zipName); 
for( $i = 0; $i < $za->numFiles; $i++ ){ 
    $stat = $za->statIndex( $i ); 
    $fileName = basename($stat['name']);
    print_r($fileName.PHP_EOL);     
    $za->extractTo($zipDirectory);
    $za->close();    
    // Lecture du fichier csv dans le zip
    $fn = fopen($fileName, 'r');    
    // Liste des titres de colonnes
    $titres = fgetcsv($fn, 1000, ';');
    while (($data = fgetcsv($fn, 1000, ';')) !== FALSE){
        foreach($data as $i => $d){
            if($d){
                // Affichage des donnees de la ligne
                echo $titres[$i].' => '.$d.PHP_EOL;
            }            
        }
        // Saut de ligne
        echo PHP_EOL;
    }   
    // Suppression du fichier .csv
    unlink($zipDirectory.$fileName);
}
// Suppression du fichier .zip
unlink($zipDirectory.$zipName);
?>
####################################################################################
#- Envoi requete
####################################################################################
import shutil
import requests
import xmltodict
import types
import zipfile
import os

zipName = 'rapportCampagne.zip'
zipDirectory = '/VOTRE_REPERTOIRE/'

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':            'a296464ce012b8ab710a',
    'rapportCampagne':  1,
    'date_deb':         '2020-01-01 10:00',
    'date_fin':         '2020-01-07 20:00',
}

response = requests.post(url, params, stream=True)
with open(zipDirectory+zipName, 'wb') as f:
    response.raw.decode_content = True
    shutil.copyfileobj(response.raw, f) 

####################################################################################
#- Traitement du retour
####################################################################################
myzipfile = zipfile.ZipFile(zipDirectory+zipName)
for fileName in myzipfile.namelist():
    # Unzip du fichier vers zipDirectory
    with zipfile.ZipFile(zipDirectory+zipName, 'r') as zip_ref:
        zip_ref.extractall(zipDirectory)    
    # Lecture du fichier csv dans le zip
    fichier = open(zipDirectory+fileName)   
    lines = fichier.readlines()    
    firstLine=1
    for line in lines:
        line=line.strip()   
        line=line.split(';')    
        if firstLine:
            # Liste des titres de colonnes
            firstLine=0
            titres=line
        else:
            i=0
            for data in line:
                if data:
                    # Affichage des donnees de la ligne
                    print titres[i]+' => '+data
                    i+=1 

    # Suppression du fichier .csv
    os.remove(zipDirectory+fileName)

# Suppression du fichier .zip
os.remove(zipDirectory+zipName)
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.io.BufferedReader;
import java.io.FileReader;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;
    /**
     * Size of the buffer to read/write data
     */
    private static final int BUFFER_SIZE = 4096;    

    public static void main(String[] args) throws IOException {

        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        var zipName = "rapportCampagne.zip";
        var zipDirectory = "/VOTRE_REPERTOIRE/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("rapportCampagne",  "1");
        paramsTablo.put("date_deb",         "2020-01-01 10:00");
        paramsTablo.put("date_fin",         "2020-01-07 20:00");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            File myzipfile = new File(zipDirectory+zipName);
            OutputStream outStream = new FileOutputStream(myzipfile);
            InputStream inputStream = con.getInputStream();
            int read;
            byte[] bytes = new byte[1024];
            while ((read = inputStream.read(bytes)) != -1) {
                outStream.write(bytes, 0, read);
            }  
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////            
            File destDir = new File(zipDirectory);

            ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipDirectory+zipName));
            ZipEntry entry = zipIn.getNextEntry();
            // iterates over entries in the zip file
            while (entry != null) {
                File mycsvfile = new File(zipDirectory+entry.getName());
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(zipDirectory+entry.getName()));
                byte[] bytesIn = new byte[BUFFER_SIZE];
                int read2 = 0;
                while ((read2 = zipIn.read(bytesIn)) != -1) {
                    bos.write(bytesIn, 0, read2);
                }
                bos.close();              
                        
                BufferedReader reader;
                String lineD;
                String data;  		
                ArrayList<String> titres=new ArrayList<String>();
                reader = new BufferedReader(new FileReader(zipDirectory+entry.getName()));
                String line = reader.readLine();
                // Liste des titres de colonnes
                if (line != null) {	
                    lineD = line.trim();
                    titres=new ArrayList<String>(Arrays.asList(lineD.split(";")));    
                }
                while (line != null) {				
                    line = reader.readLine();
                    if (line != null) {	
                        lineD = line.trim();
                        ArrayList<String> lineList = new ArrayList<String>(Arrays.asList(lineD.split(";")));                  
                        for (int i = 0; i < lineList.size(); i++) {
                            data = (String)lineList.get(i);            
                            data = data.trim();
                            System.out.println(titres.get(i)+" => "+data);
                        }
                        System.out.println(" ");
                    }
                }
                reader.close(); 
                // Suppression du fichier .csv
                mycsvfile.delete();

                zipIn.closeEntry();
                entry = zipIn.getNextEntry();            
            }
            zipIn.close();
            // Suppression du fichier .zip
            myzipfile.delete();            
            
        } finally {
            con.disconnect();
        }
    }  
}


Rapport de campagne JSON

Récupération de la liste des envois sur une période donnée, sur un numéro de téléphone et un tracker en JSON
La requête ne peut concerner plus de 1000 données à la fois sinon un message d'erreur sera retourné
Si la requete est trop grande alors il faudra utiliser les champs select_deb et select_pas

Pour des raisons de performance, cette fonctionnalité ne peut pas etre sollicitée plus de 10 fois par heure
Dépassé ce quota, vous obtiendrez un message d'erreur (code 260)

Pour récupérer les informations liées aux accusés de réceptions ou aux réponses des destinataires, merci d'utiliser nos webhooks dédiés

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
rapportCampagneData Number Oui Utiliser la valeur 1
date_deb Date au format
YYYY-MM-DD hh:mm
Oui Date de début des envois de la sélection
date_fin Date au format
YYYY-MM-DD hh:mm
Oui Date de fin des envois de la sélection
select_deb Number Non Ce nombre indique la position de début des résultats de la sélection
Ex: select_deb=1000 pour obtenir les données après les 1000ers résultats
select_pas Number Non Ce nombre indique la quantité de résultats dans la sélection
La valeur maximum acceptée est 1000
Ex: select_pas=500 pour obtenir 500 données
select_msisdn Array Non Ajout de cette liste dans la requête de rapport de campagne Au format international sans le +
Ex: [ "33601020304", "33601020305", "33601020306" ]
select_tracker String Non Ajout de ce critère dans la requête de rapport de campagne
La recherche sera étendue à tous les trackers commençant par le tracker indiqué
Ex: Si select_tracker=camp001 alors seront recherchés les trackers camp001-001 et camp001-002

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
tel String Numéro de téléphone associé au code retour
message String Libellé correspondant au tableau des erreurs
historySender String Emetteur du message
historyMsg String Message envoyé au destinataire
historyDate String Date d'envoi du message au destinataire au format AAAA-MM-JJ HH:MM:SS
historyTracker String tracker associé au message envoyé au destinataire
historyOperator String Opérateur associé au message envoyé au destinataire
historyResponse String Réponse éventuelle retournée par le destinataire
Si aucune réponse la valeur est "-"
historyDeliveryAR String Indique si le message a bien été livré
Les valeurs possibles sont:
  • OK
  • NOK
historyDeliveryARtime String Date de la notification de livraison du message au destinataire au format AAAA-MM-JJ HH:MM:SS
historyDelivery1 String Complément d'information sur la notification
historyDelivery2 String Complément d'information sur la notification
historyNbSMSlong Number Nombre de SMS pour ce message
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <etat1>
        <code1>207</code1>
        <tel1>33601020304</tel1>
        <message1>Historique des envois</message1>        
        <historySender1>MaSociete</historySender1>
        <historyMsg1>Votre test 1 a bien été recu</historyMsg1>
        <historyDate1>2020-04-14 14:58:02</historyDate1>
        <historyTracker1>camp001-002</historyTracker1>
        <historyOperator1>SFR</historyOperator1>
        <historyResponse1>-</historyResponse1>
        <historyDeliveryAR1>OK</historyDeliveryAR1>
        <historyDeliveryARtime1>2020-04-14 14:58:03</historyDeliveryARtime1>
        <historyDelivery11>SFR: SMS remis</historyDelivery11>
        <historyDelivery21>Message for 0033601020304 has been delivered</historyDelivery21>
        <historyNbSMSlong1>1</historyNbSMSlong1>
    </etat1>    
    <etat2>
        <code2>207</code2>
        <tel2>33614222448</tel2>
        <message2>Historique des envois</message2>
        <historySender2>MaSociete</historySender2>
        <historyMsg2>Les Soldes commencent fort : 10E offerts pour les premiers arrivés sur http://cdiscount.sms.ht/?XTNP Et d'autres offres exclusives !ÕSTOP 38085</historyMsg2>
        <historyDate2>2020-01-08 07:41:52</historyDate2>
        <historyTracker2>camp001-001</historyTracker2>
        <historyOperator2>SFR</historyOperator2>
        <historyResponse2>-</historyResponse2>
        <historyDeliveryAR2>OK</historyDeliveryAR2>
        <historyDeliveryARtime2>2020-01-08 07:41:58</historyDeliveryARtime2>
        <historyDelivery12>SFR: SMS remis</historyDelivery12>
        <historyDelivery22>Message for 0033614222448 has been delivered</historyDelivery22>
        <historyNbSMSlong2>1</historyNbSMSlong2>
    </etat2>
</etat> 

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&rapportCampagneData=1&date_deb=2020-01-01 10:00&date_fin=2020-01-07 10:00&select_tracker=camp001&select_deb=0&select_pas=500'      
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();
$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'rapportCampagneData'   =>  '1',
    'date_deb'              =>  '2020-01-01 00:00',
    'date_fin'              =>  '2020-01-10 00:00',
    'select_deb'            =>  '0',
    'select_pas'            =>  '500',
    'select_tracker'        =>  'camp001'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['tel'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // infos de retour
        echo 'Code: '.$value['code'.$cpt];
        echo $sautligne;
        echo 'Message: '.$value['message'.$cpt];
        echo $sautligne;
        echo 'Tel: '.$value['tel'.$cpt];
        echo $sautligne;
        echo $sautligne;
        echo 'historySender: '.$repetat->historySender;        
        echo 'historyMsg: '.$value['historyMsg'.$cpt];
        echo $sautligne;        
        echo 'historyDate: '.$value['historyDate'.$cpt];
        echo $sautligne;        
        echo 'historyTracker: '.$value['historyTracker'.$cpt];
        echo $sautligne;        
        echo 'historyOperator: '.$value['historyOperator'.$cpt];
        echo $sautligne;        
        echo 'historyResponse: '.$value['historyResponse'.$cpt];
        echo $sautligne;        
        echo 'historyDeliveryAR: '.$value['historyDeliveryAR'.$cpt];
        echo $sautligne;        
        echo 'historyDeliveryARtime: '.$value['historyDeliveryARtime'.$cpt];
        echo $sautligne;        
        echo 'historyDelivery1: '.$value['historyDelivery1'.$cpt];
        echo $sautligne;        
        echo 'historyDelivery2: '.$value['historyDelivery2'.$cpt];
        echo $sautligne; 
        echo 'historyNbSMSlong: '.$value['historyNbSMSlong'.$cpt];
        echo $sautligne;                 
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid'                 :  'a296464ce012b8ab710a',
    'rapportCampagneData'   :  '1',
    'date_deb'              :  '2020-01-01 00:00',
    'date_fin'              :  '2020-01-10 00:00',
    'select_deb'            :  '0',
    'select_pas'            :  '500',
    'select_tracker'        :  'camp001'    
}
response = requests.post(url, params)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('tel'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'Code: '+repetat['code'+cpt]
            print 'Message: '+repetat['message'+cpt]
            print 'Tel: '+repetat['tel'+cpt]   
            print 'historySender: '+repetat['historySender']         
            print 'historyMsg: '+repetat['historyMsg'+cpt]       
            print 'historyDate: '+repetat['historyDate'+cpt]
            print 'historyTracker: '+repetat['historyTracker'+cpt]   
            print 'historyOperator: '+repetat['historyOperator'+cpt]
            print 'historyResponse: '+repetat['historyResponse'+cpt]
            print 'historyDeliveryAR: '+repetat['historyDeliveryAR'+cpt]
            print 'historyDeliveryARtime: '+repetat['historyDeliveryARtime'+cpt]
            print 'historyDelivery1: '+repetat['historyDelivery1'+cpt]
            print 'historyDelivery2: '+repetat['historyDelivery2'+cpt]    
            print 'historyNbSMSlong: '+repetat['historyNbSMSlong'+cpt]                            
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;
    
    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                "a296464ce012b8ab710a");
        paramsTablo.put("rapportCampagneData",  "1");
        paramsTablo.put("date_deb",             "2020-01-01 10:00");
        paramsTablo.put("date_fin",             "2020-01-07 20:00");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();            
            line = line.replace("&", "&#38;");            
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("code")){
                                    if(n2Value.equals("0")){
                                        erreur=0;
                                    }
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Comptage du nombre de caractères et de SMS

Comptage de la longueur d'un message en nombre de caractères et nombre de SMS avant l'envoi réel

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
sms String Oui Message envoyé au destinataire
1 SMS peut contenir jusqu'à 160 caractères
Possibilité d'envoyer des messages plus long (jusqu'à 6 SMS concaténés) pour un total de 918 caractères (6 x 153)
(7 caractères étant réserves pour des entêtes techniques)
Le cout unitaire sera alors multiplié par le nombre de SMS correspondants
Cf Argument smslong
emetteur String Non Emetteur du message
Par défaut, un numéro court sur 5 chiffres
Ex: 36007
Contraintes:
  • Entre 4 et 11 caractères
  • Chiffre entre 0 et 9
  • Uniquement lettre alphabet français sans accent
  • Pas de caractères spéciaux
  • Pas uniquement des chiffres
  • Sauf si nostop=1, ajout automatique de la mention STOP XXXXX en fin de message et augmente de 12 caractères la longueur globale
comptage Number Oui Utiliser la valeur 1

Réponse

Paramètre Type Détails
tel String Numéro de téléphone associé au code retour
nb_sms number Nombre de SMS pour contenir le message
nb_caractere number Nombre de caractères pour contenir le message
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <tel>33601020304</tel>
    <nb_sms>1</nb_sms>
    <nb_caractere>43</nb_caractere>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&num=33601020304&sms=Bonjour! Bienvenue sur iSendPro!&emetteur=isendpro&comptage=1'       
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$url = 'https://www.isendpro.com/cgi-bin/';

$ch = curl_init();
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'num'           =>  '33601020304',
    'sms'           =>  'Bonjour! Bienvenue sur iSendPro!',
    'emetteur'      =>  'isendpro',
    'comptage'      =>  1
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => array('Content-type: multipart/form-data'),
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['tel'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Erreur du retour
        echo 'tel: '.$value['tel'];
        echo $sautligne;
        echo 'nb_sms: '.$value['nb_sms'];
        echo $sautligne;
        echo 'nb_caractere: '.$value['nb_caractere'];
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num':      '33601020304',
    'sms':      'Bonjour! Bienvenue sur iSendPro!',
    'emetteur': 'isendpro',
    'comptage': 1
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('tel'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'tel: '+repetat['tel'+cpt]
            print 'nb_sms: '+repetat['nb_sms'+cpt]
            print 'nb_caractere: '+repetat['nb_caractere'+cpt]
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      "33601020304");
        paramsTablo.put("sms",      "Bonjour! Bienvenue sur ".$marque_nom_court."!");
        paramsTablo.put("emetteur", "isendpro"); 
        paramsTablo.put("comptage", "1");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("nb_sms")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Consultation du crédit

Consultation du crédit restant en quantité de SMS ou en euros Ht

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
credit Number Oui Number indiquant le type de crédit restant
  • 1: Pour le montant en euros HT
  • 2: Pour la quantité de SMS

Réponse

Paramètre Type Détails
credit String Nombre à virgule indiquant le crédit restant en euros HT
Ex: 561.20
quantite Number Nombre indiquant le nombre de crédits restants en quantité de SMS
Ex: 8974
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <credit>7.327</credit>
    <quantite>183</quantite>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&credit=2'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$url = 'https://www.isendpro.com/cgi-bin/';

$ch = curl_init();
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'credit'    =>  2
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => array('Content-type: multipart/form-data'),
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['credit'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos du retour
        echo 'credit: '.$value['credit'];
        echo $sautligne;
        if (isset($value['quantite'])){
            echo 'quantite: '.$value['quantite'];
            echo $sautligne;
        }
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid'     : 'a296464ce012b8ab710a',
    'credit'    : 2
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('credit'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'credit: '+repetat['credit'+cpt]
            if repetat.has_key('quantite'+cpt):
                print 'quantite: '+repetat['quantite'+cpt]
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("credit",   "2");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("credit")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Récupération du prix unitaire par pays

Récupération du prix unitaire par pays en euros HT

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
countryCode String Oui Indicatif international du pays sans le +
getPrice String Oui Utiliser la valeur '1'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
countryCode Number Indicatif international du pays sans le +
accountPrice String Prix unitaire en euros HT avec le point (.) comme séparateur des centimes
Ex: 0.067
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>251</code>
    <message>Le prix unitaire</message>
    <countryCode>33</countryCode>
    <accountPrice>0.04</accountPrice>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&countryCode=33&getPrice=1'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$url = 'https://www.isendpro.com/cgi-bin/';

$ch = curl_init();
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'countryCode'   =>  '33',
    'getPrice'      =>  '1' 
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => array('Content-type: multipart/form-data'),
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['countryCode'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'Message: '.$value['message'];
        echo $sautligne;
        echo 'countryCode: '.$value['countryCode'];
        echo $sautligne;
        echo 'accountPrice: '.$value['accountPrice'];
        echo $sautligne; 
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'countryCode':  '33',
    'getPrice':     '1'    
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('countryCode'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'Code: '+repetat['code'+cpt]
            print 'Message: '+repetat['message'+cpt]
            print 'countryCode: '+repetat['countryCode'+cpt] 
            print 'accountPrice: '+repetat['accountPrice'+cpt] 
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("countryCode",      "33");
        paramsTablo.put("getPrice",         "1");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("countryCode")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Appel au LookUp HLR

Service Payant Merci de vous rapprocher de votre conseiller commercial concernant la tarification de ce service
Appel au LookUp HLR pour tester les numéros de téléphone et obtenir l'opérateur associé en retour
Les numéros de téléphone sont placés dans les variables numXX est un entier allant de 1 à 500 au maximum

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num[X] String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
getHLR Number Oui Utiliser la valeur 1

Réponse

Paramètre Type Détails
tel String Numéro de téléphone associé au code retour
operateur String Chaine de caracteres indiquant la valeur de l'opérateur
Liste des opérateur:
  • ORAN: Orange
  • SFR: SFR
  • BOUY: Bouygues Telecom
  • FREE: FREE
  • NRJ: NRJ Mobile
  • LYCA: LYCA Mobile
  • CORI: Coriolis
  • MUND: Mundio
  • TRAT: Transatel
  • COMP: Completel
  • LEGO: Legos
  • MOQU: SFR
  • INTE: Numéro international
  • INVALIDE: Numéro non reconnu
Si le numéro est en liste noire alors il sera ajouté "-LISTE NOIRE" au nom de l'opérateur
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <etat1>
        <tel1>33601020304</tel1>
        <operateur1>INVALIDE</operateur1>
    </etat1>
    <etat2>
        <tel2>33601020305</tel2>
        <operateur2>BOUY</operateur2>
    </etat2>
    <etat3>
        <tel3>33601020306</tel3>
        <operateur3>BOUY-LISTE NOIRE</operateur3>
    </etat3>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&num1=33601020304&num2=33601020305&num3=33601020306&getHLR=1'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$url = 'https://www.isendpro.com/cgi-bin/';

$ch = curl_init();
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num1'      =>  '33601020304',
    'num2'      =>  '33601020305',    
    'getHLR'    =>  '1' 
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => array('Content-type: multipart/form-data'),
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['tel'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos du retour
        echo 'Tel: '.$value['tel'.$cpt];
        echo $sautligne;
        echo 'Operateur: '.$value['operateur'.$cpt];
        echo $sautligne;             
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num1':     '33601020304',
    'num2':     '33601020305', 
    'getHLR':   1
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('tel'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'tel: '+repetat['tel'+cpt]
            print 'operateur: '+repetat['operateur'+cpt]
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num1",     "33601020304");
        paramsTablo.put("num2",     "33601020305");
        paramsTablo.put("getHLR",   "1");   

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("tel")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Ajout en liste noire

Ajout de numéros de téléphone dans votre liste noire
Les numéros de téléphone sont placés dans les variables numXX est un entier allant de 1 à 500 au maximum

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num[X] String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
setlisteNoire Number Oui Utiliser la valeur 1

Réponse

Paramètre Type Détails
tel String Numéro de téléphone associé au code retour
listeNoire String Confirmation de l'ajout: OK
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <tel>33601020304</tel>
    <listeNoire>OK</listeNoire>    
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&num=33601020304&setlisteNoire=1'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'num'           =>  '33601020304',
    'setlisteNoire' =>  1
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['tel'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'tel: '.$value['tel'.$cpt];
        echo $sautligne;
        echo 'listeNoire: '.$value['listeNoire'.$cpt];
        echo $sautligne;  
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'num':          '33601020304',
    'setlisteNoire':1
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('tel'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'tel: '+repetat['tel'+cpt]
            print 'listeNoire: '+repetat['listeNoire'+cpt]
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",        "a296464ce012b8ab710a");
        paramsTablo.put("num",          "33601020304");
        paramsTablo.put("setlisteNoire","1");  

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("tel")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Suppression de la liste noire

Suppression de numéros de téléphone dans votre liste noire
Les numéros de téléphone sont placés dans les variables numXX est un entier allant de 1 à 500 au maximum

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num[X] String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
delListeNoire Number Oui Utiliser la valeur 1

Réponse

Paramètre Type Détails
tel String Numéro de téléphone associé au code retour
listeNoire String Retour sur la tentative de suppression
  • SUPPRESSION OK
  • SUPPRESSION NOK
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <tel>33601020304</tel>
    <listeNoire>SUPPRESSION OK</listeNoire>    
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <tel>33601020304</tel>
    <listeNoire>SUPPRESSION NOK</listeNoire>    
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&num=33601020304&delListeNoire=1'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'num'           =>  '33601020304',
    'delListeNoire' =>  1
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['tel'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'tel: '.$value['tel'.$cpt];
        echo $sautligne;
        echo 'listeNoire: '.$value['listeNoire'.$cpt];
        echo $sautligne;  
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'num':          '33601020304',
    'delListeNoire':1
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('tel'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'tel: '+repetat['tel'+cpt]
            print 'listeNoire: '+repetat['listeNoire'+cpt]
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",        "a296464ce012b8ab710a");
        paramsTablo.put("num",          "33601020304");
        paramsTablo.put("delListeNoire", "1");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("tel")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Récupération de la liste noire

Récupération de la liste des numéros de téléphone en liste noire dans un fichier .csv

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
getListeNoire Number Oui Utiliser la valeur 1

Réponse

La réponse est un fichier CSV zippé avec une seule colonne contenant le numéro de téléphone

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&num=33601020304&getListeNoire=1'
 -o listenoire.zip
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();
$zipName = 'listenoire.zip';
$zipDirectory = '/VOTRE_REPERTOIRE/';
$fp = fopen($zipDirectory.$zipName, 'w');

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'getListeNoire' =>  1
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
curl_setopt($ch, CURLOPT_FILE, $fp);

$response = curl_exec($ch);
fwrite($fp, $response);

curl_close($ch);
fclose($fp);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html

// Unzip du fichier
$za = new ZipArchive(); 
$za->open($zipDirectory.$zipName); 
for( $i = 0; $i < $za->numFiles; $i++ ){ 
    $stat = $za->statIndex( $i ); 
    $fileName = basename($stat['name']);
    print_r($fileName.PHP_EOL);     
    $za->extractTo($zipDirectory);
    $za->close();    
    // Lecture du fichier csv dans le zip
    $fn = fopen($fileName, 'r');    
    // Liste des titres de colonnes
    $titres = fgetcsv($fn, 1000, ';');
    while (($data = fgetcsv($fn, 1000, ';')) !== FALSE){
        foreach($data as $i => $d){
            if($d){
                // Affichage des donnees de la ligne
                echo $titres[$i].' => '.$d.PHP_EOL;
            }            
        }
        // Saut de ligne
        echo PHP_EOL;
    }   
    // Suppression du fichier .csv
    unlink($zipDirectory.$fileName);
}
// Suppression du fichier .zip
unlink($zipDirectory.$zipName);
?>
####################################################################################
#- Envoi requete
####################################################################################
import shutil
import requests
import xmltodict
import types
import zipfile
import os

zipName = 'listenoire.zip'
zipDirectory = '/VOTRE_REPERTOIRE/'

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':            'a296464ce012b8ab710a',
    'getListeNoire':    1
}

response = requests.post(url, params, stream=True)
with open(zipDirectory+zipName, 'wb') as f:
    response.raw.decode_content = True
    shutil.copyfileobj(response.raw, f) 

####################################################################################
#- Traitement du retour
####################################################################################
myzipfile = zipfile.ZipFile(zipDirectory+zipName)
for fileName in myzipfile.namelist():
    # Unzip du fichier vers zipDirectory
    with zipfile.ZipFile(zipDirectory+zipName, 'r') as zip_ref:
        zip_ref.extractall(zipDirectory)    
    # Lecture du fichier csv dans le zip
    fichier = open(zipDirectory+fileName)   
    lines = fichier.readlines()    
    firstLine=1
    for line in lines:
        line=line.strip()   
        line=line.split(';')    
        if firstLine:
            # Liste des titres de colonnes
            firstLine=0
            titres=line
        else:
            i=0
            for data in line:
                if data:
                    # Affichage des donnees de la ligne
                    print titres[i]+' => '+data
                    i+=1 

    # Suppression du fichier .csv
    os.remove(zipDirectory+fileName)

# Suppression du fichier .zip
os.remove(zipDirectory+zipName)        
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.io.BufferedReader;
import java.io.FileReader;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;
    /**
     * Size of the buffer to read/write data
     */
    private static final int BUFFER_SIZE = 4096;    

    public static void main(String[] args) throws IOException {

        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        var zipName = "listenoire.zip";
        var zipDirectory = "/VOTRE_REPERTOIRE/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("getListeNoire",    "1");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            File myzipfile = new File(zipDirectory+zipName);
            OutputStream outStream = new FileOutputStream(myzipfile);
            InputStream inputStream = con.getInputStream();
            int read;
            byte[] bytes = new byte[1024];
            while ((read = inputStream.read(bytes)) != -1) {
                outStream.write(bytes, 0, read);
            }  
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////            
            File destDir = new File(zipDirectory);

            ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipDirectory+zipName));
            ZipEntry entry = zipIn.getNextEntry();
            // iterates over entries in the zip file
            while (entry != null) {
                File mycsvfile = new File(zipDirectory+entry.getName());
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(zipDirectory+entry.getName()));
                byte[] bytesIn = new byte[BUFFER_SIZE];
                int read2 = 0;
                while ((read2 = zipIn.read(bytesIn)) != -1) {
                    bos.write(bytesIn, 0, read2);
                }
                bos.close();              
                        
                BufferedReader reader;
                String lineD;
                String data;  		
                ArrayList<String> titres=new ArrayList<String>();
                reader = new BufferedReader(new FileReader(zipDirectory+entry.getName()));
                String line = reader.readLine();
                // Liste des titres de colonnes
                if (line != null) {	
                    lineD = line.trim();
                    titres=new ArrayList<String>(Arrays.asList(lineD.split(";")));    
                }
                while (line != null) {				
                    line = reader.readLine();
                    if (line != null) {	
                        lineD = line.trim();
                        ArrayList<String> lineList = new ArrayList<String>(Arrays.asList(lineD.split(";")));                  
                        for (int i = 0; i < lineList.size(); i++) {
                            data = (String)lineList.get(i);            
                            data = data.trim();
                            System.out.println(titres.get(i)+" => "+data);
                        }
                        System.out.println(" ");
                    }
                }
                reader.close(); 
                // Suppression du fichier .csv
                mycsvfile.delete();

                zipIn.closeEntry();
                entry = zipIn.getNextEntry();            
            }
            zipIn.close();
            // Suppression du fichier .zip
            myzipfile.delete();            
            
        } finally {
            con.disconnect();
        }
    }  
}


Création d'un nouveau répertoire

Création d'un nouveau répertoire de numéros de téléphone

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
repertoireNom String Oui Nom du nouveau répertoire
repertoireEdit String Oui Utiliser la valeur 'create'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
repertoireId String Identifiant du répertoire créé
message String Libellé correspondant au tableau des erreurs
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>100</code>
    <message>Votre repertoire a ete cree!</message>
    <repertoireId>123456789</repertoireId>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&repertoireNom=MonNouveauRepertoire&repertoireEdit=create'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'             =>  'a296464ce012b8ab710a',
    'repertoireNom'     =>  'MonNouveauRepertoire',
    'repertoireEdit'    =>  'create'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['repertoireId'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne; 
        echo 'repertoireId: '.$value['repertoireId'];
        echo $sautligne;         
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':            'a296464ce012b8ab710a',
    'repertoireNom':    'repertoireNom',
    'repertoireEdit':   'create'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('repertoireId'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'Code: '+repetat['code'+cpt]
            print 'Message: '+repetat['message'+cpt]
            print 'RepertoireId: '+repetat['repertoireId'+cpt]            
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("repertoireNom",    "repertoireNom");
        paramsTablo.put("repertoireEdit",   "create");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("repertoireId")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Ajout dans un répertoire

Ajout de numéros de téléphone dans un répertoire

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num[X] String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
repertoireId String Oui Identifiant du répertoire à modifier
repertoireEdit String Oui Utiliser la valeur 'add'
champ[Y]_[X] Array Non Liste des données à associer au champ pour chaque numéro
[Y] est à remplacer par un entier entre 1 et 27 inclus
[X] est à remplacer par la valeur associé au numéro à ajouter
Par défaut:
  • champ1 <=> Nom
  • champ2 <=> Champ A
  • champ27 <=> Champ Z
La position dans la liste des champs doit correspondre à celle du numéro de téléphone dans la liste des téléphones

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
repertoireId Number Identifiant du répertoire créé
tel String Numéro de téléphone associé au code retour
message String Libellé correspondant au tableau des erreurs
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <etat1>
        <code1>103</code1>
        <message1>Votre donnee a ete ajoutee dans le repertoire!</message1>
        <tel1>33601020304</tel1>
        <repertoireId1>123456789</repertoireId1>
    </etat1>
    <etat2>
        <code2>103</code2>
        <message2>Votre donnee a ete ajoutee dans le repertoire!</message2>
        <tel2>33601020305</tel2>
        <repertoireId2>123456789</repertoireId2>
    </etat2>
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <etat1>
        <code1>105</code1>
        <message1>La donnee est deja presente dans le repertoire!</message1>
        <tel1>33601020304</tel1>
        <repertoireId1>123456789</repertoireId1>
    </etat1>
    <etat2>
        <code2>105</code2>
        <message2>La donnee est deja presente dans le repertoire!</message2>
        <tel2>33601020305</tel2>
        <repertoireId2>123456789</repertoireId2>
    </etat2>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&repertoireEdit=add&repertoireId=39258&num1=33601020304&champ1_1=Pierre&champ2_1=Paris&num2=33601020305&champ1_2=Paul&champ2_2=Lyon&num3=33601020306&champ1_3=Paul&champ2_3=Lyon'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'             =>  'a296464ce012b8ab710a',
    'repertoireEdit'    =>  'add',
    'repertoireId'      =>  '159007',
    'num1'              =>  '33601020304',
    'num2'              =>  '33601020305',
    'num3'              =>  '33601020306',    
    'champ1_1'          =>  'Pierre',
    'champ1_2'          =>  'Paul',
    'champ1_3'          =>  'Jacques',    
    'champ2_1'          =>  'Paris',
    'champ2_2'          =>  'Lyon',
    'champ2_3'          =>  'Marseille'
); 
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['tel'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'Code: '.$value['code'.$cpt];
        echo $sautligne;
        echo 'message: '.$value['message'.$cpt];
        echo $sautligne; 
        echo 'tel: '.$value['tel'.$cpt];
        echo $sautligne;
        echo 'repertoireId: '.$value['repertoireId'];
        echo $sautligne;         
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':            'a296464ce012b8ab710a',
    'repertoireEdit':   'add',
    'repertoireId':     '39258',
    'num1':             '33601020304',
    'num2':             '33601020305',
    'num3':             '33601020306',    
    'champ1_1':         'Pierre',
    'champ1_2':         'Paul',
    'champ1_3':         'Jacques',    
    'champ2_1':         'Paris',
    'champ2_2':         'Lyon',
    'champ2_3':         'Marseille'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('tel'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'Code: '+repetat['code'+cpt]
            print 'Message: '+repetat['message'+cpt]
            print 'tel: '+repetat['tel'+cpt]
            print 'RepertoireId: '+repetat['repertoireId']   
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("repertoireEdit",   "add");
        paramsTablo.put("repertoireId",     "159094");
        paramsTablo.put("num1",             "33601020304");
        paramsTablo.put("num2",             "33601020305");
        paramsTablo.put("num3",             "33601020306");
        paramsTablo.put("champ1_1",         "Pierre");
        paramsTablo.put("champ1_2",         "Paul");
        paramsTablo.put("champ1_3",         "Jacques");
        paramsTablo.put("champ2_1",         "Paris");
        paramsTablo.put("champ2_2",         "Lyon");
        paramsTablo.put("champ2_3",         "Marseille");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("repertoireId")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Suppression dans un répertoire

Suppression de numéros de téléphone d'un répertoire

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
num[X] String Oui Numéro de téléphone du destinataire
Au format international sans le +
Ex: 33601020304
repertoireId String Oui Identifiant du répertoire à modifier
repertoireEdit String Oui Utiliser la valeur 'del'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
repertoireId Number Identifiant du répertoire créé
tel String Numéro de téléphone associé au code retour
message String Libellé correspondant au tableau des erreurs
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <etat1>
        <code1>106</code1>
        <message1>Votre donnee a ete supprimee du repertoire</message1>
        <tel1>33601020304</tel1>
        <repertoireId1>123456789</repertoireId1>
    </etat1>
    <etat2>
        <code2>106</code2>
        <message2>Votre donnee a ete supprimee du repertoire</message2>
        <tel2>33601020305</tel2>
        <repertoireId2>123456789</repertoireId2>
    </etat2>
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <etat1>
        <code1>107</code1>
        <message1>La donnee n'est pas presente dans le repertoire!</message1>
        <tel1>33601020304</tel1>
        <repertoireId1>123456789</repertoireId1>
    </etat1>
    <etat2>
        <code2>107</code2>
        <message2>La donnee n'est pas presente dans le repertoire!</message2>
        <tel2>33601020305</tel2>
        <repertoireId2>123456789</repertoireId2>
    </etat2>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&repertoireEdit=del&repertoireId=39258&num1=33601020304&num2=33601020305&num3=33601020306'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'             =>  'a296464ce012b8ab710a',
    'repertoireEdit'    =>  'del',
    'repertoireId'      =>  '39258',
    'num1'              =>  '33601020304',
    'num2'              =>  '33601020305',
    'num3'              =>  '33601020306'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['tel'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'Code: '.$value['code'.$cpt];
        echo $sautligne;
        echo 'message: '.$value['message'.$cpt];
        echo $sautligne; 
        echo 'tel: '.$value['tel'];
        echo $sautligne;
        echo 'repertoireId: '.$value['repertoireId'.$cpt];
        echo $sautligne;         
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':            'a296464ce012b8ab710a',
    'repertoireEdit':   'del',
    'repertoireId':     '39258',
    'num1':             '33601020304',
    'num2':             '33601020305',
    'num3':             '33601020306'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('tel'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'Code: '+repetat['code'+cpt]
            print 'Message: '+repetat['message'+cpt]
            print 'tel: '+repetat['tel'+cpt]
            print 'RepertoireId: '+repetat['repertoireId'] 
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("repertoireEdit",   "del");
        paramsTablo.put("repertoireId",     "159094");
        paramsTablo.put("num1",             "33601020304");
        paramsTablo.put("num2",             "33601020305");
        paramsTablo.put("num3",             "33601020306");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("repertoireId")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Webhook des accusés de réception

Présentation de la structure de renvoi des accusés de réception sur une url donnée

Appel

Le client devra développer une page Web qui traitera les données reçues.
Contraintes
  • Page accessible sans système d'authentification
  • Page accessible en direct sans aucune redirection
  • Définir le lien sur votre espace client Mon compte -> Mon API -> AR des SMS
  • Afficher la chaine de caractères 'validation' en réponse à l'appel
Remarque: Si la réponse 'validation' n'est pas obtenue, 3 autres tentatives d'envois de la notification seront effectuées à 30 minutes d'intervalle.

L'API ajoutera automatiquement la liste des arguments lors de l'appel à votre url.
Il ne faut donc pas les saisir sur votre espace client

Votre url devra etre de la forme
www.votre_adresse.com/votre_page_web
L'API appellera alors
www.votre_adresse.com/votre_page_web?tel=[TEL]&libelle=[LIBELLE]&statut=[STATUT]&code_erreur=[CODE_ERREUR]&date=[DATE]&heure=[HEURE]&id=[ID]&operateur=[OPERATEUR]&tracker=[TRACKER]
Paramètre Type Obligatoire Détails
tel String Oui Numéro de téléphone du destinataire
Au format 06XXXXXXXX ou 07XXXXXXXX pour la France métropolitaine
Au format international sans le + pour les autres pays
Ex: 0601020304 ou 32101020304
libelle String Oui Libellé sur le statut de l'accusé de réception
statut Number Oui Statut du message
  • 0 -> ok
  • 2 -> erreur
Code erreur String Oui Code associé à l'accusé de réception (cf Annexes)
date Date au format
AAAA-MM-JJ
Oui La date de réception de l'accusé
heure Date au format
HH:MM:SS
Oui L'heure de réception de l'accusé
id Number Oui Identifiant unique de l'accusé
operateur String Oui Chaine de caracteres indiquant la valeur de l'opérateur (cf Annexes)
tracker String Oui Argument éventuellement fourni lors de l'envoi pour une identification simplifiée

Réponse

Vous devez répondre la chaine de caractères 'validation'
Remarque: Si la réponse 'validation' n'est pas obtenue, 2 autres tentatives d'envois de la notification seront effectuées à un jour d'intervalle à 02h00 du matin.
validation


Webhook des réponses

Les réponses correspondent au SMS que le destinataire va (éventuellement) répondre à votre envoi.

Remarque:
  • En cas de changement d'émetteur, le destinataire ne pourra pas répondre directement à votre envoi
  • Pour le reste du monde, merci de vous rapprocher de votre chargé de clientèle

Ci-dessous la liste des opérateur qui supportent la fonctionnalité de réponse en France.
Opérateur Réponse
Orange Oui
SFR Oui
Bouygues Oui
Free Oui
NRJ Oui
Coriolis Oui
Syma Oui
Truphone Oui
OnOff Oui
Lebara Oui
Lyca Non
Legos Non
Transatel Non

Présentation de la structure de renvoi des réponses sur une url donnée

Appel

Le client devra développer une page Web qui traitera les données reçues.
Contraintes
  • Page accessible sans système d'authentification
  • Page accessible en direct sans aucune redirection
  • Définir le lien sur votre espace client Mon compte -> Mon API -> Réponses SMS
  • Afficher la chaine de caractères 'validation' en réponse à l'appel
Remarque: Si la réponse 'validation' n'est pas obtenue, 3 autres tentatives d'envois de la notification seront effectuées à 30 minutes d'intervalle.

L'API ajoutera automatiquement la liste des arguments lors de l'appel à votre url.
Il ne faut donc pas les saisir sur votre espace client

Votre url devra etre de la forme
www.votre_adresse.com/votre_page_web
L'API appellera alors
www.votre_adresse.com/votre_page_web?tel=[TEL]&id_retour=[ID_RETOUR]&msg_sms=[MSG_SMS]&tracker=[TRACKER]
Paramètre Type Obligatoire Détails
tel String Oui Numéro de téléphone du destinataire
Au format 06XXXXXXXX ou 07XXXXXXXX pour la France métropolitaine
Au format international sans le + pour les autres pays
Ex: 0601020304 ou 32101020304
id_retour Number Oui Identifiant unique de l'accusé
msg_sms String Oui Réponse envoyée par le destinataire
tracker String Oui Argument éventuellement fourni lors de l'envoi pour une identification simplifiée
indicatif_pays Number Oui Indicatif du pays du numéro
datetime Datetime Oui Horodatage de réception de la réponse sur notre plateforme au format AAAA-MM-JJ HH:MM:SS

Réponse

Vous devez répondre la chaine de caractères 'validation'
validation


Création d'un sous compte

Création d'un nouveau sous compte pour un compte maitre

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountLogin String Oui Identifiant de connexion pour le nouveau sous compte
subAccountPassword String Oui Mot de passe de connexion pour le nouveau sous compte
subAccountEdit String Oui Utiliser la valeur 'addAccount'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountLogin String Identifiant de connexion pour le nouveau sous compte
subAccountId String Id pour le nouveau sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le nouveau sous compte
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>230</code>
    <message>Le sous compte a ete ajoute</message>
    <subAccountLogin>subaccount2018</subAccountLogin>
    <subAccountId>20474</subAccountId>
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&subAccountLogin=MonIdentifiant&subAccountPassword=MonMotdpasse&subAccountEdit=addAccount'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'             =>  'a296464ce012b8ab710a',
    'subAccountLogin'   =>  'MonIdentifiant',
    'subAccountPassword'=>  'MonMotdpasse',
    'subAccountEdit'    =>  'addAccount'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['subAccountLogin'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'Code: '.$value['code'.$cpt];
        echo $sautligne;
        echo 'message: '.$value['message'.$cpt];
        echo $sautligne; 
        echo 'subAccountLogin: '.$value['subAccountLogin'];
        if (isset($value['subAccountId'])){
            echo $sautligne;
            echo 'subAccountId: '.$value['subAccountId'];
        }
        if (isset($value['subAccountKeyId'])){
            echo $sautligne;
            echo 'subAccountKeyId: '.$value['subAccountKeyId'];
        }
        echo $sautligne;     
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':                'a296464ce012b8ab710a',
    'subAccountLogin':      'MonIdentifiant',
    'subAccountPassword':   'MonMotdpasse',
    'subAccountEdit':       'addAccount'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('subAccountLogin'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'Code: '+repetat['code'+cpt]
            print 'Message: '+repetat['message'+cpt]
            print 'subAccountLogin: '+repetat['subAccountLogin'+cpt] 
            if repetat.has_key('subAccountId'):
                print 'subAccountId: '+repetat['subAccountId'+cpt]    
            if repetat.has_key('subAccountKeyId'):
                print 'subAccountKeyId: '+repetat['subAccountKeyId'+cpt]   
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                "a296464ce012b8ab710a");
        paramsTablo.put("subAccountLogin",      "MonIdentifiantJava");
        paramsTablo.put("subAccountPassword",   "MonMotdpasse");
        paramsTablo.put("subAccountEdit",       "addAccount");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("subAccountKeyId")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Définition du prix du SMS d'un sous compte

Définition du prix du SMS d'un sous compte en euros HT

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountPrice String Oui Valeur du prix unitaire en euro HT pour 1 SMS
Le séparateur de centimes est le point (.)
Ex: 0.044
subAccountCountryCode String Oui Indicatif international du pays associé au prix sans le +
Ex: 39 pour Italie ou 32 pour Belgique
subAccountEdit String Oui Utiliser la valeur 'setPrice'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour le nouveau sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le nouveau sous compte
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>241</code>
    <message>Le prix a ete mis a jour</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
    <subAccountId>20474</subAccountId>
    <subAccountCountryCode>39</subAccountCountryCode>
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>234</code>
    <message>Aucun sous compte avec ces identifiants</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
    <subAccountCountryCode>39</subAccountCountryCode>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&subAccountKeyId=ber296464ce018ab710a&subAccountPrice=0.068&subAccountCountryCode=39&subAccountEdit=setPrice'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'subAccountKeyId'       =>  'ber296464ce018ab710a',
    'subAccountPrice'       =>  '0.068',
    'subAccountCountryCode' =>  '39',
    'subAccountEdit'        =>  'setPrice'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['subAccountKeyId'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'Code: '.$value['code'.$cpt];
        echo $sautligne;
        echo 'message: '.$value['message'.$cpt];
        echo $sautligne; 
        echo 'subAccountKeyId: '.$value['subAccountKeyId'];
        if (isset($value['subAccountId'])){
            echo $sautligne;
            echo 'subAccountId: '.$value['subAccountId'];
        }
        if (isset($value['subAccountCountryCode'])){
            echo $sautligne;
            echo 'subAccountCountryCode: '.$value['subAccountCountryCode'];
        }
        echo $sautligne;     
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid'                 :  'a296464ce012b8ab710a',
    'subAccountKeyId'       :  'ber296464ce018ab710a',
    'subAccountPrice'       :  '0.068',
    'subAccountCountryCode' :  '39',
    'subAccountEdit'        :  'setPrice'
}
response = requests.post(url, params)
print(response.text)


####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('subAccountKeyId'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'Code: '+repetat['code'+cpt]
            print 'Message: '+repetat['message'+cpt]
            print 'subAccountKeyId: '+repetat['subAccountKeyId'+cpt] 
            if repetat.has_key('subAccountId'):
                print 'subAccountId: '+repetat['subAccountId'+cpt]    
            if repetat.has_key('subAccountCountryCode'):
                print 'subAccountCountryCode: '+repetat['subAccountCountryCode'+cpt]    
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a0");
        paramsTablo.put("subAccountPrice",          "0.068");
        paramsTablo.put("subAccountCountryCode",    "39");
        paramsTablo.put("subAccountEdit",           "setPrice");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("subAccountId")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Récupération du prix du SMS d'un sous compte

Récupération du prix du SMS d'un sous compte en euros HT

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountCountryCode String Oui Indicatif international du pays associé au prix sans le +
Ex: 39 pour Italie ou 32 pour Belgique
subAccountEdit String Oui Utiliser la valeur 'getPrice'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour le sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le sous compte
subAccountCountryCode String Indicatif international du pays associé au prix sans le +
subAccountPrice String Prix unitaire en euros HT avec le point (.) comme séparateur des centimes
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>251</code>
    <message>Le prix unitaire</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
    <subAccountId>20474</subAccountId>
    <subAccountCountryCode>39</subAccountCountryCode>
    <subAccountPrice>0.049</subAccountPrice>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&subAccountKeyId=ber296464ce018ab710a&subAccountCountryCode=39&subAccountEdit=getPrice'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'subAccountKeyId'       =>  'ber296464ce018ab710a',
    'subAccountCountryCode' =>  '39',
    'subAccountEdit'        =>  'getPrice'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['subAccountKeyId'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'Code: '.$value['code'.$cpt];
        echo $sautligne;
        echo 'message: '.$value['message'.$cpt];
        echo $sautligne; 
        echo 'subAccountKeyId: '.$value['subAccountKeyId'];
        if (isset($value['subAccountId'])){
            echo $sautligne;
            echo 'subAccountId: '.$value['subAccountId'];
        }
        if (isset($value['subAccountCountryCode'])){
            echo $sautligne;
            echo 'subAccountCountryCode: '.$value['subAccountCountryCode'];
        }
        if (isset($value['subAccountPrice'])){
            echo $sautligne;
            echo 'subAccountPrice: '.$value['subAccountPrice'];
        }        
        echo $sautligne;     
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid'                 :  'a296464ce012b8ab710a',
    'subAccountKeyId'       :  'ber296464ce018ab710a',
    'subAccountCountryCode' :  '39',
    'subAccountEdit'        :  'getPrice'
}
response = requests.post(url, params)
print(response.text)


####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('subAccountKeyId'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'Code: '+repetat['code'+cpt]
            print 'Message: '+repetat['message'+cpt]
            print 'subAccountKeyId: '+repetat['subAccountKeyId'+cpt] 
            if repetat.has_key('subAccountId'):
                print 'subAccountId: '+repetat['subAccountId'+cpt]    
            if repetat.has_key('subAccountCountryCode'):
                print 'subAccountCountryCode: '+repetat['subAccountCountryCode'+cpt]
            if repetat.has_key('subAccountPrice'):
                print 'subAccountPrice: '+repetat['subAccountPrice'+cpt]
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountCountryCode",    "39");
        paramsTablo.put("subAccountEdit",           "getPrice");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("subAccountId")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Augmenter le crédit SMS d'un sous compte

Augmenter le crédit SMS d'un sous compte

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountAddCredit Number Oui Montant en euros HT à ajouter
Le séparateur de centimes est le point (.)
Ex: 150.0
subAccountEdit String Oui Utiliser la valeur 'addCredit'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour le nouveau sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le nouveau sous compte
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>239</code>
    <message>Le credit a ete ajoute au sous compte</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
    <subAccountId>20474</subAccountId>
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>234</code>
    <message>Aucun sous compte avec ces identifiants</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&subAccountKeyId=ber296464ce018ab710a&subAccountAddCredit=150&subAccountEdit=addCredit'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'subAccountKeyId'       =>  'ber296464ce018ab710a',
    'subAccountAddCredit'   =>  '150',
    'subAccountEdit'        =>  'addCredit'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['subAccountKeyId'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'Code: '.$value['code'.$cpt];
        echo $sautligne;
        echo 'message: '.$value['message'.$cpt];
        echo $sautligne; 
        echo 'subAccountKeyId: '.$value['subAccountKeyId'];
        if (isset($value['subAccountId'])){
            echo $sautligne;
            echo 'subAccountId: '.$value['subAccountId'];
        }
        echo $sautligne;     
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':                'a296464ce012b8ab710a',
    'subAccountKeyId':      'ber296464ce018ab710a',
    'subAccountAddCredit':  '150',
    'subAccountEdit':       'addCredit'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('subAccountKeyId'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'Code: '+repetat['code'+cpt]
            print 'Message: '+repetat['message'+cpt]
            print 'subAccountKeyId: '+repetat['subAccountKeyId'+cpt] 
            print 'subAccountId: '+repetat['subAccountId'+cpt]    
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",      "ber296464ce018ab710a");
        paramsTablo.put("subAccountAddCredit",  "150");
        paramsTablo.put("subAccountEdit",       "addCredit");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("subAccountId")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Modifier l'encours SMS d'un sous compte

Modifier l'encours SMS d'un sous compte

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountOutstanding Number Oui Nouveau montant en euros HT de l'encours
subAccountEdit String Oui Utiliser la valeur 'setOutstanding'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour le nouveau sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le nouveau sous compte
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>252</code>
    <message>L encours a ete defini pour le sous compte</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
    <subAccountId>20474</subAccountId>
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>234</code>
    <message>Aucun sous compte avec ces identifiants</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&subAccountKeyId=ber296464ce018ab710a&subAccountOutstanding=150&subAccountEdit=setOutstanding'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'subAccountKeyId'       =>  'ber296464ce018ab710a',
    'subAccountOutstanding' =>  '150',
    'subAccountEdit'        =>  'setOutstanding'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['subAccountKeyId'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'Code: '.$value['code'.$cpt];
        echo $sautligne;
        echo 'message: '.$value['message'.$cpt];
        echo $sautligne; 
        echo 'subAccountKeyId: '.$value['subAccountKeyId'];
        echo $sautligne;             
        echo 'subAccountId: '.$value['subAccountId'];
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid'                 :  'a296464ce012b8ab710a',
    'subAccountKeyId'       :  'ber296464ce018ab710a',
    'subAccountOutstanding' :  '150',
    'subAccountEdit'        :  'setOutstanding'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('subAccountKeyId'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'Code: '+repetat['code'+cpt]
            print 'Message: '+repetat['message'+cpt]
            print 'subAccountKeyId: '+repetat['subAccountKeyId'+cpt] 
            print 'subAccountId: '+repetat['subAccountId'+cpt]  
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountOutstanding",    "150");
        paramsTablo.put("subAccountEdit",           "setOutstanding");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("subAccountId")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Consulter l'encours SMS d'un sous compte

Consulter l'encours SMS d'un sous compte

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountEdit String Oui Utiliser la valeur 'getOutstanding'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour le nouveau sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le nouveau sous compte
subAccountOutstanding String Montant de l'encours en euros HT
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>254</code>
    <message>L encours</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
    <subAccountId>20474</subAccountId>
    <subAccountOutstanding>150</subAccountOutstanding>
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>234</code>
    <message>Aucun sous compte avec ces identifiants</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&subAccountKeyId=ber296464ce018ab710a&subAccountEdit=getOutstanding'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'subAccountKeyId'       =>  'ber296464ce018ab710a',
    'subAccountEdit'        =>  'getOutstanding'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['subAccountKeyId'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'Code: '.$value['code'.$cpt];
        echo $sautligne;
        echo 'message: '.$value['message'.$cpt];
        echo $sautligne; 
        echo 'subAccountKeyId: '.$value['subAccountKeyId'];
        if (isset($value['subAccountOutstanding'])){
            echo $sautligne;
            echo 'subAccountOutstanding: '.$value['subAccountOutstanding'];
        }
        echo $sautligne;     
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid'                 :  'a296464ce012b8ab710a',
    'subAccountKeyId'       :  'ber296464ce018ab710a',
    'subAccountEdit'        :  'getOutstanding'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('subAccountKeyId'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'Code: '+repetat['code'+cpt]
            print 'Message: '+repetat['message'+cpt]
            print 'subAccountKeyId: '+repetat['subAccountKeyId'+cpt] 
            if repetat.has_key('subAccountOutstanding'+cpt):
                print 'subAccountOutstanding: '+repetat['subAccountOutstanding'+cpt] 
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",  "ber296464ce018ab710a");
        paramsTablo.put("subAccountEdit",   "getOutstanding");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("subAccountOutstanding")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Gestion de la restriction STOP SMS d'un sous compte

Gestion de la restriction STOP SMS d'un sous compte

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountRestrictionStop Number Oui Activation ou désactivation de la restriction STOP SMS
  • 0: Désactivée
  • 1: Activée
subAccountEdit String Oui Utiliser la valeur 'setRestriction'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour le nouveau sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le nouveau sous compte
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>244</code>
    <message>La restriction STOP a ete desactivee</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
    <subAccountId>20474</subAccountId>
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>234</code>
    <message>Aucun sous compte avec ces identifiants</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
    <subAccountId>20474</subAccountId>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&subAccountKeyId=ber296464ce018ab710a&subAccountRestrictionStop=0&subAccountEdit=setRestriction'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'                     =>  'a296464ce012b8ab710a',
    'subAccountKeyId'           =>  'ber296464ce018ab710a',
    'subAccountRestrictionStop' =>  '0',
    'subAccountEdit'            =>  'setRestriction'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['subAccountKeyId'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'Code: '.$value['code'.$cpt];
        echo $sautligne;
        echo 'message: '.$value['message'.$cpt];
        echo $sautligne; 
        echo 'subAccountKeyId: '.$value['subAccountKeyId'];
        if (isset($value['subAccountId'])){
            echo $sautligne;
            echo 'subAccountId: '.$value['subAccountId'];
        }
        echo $sautligne;     
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid'                     :  'a296464ce012b8ab710a',
    'subAccountKeyId'           :  'ber296464ce018ab710a',
    'subAccountRestrictionStop' :  '0',
    'subAccountEdit'            :  'setRestriction'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('subAccountKeyId'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'Code: '+repetat['code'+cpt]
            print 'Message: '+repetat['message'+cpt]
            print 'subAccountKeyId: '+repetat['subAccountKeyId'+cpt] 
            print 'subAccountId: '+repetat['subAccountId'+cpt] 
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountRestrictionStop","0");
        paramsTablo.put("subAccountEdit",           "setRestriction");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("subAccountId")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Gestion de la restriction horaire d'un sous compte

Gestion de la restriction horaire d'un sous compte

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountRestrictionTime Number Oui Activation ou désactivation de la restriction horaire
  • 0: Désactivée
  • 1: Activée
subAccountEdit String Oui Utiliser la valeur 'setRestriction'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour le nouveau sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le nouveau sous compte
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>246</code>
    <message>La restriction horaire a ete desactivee</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
    <subAccountId>20474</subAccountId>
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>234</code>
    <message>Aucun sous compte avec ces identifiants</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
    <subAccountId>20474</subAccountId>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&subAccountKeyId=ber296464ce018ab710a&subAccountRestrictionTime=0&subAccountEdit=setRestriction'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'                     =>  'a296464ce012b8ab710a',
    'subAccountKeyId'           =>  'ber296464ce018ab710a',
    'subAccountRestrictionTime' =>  '0',
    'subAccountEdit'            =>  'setRestriction'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['subAccountKeyId'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'Code: '.$value['code'.$cpt];
        echo $sautligne;
        echo 'message: '.$value['message'.$cpt];
        echo $sautligne; 
        echo 'subAccountKeyId: '.$value['subAccountKeyId'];
        if (isset($value['subAccountId'])){
            echo $sautligne;
            echo 'subAccountId: '.$value['subAccountId'];
        }
        echo $sautligne;     
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid'                     :  'a296464a296464ce012b8ab710ae012b8ab710a',
    'subAccountKeyId'           :  'ber296464ce018ab710a',
    'subAccountRestrictionTime' :  '0',
    'subAccountEdit'            :  'setRestriction'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('subAccountKeyId'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'Code: '+repetat['code'+cpt]
            print 'Message: '+repetat['message'+cpt]
            print 'subAccountKeyId: '+repetat['subAccountKeyId'+cpt] 
            print 'subAccountId: '+repetat['subAccountId'+cpt]
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountRestrictionTime","0");
        paramsTablo.put("subAccountEdit",           "setRestriction");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("subAccountId")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Modification du webhook de retour des AR pour un sous-compte

Modifier l'url de webhook de retour des AR pour un sous-compte vers laquelle les accusés de réception opérateurs seront envoyés

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountAdresseRetour String Oui Adresse de retour vers lequel sera envoyé les accusés de réception
Ex: https://monurlderetour.php
subAccountEdit String Oui Utiliser la valeur 'setAdresseRetour'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour le nouveau sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le nouveau sous compte
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>258</code>
    <message>L url de retour a ete defini pour le sous compte</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
    <subAccountId>20474</subAccountId>
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>257</code>
    <message>Vous devez renseigner une url de retour valide</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&subAccountKeyId=ber296464ce018ab710a&subAccountAdresseRetour=https://monurlderetour.php&subAccountEdit=setAdresseRetour'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'                     =>  'a296464ce012b8ab710a',
    'subAccountKeyId'           =>  'ber296464ce018ab710a',
    'subAccountAdresseRetour'   =>  'https://monurlderetour.php',
    'subAccountEdit'            =>  'setAdresseRetour'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['subAccountKeyId'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'Code: '.$value['code'.$cpt];
        echo $sautligne;
        echo 'message: '.$value['message'.$cpt];
        echo $sautligne; 
        echo 'subAccountKeyId: '.$value['subAccountKeyId'];
        if (isset($value['subAccountId'])){
            echo $sautligne;
            echo 'subAccountId: '.$value['subAccountId'];
        }
        echo $sautligne;     
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid'                     :  'a296464ce012b8ab710a',
    'subAccountKeyId'           :  'ber296464ce018ab710a',
    'subAccountAdresseRetour'   :  'https://monurlderetour.php',
    'subAccountEdit'            :  'setAdresseRetour'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('subAccountKeyId'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'Code: '+repetat['code'+cpt]
            print 'Message: '+repetat['message'+cpt]
            print 'subAccountKeyId: '+repetat['subAccountKeyId'+cpt] 
            print 'subAccountId: '+repetat['subAccountId'+cpt]
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountAdresseRetour",  "https://monurlderetour.php");
        paramsTablo.put("subAccountEdit",           "setAdresseRetour");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("subAccountId")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Modification du webhook des réponses pour un sous-compte

Modifier l'url de webhook des réponses pour un sous-compte vers laquelle les réponses SMS seront envoyées

Appel

https://www.isendpro.com/cgi-bin/
Paramètre Type Obligatoire Détails
keyid String Oui Chaine de caractère unique identifiant votre compte
Ex: a296464ce012b8ab710a
subAccountKeyId String Oui Chaine de caractère unique identifiant le sous compte
subAccountAdresseSMSretour String Oui Adresse de retour vers lequel sera envoyé les réponses
Ex: https://monurlderetour.php
subAccountEdit String Oui Utiliser la valeur 'setAdresseSMSretour'

Réponse

Paramètre Type Détails
code Number Code correspondant au tableau des erreurs
message String Libellé correspondant au tableau des erreurs
subAccountId String Id pour le nouveau sous compte
subAccountKeyId String Clé d'identification (KeyId) pour le nouveau sous compte
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>256</code>
    <message>L url de retour SMS a ete defini pour le sous compte</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
    <subAccountId>20474</subAccountId>
</etat>
<?xml version="1.0" encoding="ISO-8859-1"?>
<etat>
    <code>255</code>
    <message>Vous devez renseigner une url de retour SMS valide</message>   
    <subAccountKeyId>ber296464ce018ab710a</subAccountKeyId>
</etat>

Exemples de scripts

curl -X POST \
 'https://www.isendpro.com/cgi-bin/' \
 -H 'cache-control: no-cache' \
 -d 'keyid=a296464ce012b8ab710a&subAccountKeyId=ber296464ce018ab710a&subAccountAdresseRetour=https://monurlderetour.php&subAccountEdit=setAdresseSMSretour'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Envoi requete
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://www.isendpro.com/cgi-bin/';
$params = array(
    'keyid'                     =>  'a296464ce012b8ab710a',
    'subAccountKeyId'           =>  'ber296464ce018ab710a',
    'subAccountAdresseSMSretour'=>  'https://monurlderetour.php',
    'subAccountEdit'            =>  'setAdresseSMSretour'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
$out = curl_exec($ch);
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Traitement du retour
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // Si utilisation script
//$sautligne="<br>"; // Si utilisation html
   
$xml = string2XML($out);
$repetatList=XML2Array($xml);
if(!array_key_exists('etat1', $repetatList)){
    $repetatList=array($repetatList);
}

foreach($repetatList as $key => $value){    
    $cpt='';
    if($key!='0'){
        $cpt=str_replace('etat', '', $key);
    }
    
    // Erreur generale
    if (!isset($value['subAccountKeyId'.$cpt])){
        echo 'Code: '.$value['code'];
        echo $sautligne;
        echo 'message: '.$value['message'];
        echo $sautligne;       
        break;
    }else{
        echo '-----------';
        echo $sautligne;
        echo 'Data '.$cpt;
        echo $sautligne;    
        // Infos de retour
        echo 'Code: '.$value['code'.$cpt];
        echo $sautligne;
        echo 'message: '.$value['message'.$cpt];
        echo $sautligne; 
        echo 'subAccountKeyId: '.$value['subAccountKeyId'];
        if (isset($value['subAccountId'])){
            echo $sautligne;
            echo 'subAccountId: '.$value['subAccountId'];
        }
        echo $sautligne;     
    }
}
?>
####################################################################################
#- Envoi requete
####################################################################################
import requests
import xmltodict
import types

url = 'https://www.isendpro.com/cgi-bin/'
params = {
    'keyid':                        'a296464ce012b8ab710a',
    'subAccountKeyId':              'ber296464ce018ab710a',
    'subAccountAdresseSMSretour':   'https://monurlderetour.php',
    'subAccountEdit':               'setAdresseSMSretour'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Traitement du retour
####################################################################################
repetat=xmltodict.parse(response.text)
if not repetat.has_key('etat'):
    # Erreur inconnue
    print 'Erreur inconnue: '+repetat
else:
    #repetat=repetat['etat']
    repetatList=repetat['etat']    
    if not repetatList.has_key('etat1'):
        repetatList={'0':repetat['etat']}

    keysList=repetatList.keys()
    keysList.sort()
    for key in keysList:
        repetat=repetatList[key]
        cpt=''
        if key!='0':
            cpt=key.replace('etat','')          
        # Erreur generale
        if not repetat.has_key('subAccountKeyId'+cpt):
            print 'Code: '+repetat['code']
            print 'Message: '+repetat['message']
        else:
            print '-----------'    
            print 'Data '+str(key)          
            # Infos du retour
            print 'Code: '+repetat['code'+cpt]
            print 'Message: '+repetat['message'+cpt]
            print 'subAccountKeyId: '+repetat['subAccountKeyId'+cpt] 
            print 'subAccountId: '+repetat['subAccountId'+cpt]
import java.io.*;
import java.net.*;
import java.util.*;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.PrintWriter; 

public class TestDocs {

    private static HttpURLConnection con;    

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Envoi requete
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_http."/cgi-bin/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                        "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",              "ber296464ce018ab710a");
        paramsTablo.put("subAccountAdresseSMSretour",   "https://monurlderetour.php");
        paramsTablo.put("subAccountEdit",               "setAdresseSMSretour");

        StringBuilder urlParameters = new StringBuilder();
        for (Map.Entry<String,String> param : paramsTablo.entrySet()) {
            if (urlParameters.length() != 0) urlParameters.append("&");
            urlParameters.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            urlParameters.append("=");
            urlParameters.append(URLEncoder.encode(String.valueOf(param.getValue()), "UTF-8"));
        }
        
        System.out.println(urlParameters);
        byte[] postData = urlParameters.toString().getBytes("UTF-8");

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Traitement du retour
            ////////////////////////////////////////////////////////////////////////////////////                        
            String line = content.toString();                        
            try {                            
                InputSource is = new InputSource(new StringReader(line));
                DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                Document doc = dBuilder.parse(is);
                   
                if(doc.getDocumentElement().getNodeName()!="etat"){
                    // Erreur inconnue
                    System.out.println("Erreur inconnue: "+line);
                }else{
                    NodeList nList = doc.getElementsByTagName("etat");
                    for (int temp = 0; temp < nList.getLength(); temp++) {
                        Node nNode = nList.item(temp);
                                                
                        Node nodeN1 = nNode.getFirstChild();
                        if(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            if(!n1Name.contains("etat")){
                                nodeN1 = nNode;
                            }
                        }                        
                        
                        while(nodeN1!=null){
                            String n1Name = nodeN1.getNodeName();
                            System.out.println("-----------");
                            System.out.println(n1Name);                            
                            var erreur=1;
                            
                            Node nodeN2 = nodeN1.getFirstChild();                            
                            while(nodeN2!=null){
                                String n2Name = nodeN2.getNodeName();     
                                String n2Value = nodeN2.getFirstChild().getNodeValue();     
                                System.out.println(n2Name+": "+n2Value);
                                nodeN2=nodeN2.getNextSibling();
                                
                                if(n2Name.contains("subAccountId")){
                                    erreur=0;
                                }                                
                            }    
                            System.out.println("erreur: "+erreur);                                             
                            if(erreur==1){
                                // Erreur dans le retour
                            }else{
                                // OK
                            }                                                     
                            nodeN1=nodeN1.getNextSibling();
                        }                             
                    }
                }            
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        } catch (Exception ex) {
            System.err.println(ex);
        }
    }         
}


Codes opérateurs en France

Tableau des opérateurs en France métropolitaine
Code Opérateur
ORAN Orange
SFR SFR
BOUY Bouygues Telecom
FREE FREE Mobile
NRJ NRJ Mobile
LYCA LYCA Mobile
MUND Mundio Mobile
CORI Coriolis Telecom
LBRA Lebara
TRAT Transatel
COMP Completel
LEGO Legos
MOQU Mobiquithings
TRUP Truphone
SMAA Syma Mobile
AIRM Airtel


Codes erreurs API

Tableau des codes erreurs retournés par l'API
Code erreur Message
0 Votre message a bien ete envoye
1 The login is empty
2 The password is empty
3 Your credentials are incorrect
4 Vous devez saisir un message!
5 Le message ne doit pas depasser XXX caracteres!
6 Vous devez saisir un numero de telephone valide!
7 Un numero de telephone est sur 10 chiffres!
9 La route que vous avez saisie n'existe pas!
10 Vous n'avez pas les droits necessaires pour utiliser cette route!
11 Le numero de telephone est dans la liste noire!
12 Votre credit de MT est epuise!
13 La route Lowcost est down!
14 L'adresse IP n'est pas autorisee!
15 Vous devez indiquer un canal d'envoi!
16 L'emetteur ne peut pas etre vide!
17 L'emetteur doit etre sur plus de 3 caracteres et sur 11 caracteres maximum!
18 L'emetteur ne peut pas comporter que des chiffres!
19 Si un emetteur est indique, le message ne doit pas depasser 149 caracteres afin de pouvoir ajouter le texte 'STOP XXXXX'
20 L'emetteur ne peut pas etre modifie sur le canal LowCost!
21 Le numero de telephone n'est pas attribue!
22 Le numero de telephone est attribue a un Full MVNO
23 Le nombre maximum de telephones par requete est de 500
24 Pas d'envoi commercial entre 20h et 08h, ni les jours feries
25 Il est obligatoire d'indiquer le cout vers les numeros en 0899. Ex: Pour plus de renseignements appelez le 0899 XX XX XX (1E35/apl+0.34E/min)
26 Il est obligatoire d'indiquer le cout vers les numeros en 0892. Ex: Pour plus de renseignements appelez le 0892 XX XX XX (0.34E/min)
27 L'indicatif pays du telephone n'est pas autorise!
28 Votre credit de qualification est epuise!
29 Nous ne pouvons donner suite a votre demande (overflow)
30 Erreur sur le domaine de connexion
31 Le message ne doit pas depasser XXX caracteres!
32 Le message est sur XXX SMS (XXX caracteres) alors que la demande est sur XXX SMS
33 Cet emetteur n'est pas autorise!
34 La valeur de smslong doit etre un entier!
35 Votre credit de HLR est epuise!
36 Vous n'etes pas autorise a retirer le STOP SMS!
37 Les numeros de telephone ne sont pas tous a destination du meme pays!
38 Le message ne doit pas depasser XXX caracteres!
39 Le message ne doit pas depasser XXX caracteres!
40 Le format de message ucs2 n'est pas autorise pour les numeros en France metropolitaine!
41 Vous n'etes pas autorise aux requetes HLR!
42 L'emetteur ne peut pas comporter de caracteres speciaux!
43 La date d'envoi n'est pas au bon format (AAAA-MM-JJ HH:MM)!
44 La zone GMT n'existe pas!
45 L'emetteur ne peut pas contenir 5 chiffres consecutifs!
100 Votre repertoire a ete cree!
101 Vous devez saisir un nom de repertoire!
102 Votre identifiant de repertoire ne correspond a aucune donnee!
103 Votre donnee a ete ajoutee dans le repertoire!
104 Ce repertoire ne peut pas etre modifie car une campagne est programme dessus!
105 La donnee est deja presente dans le repertoire!
106 Votre donnee a ete supprimee du repertoire
107 La donnee n'est pas presente dans le repertoire!
108 Cet identifiant ne correspond a aucun repertoire!
201 Vous devez saisir une date de debut de selection!
202 Vous devez saisir une date de fin de selection!
203 La date de debut de selection n'est pas au bon format (AAAA-MM-JJ HH:MM)!
204 La date de fin de selection n'est pas au bon format (AAAA-MM-JJ HH:MM)!
205 La selection depasse 200 000 donnees! Merci de la reduire!
206 La selection ne correspond a aucune donnee!
207 Historique des envois
210 Le mot cle a ete ajoute
211 Le mot cle a ete supprime
212 Liste des mot cles pour ce compte
213 Le mot cle n'est pas disponible
214 Le mot cle n'existe pas pour ce compte
215 Aucun mot cle pour ce compte
216 Le mot cle ne doit contenir ni espace, ni caractere speciaux
217 Le mot cle doit etre entre 3 et 20 caracteres
220 L emetteur a ete ajoute
221 L emetteur a ete supprime
222 Liste des emetteurs pour ce compte
223 L emetteur n'est pas disponible
224 L emetteur n'existe pas pour ce compte
225 Aucun emetteur pour ce compte
230 Le sous compte a ete ajoute
231 Vous devez saisir un identifiant/login pour la creation du sous compte
232 Vous devez saisir un mot de passe pour la creation du sous compte
233 Un sous compte existe deja avec cet identifiant
234 Aucun sous compte avec ces identifiants
235 Vous devez renseigner l indicatif du pays associe au prix
236 Vous devez renseigner un prix
237 Le prix a ete cree
238 Vous devez renseigner le montant du credit a ajouter
239 Le credit a ete ajoute au sous compte
240 La commande saisie ne correspond a aucune fonctionnalite
241 Le prix a ete mis a jour
242 Vous devez saisir la cle d identifcation du sous compte
243 Un sous compte ne peut pas avoir de sous compte
244 La restriction STOP a ete desactivee
245 La restriction STOP a ete activee
246 La restriction horaire a ete desactivee
247 La restriction horaire a ete activee
248 Les donnees de restriction ne sont pas correctes
250 Le lien court a ete genere
251 Le prix unitaire
252 L encours a ete defini pour le sous compte
253 Vous devez renseigner un encours positif
254 L encours
255 Vous devez renseigner une url de retour SMS valide
256 L url de retour SMS a ete defini pour le sous compte
257 Vous devez renseigner une url de retour valide
258 L url de retour a ete defini pour le sous compte
259 Le mot de passe du sous compte n est pas conforme! Minimum de 10 caracteres, une minuscule, une majuscule, un chiffre et un caractere special
260 Le quota max de requete rapportCampagne a ete depasse
261 Le quota max de requete shortlink a ete depasse
777 Le service est en maintenance.
900 keyId is valid
901 keyId is not valid
998 L encodage du message est incorrect
999 Une erreur est survenue. Merci de contacter le service technique


Table GSM des caractères autorisés

Attention: les crochets ouvrants [ et fermant ] et le symbole Euro comptent pour 2 caractères
Caractère Signification Caractère Signification
SP Espace (Space en anglais) ! Point d'exclamation
" Guillemet droit # Croisillon et parfois Dièse ou (aussi dénommé signe numéro 8)
% Pourcent & Esperluette
Apostrophe (guillemet fermant simple ou accent aigu) ( Parenthèse ouvrante
) Parenthèse fermante * Astérisque
+ Plus , Virgule
- Moins (aussi dénommé tiret8 ou trait d'union13) . Point
/ Barre oblique (Slash en anglais) 0 Le chiffre zéro
1 Le chiffre un 2 Le chiffre deux
3 Le chiffre trois 4 Le chiffre quatre
5 Le chiffre cinq 6 Le chiffre six
7 Le chiffre sept 8 Le chiffre huit
9 Le chiffre neuf : Deux-points
; Point-virgule < Inférieur
= Égal > Supérieur
? Point d'interrogation @ Arobace (aussi dénommé Arobase ou A commercial8)
A B
C D
E F
G H
I J
K L
M N
O P
Q R
S T
U V
W X
Y Z
[ Crochet ouvrant ] Crochet fermant
_ trait bas 8 aussi dénommé Tiret bas, ou souligné (underscore en anglais) a
b c
d e
f g
h i
j k
l m
n o
p q
r s
t u
v w
x y
z à
è é
ù Euro


Table GSM des caractères remplacés

Caractère Remplacé par Caractère Remplacé par
À A Á A
 A à A
Ä A Å A
È E É E
Ë E Ì I
Í I Î I
Ï I Ò O
Ó O Ô O
Õ O Ö O
Ù U Ú U
Û U Ü U
á a â a
ã a ä a
å a ç c
ê e ë e
ì i í i
î i ï i
ð o ñ n
ò o ó o
ô o õ o
ö o ù u
ú u û u
ü u ý y
ÿ y


Table d'encodage des caractères spéciaux

Caractère Encodage Caractère Encodage
Espace %20 $ %24
& %26 + %2B
, %2C / %2F
: %3A ; %3B
? %3D @ %40
Ê ou %ca Saut de ligne Õ ou %d5


Librairie PHP de conversion des caractères GSM



Tableau des zones GMT

Zone GMT Correspondance Zone GMT Correspondance
Pacific/Midway (GMT-11:00) Midway Island, Samoa America/Adak (GMT-10:00) Hawaii-Aleutian
Etc/GMT+10 (GMT-10:00) Hawaii Pacific/Marquesas (GMT-09:30) Marquesas Islands
Pacific/Gambier (GMT-09:00) Gambier Islands America/Anchorage (GMT-09:00) Alaska
America/Ensenada (GMT-08:00) Tijuana, Baja California Etc/GMT+8 (GMT-08:00) Pitcairn Islands
America/Los_Angeles (GMT-08:00) Pacific Time (US & Canada) America/Denver (GMT-07:00) Mountain Time (US & Canada)
America/Chihuahua (GMT-07:00) Chihuahua, La Paz, Mazatlan America/Dawson_Creek (GMT-07:00) Arizona
America/Belize (GMT-06:00) Saskatchewan, Central America America/Cancun (GMT-06:00) Guadalajara, Mexico City, Monterrey
Chile/EasterIsland (GMT-06:00) Easter Island America/Chicago (GMT-06:00) Central Time (US & Canada)
America/New_York (GMT-05:00) Eastern Time (US & Canada) America/Havana (GMT-05:00) Cuba
America/Bogota (GMT-05:00) Bogota, Lima, Quito, Rio Branco America/Caracas (GMT-04:30) Caracas
America/Santiago (GMT-04:00) Santiago America/La_Paz (GMT-04:00) La Paz
Atlantic/Stanley (GMT-04:00) Faukland Islands America/Campo_Grande (GMT-04:00) Brazil
America/Goose_Bay (GMT-04:00) Atlantic Time (Goose Bay) America/Glace_Bay (GMT-04:00) Atlantic Time (Canada)
America/St_Johns (GMT-03:30) Newfoundland America/Araguaina (GMT-03:00) UTC-3
America/Montevideo (GMT-03:00) Montevideo America/Miquelon (GMT-03:00) Miquelon, St. Pierre
America/Godthab (GMT-03:00) Greenland America/Argentina/Buenos_Aires (GMT-03:00) Buenos Aires
America/Sao_Paulo (GMT-03:00) Brasilia America/Noronha (GMT-02:00) Mid-Atlantic
Atlantic/Cape_Verde (GMT-01:00) Cape Verde Is. Atlantic/Azores (GMT-01:00) Azores
Europe/Belfast (GMT) Greenwich Mean Time : Belfast Europe/Dublin (GMT) Greenwich Mean Time : Dublin
Europe/Lisbon (GMT) Greenwich Mean Time : Lisbon Europe/London (GMT) Greenwich Mean Time : London
Africa/Abidjan (GMT) Monrovia, Reykjavik Europe/Amsterdam (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
Europe/Belgrade (GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague Europe/Brussels (GMT+01:00) Brussels, Copenhagen, Madrid, Paris
Africa/Algiers (GMT+01:00) West Central Africa Africa/Windhoek (GMT+01:00) Windhoek
Asia/Beirut (GMT+02:00) Beirut Africa/Cairo (GMT+02:00) Cairo
Asia/Gaza (GMT+02:00) Gaza Africa/Blantyre (GMT+02:00) Harare, Pretoria
Asia/Jerusalem (GMT+02:00) Jerusalem Europe/Minsk (GMT+02:00) Minsk
Asia/Damascus (GMT+02:00) Syria Europe/Moscow (GMT+03:00) Moscow, St. Petersburg, Volgograd
Africa/Addis_Ababa (GMT+03:00) Nairobi Asia/Tehran (GMT+03:30) Tehran
Asia/Dubai (GMT+04:00) Abu Dhabi, Muscat Asia/Yerevan (GMT+04:00) Yerevan
Asia/Kabul (GMT+04:30) Kabul Asia/Yekaterinburg (GMT+05:00) Ekaterinburg
Asia/Tashkent (GMT+05:00) Tashkent Asia/Kolkata (GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi
Asia/Katmandu (GMT+05:45) Kathmandu Asia/Dhaka (GMT+06:00) Astana, Dhaka
Asia/Novosibirsk (GMT+06:00) Novosibirsk Asia/Rangoon (GMT+06:30) Yangon (Rangoon)
Asia/Bangkok (GMT+07:00) Bangkok, Hanoi, Jakarta Asia/Krasnoyarsk (GMT+07:00) Krasnoyarsk
Asia/Hong_Kong (GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi Asia/Irkutsk (GMT+08:00) Irkutsk, Ulaan Bataar
Australia/Perth (GMT+08:00) Perth Australia/Eucla (GMT+08:45) Eucla
Asia/Tokyo (GMT+09:00) Osaka, Sapporo, Tokyo Asia/Seoul (GMT+09:00) Seoul
Asia/Yakutsk (GMT+09:00) Yakutsk Australia/Adelaide (GMT+09:30) Adelaide
Australia/Darwin (GMT+09:30) Darwin Australia/Brisbane (GMT+10:00) Brisbane
Australia/Hobart (GMT+10:00) Hobart Asia/Vladivostok (GMT+10:00) Vladivostok
Australia/Lord_Howe (GMT+10:30) Lord Howe Island Etc/GMT-11 (GMT+11:00) Solomon Is., New Caledonia
Asia/Magadan (GMT+11:00) Magadan Pacific/Norfolk (GMT+11:30) Norfolk Island
Asia/Anadyr (GMT+12:00) Anadyr, Kamchatka Pacific/Auckland (GMT+12:00) Auckland, Wellington
Etc/GMT-12 (GMT+12:00) Fiji, Kamchatka, Marshall Is. Pacific/Chatham (GMT+12:45) Chatham Islands
Pacific/Tongatapu (GMT+13:00) Nuku'alofa Pacific/Kiritimati (GMT+14:00) Kiritimati


Codes des AR Orange et SFR

Tableau des codes des accusés de réception retournés par les opérateurs Orange et SFR
Code Message Code Message
000 Service temporairement indisponible 002 Service temporairement indisponible
003 Service temporairement indisponible 004 Service temporairement indisponible
005 Service temporairement indisponible 006 Service temporairement indisponible
007 Service temporairement indisponible 008 Service temporairement indisponible
009 Code d'erreur illégal 010 Expiration de la temporisation du réseau
100 Fonctionnalité non supportée 101 Abonné inconnu
102 Fonctionnalité non offerte 103 Appel bloqué
104 Opération bloquée 105 Surcharge du SMS-C
106 Fonctionnalité non supportée 107 Abonné absent
108 Echec de remise 109 Surcharge su SMS-C
110 Erreur de protocole 111 Mobile non équipé
112 SMS-C inconnu 113 Surcharge du SMS-C
114 Mobile illégal 115 Mobile pas abonné
116 Erreur dans le mobile 117 Couche basse SMS non provisionnée
118 Echec du système 119 Erreur système du PLMN
120 Erreur système du HLR 121 Erreur du système du VLR
122 Erreur du système du VLR précédent 123 Erreur du système du MSC de contrôle
124 Erreur du système du VMC 125 Erreur du système du EIR
126 Erreur système 127 Valeur inattendue
200 Erreur dans l'adresse du SMS-C 201 Période de validité absolue non valide
202 Message court trop long 203 Impossible de lire le message GSM
204 Impossible de convertir en alphabet IA5 206 Format de période de validité invalide
207 Message dupliqué 208 Indicateur de type de message (MT) invalide


Codes des AR NRJ

Tableau des codes des accusés de réception retournés par les opérateurs
Code Message Description
1 ACK Message is delivered to destination
0 ERROR Message is undeliverable


Codes des AR FREE, BOUYGUES, autres opérateurs français et internationaux

Tableau des codes des accusés de réception retournés par les opérateurs FREE Mobile, Bouygues telecom et les autres opérateurs français et internationaux
Code Message Description
1 ENROUTE The message is in enroute state
2 DELIVERED Message is delivered to destination
3 EXPIRED Message validity period has expired
4 DELETED Message has been deleted
5 UNDELIVERABLE Message is undeliverable
6 ACCEPTED Message is in accepted state (i.e. has been manually read on behalf of the subscriber by customer service)
7 UNKNOWN Message is in an invalid state
8 REJECTED Message is in a rejected state

API SMPP SMS iSendPro Telecom

Version de SMPP supportée

iSend Pro Telecom supporte SMPP 3.4 à l’exception des commandes suivantes:
  • "cancel_sm"
  • "replace_sm"
  • "outbind"

L’envoi de SMS long via "submit_multi" doit se faire exclusivement par la méthode du payload L’envoi de sms long via "submit_sm" doit se faire:
  • Soit par la méthode du "payload" (méthode recommandée)
  • Soit par la modification de l’"UDH" (méthode employée par défaut par Kannel)

L’utilisation des paramètres optionnels TLV sar_msg_ref_num / sar_total_segments / sar_segment_seqnum n’est pas supportée

Configuration

Rapprochez-vous de votre contact commercial habituel pour obtenir l’activation SMPP pour votre compte.

Nous vous fournirons des identifiants spécifique:
  • Host: smpp01.isendpro.com
  • Port: 2775
  • Login: [LOGIN_ISENDPRO]
  • Mot de passe: [MDP_ISENDPRO]
  • Windowing: [INFO_ISENDPRO]

Remarque: les règles de contrôle IP sont les mêmes que pour l’API http, à savoir qu’il vous est possible de définir une liste blanche d’IP autorisées à se connecter à SMPP, ou de ne pas appliquer de contrôle d’IP.

Exemple de configuration du SMSC iSend Pro Telecom pour Kannel

Kannel est une passerelle WAP et SMS "open-source" très utilisée comme passerelle SMS et supportant le SMPP.

Ci-dessous un exemple de configuration à insérer dans /etc/kannel.conf
  • group=smsc
  • smsc=smpp
  • smsc-id=internal
  • interface-version=34
  • host=smpp01.isendpro.com
  • port=2775
  • system-id=[VOTRE_LOGIN_SMPP]
  • smsc-password=[VOTRE_MOT_DE_PASSE_SMPP]
  • system-type=default
  • transceiver-mode=1
  • enquire-link-interval=60
  • reconnect-delay=60
  • use-ssl=0
  • max-pending-submits=10

Annexes

Spécification des protocoles SMPP et GSM (avec le détail de l’utilisation des champs UDH pour le SMS long)


Contact

Vous pouvez contacter le support technique à l'adresse suivante: support@isendpro.com

Important: Merci de préciser dans votre mail votre identifiant client
Si la question concerne la remise d'un appel, merci de rajouter les infos suivantes :
  • Msisdn
  • Message
  • Date et heure d'envoi

Le support technique est joignable tous les jours de la semaine de 09h à 13h et de 14h à 17h au 04 83 66 05 10






API SMS HTTPS Rest JSON iSendPro Telecom English

Prerequisite

get your keyid

Your keyid is available on your personal account in My Account -> My api
This key identifies you and you will need to use it to perform all your requests via the API

Encryption protocol

For https requests, it's mandatory to use at least the TLS 1.2 version

Marketing sendings

Marketing sendings are prohibited between 8pm and 8am
These contractual restrictions with the operators are enacted by the AFMM and are not specific to our site.
In case of a change of sender, the STOP mention at the end of the message is mandatory.
The customer undertakes to respect these obligations under penalty of heavy fines and immediate suspension of the account.

Transactional sendings

These mailings correspond to No-marketing type messages (order confirmation, appointments, alert messages, etc.).
They can be sent at any time, once the time restriction of the account has been lifted.
In case of a change of sender, you can remove the STOP SMS mention at the end of the message by using the argument nostopwith the value 1(cf array), once the STOP restriction of the account has been lifted.
To remove time restrictions and STOP, send an email to contact@isendpro.com

Configure IP control

An IP control, based on a "white list" type system is enabled by default.
You can either fill in this white list or disable IP control.
This setting can be done on My account -> My api

Blacklist

A list of phone numbers to which messages are not sent is maintained.
Phone numbers are added at the request of operators or our partners.
All messages sent to blacklisted clients are not routed.
In this case, the error code 11 is returned by the request.

Encoding

  • API calls must be encoded in UTF-8
  • SMS and directory names must be encoded in utf-8. By default, SMS messages are re-encoded in GSM7 when transmitted to the operator. As a result, only the characters specified in the appendix are accepted (or replaced).
  • API returns are made in iso-8859-15 (latin1 + euro sign).
  • If sent in ucs-2, all utf-8 characters are supported.

Remarks and good practices

Logs

We recommend that you log (with timestamp) your calls to the API as well as the API responses.

Error handling

The REST/JSON API will answer an HTTP 200 code to your calls.
If the error code is other than 200, an error has occurred and we recommend that you investigate the problem, with the help of our technical support if necessary.
Wrappers raise exceptions in the event of an error, exceptions that we recommend you make up for.

Returns processing

Some returns bring back problems without triggering an HTTP error (no exceptions in wrappers).
For example if you submit SMS messages to a list of phone numbers, some of which are incorrectly formatted, you will have an HTTP 200 code but with return codes indicating this problem.

In the example below, 0600208432 is an invalid number and 0771058335 is a blacklisted number. We therefore recommend that you process these returns.
{
    "etat":{
        "etat":[
            {
                "code":"21",
                "tel":"0600208432",
                "message":"The phone number is invalid"
            },
            {
                "code":"11",
                "tel":"0771058335",
                "message":"The phone number is in the blacklist"
            },
            {
                "code":"0",
                "tel":"0695208432",
                "message":"Your message has been sent"v
            }
        ]
    }
}

Additional package for scripts

Python
Java

Acknowledgement processing

We recommend that you set up a URL for processing returns acknowledgements.

Return of sms sent by customers

We recommend that you set up a URL for processing returns of sms sent by customers.

Contact

You can contact technical support at the following address: support@isendpro.com

Important: Thank you to specify in your email your customer login
If the question concerns the delivery of an SMS, please add the following information:
  • Phone number (MSISDN)
  • Message
  • Date and time of sending

The technical support is available every day of the week from 9am to pm and 2pm to 5pm (GMT+1) on +33 4 83 66 05 10.

API Usage



Change of senderId

The sender of the message is by default a 5-digit short number. It is possible to replace it by an alpha-numeric string with the following constraints:
  • Between 4 and 11 characters
  • Number between 0 and 9
  • Only Latin alphabet letter without accent/li>
  • No special characters
  • Not just numbers
  • Use of brand names only if owned by the customer
  • Unless nostop=1, automatic addition of the STOP XXXXX mention at the end of the message using 12 characters.

The variable emetteur must be filled in when calling the PLC as indicated in the parameter tables on this documentation.

Remark:
  • In France, works for all operators except NRJ.
  • Abroad, varies according to destination, thank you for consult us for more information

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/sms' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "num":         "33601020304",
   "sms":         "Hello! Welcome to iSendPro!",
   "emetteur":    "isendpro"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/sms';
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num'       =>  '33601020304',
    'sms'       =>  'Hello! Welcome to iSendPro!',
    'emetteur'  =>  'isendpro'
);
$params = json_encode($params); 
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);
echo $response;
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->tel)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
// Specific error to the phone number
}else if (isset($repetat->tel) && ($repetat->code!=0)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'Tel: '.$repetat->tel;
// Sending OK    
}else if (isset($repetat->tel) && ($repetat->code==0)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'Tel: '.$repetat->tel;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/sms'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num':      '33601020304',
    'sms':      'Hello! Welcome to iSendPro!',
    'emetteur': 'isendpro'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('tel'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Specific error to the phone number
elif repetat.has_key('tel') and repetat['code']!=0:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'Tel: '+repetat['tel']
# Sending OK    
elif repetat.has_key('tel') and repetat['code']==0:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'Tel: '+repetat['tel']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/sms";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      "33601020304");
        paramsTablo.put("sms",      "Hello! Welcome to iSendPro!");
        paramsTablo.put("senderid", "isendpro");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("tel")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Specific error to the phone number
            }else if(repetat.containsKey("tel") && repetat.get("code")!="0"){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("Tel: "+repetat.get("tel")); 
            // Sending OK    
            }else if(repetat.containsKey("tel") && repetat.get("code")=="0"){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("Tel: "+repetat.get("tel"));     
            }

        } finally {
            con.disconnect();
        }
    }
}


Sending emojis/emoticons

It is possible to send emojis/emoticons with the following constraints:
  • Request encoded in UTF-8 format
  • 1 emoji will count for 2 characters
  • The maximum length increases from 160 to 70 characters per SMS (67 characters if SMS Long).
  • Some operators do not support UCS2 (for example BOUYGUES in France), unsupported characters can then be removed from the message.

The variable ucs2 must be set to 1 when calling the API as indicated in the parameter tables on this documentation.
The list of possible emjois is available HERE
Remark:
  • Abroad, varies according to destination, thank you for consult us for more information

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/sms' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "num":         "33601020304",
   "sms":         "Hello! Welcome to iSendPro! 🙂",
   "ucs2":         "1"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/sms';
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num'       =>  '33601020304',
    'sms'       =>  'Hello! Welcome to iSendPro! 🙂',
    'ucs2'      =>  '1'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);
echo $response;
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->tel)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
// Specific error to the phone number
}else if (isset($repetat->tel) && ($repetat->code!=0)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'Tel: '.$repetat->tel;
// Sending OK    
}else if (isset($repetat->tel) && ($repetat->code==0)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'Tel: '.$repetat->tel;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/sms'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num':      '33601020304',
    'sms':      'Hello! Welcome to iSendPro! 🙂',
    'ucs2':     '1'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('tel'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Specific error to the phone number
elif repetat.has_key('tel') and repetat['code']!=0:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'Tel: '+repetat['tel']
# Sending OK    
elif repetat.has_key('tel') and repetat['code']==0:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'Tel: '+repetat['tel']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/sms";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      "33601020304");
        paramsTablo.put("sms",      "Hello! Welcome to iSendPro! 🙂");
        paramsTablo.put("ucs2",     "1");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("tel")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Specific error to the phone number
            }else if(repetat.containsKey("tel") && repetat.get("code")!="0"){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("Tel: "+repetat.get("tel")); 
            // Sending OK    
            }else if(repetat.containsKey("tel") && repetat.get("code")=="0"){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("Tel: "+repetat.get("tel"));     
            }

        } finally {
            con.disconnect();
        }
    }
}


International sendings

Telephone numbers are expected in international format with the country code without the "+" at the beginning.
E.g.: For Belgium, the international dialling code is +32
If the phone number is 0601020304 then for international formatting, remove the "0" at the beginning and add the country code without the "+" at the beginning
The number then becomes 32601020304.

Some destinations may have particular constraints (transmitters accepted, smslong, etc), thank you to consult us for more information


Sending single SMS

Sending a message to only 1 recipient per request

Call

https://apirest.isendpro.com/cgi-bin/sms
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
num String Yes Recipient's phone number
In international format without the +
E.g.: 33601020304
sms String Yes Message sent to the recipient
1 SMS can contain up to 160 characters
Possibility to send longer messages (up to 6 concatenated SMS) for a total of 918 characters (6 x 153)
(7 characters being reserved for technical headings)
The unit cost will then be multiplied by the number of corresponding SMS messages.
Cf Argument smslong
senderid String No Message sender
By default, a 5-digit short number
E.g.: 36007
Constraints:
  • Between 4 and 11 characters
  • Numbers between 0 and 9
  • Only latin alphabet letter without accenta
  • No special characters
  • Not just numbers
  • Unless nostop=1, automatic addition of STOP XXXXX at the end of the message and increases the global length by 12 characters.
tracker String No Client generated
Returned as a parameter in the urls for acknowledgement and sms response returns
Maximum length of 50 characters
E.g.: order-ab78pq9
smslong Number No Argument indicating the number of concatenated SMS messages
If the exact number of SMS is known then indicate this number
If the number calculated by the API differs then an error message will be returned (code 32).
To avoid this control and allow messages on more than 1 SMS, use the value 999.
Number of concatenated SMS Number of characters WITHOUT
senderid modification
Number of characters WITH
senderid modification
1 160 148
2 306 294
3 459 447
4 612 600
5 765 753
6 918 906
nostop Number No Argument for not automatically displaying STOP SMS at the end of the message
Use value 1
sending_date Date in the format
YYYY-MM-DD hh:mm
No Date on which the message will be sent
gmt_zone Time Zone No To be filled in, in case of delayed sending on another Time Zone than the default one (GMT+1 Europe/Brussels)
E.g.: For a shipment to recipients in Argentina with local time and No. in France, the value of the gmt_zone argument would be America/Havana.
ucs2 Number No Allows the use of characters in No Latin alphabet (Russian, Chinese, Arabic, etc) and/or with emojis
Constraints:
  • Request encoded in UTF-8 format
  • 1 emoji will count for 2 characters
  • The maximum length increases from 160 to 70 characters per SMS (67 characters if SMS Long).
  • Some operators do not support UCS2 (for example BOUYGUES in France), the characters No supported can then be removed from the message.
Use value 1
numAzur Number No Within the framework of a combined use between SMS Azur and the API, it is possible to force the sender number to be the same as the one used on SMS Azur.
Use value 1
domtom Number No Sendings to operator prefixes to DOM TOM (or DROM-COM) without the associated country code (e.g. +262 for Reunion Island) are refused by the API
To force their treatment at the current rate, use value 1
sandbox Number No Activation of the "sandbox" mode
This field allows you to not actually send the SMS during the query
. Sendings are not charged
. Use value 1

Response

Parameter Type Details
code Number Code corresponding to the error table
tel String Phone number associated with the return code
message String Wording corresponding to the error table
sandbox Number If 'sandbox' was in the calling parameters, it's value is 1
If not, this parameter is not displayed at all
{
 "etat":{
     "etat":[
         {
             "code":    "0",
             "tel":     "0680010203",
             "message": "Your message has been sent"
         }
     ]
 }
}
{
 "etat":{
     "etat":[
         {
             "code":    "6",
             "message": "You must enter a valid phone number"
         }
     ]
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/sms' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "num":         "33601020304",
   "sms":         "Hello! Welcome to iSendPro!",
   "senderid":    "isendpro"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/sms';
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num'       =>  '33601020304',
    'sms'       =>  'Hello! Welcome to iSendPro!',
    'senderid'  =>  'isendpro'
);
$params = json_encode($params); 
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);
echo $response;
curl_close($ch);

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->tel)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
// Specific error to the phone number
}else if (isset($repetat->tel) && ($repetat->code!=0)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'Tel: '.$repetat->tel;
// Sending OK    
}else if (isset($repetat->tel) && ($repetat->code==0)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'Tel: '.$repetat->tel;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/sms'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num':      '33601020304',
    'sms':      'Hello! Welcome to iSendPro!',
    'senderid': 'isendpro'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('tel'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Specific error to the phone number
elif repetat.has_key('tel') and repetat['code']!=0:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'Tel: '+repetat['tel']
# Sending OK    
elif repetat.has_key('tel') and repetat['code']==0:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'Tel: '+repetat['tel']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/sms";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      "33601020304");
        paramsTablo.put("sms",      "Hello! Welcome to iSendPro!");
        paramsTablo.put("senderid", "isendpro");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("tel")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Specific error to the phone number
            }else if(repetat.containsKey("tel") && repetat.get("code")!="0"){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("Tel: "+repetat.get("tel")); 
            // Sending OK    
            }else if(repetat.containsKey("tel") && repetat.get("code")=="0"){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("Tel: "+repetat.get("tel"));     
            }

        } finally {
            con.disconnect();
        }
    }
}


Sending multiple SMS

Sending a message to multiple recipients per query via a list of phone numbers with a maximum of 500 phone numbers per query

Call

https://apirest.isendpro.com/cgi-bin/smsmulti
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
num Array Yes List of recipient's phone numbers
In international format without the +
E.g.: [ "33601020304", "33601020305", "33601020306" ]
sms String Yes Message sent to the recipient
1 SMS can contain up to 160 characters
Possibility to send longer messages (up to 6 concatenated SMS) for a total of 918 characters (6 x 153)
(7 characters being reserved for technical headings)
The unit cost will then be multiplied by the number of corresponding SMS messages.
Cf Argument smslong
senderid String No Message sender
By default, a 5-digit short number
E.g.: 36007
Constraints:
  • Between 4 and 11 characters
  • Numbers between 0 and 9
  • Only French alphabet letter without accenta
  • No special characters
  • Not just numbers
  • Unless nostop=1, automatic addition of STOP XXXXX at the end of the message and increases the global length by 12 characters.
tracker String No Client-generated
Returned as a parameter in the urls for acknowledgement and sms response returns
Maximum length of 50 characters
E.g.: order-ab78pq9
smslong Number No Argument indicating the number of concatenated SMS messages
If the exact number of SMS is known then indicate this number
If the number calculated by the API differs then an error message will be returned (code 32).
To avoid this control and allow messages on more than 1 SMS, use the value 999.
Number of concatenated SMS Number of characters WITHOUT
senderid modification
Number of characters WITH
senderid modification
1 160 148
2 306 294
3 459 447
4 612 600
5 765 753
6 918 906
nostop Number No Argument for not automatically displaying STOP SMS at the end of the message
Use value 1
sending_date Date in the format
YYYY-MM-DD hh:mm
No Date on which the message will be sent
Envoi immédiat si No renseigné
gmt_zone Time Zone No To be filled in, in case of delayed sending on another Time Zone than the default one (GMT+1 Europe/Brussels)
E.g.: For a shipment to recipients in Argentina with local time and No. in France, the value of the gmt_zone argument would be America/Havana.
ucs2 Number No Allows the use of characters in No Latin alphabet (Russian, Chinese, Arabic, etc) and/or with emojis
Constraints:
  • Request encoded in UTF-8 format
  • 1 emoji will count for 2 characters
  • The maximum length increases from 160 to 70 characters per SMS (67 characters if SMS Long).
  • Some operators do not support UCS2 (for example BOUYGUES in France), the characters No supported can then be removed from the message.
Use value 1
numAzur Number No Within the framework of a combined use between SMS Azur and the API, it is possible to force the sender number to be the same as the one used on SMS Azur.
Use value 1
domtom Number No Sendings to operator prefixes to DOM TOM (or DROM-COM) without the associated country code (e.g. +262 for Reunion Island) are refused by the API
To force their treatment at the current rate, use value 1
sandbox Number No Activation of the "sandbox" mode
This field allows you to not actually send the SMS during the query
. Sendings are not charged
. Use value 1

Response

Parameter Type Details
code Number Code corresponding to the error table
tel String Phone number associated with the return code
message String Wording corresponding to the error table
sandbox Number If 'sandbox' was in the calling parameters, it's value is 1
If not, this parameter is not displayed at all
{
    "etat":{
        "etat":[
            {
                "code":     "0",
                "tel":      "33601020304",
                "message":  "Your message has been sent"
            },
            {
                "code":     "0",
                "tel":      "33601020305",
                "message":  "Your message has been sent"
            }
        ]
    }
}
{
    "etat":{
        "etat":[
            {
                "code":     "21",
                "tel":      "33601020304",
                "message":  "Le numéro de téléphone n'est pas attribué!"
            },
            {
                "code":     "11",
                "tel":      "33601020305",
                "message":  "Le numero de telephone est dans la liste noire!""
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/smsmulti' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "num":         ["33601020304","33601020305","33601020306"],
   "sms":         "Hello! Welcome to iSendPro!",
   "senderid":    "isendpro"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/smsmulti';
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num'       =>  ['33601020304','33601020305'],
    'sms'       =>  'Hello! Welcome to iSendPro!',
    'senderid'  =>  'isendpro'
);
$params = json_encode($params);     
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params,    
    CURLOPT_HTTPHEADER => array(                                                                          
        'Content-Type' => 'application/json',                                                                                
        'Content-Length: ' =>  strlen($params)                                                                       
    )
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetatList=$reponsejson->etat->etat;
if(!is_array($repetatList)){
    $repetatList=array($repetatList);
}

$cpt=1;
foreach($repetatList as $repetat){
    echo '-----------';
    echo $sautligne;
    echo 'Data '.$cpt;
    echo $sautligne;
    // General error
    if (!isset($repetat->tel)){
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;
    // Specific error to the phone number   
    }else if (isset($repetat->tel) && ($repetat->code!=0)){
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;
        echo 'Tel: '.$repetat->tel;
        echo $sautligne;
    // Sending OK    
    }else if (isset($repetat->tel) && ($repetat->code==0)){
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;
        echo 'Tel: '.$repetat->tel;
        echo $sautligne;
    }
    $cpt+=1;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests
import types

url = 'https://apirest.isendpro.com/cgi-bin/smsmulti'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num':      ['33601020304','33601020305','33601020306'],
    'sms':      'Hello! Welcome to iSendPro!',
    'senderid': 'isendpro'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetatList=reponsejson['etat']['etat']
if not type(repetatList) is types.ListType:
    repetatList=[repetatList]

cpt=1
for repetat in repetatList:
    print '-----------'    
    print 'Data '+str(cpt)    
    # General error
    if not repetat.has_key('tel'):
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        
    # Specific error to the phone number   
    elif repetat.has_key('tel') and repetat['code']!=0:
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        print 'Tel: '+repetat['tel']
        
    # Sending OK    
    elif repetat.has_key('tel') and repetat['code']==0:
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        print 'Tel: '+repetat['tel']   
    
    cpt+=1
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/smsmulti";
        
        ArrayList<String> listData = new ArrayList<String>();
        listData.add("33601020304");
        listData.add("33601020305");
        listData.add("33601020306");
        
        Map<String, Object> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      listData);
        paramsTablo.put("sms",      "Hello! Welcome to iSendPro!");
        paramsTablo.put("senderid", "isendpro");     
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            ArrayList repetatList = (ArrayList)repetat.get("etat");
            if(! (repetatList instanceof ArrayList)){
                repetatList.add(repetatList);                
            }            
            
            for (int i = 0; i < repetatList.size(); i++) {
                repetat = (Map)repetatList.get(i);
                
                System.out.println("-----------");
                System.out.println("Data "+i);                
                // General error
                if (! repetat.containsKey("tel")){           
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));    
                // Specific error to the phone number
                }else if(repetat.containsKey("tel") && repetat.get("code")!="0"){
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));  
                    System.out.println("Tel: "+repetat.get("tel")); 
                // Sending OK    
                }else if(repetat.containsKey("tel") && repetat.get("code")=="0"){
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));  
                    System.out.println("Tel: "+repetat.get("tel"));     
                }
            }
        } finally {
            con.disconnect();
        }
    }
}


Sending multiple SMS messages to a directory

Sending a message to multiple recipients by query via a phone number directory

Call

https://apirest.isendpro.com/cgi-bin/smsmulti
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
directoryId String Yes Target directory identifier
sms String Yes Message sent to the recipient
1 SMS can contain up to 160 characters
Possibility to send longer messages (up to 6 concatenated SMS) for a total of 918 characters (6 x 153)
(7 characters being reserved for technical headings)
The unit cost will then be multiplied by the number of corresponding SMS messages.
Cf Argument smslong
senderid String No Message sender
By default, a 5-digit short number
E.g.: 36007
Constraints:
  • Between 4 and 11 characters
  • Numbers between 0 and 9
  • Only French alphabet letter without accenta
  • No special characters
  • Not just numbers
  • Unless nostop=1, automatic addition of STOP XXXXX at the end of the message and increases the global length by 12 characters.
tracker String No Client-generated argument to associate acknowledgements or responses
Maximum length of 50 characters
E.g.: order-ab78pq9
smslong Number No Argument indicating the number of concatenated SMS messages
If the exact number of SMS is known then indicate this number
If the number calculated by the API differs then an error message will be returned (code 32).
To avoid this control and allow messages on more than 1 SMS, use the value 999.
nostop Number No Argument for not automatically displaying STOP SMS at the end of the message
Use value 1
sending_date Date in the format
YYYY-MM-DD hh:mm
No Date on which the message will be sent
Immediate dispatch if not filled in
gmt_zone Time Zone No To be filled in, in case of delayed sending on another Time Zone than the default one (Europe/London)
ucs2 Number No Allows the use of characters in No Latin alphabet (Russian, Chinese, Arabic, etc) and/or with emojis
Constraints:
  • Request encoded in UTF-8 format
  • 1 emoji will count for 2 characters
  • The maximum length increases from 160 to 70 characters per SMS (67 characters if SMS Long).
  • Some operators do not support UCS2 (for example BOUYGUES in France), the characters No supported can then be removed from the message.
Use value 1
numAzur Number No Within the framework of a combined use between SMS Azur and the API, it is possible to force the sender number to be the same as the one used on SMS Azur.
Use value 1
domtom Number No Sendings to operator prefixes to DOM TOM (or DROM-COM) without the associated country code (e.g. +262 for Reunion Island) are refused by the API
To force their treatment at the current rate, use value 1
sandbox Number No Activation of the "sandbox" mode
This field allows you to not actually send the SMS during the query
. Sendings are not charged
. Use value 1

Response

Parameter Type Details
code Number Code corresponding to the error table
directoryId String Target directory identifier
message String Wording corresponding to the error table
sandbox Number If 'sandbox' was in the calling parameters, it's value is 1
If not, this parameter is not displayed at all
{
    "etat":{
        "etat":[
            {
                "code":         "0",
                "directoryId": "123456789",
                "message":      "Your message has been sent"
            }
        ]
    }
}
{
    "etat":{
        "etat":[
            {
                "code":         "108",
                "directoryId": "123456789",
                "message":      "This id does not match any directory!"
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/smsmulti' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "directoryId":"123456789",
   "sms":         "Hello! Welcome to iSendPro!",
   "senderid":    "isendpro"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/smsmulti';
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'directoryId'  =>  '123456789',
    'sms'           =>  'Hello! Welcome to iSendPro!',
    'senderid'      =>  'isendpro'
);
$params = json_encode($params); 
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->directoryId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
// Erreur specifique au repertoire
}else if (isset($repetat->directoryId) && ($repetat->code!=0)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'directoryId: '.$repetat->directoryId;
// Sending OK    
}else if (isset($repetat->directoryId) && ($repetat->code==0)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'directoryId: '.$repetat->directoryId;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/smsmulti'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'directoryId': '123456789',
    'sms':          'Hello! Welcome to iSendPro!',
    'senderid':     'isendpro'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('directoryId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Erreur specifique au repertoire
elif repetat.has_key('directoryId') and repetat['code']!=0:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'directoryId: '+repetat['directoryId']
# Sending OK    
elif repetat.has_key('directoryId') and repetat['code']==0:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'directoryId: '+repetat['directoryId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/smsmulti";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",        "a296464ce012b8ab710a");
        paramsTablo.put("directoryId", "123456789");
        paramsTablo.put("sms",          "Hello! Welcome to iSendPro!");
        paramsTablo.put("senderid",     "isendpro");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("directoryId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Erreur specifique au repertoire
            }else if(repetat.containsKey("directoryId") && repetat.get("code")!="0"){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("directoryId: "+repetat.get("directoryId")); 
            // Sending OK    
            }else if(repetat.containsKey("directoryId") && repetat.get("code")=="0"){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("directoryId: "+repetat.get("directoryId"));     
            }

        } finally {
            con.disconnect();
        }
    }
}


Creation of a short link

Creating a short link from a long url
Note: These short links have a lifetime of 1 month from their creation.

Call

https://apirest.isendpro.com/cgi-bin/shortlink
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
type_shortlink Number No Shortened url type
0: www.sms.ht (default value)
1: url2.fr
shortlink String Yes Url to shorten

Response

Parameter Type Details
code Number Code corresponding to the error table
message String Wording corresponding to the error table (see Appendices)
shortlink String Shortened Url
Format: www.sms.ht/[XXXX] ou url2.fr/[XXXX]
E.g.: www.sms.ht/6gHw or url2.fr/6gHw
{
    "etat": {
        "etat": [
            {
                "code":     "250",
                "message":  "The shortlink has been generated",
                "shortlink":"www.sms.ht/6X8Y"
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/shortlink' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "shortlink":   "https://www.google.com/"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/shortlink';
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'shortlink' =>  'https://www.google.com/'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->shortlink)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
// Infos du lien court
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'shortlink: '.$repetat->shortlink;
    echo $sautligne;
    echo 'message: '.$repetat->message;

}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/shortlink'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'shortlink':    'https://www.google.com/'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('shortlink'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos du lien court
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'Shortlink: '+repetat['shortlink']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/shortlink";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",        "a296464ce012b8ab710a");
        paramsTablo.put("shortlink",    "https://www.google.com/");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("shortlink")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos du lien court
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("shortlink: "+repetat.get("shortlink"));     
            }

        } finally {
            con.disconnect();
        }
    }
}


CSV Campaign Report

Retrieving the sending list over a given period of time in a .csv file

For performance reasons, this feature cannot be requested more than 10 times per hour
Exceeded this quota, you will get an error message (code 260)

To retrieve information related to delivery reports or returns, please use our dedicated webhooks

Call

https://apirest.isendpro.com/cgi-bin/campagne
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
sendingReport Number Yes Use the following value:
  • 1: Details per sending
  • 2: Grouping by day and by senderid
starting_date Date in the format
YYYY-MM-DD hh:mm
Yes Start date for sending the selection
ending_date Date in the format
YYYY-MM-DD hh:mm
Yes End date for sending the selection

Response

The answer is a zipped CSV file with the following columns according to the value of the argument rapportCampagne

Sample scripts

Parameter Type Details
Date d'envoi date Date of sending the SMS
senderid String Message senderid
Destinataire String Telephone number to which the message is addressed
Message String Sent message
Information complémentaire String Indicates operator and message status
Infos details String Indicates the acknowledgement of receipt provided by the operator
Statut String Message status
SMS retour String Possible response from the recipient
Canal String Haute Qualite
Prix Number Cost of the message
STOP Number Indicates whether the recipient has replied STOP
Tracker String Argument possibly provided at the time of sending for a simplified identification
Operateur String Operator associated with the recipient
Date AR date Date of receipt of operator acknowledgement of receipt
Code erreur Number Code associated with the acknowledgement of receipt
Parameter Type Details
Date d'envoi date Date of sending the SMS
Campagne String Campaign title
Répertoire String Directory(s) associated to sendings
senderid String Message senderid
Message String Campaign message if out of API
Pays String Recipient's country
Envois prévus Number Number of planned sendings
Envois reels Number Number of actual sendings
Envois No aboutis Number Number of undelivered sendings
SMS Long Number Number of SMS for the message
STOP Number Number of STOP received
clics Number Number of clicks
Visiteur unique Number Number of unique visitors
Taux visite Number Rate of visits
Cout HT Number Cost of the campaign in euros HT

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/campagne' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":           "a296464ce012b8ab710a",
   "sendingReport": 1,
   "starting_date":        "2020-01-01 10:00",
   "ending_date":        "2020-01-07 20:00"
}' \
-o sendingReport.zip
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();
$zipName = 'sendingReport.zip';
$zipDirectory = '/VOTRE_REPERTOIRE/';
$fp = fopen($zipDirectory.$zipName, 'w');

$url = 'https://apirest.isendpro.com/cgi-bin/campagne';
$params = array(
    'keyid'             =>  'a296464ce012b8ab710a',
    'sendingReport'   =>  1,
    'starting_date'          =>  '2020-01-01 10:00',
    'ending_date'          =>  '2020-01-07 20:00',
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
curl_setopt($ch, CURLOPT_FILE, $fp);

$response = curl_exec($ch);
fwrite($fp, $response);

curl_close($ch);
fclose($fp);

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use

// Unzip the file
$za = new ZipArchive(); 
$za->open($zipDirectory.$zipName); 
for( $i = 0; $i < $za->numFiles; $i++ ){ 
    $stat = $za->statIndex( $i ); 
    $fileName = basename($stat['name']);
    print_r($fileName.PHP_EOL);     
    $za->extractTo($zipDirectory);
    $za->close();    
    // Lecture du fichier csv dans le zip
    $fn = fopen($fileName, 'r');    
    // Liste des titres de colonnes
    $titres = fgetcsv($fn, 1000, ';');
    while (($data = fgetcsv($fn, 1000, ';')) !== FALSE){
        foreach($data as $i => $d){
            if($d){
                // Affichage des donnees de la ligne
                echo $titres[$i].' => '.$d.PHP_EOL;
            }            
        }
        // Line break
        echo PHP_EOL;
    }   
    // Deleting the .csv file
    unlink($zipDirectory.$fileName);
}
// Deleting the .zip file
unlink($zipDirectory.$zipName);
?>
####################################################################################
#- Send request
####################################################################################
import shutil
import requests
import zipfile
import os

zipName = 'sendingReport.zip'
zipDirectory = '/VOTRE_REPERTOIRE/'

url = 'https://apirest.isendpro.com/cgi-bin/campagne'
params = {
    'keyid':            'a296464ce012b8ab710a',
    'sendingReport':  1,
    'starting_date':         '2020-01-01 10:00',
    'ending_date':         '2020-01-07 20:00',
}

response = requests.post(url, params, stream=True)
with open(zipDirectory+zipName, 'wb') as f:
    response.raw.decode_content = True
    shutil.copyfileobj(response.raw, f) 

####################################################################################
#- Return processing
####################################################################################
myzipfile = zipfile.ZipFile(zipDirectory+zipName)
for fileName in myzipfile.namelist():
    # Unzip the file vers zipDirectory
    with zipfile.ZipFile(zipDirectory+zipName, 'r') as zip_ref:
        zip_ref.extractall(zipDirectory)    
    # Lecture du fichier csv dans le zip
    fichier = open(zipDirectory+fileName)   
    lines = fichier.readlines()    
    firstLine=1
    for line in lines:
        line=line.strip()   
        line=line.split(';')    
        if firstLine:
            # Liste des titres de colonnes
            firstLine=0
            titres=line
        else:
            i=0
            for data in line:
                if data:
                    # Affichage des donnees de la ligne
                    print titres[i]+' => '+data
                    i+=1 

    # Deleting the .csv file
    os.remove(zipDirectory+fileName)

# Deleting the .zip file
os.remove(zipDirectory+zipName)
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.io.BufferedReader;
import java.io.FileReader;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;
    /**
     * Size of the buffer to read/write data
     */
    private static final int BUFFER_SIZE = 4096;    

    public static void main(String[] args) throws IOException {

        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/campagne";
        
        var zipName = "sendingReport.zip";
        var zipDirectory = "/VOTRE_REPERTOIRE/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("sendingReport",  "1");
        paramsTablo.put("starting_date",         "2020-01-01 10:00");
        paramsTablo.put("ending_date",         "2020-01-07 20:00");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            File myzipfile = new File(zipDirectory+zipName);
            OutputStream outStream = new FileOutputStream(myzipfile);
            InputStream inputStream = con.getInputStream();
            int read;
            byte[] bytes = new byte[1024];
            while ((read = inputStream.read(bytes)) != -1) {
                outStream.write(bytes, 0, read);
            }  
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////            
            File destDir = new File(zipDirectory);

            ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipDirectory+zipName));
            ZipEntry entry = zipIn.getNextEntry();
            // iterates over entries in the zip file
            while (entry != null) {
                File mycsvfile = new File(zipDirectory+entry.getName());
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(zipDirectory+entry.getName()));
                byte[] bytesIn = new byte[BUFFER_SIZE];
                int read2 = 0;
                while ((read2 = zipIn.read(bytesIn)) != -1) {
                    bos.write(bytesIn, 0, read2);
                }
                bos.close();              
                        
                BufferedReader reader;
                String lineD;
                String data;  		
                ArrayList<String> titres=new ArrayList<String>();
                reader = new BufferedReader(new FileReader(zipDirectory+entry.getName()));
                String line = reader.readLine();
                // Liste des titres de colonnes
                if (line != null) {	
                    lineD = line.trim();
                    titres=new ArrayList<String>(Arrays.asList(lineD.split(";")));    
                }
                while (line != null) {				
                    line = reader.readLine();
                    if (line != null) {	
                        lineD = line.trim();
                        ArrayList<String> lineList = new ArrayList<String>(Arrays.asList(lineD.split(";")));                  
                        for (int i = 0; i < lineList.size(); i++) {
                            data = (String)lineList.get(i);            
                            data = data.trim();
                            System.out.println(titres.get(i)+" => "+data);
                        }
                        System.out.println(" ");
                    }
                }
                reader.close(); 
                // Deleting the .csv file
                mycsvfile.delete();

                zipIn.closeEntry();
                entry = zipIn.getNextEntry();            
            }
            zipIn.close();
            // Deleting the .zip file
            myzipfile.delete();            
            
        } finally {
            con.disconnect();
        }
    }  
}


JSON Campaign Report

Retrieving the sending list over a given period of time, on a phone number and a tracker in JSON
. The query cannot concern more than 1000 data at a time if not an error message will be returned
. If the request is too big then you have to use the fields select_deb and select_pas.

For performance reasons, this feature cannot be requested more than 10 times per hour
Exceeded this quota, you will get an error message (code 260)

To retrieve information related to delivery reports or returns, please use our dedicated webhooks

Call

https://apirest.isendpro.com/cgi-bin/campagne
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
rapportCampagneData Number Yes Use value 1
starting_date Date in the format
YYYY-MM-DD hh:mm
Yes Start date for sending the selection
ending_date Date in the format
YYYY-MM-DD hh:mm
Yes End date for sending the selection
select_deb Number No This number indicates the starting position of the selection results.
E.g.: select_deb=1000 to get the data after the 1000th results
select_pas Number No This number indicates the amount of results in the selection.
The maximum accepted value is 1000
E.g.: select_pas=500 to obtain 500 data
select_msisdn Array No Added this list in the campaign report query In international format without the +
E.g.: [ "33601020304", "33601020305", "33601020306" ]
select_tracker String No Added this criterion in the campaign report query
The search will be extended to all trackers starting with the indicated tracker.
E.g.: If select_tracker=camp001 then the trackers camp001-001 and camp001-002 will be searched.

Response

Parameter Type Details
code Number Code corresponding to the error table
tel String Phone number associated with the return code
message String Wording corresponding to the error table
historySender String Message senderid
historyMsg String Message sent to the recipient
historyDate String Date the message was sent to the recipient in the format AAAA-MM-JJ HH:MM:SS
historyTracker String Tracker associated with the Message sent to the recipient
historyOperator String Operator associated with the Message sent to the recipient
historyResponse String Possible answer returned by the recipient
. If no answer the value is "-".
historyResponseTime String Date of the eventual reply returned by the recipient
If no answer the value is "0000-00-00 00:00:00"
historyDeliveryAR String Indicates if the message has been delivered
The possible values are:
  • OK
  • NOK
historyDeliveryARtime String Date of the notification of delivery of the message to the recipient in the format AAAA-MM-JJ HH:MM:SS
historyDelivery1 String More information on the notification
historyDelivery2 String More information on the notification
historyNbSMSlong Number Number of SMS for the message
{
    "etat": {
        "etat": [
            {
                "code":                     "207",
                "tel":                      "33601020304",
                "message":                  "Sending history",
                "historySender":            "mycompany",
                "historyMsg":               "Votre test 1 a bien été recu",
                "historyDate":              "2020-04-14 14:58:02",
                "historyTracker":           "camp001-002",
                "historyOperator":          "SFR",
                "historyResponse":          "-",
                "historyResponseTime":      "0000-00-00 00:00:00",                                
                "historyDeliveryAR":        "OK",
                "historyDeliveryARtime":    "2020-04-14 14:58:03",
                "historyDelivery1":         "SFR: SMS remis",
                "historyDelivery2":         "Message for 0033601020304 has been delivered",
                "historyNbSMSlong":         "1"
            },
            {
                "code":                     "207",
                "tel":                      "33601020305",
                "message":                  "Sending history",
                "historySender":            "mycompany",
                "historyMsg":               "Votre test 1 a bien été recu",
                "historyDate":              "2020-04-14 14:58:08",
                "historyTracker":           "camp001-001",
                "historyOperator":          "ORAN",
                "historyResponse":          "-",
                "historyResponseTime":      "0000-00-00 00:00:00",         
                "historyDeliveryAR":        "OK",
                "historyDeliveryARtime":    "2020-04-14 14:58:10",
                "historyDelivery1":         "ORAN: SMS remis",
                "historyDelivery2":         "SMS remis le 14.04.20 a 14:58:10",
                "historyNbSMSlong":         "1"
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/campagne' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                 "a296464ce012b8ab710a",
   "rapportCampagneData":   "1",
   "select_tracker":        "camp001",
   "starting_date":              "2020-04-01 00:00",
   "ending_date":              "2020-04-30 00:00",
   "select_deb":            "0",
   "select_pas":            "500"   
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();
$url = 'https://apirest.isendpro.com/cgi-bin/campagne';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'rapportCampagneData'   =>  '1',
    'starting_date'              =>  '2020-01-01 00:00',
    'ending_date'              =>  '2020-01-10 00:00',
    'select_deb'            =>  '0',
    'select_pas'            =>  '500',
    'select_tracker'        =>  'camp001',    
    'select_msisdn'         =>  ['33601020304','33601020305']
);
$params = json_encode($params);     
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params,    
    CURLOPT_HTTPHEADER => array(                                                                          
        'Content-Type' => 'application/json',                                                                                
        'Content-Length: ' =>  strlen($params)                                                                       
    )
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetatList=$reponsejson->etat->etat;
if(!is_array($repetatList)){
    $repetatList=array($repetatList);
}

$cpt=1;
foreach($repetatList as $repetat){
    echo '-----------';
    echo $sautligne;
    echo 'Data '.$cpt;
    echo $sautligne;
    // General error
    if (!isset($repetat->tel)){
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;
    // infos sur le retour
    }else{
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;
        echo 'Tel: '.$repetat->tel;
        echo $sautligne;
        echo 'historySender: '.$repetat->historySender;
        echo $sautligne;        
        echo 'historyMsg: '.$repetat->historyMsg;
        echo $sautligne;        
        echo 'historyDate: '.$repetat->historyDate;
        echo $sautligne;        
        echo 'historyTracker: '.$repetat->historyTracker;
        echo $sautligne;        
        echo 'historyOperator: '.$repetat->historyOperator;
        echo $sautligne;        
        echo 'historyResponse: '.$repetat->historyResponse;
        echo $sautligne;        
        echo 'historyResponseTime: '.$repetat->historyResponseTime;        
        echo $sautligne;        
        echo 'historyDeliveryAR: '.$repetat->historyDeliveryAR;
        echo $sautligne;        
        echo 'historyDeliveryARtime: '.$repetat->historyDeliveryARtime;
        echo $sautligne;        
        echo 'historyDelivery1: '.$repetat->historyDelivery1;
        echo $sautligne;        
        echo 'historyDelivery2: '.$repetat->historyDelivery2;
        echo $sautligne;    
        echo 'historyNbSMSlong: '.$repetat->historyNbSMSlong;
        echo $sautligne;        
    }
    $cpt+=1;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests
import types

url = 'https://apirest.isendpro.com/cgi-bin/campagne'
params = {
    'keyid'                 :  'a296464ce012b8ab710a',
    'rapportCampagneData'   :  '1',
    'starting_date'              :  '2020-01-01 00:00',
    'ending_date'              :  '2020-01-10 00:00',
    'select_deb'            :  '0',
    'select_pas'            :  '500',
    'select_msisdn'         :  ['33601020304','33601020305'],    
    'select_tracker'        :  'camp001'    
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetatList=reponsejson['etat']['etat']
if not type(repetatList) is types.ListType:
    repetatList=[repetatList]

cpt=1
for repetat in repetatList:
    print '-----------'    
    print 'Data '+str(cpt)    
    # General error
    if not repetat.has_key('tel'):
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']

    # Infos sur le retour
    else:
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        print 'Tel: '+repetat['tel']   
        print 'historyMsg: '+repetat['historyMsg']     
        print 'historyMsg: '+repetat['historyMsg']       
        print 'historyDate: '+repetat['historyDate']
        print 'historyTracker: '+repetat['historyTracker']   
        print 'historyOperator: '+repetat['historyOperator']
        print 'historyResponse: '+repetat['historyResponse']
        print 'historyResponseTime: '+repetat['historyResponseTime']                
        print 'historyDeliveryAR: '+repetat['historyDeliveryAR']
        print 'historyDeliveryARtime: '+repetat['historyDeliveryARtime']
        print 'historyDelivery1: '+repetat['historyDelivery1']
        print 'historyDelivery2: '+repetat['historyDelivery2']
        print 'historyNbSMSlong: '+repetat['historyNbSMSlong'] 
        
    cpt+=1
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/campagne";
        
        ArrayList<String> listData = new ArrayList<String>();
        listData.add("33601020304");
        listData.add("33601020305");
        
        Map<String, Object> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                "a296464ce012b8ab710a");
        paramsTablo.put("rapportCampagneData", "1");
        paramsTablo.put("starting_date",             "2020-01-01 00:00");     
        paramsTablo.put("ending_date",             "2020-01-10 00:00");     
        paramsTablo.put("select_deb",           "0");     
        paramsTablo.put("select_pas",           "500");     
        paramsTablo.put("select_tracker",       "camp001");             
        paramsTablo.put("select_msisdn",        listData);            
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            ArrayList repetatList = (ArrayList)repetat.get("etat");
            if(! (repetatList instanceof ArrayList)){
                repetatList.add(repetatList);                
            }            
            
            for (int i = 0; i < repetatList.size(); i++) {
                repetat = (Map)repetatList.get(i);
                
                System.out.println("-----------");
                System.out.println("Data "+i);                
                // General error
                if (! repetat.containsKey("tel")){           
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));    
                // Infos sur le retour
                }else{
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));  
                    System.out.println("Tel: "+repetat.get("tel"));     
                    System.out.println("historySender: "+repetat.get("historySender"));       
                    System.out.println("historyMsg: "+repetat.get("historyMsg"));       
                    System.out.println("historyDate: "+repetat.get("historyDate"));
                    System.out.println("historyTracker: "+repetat.get("historyTracker"));   
                    System.out.println("historyOperator: "+repetat.get("historyOperator"));
                    System.out.println("historyResponse: "+repetat.get("historyResponse"));
                    System.out.println("historyResponseTime: "+repetat.get("historyResponseTime"));                                        
                    System.out.println("historyDeliveryAR: "+repetat.get("historyDeliveryAR"));
                    System.out.println("historyDeliveryARtime: "+repetat.get("historyDeliveryARtime"));
                    System.out.println("historyDelivery1: "+repetat.get("historyDelivery1"));
                    System.out.println("historyDelivery2: "+repetat.get("historyDelivery2"));    
                    System.out.println("historyNbSMSlong: "+repetat.get("historyNbSMSlong")); 
                }
            }
        } finally {
            con.disconnect();
        }
    }
}


Counting the number of characters and SMS

Counting the length of a message in number of characters and number of SMS before actual sending

Call

https://apirest.isendpro.com/cgi-bin/comptage
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
num String Yes Recipient's phone number
In international format without the +
E.g.: 33601020304
sms String Yes Message sent to the recipient
1 SMS can contain up to 160 characters
Possibility to send longer messages (up to 6 concatenated SMS) for a total of 918 characters (6 x 153)
(7 characters being reserved for technical headings)
The unit cost will then be multiplied by the number of corresponding SMS messages.
Cf Argument smslong
senderid String No Message sender
By default, a 5-digit short number
E.g.: 36007
Constraints:
  • Between 4 and 11 characters
  • Numbers between 0 and 9
  • Only French alphabet letter without accenta
  • No special characters
  • Not just numbers
  • Unless nostop=1, automatic addition of STOP XXXXX at the end of the message and increases the global length by 12 characters.
counting Number Yes Use value 1

Response

Parameter Type Details
tel String Phone number associated with the return code
nb_sms number Nombre de SMS pour contenir le message
nb_caractere number Nombre de caractères pour contenir le message
{
 "etat":{
     "etat":[
         {
             "tel":             "0680010203",
             "nb_sms":          "1",             
             "nb_caractere":    "65"
         }
     ]
 }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/comptage' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "num":         "33601020304",
   "sms":         "Hello! Welcome to iSendPro!",
   "senderid":    "isendpro",
   "counting":    1
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/comptage';
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num'       =>  '33601020304',
    'sms'       =>  'Hello! Welcome to iSendPro!',
    'senderid'  =>  'isendpro',
    'counting'  =>  1
);
$params = json_encode($params); 
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->tel)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
// Infos de counting
}else{
    echo 'tel: '.$repetat->tel;
    echo $sautligne;
    echo 'nb_sms: '.$repetat->nb_sms;
    echo $sautligne;
    echo 'nb_caractere: '.$repetat->nb_caractere;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/comptage'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num':      '33601020304',
    'sms':      'Hello! Welcome to iSendPro!',
    'senderid': 'isendpro',
    'counting': 1
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('tel'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de counting
else:
    print 'tel: '+repetat['tel']
    print 'nb_sms: '+repetat['nb_sms']
    print 'nb_caractere: '+repetat['nb_caractere']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/comptage";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      "33601020304");
        paramsTablo.put("sms",      "Hello! Welcome to iSendPro!");
        paramsTablo.put("senderid", "isendpro"); 
        paramsTablo.put("counting", "1");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("tel")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de counting
            }else{
                System.out.println("tel: "+repetat.get("tel"));
                System.out.println("nb_sms: "+repetat.get("nb_sms"));  
                System.out.println("nb_caractere: "+repetat.get("nb_caractere"));     
            }

        } finally {
            con.disconnect();
        }
    }
}


Credit checking

Checking of the remaining credit in quantity of SMS or in euros (excl. VAT)

Call

https://apirest.isendpro.com/cgi-bin/credit
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
credit Number Yes Number indicating the type of credit remaining
  • 1: For the amount in euros excluding VAT
  • 2: For the quantity of SMS

Response

Parameter Type Details
credit String Float indicating the remaining credit in euros excluding VAT
E.g.: 561.20
quantite Number Number indicating the number of remaining credits in SMS quantity
E.g.: 8974
{
    "etat": 
    {
        "credit":   "13.066",
        "quantite": "326"
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/credit' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":   "a296464ce012b8ab710a",
   "credit":  2
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/credit';
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'credit'    =>  2
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat;

// General error
if (!isset($repetat->credit)){
    $repetat=$reponsejson->etat->etat[0];
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
// Infos de quantites
}else{
    echo 'credit: '.$repetat->credit;
    if (isset($repetat->quantite)){
        echo $sautligne;
        echo 'quantite: '.$repetat->quantite;
    }
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/credit'
params = {
    'keyid'     : 'a296464ce012b8ab710a',
    'credit'    : 2
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']

# General error
if not repetat.has_key('credit'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de quantites
else:
    print 'credit: '+repetat['credit']
    if repetat.has_key('quantite'):
        print 'quantite: '+repetat['quantite']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/credit";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid", "a296464ce012b8ab710a");
        paramsTablo.put("credit", "2");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");

            // General error
            if (! repetat.containsKey("credit")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }            
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("credit: "+repetat.get("credit"));
                if (repetat.containsKey("quantite")){
                    System.out.println("quantite: "+repetat.get("quantite"));  
                }
            }

        } finally {
            con.disconnect();
        }
    }
}


Get unit price per country

Get unit price per country in euros excluding VAT

Call

https://apirest.isendpro.com/cgi-bin/credit
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
countryCode String Yes International country code without the +.
getPrice String Yes Use the value '1'

Response

Parameter Type Details
code Number Code corresponding to the error table
message String Wording corresponding to the error table
countryCode Number International country code without the +
accountPrice String Unit price in euros excl. VAT with the dot (.) as a cent separator
E.g.: 0.067
{
    "etat":{
        "etat":[
            {
                "code":         "251",
                "message":      "The price",
                "countryCode":  "44",
                "accountPrice":  "0.067"
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/credit' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":       "a296464ce012b8ab710a",
   "countryCode": "33",
   "getPrice":    "1"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/credit';
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'countryCode'   =>  '33',
    'getPrice'      =>  '1'    
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->countryCode)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'countryCode: '.$repetat->countryCode;
    echo $sautligne;
    echo 'accountPrice: '.$repetat->accountPrice;
    echo $sautligne;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/credit'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'countryCode':  '33',
    'getPrice':     '1'    
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('countryCode'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'countryCode: '+repetat['countryCode']
    print 'accountPrice: '+repetat['accountPrice']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/credit";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("countryCode",      "33");
        paramsTablo.put("getPrice",         "1");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("countryCode")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message")); 
                System.out.println("countryCode: "+repetat.get("countryCode"));  
                System.out.println("accountPrice: "+repetat.get("accountPrice"));     
            }

        } finally {
            con.disconnect();
        }
    }
}


LookUp HLR request

Paid Service Please contact your sales consultant regarding the pricing of this service.
Call the LookUp HLR to test the phone numbers and get the associated operator in return
Phone numbers are placed in the variables numX where X is an integer from 1 to a maximum of 500

Call

https://apirest.isendpro.com/cgi-bin/hlr
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
num Array Yes List of recipient's phone numbers
In international format without the +
E.g.: [ "33601020304", "33601020305", "33601020306" ]
getHLR Number Yes Use value 1

Response

Parameter Type Details
tel String Phone number associated with the return code
operateur String String of characters indicating the value of the operator
List of operators:
  • ORAN: Orange
  • SFR: SFR
  • BOUY: Bouygues Telecom
  • FREE: FREE
  • NRJ: NRJ Mobile
  • LYCA: LYCA Mobile
  • CORI: Coriolis
  • MUND: Mundio
  • TRAT: Transatel
  • COMP: Completel
  • LEGO: Legos
  • MOQU: SFR
  • INTE: International number
  • INVALIDE: unknown number
If the number is blacklisted then it will be added "-BLACKLIST" to the operator's name.
{
    "etat": {
        "etat": [
            {
                "tel":      "33601020304", 
                "operateur":"INVALIDE"
            }, 
            {
                "tel":      "33601020305",
                "operateur":"SFR"
            },
            {
                "tel":      "33601020306",
                "operateur":"BOUY-LISTE NOIRE"
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/hlr' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":   "a296464ce012b8ab710a",
   "num":     ["33601020304","33601020305","33601020306"],
   "getHLR":  1
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/hlr';
$params = array(
    'keyid'     =>  'a296464ce012b8ab710a',
    'num'       =>  ['33601020304','33601020305'],
    'getHLR'    =>  1
);
$params = json_encode($params);     
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params,    
    CURLOPT_HTTPHEADER => array(                                                                          
        'Content-Type' => 'application/json',                                                                                
        'Content-Length: ' =>  strlen($params)                                                                       
    )
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetatList=$reponsejson->etat->etat;
if(!is_array($repetatList)){
    $repetatList=array($repetatList);
}

$cpt=1;
foreach($repetatList as $repetat){
    echo '-----------';
    echo $sautligne;
    echo 'Data '.$cpt;
    echo $sautligne;
    // General error
    if (!isset($repetat->tel)){
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;
    // Infos sur le numero
    }else{
        echo 'Tel: '.$repetat->tel;
        echo $sautligne;
        echo 'Operateur: '.$repetat->operateur;
        echo $sautligne;
    }
    $cpt+=1;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests
import types

url = 'https://apirest.isendpro.com/cgi-bin/hlr'
params = {
    'keyid':    'a296464ce012b8ab710a',
    'num':      ['33601020304','33601020305','33601020306'],
    'getHLR':   1
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetatList=reponsejson['etat']['etat']
if not type(repetatList) is types.ListType:
    repetatList=[repetatList]

cpt=1
for repetat in repetatList:
    print '-----------'    
    print 'Data '+str(cpt)    
    # General error
    if not repetat.has_key('tel'):
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        
    # Infos sur le numero
    elif repetat.has_key('tel'):
        print 'Tel: '+repetat['tel']
        print 'Operateur: '+repetat['operateur']
    
    cpt+=1
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/hlr";
        
        ArrayList<String> listData = new ArrayList<String>();
        listData.add("33601020304");
        listData.add("33601020305");
        listData.add("33601020306");
        
        Map<String, Object> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      listData);
        paramsTablo.put("getHLR",   "1");     
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            ArrayList repetatList = (ArrayList)repetat.get("etat");
            if(! (repetatList instanceof ArrayList)){
                repetatList.add(repetatList);                
            }            
            
            for (int i = 0; i < repetatList.size(); i++) {
                repetat = (Map)repetatList.get(i);
                
                System.out.println("-----------");
                System.out.println("Data "+i);                
                // General error
                if (! repetat.containsKey("tel")){           
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));    
                // Specific error to the phone number
                }else{
                    System.out.println("tel: "+repetat.get("tel"));
                    System.out.println("operateur: "+repetat.get("operateur"));     
                }
            }
        } finally {
            con.disconnect();
        }
    }
}


Blacklist Adding

Add phone numbers to your blacklist

Call

https://apirest.isendpro.com/cgi-bin/setlistenoire
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
num String Yes Recipient's phone number
In international format without the +
E.g.: 33601020304
setBlackList Number Yes Use value 1

Response

Parameter Type Details
tel String Phone number associated with the return code
listeNoire String Adding confirmation: OK
{
    "etat": {
        "etat": [
            {
                "tel":          "33601020304", 
                "listeNoire":   "OK"
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/setlistenoire' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":           "a296464ce012b8ab710a",
   "num":             "33601020304",
   "setBlackList":   1
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/setlistenoire';
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'num'           =>  '33601020304',
    'setBlackList' =>  1
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->tel)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'tel: '.$repetat->tel;
    echo $sautligne;
    echo 'listeNoire: '.$repetat->listeNoire;
    echo $sautligne;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/setlistenoire'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'num':          '33601020304',
    'setBlackList':1
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('tel'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'tel: '+repetat['tel']
    print 'listeNoire: '+repetat['listeNoire']

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/setlistenoire";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      "33601020304");
        paramsTablo.put("setBlackList", "1");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("tel")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("tel: "+repetat.get("tel"));
                System.out.println("listeNoire: "+repetat.get("listeNoire"));    
            }

        } finally {
            con.disconnect();
        }
    }
}


Blacklist removal

Removing phone numbers from your blacklist

Call

https://apirest.isendpro.com/cgi-bin/dellistenoire
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
num String Yes Recipient's phone number
In international format without the +
E.g.: 33601020304
delListeNoire Number Yes Use value 1

Response

Parameter Type Details
tel String Phone number associated with the return code
listeNoire String Response to the deletion attempt
  • SUPPRESSION OK
  • SUPPRESSION NOK
{
    "etat": {
        "etat": [
            {
                "tel":          "33601020304", 
                "listeNoire":   "SUPPRESSION OK"
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "tel":          "33601020304", 
                "listeNoire":   "SUPPRESSION NOK"
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/dellistenoire' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":           "a296464ce012b8ab710a",
   "num":             "33601020304",
   "delListeNoire":   1
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/dellistenoire';
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'num'           =>  '33601020304',
    'delListeNoire' =>  1
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->tel)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'tel: '.$repetat->tel;
    echo $sautligne;
    echo 'listeNoire: '.$repetat->listeNoire;
    echo $sautligne;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/dellistenoire'
params = {
    'keyid':        'a296464ce012b8ab710a',
    'num':          '33601020304',
    'delListeNoire':1
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('tel'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'tel: '+repetat['tel']
    print 'listeNoire: '+repetat['listeNoire']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/dellistenoire";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",    "a296464ce012b8ab710a");
        paramsTablo.put("num",      "33601020304");
        paramsTablo.put("delListeNoire", "1");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("tel")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("tel: "+repetat.get("tel"));
                System.out.println("listeNoire: "+repetat.get("listeNoire"));    
            }

        } finally {
            con.disconnect();
        }
    }
}


Blacklist retrieval

Retrieving the list of blacklisted phone numbers in a .csv file

Call

https://apirest.isendpro.com/cgi-bin/getlistenoire
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
getListeNoire Number Yes Use value 1

Response

The response is a zipped CSV file with a single column containing the phone number.

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/getlistenoire' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":           "a296464ce012b8ab710a",
   "getListeNoire":   1
}' \
-o listenoire.zip
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();
$zipName = 'listenoire.zip';
$zipDirectory = '/VOTRE_REPERTOIRE/';
$fp = fopen($zipDirectory.$zipName, 'w');

$url = 'https://apirest.isendpro.com/cgi-bin/getlistenoire';
$params = array(
    'keyid'         =>  'a296464ce012b8ab710a',
    'getListeNoire' =>  1
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);
curl_setopt($ch, CURLOPT_FILE, $fp);

$response = curl_exec($ch);
fwrite($fp, $response);

curl_close($ch);
fclose($fp);

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use

// Unzip the file
$za = new ZipArchive(); 
$za->open($zipDirectory.$zipName); 
for( $i = 0; $i < $za->numFiles; $i++ ){ 
    $stat = $za->statIndex( $i ); 
    $fileName = basename($stat['name']);
    print_r($fileName.PHP_EOL);     
    $za->extractTo($zipDirectory);
    $za->close();    
    // Lecture du fichier csv dans le zip
    $fn = fopen($fileName, 'r');    
    // Liste des titres de colonnes
    $titres = fgetcsv($fn, 1000, ';');
    while (($data = fgetcsv($fn, 1000, ';')) !== FALSE){
        foreach($data as $i => $d){
            if($d){
                // Affichage des donnees de la ligne
                echo $titres[$i].' => '.$d.PHP_EOL;
            }            
        }
        // Line break
        echo PHP_EOL;
    }   
    // Deleting the .csv file
    unlink($zipDirectory.$fileName);
}
// Deleting the .zip file
unlink($zipDirectory.$zipName);
?>
####################################################################################
#- Send request
####################################################################################
import shutil
import requests
import zipfile
import os

zipName = 'listenoire.zip'
zipDirectory = '/VOTRE_REPERTOIRE/'

url = 'https://apirest.isendpro.com/cgi-bin/getlistenoire'
params = {
    'keyid':            'a296464ce012b8ab710a',
    'getListeNoire':    1
}

response = requests.post(url, params, stream=True)
with open(zipDirectory+zipName, 'wb') as f:
    response.raw.decode_content = True
    shutil.copyfileobj(response.raw, f) 

####################################################################################
#- Return processing
####################################################################################
myzipfile = zipfile.ZipFile(zipDirectory+zipName)
for fileName in myzipfile.namelist():
    # Unzip the file vers zipDirectory
    with zipfile.ZipFile(zipDirectory+zipName, 'r') as zip_ref:
        zip_ref.extractall(zipDirectory)    
    # Lecture du fichier csv dans le zip
    fichier = open(zipDirectory+fileName)   
    lines = fichier.readlines()    
    firstLine=1
    for line in lines:
        line=line.strip()   
        line=line.split(';')    
        if firstLine:
            # Liste des titres de colonnes
            firstLine=0
            titres=line
        else:
            i=0
            for data in line:
                if data:
                    # Affichage des donnees de la ligne
                    print titres[i]+' => '+data
                    i+=1 

    # Deleting the .csv file
    os.remove(zipDirectory+fileName)

# Deleting the .zip file
os.remove(zipDirectory+zipName)        
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.io.BufferedReader;
import java.io.FileReader;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;
    /**
     * Size of the buffer to read/write data
     */
    private static final int BUFFER_SIZE = 4096;    

    public static void main(String[] args) throws IOException {

        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/getlistenoire";
        
        var zipName = "listenoire.zip";
        var zipDirectory = "/VOTRE_REPERTOIRE/";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("getListeNoire",    "1");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            File myzipfile = new File(zipDirectory+zipName);
            OutputStream outStream = new FileOutputStream(myzipfile);
            InputStream inputStream = con.getInputStream();
            int read;
            byte[] bytes = new byte[1024];
            while ((read = inputStream.read(bytes)) != -1) {
                outStream.write(bytes, 0, read);
            }  
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////            
            File destDir = new File(zipDirectory);

            ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipDirectory+zipName));
            ZipEntry entry = zipIn.getNextEntry();
            // iterates over entries in the zip file
            while (entry != null) {
                File mycsvfile = new File(zipDirectory+entry.getName());
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(zipDirectory+entry.getName()));
                byte[] bytesIn = new byte[BUFFER_SIZE];
                int read2 = 0;
                while ((read2 = zipIn.read(bytesIn)) != -1) {
                    bos.write(bytesIn, 0, read2);
                }
                bos.close();              
                        
                BufferedReader reader;
                String lineD;
                String data;  		
                ArrayList<String> titres=new ArrayList<String>();
                reader = new BufferedReader(new FileReader(zipDirectory+entry.getName()));
                String line = reader.readLine();
                // Liste des titres de colonnes
                if (line != null) {	
                    lineD = line.trim();
                    titres=new ArrayList<String>(Arrays.asList(lineD.split(";")));    
                }
                while (line != null) {				
                    line = reader.readLine();
                    if (line != null) {	
                        lineD = line.trim();
                        ArrayList<String> lineList = new ArrayList<String>(Arrays.asList(lineD.split(";")));                  
                        for (int i = 0; i < lineList.size(); i++) {
                            data = (String)lineList.get(i);            
                            data = data.trim();
                            System.out.println(titres.get(i)+" => "+data);
                        }
                        System.out.println(" ");
                    }
                }
                reader.close(); 
                // Deleting the .csv file
                mycsvfile.delete();

                zipIn.closeEntry();
                entry = zipIn.getNextEntry();            
            }
            zipIn.close();
            // Deleting the .zip file
            myzipfile.delete();            
            
        } finally {
            con.disconnect();
        }
    }  
}


Creating a new directory

Creation of a new directory of phone numbers

Call

https://apirest.isendpro.com/cgi-bin/repertoire
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
directoryName String Yes Name of the new directory
directoryEdit String Yes Use the value 'create'

Response

Parameter Type Details
code Number Code corresponding to the error table
directoryId String Identifier of the created directory
message String Wording corresponding to the error table
{
    "etat":{
        "etat":[
            {
                "code":         "100",
                "directoryId": "39258",
                "message":      "Your directory has been created"
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/repertoire' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":           "a296464ce012b8ab710a",
   "directoryName":   "MonNouveauRepertoire",
   "directoryEdit":  "create"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/repertoire';
$params = array(
    'keyid'             =>  'a296464ce012b8ab710a',
    'directoryName'     =>  'MonNouveauRepertoire',
    'directoryEdit'    =>  'create'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->directoryId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
    echo 'directoryId: '.$repetat->directoryId;
    echo $sautligne;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/repertoire'
params = {
    'keyid':            'a296464ce012b8ab710a',
    'directoryName':    'directoryName',
    'directoryEdit':   'create'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('directoryId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'directoryId: '+repetat['directoryId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/repertoire";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("directoryName",    "directoryName");
        paramsTablo.put("directoryEdit",   "create");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("directoryId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message")); 
                System.out.println("directoryId: "+repetat.get("directoryId"));    
            }

        } finally {
            con.disconnect();
        }
    }
}


Adding to a directory

Adding phone numbers to a phonebook

Call

https://apirest.isendpro.com/cgi-bin/repertoire
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
num Array Yes List of phone numbers to add
In international format without the +
E.g.: [ "33601020304", "33601020305", "33601020306" ]
directoryId String Yes Identifier of the directory to be modified
directoryEdit String Yes Use the value 'add'
champ[X] Array No List of data to be associated to the field for each number
[X] is to be replaced by an integer between 1 and 27 inclusive
By default:
  • champ1 <=> Nom
  • champ2 <=> Champ A
  • champ27 <=> Champ Z
The position in the list of fields must match the position of the phone number in the list of phones

Response

Parameter Type Details
code Number Code corresponding to the error table
directoryId Number Identifier of the created directory
tel String Phone number associated with the return code
message String Wording corresponding to the error table
{
    "etat":{
        "etat":[
            {
                "code":         "103",
                "directoryId": "39258",
                "tel":          "33601020304",
                "message":      "Your data has been added to the directory"
            },
            {
                "code":         "103",
                "directoryId": "39258",
                "tel":          "33601020305",
                "message":      "Your data has been added to the directory"
            }            
        ]
    }
}
{
    "etat":{
        "etat":[
            {
                "code":         "105",
                "directoryId": "39258",
                "tel":          "33601020304",
                "message":      "The data is already in the directory"
            },
            {
                "code":         "105",
                "directoryId": "39258",
                "tel":          "33601020305",
                "message":      "The data is already in the directory"
            }            
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/repertoire' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":           "a296464ce012b8ab710a",
   "directoryEdit":  "add",
   "directoryId":    "39258",
   "num":             ["33601020304","33601020305","33601020306"],
   "champ1":          ["Pierre","Paul","Jacques"],
   "champ2":          ["Paris","Lyon","Marseille"]
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/repertoire';
$params = array(
    'keyid'             =>  'a296464ce012b8ab710a',
    'directoryEdit'    =>  'add',
    'directoryId'      =>  '39258',
    'num'               =>  ['33601020304','33601020305','33601020306'],
    'champ1'            =>  ['Pierre','Paul','Jacques'],
    'champ2'            =>  ['Paris','Lyon','Marseille']
);
$params = json_encode($params);     
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params,    
    CURLOPT_HTTPHEADER => array(                                                                          
        'Content-Type' => 'application/json',                                                                                
        'Content-Length: ' =>  strlen($params)                                                                       
    )
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetatList=$reponsejson->etat->etat;
if(!is_array($repetatList)){
    $repetatList=array($repetatList);
}

$cpt=1;
foreach($repetatList as $repetat){
    echo '-----------';
    echo $sautligne;
    echo 'Data '.$cpt;
    echo $sautligne;
    // General error
    if (!isset($repetat->tel)){
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;
    // Infos sur le numero
    }else{
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;    
        echo 'Tel: '.$repetat->tel;
        echo $sautligne;
        echo 'directoryId: '.$repetat->directoryId;
        echo $sautligne;
    }
    $cpt+=1;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests
import types

url = 'https://apirest.isendpro.com/cgi-bin/repertoire'
params = {
    'keyid':            'a296464ce012b8ab710a',
    'directoryEdit':   'add',
    'directoryId':     '39258',
    'num':              ['33601020304','33601020305','33601020306'],
    'champ1':           ['Pierre','Paul','Jacques'],
    'champ2':           ['Paris','Lyon','Marseille']
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetatList=reponsejson['etat']['etat']
if not type(repetatList) is types.ListType:
    repetatList=[repetatList]

cpt=1
for repetat in repetatList:
    print '-----------'    
    print 'Data '+str(cpt)    
    # General error
    if not repetat.has_key('tel'):
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        
    # Infos sur le numero
    else:
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        print 'Tel: '+repetat['tel']
        print 'directoryId: '+repetat['directoryId']
        
    cpt+=1
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/repertoire";

        ArrayList<String> listData = new ArrayList<String>();
        listData.add("33601020304");
        listData.add("33601020305");
        listData.add("33601020306");        

        ArrayList<String> listChamp1 = new ArrayList<String>();
        listChamp1.add("Pierre");
        listChamp1.add("Paul");
        listChamp1.add("Jacques");  

        ArrayList<String> listChamp2 = new ArrayList<String>();
        listChamp2.add("Paris");
        listChamp2.add("Lyon");
        listChamp2.add("Marseille");  
        
        Map<String, Object> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("directoryEdit",   "add");
        paramsTablo.put("directoryId",     "39258");
        paramsTablo.put("num",              listData);
        paramsTablo.put("champ1",           listChamp1);
        paramsTablo.put("champ2",           listChamp2);    
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            ArrayList repetatList = (ArrayList)repetat.get("etat");
            if(! (repetatList instanceof ArrayList)){
                repetatList.add(repetatList);                
            }            
            
            for (int i = 0; i < repetatList.size(); i++) {
                repetat = (Map)repetatList.get(i);
                
                System.out.println("-----------");
                System.out.println("Data "+i);                
                // General error
                if (! repetat.containsKey("tel")){           
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));    
                // Specific error to the phone number
                }else{
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));                  
                    System.out.println("tel: "+repetat.get("tel"));
                    System.out.println("directoryId: "+repetat.get("directoryId"));     
                }
            }
        } finally {
            con.disconnect();
        }
    }
}


Deletion in a directory

Deleting phone numbers from a directory

Call

https://apirest.isendpro.com/cgi-bin/repertoire
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
num Array Yes List of phone numbers to add
In international format without the +
E.g.: [ "33601020304", "33601020305", "33601020306" ]
directoryId String Yes Identifier of the directory to be modified
directoryEdit String Yes Use the value 'del'

Response

Parameter Type Details
code Number Code corresponding to the error table
directoryId Number Identifier of the created directory
tel String Phone number associated with the return code
message String Wording corresponding to the error table
{
    "etat":{
        "etat":[
            {
                "code":         "106",
                "directoryId": "39258",
                "tel":          "33601020304",
                "message":      "The data has been deleted from the directory"
            },
            {
                "code":         "106",
                "directoryId": "39258",
                "tel":          "33601020305",
                "message":      "The data has been deleted from the directory"
            }            
        ]
    }
}
{
    "etat":{
        "etat":[
            {
                "code":         "107",
                "directoryId": "39258",
                "tel":          "33601020304",
                "message":      "The data is not in the directory"
            },
            {
                "code":         "107",
                "directoryId": "39258",
                "tel":          "33601020305",
                "message":      "The data is not in the directory"
            }            
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/repertoire' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":           "a296464ce012b8ab710a",
   "directoryEdit":  "del",
   "directoryId":    "39258",
   "num":             ["33601020304","33601020305","33601020306"]
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/repertoire';
$params = array(
    'keyid'             =>  'a296464ce012b8ab710a',
    'directoryEdit'    =>  'del',
    'directoryId'      =>  '39258',
    'num'               =>  ['33601020304','33601020305','33601020306']
);
$params = json_encode($params);     
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params,    
    CURLOPT_HTTPHEADER => array(                                                                          
        'Content-Type' => 'application/json',                                                                                
        'Content-Length: ' =>  strlen($params)                                                                       
    )
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetatList=$reponsejson->etat->etat;
if(!is_array($repetatList)){
    $repetatList=array($repetatList);
}

$cpt=1;
foreach($repetatList as $repetat){
    echo '-----------';
    echo $sautligne;
    echo 'Data '.$cpt;
    echo $sautligne;
    // General error
    if (!isset($repetat->tel)){
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;
    // Infos sur le numero
    }else{
        echo 'Code: '.$repetat->code;
        echo $sautligne;
        echo 'Message: '.$repetat->message;
        echo $sautligne;    
        echo 'Tel: '.$repetat->tel;
        echo $sautligne;
        echo 'directoryId: '.$repetat->directoryId;
        echo $sautligne;
    }
    $cpt+=1;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests
import types

url = 'https://apirest.isendpro.com/cgi-bin/repertoire'
params = {
    'keyid':            'a296464ce012b8ab710a',
    'directoryEdit':   'del',
    'directoryId':     '39258',
    'num':              ['33601020304','33601020305','33601020306']
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetatList=reponsejson['etat']['etat']
if not type(repetatList) is types.ListType:
    repetatList=[repetatList]

cpt=1
for repetat in repetatList:
    print '-----------'    
    print 'Data '+str(cpt)    
    # General error
    if not repetat.has_key('tel'):
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        
    # Infos sur le numero
    else:
        print 'Code: '+repetat['code']
        print 'Message: '+repetat['message']
        print 'Tel: '+repetat['tel']
        print 'directoryId: '+repetat['directoryId']
        
    cpt+=1
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/repertoire";

        ArrayList<String> listData = new ArrayList<String>();
        listData.add("33601020304");
        listData.add("33601020305");
        listData.add("33601020306");        
        
        Map<String, Object> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("directoryEdit",   "del");
        paramsTablo.put("directoryId",     "39258");
        paramsTablo.put("num",              listData);
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            ArrayList repetatList = (ArrayList)repetat.get("etat");
            if(! (repetatList instanceof ArrayList)){
                repetatList.add(repetatList);                
            }            
            
            for (int i = 0; i < repetatList.size(); i++) {
                repetat = (Map)repetatList.get(i);
                
                System.out.println("-----------");
                System.out.println("Data "+i);                
                // General error
                if (! repetat.containsKey("tel")){           
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));    
                // Specific error to the phone number
                }else{
                    System.out.println("Code: "+repetat.get("code"));
                    System.out.println("Message: "+repetat.get("message"));                  
                    System.out.println("tel: "+repetat.get("tel"));
                    System.out.println("directoryId: "+repetat.get("directoryId"));     
                }
            }
        } finally {
            con.disconnect();
        }
    }
}


Delivery Report WEBHOOK

Presentation of the return structure of Delivery Report on a given url

Call

The client will have to develop a web page that will process the data received..
Constraints
  • Page accessible without an authentication system
  • Define the url on your customer area My account -> My API -> SMS AR
  • Display the string 'validation' in response to the call
Note: If the 'validation' response is not obtained, 3 more attempts to send the notification will be made 30 minutes apart.
www.votre_adresse.com/votre_page_web?tel=[TEL]&libelle=[LIBELLE]&statut=[STATUT]&code_erreur=[CODE_ERREUR]&date=[DATE]&heure=[HEURE]&id=[ID]&operateur=[OPERATEUR]&tracker=[TRACKER]
Parameter Type Mandatory Details
tel String Yes Recipient's phone number
In international format without the +
E.g.: 33601020304
libelle String Yes Wording on the status of the delivery report
statut Number Yes Message Status
  • 0 -> ok
  • 2 -> error
Error code String Yes Code associated with the delevery report (see Appendices)
date Date in the format
AAAA-MM-JJ
Yes The date of receipt of the delivery report
heure Date in the format
HH:MM:SS
Yes The time of receipt of the delivery report
id Number Yes Unique identifier of the delivery report
operateur String Yes String of characters indicating the value of the operator (see Appendices)
tracker String Yes Argument possibly provided during sending for a simplified identification

Response

You must answer the string 'validation'
validation


Returns Webhook

Presentation of the return structure of the answers on a given url

Call

The client will have to develop a web page that will process the data received..
Constraints
  • Page accessible without authentication system
  • Define the url on your customer area My account -> My API -> SMS Answers
  • Display the string 'validation' in response to the call
Note: If the 'validation' response is not obtained, 3 more attempts to send the notification will be made 30 minutes apart.

www.votre_adresse.com/votre_page_web?tel=[TEL]&id_retour=[ID_RETOUR]&msg_sms=[MSG_SMS]&tracker=[TRACKER]
Parameter Type Mandatory Details
tel String Yes Recipient's phone number
In international format without the +
E.g.: 33601020304
id_retour Number Yes Unique identifier of the acknoledgment
msg_sms String Yes Answer sent by the recipient
tracker String Yes Argument possibly provided at the time of sending for a simplified identification
indicatif_pays Number Oui Country code
datetime Datetime Oui Time of reception on our system with the format AAAA-MM-JJ HH:MM:SS

Response

You must answer the string 'validation'.
validation


Creation of a sub-account

Creation of a new sub-account for a master account

Call

https://apirest.isendpro.com/cgi-bin/subaccount
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
subAccountLogin String Yes Login ID for the new sub account
subAccountPassword String Yes Login password for the new sub account
subAccountEdit String Yes Use the value 'addAccount'

Response

Parameter Type Details
code Number Code corresponding to the error table
message String Wording corresponding to the error table
subAccountLogin String Login ID for the new sub account
subAccountId String Id for the new sub account
subAccountKeyId String Identification key (KeyId) for the new sub-account
{
    "etat": {
        "etat": [
            {
                "code":             "230",
                "message":          "Le sous compte a ete ajoute",
                "subAccountLogin":  "subaccount2018",
                "subAccountId":     "20474",
                "subAccountKeyId":  "ber296464ce018ab710a"
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":               "a296464ce012b8ab710a",
   "subAccountLogin":     "MonIdentifiant",
   "subAccountPassword":  "MonMotdpasse",
   "subAccountEdit":      "addAccount"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'             =>  'a296464ce012b8ab710a',
    'subAccountLogin'   =>  'MonIdentifiant',
    'subAccountPassword'=>  'MonMotdpasse',
    'subAccountEdit'    =>  'addAccount'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->subAccountLogin)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountLogin: '.$repetat->subAccountLogin;
    if (isset($repetat->subAccountId)){
        echo $sautligne;
        echo 'subAccountId: '.$repetat->subAccountId;
    }
    if (isset($repetat->subAccountKeyId)){
        echo $sautligne;
        echo 'subAccountKeyId: '.$repetat->subAccountKeyId;
    }
    echo $sautligne;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid':                'a296464ce012b8ab710a',
    'subAccountLogin':      'MonIdentifiant',
    'subAccountPassword':   'MonMotdpasse',
    'subAccountEdit':       'addAccount'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('subAccountLogin'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountLogin: '+repetat['subAccountLogin']
    if repetat.has_key('subAccountId'):
        print 'subAccountId: '+repetat['subAccountId']    
    if repetat.has_key('subAccountKeyId'):
        print 'subAccountKeyId: '+repetat['subAccountKeyId']   
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                "a296464ce012b8ab710a");
        paramsTablo.put("subAccountLogin",      "MonIdentifiantJava");
        paramsTablo.put("subAccountPassword",   "MonMotdpasse");
        paramsTablo.put("subAccountEdit",       "addAccount");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("subAccountLogin")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message")); 
                System.out.println("subAccountLogin: "+repetat.get("subAccountLogin"));    
                if (repetat.containsKey("subAccountId")){
                    System.out.println("subAccountId: "+repetat.get("subAccountId"));   
                }
                if (repetat.containsKey("subAccountKeyId")){
                    System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));   
                }                
            }

        } finally {
            con.disconnect();
        }
    }
}


Definition of the price of the SMS of a sub-account

Definition of the price of the SMS of a sub-account in euros excluding VAT

Call

https://apirest.isendpro.com/cgi-bin/subaccount
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
subAccountKeyId String Yes Unique character string identifying the sub-account
subAccountPrice String Yes Value of the unit price in euro HT for 1 SMS
The penny separator is the dot (.)
E.g.: 0.044
subAccountCountryCode String Yes International country code associated with the price without the +.
E.g.: 39 for Italy or 32 for Belgium
subAccountEdit String Yes Use the value 'setPrice'

Response

Parameter Type Details
code Number Code corresponding to the error table
message String Wording corresponding to the error table
subAccountId String Id for the new sub account
subAccountKeyId String Identification key (KeyId) for the new sub-account
{
    "etat": {
        "etat": [
            {
                "code":                 "241",
                "message":              "The price has been updated",
                "subAccountId":         "20474",
                "subAccountKeyId":      "ber296464ce018ab710a",
                "subAccountCountryCode":"39"
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "234",
                "message":              "No account with these credentials",
                "subAccountKeyId":      "ber296464ce018ab710a",                      
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                   "a296464ce012b8ab710a",
   "subAccountKeyId":         "ber296464ce018ab710a",
   "subAccountPrice":         "0.068",
   "subAccountCountryCode":   "39",
   "subAccountEdit":          "setPrice"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'subAccountKeyId'       =>  'ber296464ce018ab710a',
    'subAccountPrice'       =>  '0.068',
    'subAccountCountryCode' =>  '39',
    'subAccountEdit'        =>  'setPrice'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountKeyId: '.$repetat->subAccountKeyId;
    if (isset($repetat->subAccountId)){
        echo $sautligne;
        echo 'subAccountId: '.$repetat->subAccountId;
    }
    if (isset($repetat->subAccountCountryCode)){
        echo $sautligne;
        echo 'subAccountCountryCode: '.$repetat->subAccountCountryCode;
    }    
    echo $sautligne;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid'                 :  'a296464ce012b8ab710a',
    'subAccountKeyId'       :  'ber296464ce018ab710a',
    'subAccountPrice'       :  '0.068',
    'subAccountCountryCode' :  '39',
    'subAccountEdit'        :  'setPrice'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountKeyId: '+repetat['subAccountKeyId'] 
    if repetat.has_key('subAccountId'):
        print 'subAccountId: '+repetat['subAccountId']    
    if repetat.has_key('subAccountCountryCode'):
        print 'subAccountCountryCode: '+repetat['subAccountCountryCode']  
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountPrice",          "0.068");
        paramsTablo.put("subAccountCountryCode",    "39");
        paramsTablo.put("subAccountEdit",           "setPrice");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                if (repetat.containsKey("subAccountId")){
                    System.out.println("subAccountId: "+repetat.get("subAccountId"));   
                }
                if (repetat.containsKey("subAccountKeyId")){
                    System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));   
                }                
            }

        } finally {
            con.disconnect();
        }
    }
}


Get price of the SMS for a sub-account

Get price of the SMS for a sub-account in euros excluding VAT

Call

https://apirest.isendpro.com/cgi-bin/subaccount
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
subAccountKeyId String Yes Unique character string identifying the sub-account
subAccountCountryCode String Yes International country code associated with the price without the +.
E.g.: 39 for Italy or 32 for Belgium
subAccountEdit String Yes Use the value 'getPrice'

Response

Parameter Type Details
code Number Code corresponding to the error table
message String Wording corresponding to the error table
subAccountId String Id for the sub-account
subAccountKeyId String Identification key (KeyId) for the sub-account
subAccountCountryCode String International country code associated with the price without the +
subAccountPrice String Unit price in euros excl. VAT with the dot (.) as a cent separator
{
    "etat": {
        "etat": [
            {
                "code":                 "251",
                "message":              "The price",
                "subAccountId":         "20474",
                "subAccountKeyId":      "ber296464ce018ab710a",
                "subAccountCountryCode":"344",
                "subAccountPrice":      "0.049"    
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                   "a296464ce012b8ab710a",
   "subAccountKeyId":         "ber296464ce018ab710a",
   "subAccountCountryCode":   "39",
   "subAccountEdit":          "getPrice"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'subAccountKeyId'       =>  'ber296464ce018ab710a',
    'subAccountCountryCode' =>  '39',
    'subAccountEdit'        =>  'getPrice'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountKeyId: '.$repetat->subAccountKeyId;
    if (isset($repetat->subAccountId)){
        echo $sautligne;
        echo 'subAccountId: '.$repetat->subAccountId;
    }
    if (isset($repetat->subAccountCountryCode)){
        echo $sautligne;
        echo 'subAccountCountryCode: '.$repetat->subAccountCountryCode;
    }    
    if (isset($repetat->subAccountPrice)){
        echo $sautligne;
        echo 'subAccountPrice: '.$repetat->subAccountPrice;
    }        
    echo $sautligne;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid'                 :  'a296464ce012b8ab710a',
    'subAccountKeyId'       :  'ber296464ce018ab710a',
    'subAccountCountryCode' :  '39',
    'subAccountEdit'        :  'getPrice'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountKeyId: '+repetat['subAccountKeyId'] 
    if repetat.has_key('subAccountId'):
        print 'subAccountId: '+repetat['subAccountId']    
    if repetat.has_key('subAccountCountryCode'):
        print 'subAccountCountryCode: '+repetat['subAccountCountryCode']    
    if repetat.has_key('subAccountPrice'):
        print 'subAccountPrice: '+repetat['subAccountPrice']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountCountryCode",    "39");
        paramsTablo.put("subAccountEdit",           "getPrice");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                if (repetat.containsKey("subAccountId")){
                    System.out.println("subAccountId: "+repetat.get("subAccountId"));   
                }
                if (repetat.containsKey("subAccountCountryCode")){
                    System.out.println("subAccountCountryCode: "+repetat.get("subAccountCountryCode"));   
                }        
                if (repetat.containsKey("subAccountPrice")){
                    System.out.println("subAccountPrice: "+repetat.get("subAccountPrice"));   
                }                  
            }

        } finally {
            con.disconnect();
        }
    }
}


Increase the SMS credit of a sub-account

Increase the SMS credit of a sub-account

Call

https://apirest.isendpro.com/cgi-bin/subaccount
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
subAccountKeyId String Yes Unique character string identifying the sub-account
subAccountAddCredit Number Yes Amount in euros HT to be added
The penny separator is the dot (.)
E.g.: 150.0
subAccountEdit String Yes Use the value 'addCredit'

Response

Parameter Type Details
code Number Code corresponding to the error table
message String Wording corresponding to the error table
subAccountId String Id for the new sub account
subAccountKeyId String Identification key (KeyId) for the new sub-account
{
    "etat": {
        "etat": [
            {
                "code":             "239",
                "message":          "Credit was added to the sub-account",
                "subAccountId":     "20474",
                "subAccountKeyId":  "ber296464ce018ab710a"                
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "234",
                "message":              "No account with these credentials",
                "subAccountKeyId":      "ber296464ce018ab710a",                    
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                   "a296464ce012b8ab710a",
   "subAccountKeyId":         "ber296464ce018ab710a",
   "subAccountAddCredit":     "150",
   "subAccountEdit":          "addCredit"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'subAccountKeyId'       =>  'ber296464ce018ab710a',
    'subAccountAddCredit'   =>  '150',
    'subAccountEdit'        =>  'addCredit'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountId: '.$repetat->subAccountKeyId;
    echo $sautligne;
    echo 'subAccountKeyId: '.$repetat->subAccountId;
    echo $sautligne;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid':                'a296464ce012b8ab710a',
    'subAccountKeyId':      'ber296464ce018ab710a',
    'subAccountAddCredit':  '150',
    'subAccountEdit':       'addCredit'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountId: '+repetat['subAccountId']    
    print 'subAccountKeyId: '+repetat['subAccountKeyId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",      "ber296464ce018ab710a");
        paramsTablo.put("subAccountAddCredit",  "150");
        paramsTablo.put("subAccountEdit",       "addCredit");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("subAccountId: "+repetat.get("subAccountId"));   
                System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));   
            }

        } finally {
            con.disconnect();
        }
    }
}


Modify the SMS outstandings of a sub-account

Modify the SMS outstandings of a sub-account

Call

https://apirest.isendpro.com/cgi-bin/subaccount
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
subAccountKeyId String Yes Unique character string identifying the sub-account
subAccountOutstanding Number Yes New amount in euros excluding VAT of the outstanding amount
subAccountEdit String Yes Use the value 'setOutstanding'

Response

Parameter Type Details
code Number Code corresponding to the error table
message String Wording corresponding to the error table
subAccountId String Id for the new sub account
subAccountKeyId String Identification key (KeyId) for the new sub-account
{
    "etat": {
        "etat": [
            {
                "code":             "252",
                "message":          "Outstandings have been defined for the subaccount",
                "subAccountId":     "20474",
                "subAccountKeyId":  "ber296464ce018ab710a"                
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "234",
                "message":              "No account with these credentials",
                "subAccountKeyId":      "ber296464ce018ab710a"                     
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                   "a296464ce012b8ab710a",
   "subAccountKeyId":         "ber296464ce018ab710a",
   "subAccountOutstanding":   "150",
   "subAccountEdit":          "setOutstanding"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'subAccountKeyId'       =>  'ber296464ce018ab710a',
    'subAccountOutstanding' =>  '150',
    'subAccountEdit'        =>  'setOutstanding'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountId: '.$repetat->subAccountKeyId;    
    echo $sautligne;
    echo 'subAccountKeyId: '.$repetat->subAccountId;
    echo $sautligne;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid'                 :  'a296464ce012b8ab710a',
    'subAccountKeyId'       :  'ber296464ce018ab710a',
    'subAccountOutstanding' :  '150',
    'subAccountEdit'        :  'setOutstanding'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountId: '+repetat['subAccountId']    
    print 'subAccountKeyId: '+repetat['subAccountKeyId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountOutstanding",    "150");
        paramsTablo.put("subAccountEdit",           "setOutstanding");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("subAccountId: "+repetat.get("subAccountId"));   
                System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));   
            }

        } finally {
            con.disconnect();
        }
    }
}


Consult the outstanding SMS of a sub-account

Consult the outstanding SMS of a sub-account

Call

https://apirest.isendpro.com/cgi-bin/subaccount
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
subAccountKeyId String Yes Unique character string identifying the sub-account
subAccountEdit String Yes Use the value 'getOutstanding'

Response

Parameter Type Details
code Number Code corresponding to the error table
message String Wording corresponding to the error table
subAccountId String Id for the new sub account
subAccountKeyId String Identification key (KeyId) for the new sub-account
subAccountOutstanding String Amount outstanding in euros excluding VAT
{
    "etat": {
        "etat": [
            {
                "code":                     "254",
                "message":                  "Outstandings",
                "subAccountId":             "20474",
                "subAccountKeyId":          "ber296464ce018ab710a",
                "subAccountOutstanding":    "150"                                
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "234",
                "message":              "No account with these credentials",
                "subAccountKeyId":      "ber296464ce018ab710a"    
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                   "a296464ce012b8ab710a",
   "subAccountKeyId":         "ber296464ce018ab710a",
   "subAccountEdit":          "getOutstanding"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                 =>  'a296464ce012b8ab710a',
    'subAccountKeyId'       =>  'ber296464ce018ab710a',
    'subAccountEdit'        =>  'getOutstanding'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountKeyId: '.$repetat->subAccountKeyId;
    echo $sautligne;
    }      
    if (isset($repetat->subAccountOutstanding)){
        echo $sautligne;
        echo 'subAccountOutstanding: '.$repetat->subAccountOutstanding;
    }      
    echo $sautligne;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid'                 :  'a296464ce012b8ab710a',
    'subAccountKeyId'       :  'ber296464ce018ab710a',
    'subAccountEdit'        :  'getOutstanding'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountKeyId: '+repetat['subAccountKeyId']
    if repetat.has_key('subAccountOutstanding'):
        print 'subAccountOutstanding: '+repetat['subAccountOutstanding']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",            "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",  "ber296464ce018ab710a");
        paramsTablo.put("subAccountEdit",   "getOutstanding");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));
                if (repetat.containsKey("subAccountOutstanding")){
                    System.out.println("subAccountOutstanding: "+repetat.get("subAccountOutstanding"));
                }                
            }

        } finally {
            con.disconnect();
        }
    }
}


Management of the STOP SMS restriction of a sub-account

Management of the STOP SMS restriction of a sub-account

Call

https://apirest.isendpro.com/cgi-bin/subaccount
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
subAccountKeyId String Yes Unique character string identifying the sub-account
subAccountRestrictionStop Number Yes Enabled or Disabled the STOP SMS restriction
  • 0: Disabled
  • 1: Enabled
subAccountEdit String Yes Use the value 'setRestriction'

Response

Parameter Type Details
code Number Code corresponding to the error table
message String Wording corresponding to the error table
subAccountId String Id for the new sub account
subAccountKeyId String Identification key (KeyId) for the new sub-account
{
    "etat": {
        "etat": [
            {
                "code":             "244",
                "message":          "The STOP restriction is desactivated",
                "subAccountId":     "20474",
                "subAccountKeyId":  "ber296464ce018ab710a"                
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "234",
                "message":              "No account with these credentials",
                "subAccountKeyId":      "ber296464ce018ab710a"     
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                       "a296464ce012b8ab710a",
   "subAccountKeyId":             "ber296464ce018ab710a",
   "subAccountRestrictionStop":   "0",
   "subAccountEdit":              "setRestriction"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                     =>  'a296464ce012b8ab710a',
    'subAccountKeyId'           =>  'ber296464ce018ab710a',
    'subAccountRestrictionStop' =>  '0',
    'subAccountEdit'            =>  'setRestriction'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountId: '.$repetat->subAccountKeyId;    
    echo $sautligne;
    echo 'subAccountKeyId: '.$repetat->subAccountId;
    echo $sautligne;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid'                     :  'a296464ce012b8ab710a',
    'subAccountKeyId'           :  'ber296464ce018ab710a',
    'subAccountRestrictionStop' :  '0',
    'subAccountEdit'            :  'setRestriction'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountId: '+repetat['subAccountId']
    print 'subAccountKeyId: '+repetat['subAccountKeyId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountRestrictionStop","0");
        paramsTablo.put("subAccountEdit",           "setRestriction");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("subAccountId: "+repetat.get("subAccountId"));
                System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));
            }

        } finally {
            con.disconnect();
        }
    }
}


Management of the time restriction of a sub-account

Management of the time restriction of a sub-account

Call

https://apirest.isendpro.com/cgi-bin/subaccount
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
subAccountKeyId String Yes Unique character string identifying the sub-account
subAccountRestrictionTime Number Yes Enabled ou Disabled the time restriction
  • 0: Disabled
  • 1: Enabled
subAccountEdit String Yes Use the value 'setRestriction'

Response

Parameter Type Details
code Number Code corresponding to the error table
message String Wording corresponding to the error table
subAccountId String Id for the new sub account
subAccountKeyId String Identification key (KeyId) for the new sub-account
{
    "etat": {
        "etat": [
            {
                "code":             "246",
                "message":          "The TIME restriction is desactivated",
                "subAccountId":     "20474",
                "subAccountKeyId":  "ber296464ce018ab710a"                
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "234",
                "message":              "No account with these credentials",
                "subAccountKeyId":      "ber296464ce018ab710a"    
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                       "a296464ce012b8ab710a",
   "subAccountKeyId":             "ber296464ce018ab710a",
   "subAccountRestrictionTime":   "0",
   "subAccountEdit":              "setRestriction"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                     =>  'a296464ce012b8ab710a',
    'subAccountKeyId'           =>  'ber296464ce018ab710a',
    'subAccountRestrictionTime' =>  '0',
    'subAccountEdit'            =>  'setRestriction'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;

////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountId: '.$repetat->subAccountKeyId;    
    echo $sautligne;
    echo 'subAccountKeyId: '.$repetat->subAccountId;
    echo $sautligne;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid'                     :  'a296464a296464ce012b8ab710ae012b8ab710a',
    'subAccountKeyId'           :  'ber296464ce018ab710a',
    'subAccountRestrictionTime' :  '0',
    'subAccountEdit'            :  'setRestriction'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountId: '+repetat['subAccountId']
    print 'subAccountKeyId: '+repetat['subAccountKeyId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountRestrictionTime","0");
        paramsTablo.put("subAccountEdit",           "setRestriction");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("subAccountId: "+repetat.get("subAccountId"));
                System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));
            }

        } finally {
            con.disconnect();
        }
    }
}


Modification of the DR return webhook for a sub-account

Modify the DR return webhook url for a sub-account to which operator acknowledgements will be sent

Call

https://apirest.isendpro.com/cgi-bin/subaccount
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
subAccountKeyId String Yes Unique character string identifying the sub-account
subAccountAdresseRetour String Yes Return address to which delivery report will be sent
E.g.: https://mybackurl.php
subAccountEdit String Yes Use the value 'setAdresseRetour'

Response

Parameter Type Details
code Number Code corresponding to the error table
message String Wording corresponding to the error table
subAccountId String Id for the new sub account
subAccountKeyId String Identification key (KeyId) for the new sub-account
{
    "etat": {
        "etat": [
            {
                "code":             "258",
                "message":          "L url de retour a ete defini pour le sous compte",
                "subAccountId":     "20474",
                "subAccountKeyId":  "ber296464ce018ab710a"                
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "257",
                "message":              "Vous devez renseigner une url de retour valide",
                "subAccountKeyId":      "ber296464ce018ab710a"
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                       "a296464ce012b8ab710a",
   "subAccountKeyId":             "ber296464ce018ab710a",
   "subAccountAdresseRetour":     "https://monurlderetour.php",
   "subAccountEdit":              "setAdresseRetour"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                     =>  'a296464ce012b8ab710a',
    'subAccountKeyId'           =>  'ber296464ce018ab710a',
    'subAccountAdresseRetour'   =>  'https://monurlderetour.php',
    'subAccountEdit'            =>  'setAdresseRetour'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;
////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountId: '.$repetat->subAccountKeyId;    
    echo $sautligne;
    echo 'subAccountKeyId: '.$repetat->subAccountId;
    echo $sautligne;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid'                     :  'a296464ce012b8ab710a',
    'subAccountKeyId'           :  'ber296464ce018ab710a',
    'subAccountAdresseRetour'   :  'https://monurlderetour.php',
    'subAccountEdit'            :  'setAdresseRetour'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountId: '+repetat['subAccountId']
    print 'subAccountKeyId: '+repetat['subAccountKeyId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                    "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",          "ber296464ce018ab710a");
        paramsTablo.put("subAccountAdresseRetour",  "https://monurlderetour.php");
        paramsTablo.put("subAccountEdit",           "setAdresseRetour");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("subAccountId: "+repetat.get("subAccountId"));
                System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));
            }

        } finally {
            con.disconnect();
        }
    }
}


Modification of the response webhook for a sub-account

Modify the response webhook url for a sub-account to which the SMS replies will be sent

Call

https://apirest.isendpro.com/cgi-bin/subaccount
Parameter Type Mandatory Details
keyid String Yes Unique string identifying your account
E.g.: a296464ce012b8ab710a
subAccountKeyId String Yes Unique character string identifying the sub-account
subAccountAdresseSMSretour String Yes Return address to which responses will be sent
E.g.: https://monurlderetour.php
subAccountEdit String Yes Use the value 'setAdresseSMSretour'

Response

Parameter Type Details
code Number Code corresponding to the error table
message String Wording corresponding to the error table
subAccountId String Id for the new sub account
subAccountKeyId String Identification key (KeyId) for the new sub-account
{
    "etat": {
        "etat": [
            {
                "code":             "256",
                "message":          "L url de retour SMS a ete defini pour le sous compte",
                "subAccountId":     "20474",
                "subAccountKeyId":  "ber296464ce018ab710a"                
            }
        ]
    }
}
{
    "etat": {
        "etat": [
            {
                "code":                 "255",
                "message":              "Vous devez renseigner une url de retour SMS valide",
                "subAccountKeyId":      "ber296464ce018ab710a"
            }
        ]
    }
}

Sample scripts

curl -X POST \
 'https://apirest.isendpro.com/cgi-bin/subaccount' \
 -H 'cache-control: no-cache' \
 -d '{
   "keyid":                       "a296464ce012b8ab710a",
   "subAccountKeyId":             "ber296464ce018ab710a",
   "subAccountAdresseSMSretour":  "https://monurlderetour.php",
   "subAccountEdit":              "setAdresseSMSretour"
}'
<?php
////////////////////////////////////////////////////////////////////////////////////
// Send request
////////////////////////////////////////////////////////////////////////////////////
$ch = curl_init();

$url = 'https://apirest.isendpro.com/cgi-bin/subaccount';
$params = array(
    'keyid'                     =>  'a296464ce012b8ab710a',
    'subAccountKeyId'           =>  'ber296464ce018ab710a',
    'subAccountAdresseSMSretour'=>  'https://monurlderetour.php',
    'subAccountEdit'            =>  'setAdresseSMSretour'
);
$options = array(
    CURLOPT_URL => $url,
    CURLOPT_HEADER => false,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_RETURNTRANSFER => TRUE,   
    CURLOPT_POSTFIELDS => $params    
);
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

curl_close($ch);

echo $response;
////////////////////////////////////////////////////////////////////////////////////
// Return processing
////////////////////////////////////////////////////////////////////////////////////
$sautligne="\n"; // If script use
//$sautligne="<br>"; // If html use
$reponsejson=json_decode($response);
$repetat=$reponsejson->etat->etat;
if (!isset($repetat->code)){
    $repetat=$reponsejson->etat->etat[0];
}

// General error
if (!isset($repetat->subAccountKeyId)){
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;
// Infos de retour
}else{
    echo 'Code: '.$repetat->code;
    echo $sautligne;
    echo 'Message: '.$repetat->message;
    echo $sautligne;    
    echo 'subAccountId: '.$repetat->subAccountKeyId;
    echo $sautligne;
    echo 'subAccountKeyId: '.$repetat->subAccountId;
    echo $sautligne;
}
?>
####################################################################################
#- Send request
####################################################################################
import requests

url = 'https://apirest.isendpro.com/cgi-bin/subaccount'
params = {
    'keyid':                        'a296464ce012b8ab710a',
    'subAccountKeyId':              'ber296464ce018ab710a',
    'subAccountAdresseSMSretour':   'https://monurlderetour.php',
    'subAccountEdit':               'setAdresseSMSretour'
}
response = requests.post(url, params)
print(response.text)

####################################################################################
#- Return processing
####################################################################################
reponsejson=response.json()
repetat=reponsejson['etat']
if not repetat.has_key('code'):
    try:
        repetat=reponsejson['etat']['etat'][0]
    except:
        repetat=reponsejson['etat']['etat']

# General error
if not repetat.has_key('subAccountKeyId'):
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
# Infos de retour
else:
    print 'Code: '+repetat['code']
    print 'Message: '+repetat['message']
    print 'subAccountId: '+repetat['subAccountId']
    print 'subAccountKeyId: '+repetat['subAccountKeyId']
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import com.google.gson.Gson;

public class TestDocs {

    private static HttpURLConnection con;

    public static void main(String[] args) throws IOException {
        
        ////////////////////////////////////////////////////////////////////////////////////
        // Send request
        ////////////////////////////////////////////////////////////////////////////////////
        var url = "https://".$url_api_sms_rest."/cgi-bin/subaccount";
        
        Map<String, String> paramsTablo = new HashMap<>();
        paramsTablo.put("keyid",                        "a296464ce012b8ab710a");
        paramsTablo.put("subAccountKeyId",              "ber296464ce018ab710a");
        paramsTablo.put("subAccountAdresseSMSretour",   "https://monurlderetour.php");
        paramsTablo.put("subAccountEdit",               "setAdresseSMSretour");
        
        Gson gson = new Gson();       
        String urlParameters = gson.toJson(paramsTablo);        
        byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8);

        try {
            var myurl = new URL(url);
            con = (HttpURLConnection) myurl.openConnection();
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            try (var wr = new DataOutputStream(con.getOutputStream())) {
                wr.write(postData);
            }
            
            StringBuilder content;            
            InputStream ret;
            if (con.getResponseCode() < HttpURLConnection.HTTP_BAD_REQUEST) {
                ret = con.getInputStream();
            } else {
                ret = con.getErrorStream();
            }            
            try (var br = new BufferedReader(new InputStreamReader(ret))) {
                String line;
                content = new StringBuilder();
                while ((line = br.readLine()) != null) {
                    content.append(line);
                    content.append(System.lineSeparator());
                }
            }
            System.out.println(content.toString());
            
            ////////////////////////////////////////////////////////////////////////////////////
            // Return processing
            ////////////////////////////////////////////////////////////////////////////////////             
            Map reponsejson = new Gson().fromJson(content.toString(), Map.class);           
            Map repetat = (Map)reponsejson.get("etat");
            
            if (! repetat.containsKey("code")){
                try{
                    repetat=(Map)reponsejson.get("etat");
                    var repetatArray=((ArrayList)(repetat.get("etat"))).get(0);  
                    repetat=(Map)(repetatArray);                     
                }catch(Exception e) {
                    repetat=(Map)reponsejson.get("etat");
                    repetat=(Map)repetat.get("etat");             
                }
            }

            // General error
            if (! repetat.containsKey("subAccountKeyId")){
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));    
            // Infos de retour
            }else{
                System.out.println("Code: "+repetat.get("code"));
                System.out.println("Message: "+repetat.get("message"));  
                System.out.println("subAccountId: "+repetat.get("subAccountId"));
                System.out.println("subAccountKeyId: "+repetat.get("subAccountKeyId"));
            }

        } finally {
            con.disconnect();
        }
    }
}


API error codes

Table of error codes returned by the API
Error code Message
0 Your message has been sent
1 The login is empty
2 The password is empty
3 Your credentials are incorrect
4 You must enter a message
5 The message can not exceed XXX characters
6 You must enter a valid phone number
7 You must enter a valid phone number
9 La route que vous avez saisie n'existe pas
10 Vous n'avez pas les droits necessaires pour utiliser cette route
11 The phone number is in the blacklist
12 You are out of credit
13 La route Lowcost est down
14 The IP adress is not allowed
15 Vous devez indiquer un canal d'envoi
16 The sender id can not be empty if defined
17 The sender id must be between 3 and 11 characters
18 The sender id can not contain only numbers
19 Si un emetteur est indique, le message ne doit pas depasser 149 caracteres afin de pouvoir ajouter le texte 'STOP XXXXX'
20 L'emetteur ne peut pas etre modifie sur le canal LowCost
21 The phone number is invalid
22 Le numero de telephone est attribue a un Full MVNO
23 The maximum number by request is 5000
24 Pas d'envoi commercial entre 20h et 08h, ni les jours feries
25 You must set the cost to number in 0899
26 You must set the cost to number in 0892
27 This country is not authorized
28 You are out of qualification credit
29 An error has occured (overflow)
30 Error on the connection domain
31 The message can not exceed XXX characters
32 The message is on DATA1 SMS (DATA2 characters)whereas the request is on DATA3 SMS
33 This sender id is not authorized
34 The value of smslong must be an integer
35 You are out of HLR credit
36 Vous n'etes pas autorise a retirer le STOP SMS
37 Phone numbers are not all for the same country
38 The message can not exceed XXX characters
39 The message can not exceed XXX characters
40 The ucs2 is not allowed with french numbers
41 You can not process HLR requests
42 The send id can not contain special characters
43 The sending data is not well formatted (AAAA-MM-JJ HH => MM)
44 The GMT does not exist!
45 The sender id can not contain 5 following numbers
100 Your directory has been created
101 You must enter a directory name
102 The directory id has no match
103 Your data has been added to the directory
104 The directory can not be modified because a campaign is scheduled on it
105 The data is already in the directory
106 The data has been deleted from the directory
107 The data is not in the directory
108 Cet identifiant ne correspond a aucun repertoire
201 You must enter a starting date
202 You must enter an ending date
203 The starting date is not well formatted (AAAA-MM-JJ HH => MM)
204 The ending date is not well formatted (AAAA-MM-JJ HH => MM)
205 The query is over 200 000 data! Please, reduce it
206 The query return 0 data!
207 Sending history!
210 The keyword was added
211 The keyword was deleted
212 List of keywords for this account
213 The keyword is not available
214 The keyword does not exist for this account
215 No keywords found for this account
216 The key word must not contain any space or special characters
217 The key word must be between 3 and 20 characters
220 The sender id was added
221 The sender id was deleted
222 List of sender ids for this account
223 The sender id is not available
224 The sender id does not exist for this account
225 No sender ids found for this account
230 The sub-account was added
231 You must enter a login / login to create the sub account
232 You must enter a password to create the sub account
233 A sub-account already exists with this login
234 No account with these credentials
235 You must enter the country code associated with the price
236 You must fill in a price
237 The price was created
238 You must fill in the credit amount
239 Credit was added to the sub-account
240 The command entered does not correspond to any functionality
241 The price has been updated
242 You must enter the sub account keyID
243 A sub account cannot get sub account
244 The STOP restriction is desactivated
245 The STOP restriction is activated
246 The TIME restriction is desactivated
247 The TIME restriction is activated
248 The restriction datas are incorrects
250 The shortlink has been generated
251 The price
252 Outstandings have been defined for the subaccount
253 Outstandings must be positive
254 Outstandings
255 The SMS response url must be a valid one
256 The SMS response url has been updated
257 The response url must be a valid one
258 The response url has been updated
259 The password for the sub-account is incorrect! Minimum of 10 characters, one lowercase, one uppercase, one number and one special character
260 The max quota of rapportCampagne request has been reached
261 The max quota of shortlink request has been reached
777 The service The site is in maintenance
900 keyId is valid
901 keyId is not valid
998 The encoding of the message is incorrect
999 An error has occured. Please contact the technical support


GSM table of allowed characters

Warning: opening brackets [ and closing brackets ] and the euro symbol count for 2 characters
Character Meaning Character Meaning
LF Line Feed (Line break) CR Carriage Return
SP Space ! Exclamation mark
" Guillemet # Hashtag
% Pourcentage & Esperluette
Apostrophe ( Opening parenthesis
) Closing parenthesis * Asterisk
+ Plus , Comma
- Minus or hyphen . Point
/ Slash 0 The number zero
1 The number one 2 The number two
3 The number three 4 The number four
5 The number five 6 The number six
7 The number seven 8 The number height
9 The number nine : Dotted line
; Semi-colon < Lower
= Equal > Greater
? Question mark @ Arobace (aussi dénommé Arobase ou A commercial8)
A B
C D
E F
G H
I J
K L
M N
O P
Q R
S T
U V
W X
Y Z
[ Opening bracket ] Closing bracket
_ underscore a
b c
d e
f g
h i
j k
l m
n o
p q
r s
t u
v w
x y
z à
è é
ù Euro


GSM table of replaced characters

Character Replaced by Character Replaced by
À A Á A
 A à A
Ä A Å A
È E É E
Ë E Ì I
Í I Î I
Ï I Ò O
Ó O Ô O
Õ O Ö O
Ù U Ú U
Û U Ü U
á a â a
ã a ä a
å a ç c
ê e ë e
ì i í i
î i ï i
ð o ñ n
ò o ó o
ô o õ o
ö o ù u
ú u û u
ü u ý y
ÿ y


Encoding table for special characters

Character Encoding Character Encoding
Espace %20 $ %24
& %26 + %2B
, %2C / %2F
: %3A ; %3B
? %3D @ %40
Ê ou %ca Line break Õ ou %d5


Table of GMT zones

GMT Zone Correspondence GMT Zone Correspondence
Pacific/Midway (GMT-11:00) Midway Island, Samoa America/Adak (GMT-10:00) Hawaii-Aleutian
Etc/GMT+10 (GMT-10:00) Hawaii Pacific/Marquesas (GMT-09:30) Marquesas Islands
Pacific/Gambier (GMT-09:00) Gambier Islands America/Anchorage (GMT-09:00) Alaska
America/Ensenada (GMT-08:00) Tijuana, Baja California Etc/GMT+8 (GMT-08:00) Pitcairn Islands
America/Los_Angeles (GMT-08:00) Pacific Time (US & Canada) America/Denver (GMT-07:00) Mountain Time (US & Canada)
America/Chihuahua (GMT-07:00) Chihuahua, La Paz, Mazatlan America/Dawson_Creek (GMT-07:00) Arizona
America/Belize (GMT-06:00) Saskatchewan, Central America America/Cancun (GMT-06:00) Guadalajara, Mexico City, Monterrey
Chile/EasterIsland (GMT-06:00) Easter Island America/Chicago (GMT-06:00) Central Time (US & Canada)
America/New_York (GMT-05:00) Eastern Time (US & Canada) America/Havana (GMT-05:00) Cuba
America/Bogota (GMT-05:00) Bogota, Lima, Quito, Rio Branco America/Caracas (GMT-04:30) Caracas
America/Santiago (GMT-04:00) Santiago America/La_Paz (GMT-04:00) La Paz
Atlantic/Stanley (GMT-04:00) Faukland Islands America/Campo_Grande (GMT-04:00) Brazil
America/Goose_Bay (GMT-04:00) Atlantic Time (Goose Bay) America/Glace_Bay (GMT-04:00) Atlantic Time (Canada)
America/St_Johns (GMT-03:30) Newfoundland America/Araguaina (GMT-03:00) UTC-3
America/Montevideo (GMT-03:00) Montevideo America/Miquelon (GMT-03:00) Miquelon, St. Pierre
America/Godthab (GMT-03:00) Greenland America/Argentina/Buenos_Aires (GMT-03:00) Buenos Aires
America/Sao_Paulo (GMT-03:00) Brasilia America/Noronha (GMT-02:00) Mid-Atlantic
Atlantic/Cape_Verde (GMT-01:00) Cape Verde Is. Atlantic/Azores (GMT-01:00) Azores
Europe/Belfast (GMT) Greenwich Mean Time : Belfast Europe/Dublin (GMT) Greenwich Mean Time : Dublin
Europe/Lisbon (GMT) Greenwich Mean Time : Lisbon Europe/London (GMT) Greenwich Mean Time : London
Africa/Abidjan (GMT) Monrovia, Reykjavik Europe/Amsterdam (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
Europe/Belgrade (GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague Europe/Brussels (GMT+01:00) Brussels, Copenhagen, Madrid, Paris
Africa/Algiers (GMT+01:00) West Central Africa Africa/Windhoek (GMT+01:00) Windhoek
Asia/Beirut (GMT+02:00) Beirut Africa/Cairo (GMT+02:00) Cairo
Asia/Gaza (GMT+02:00) Gaza Africa/Blantyre (GMT+02:00) Harare, Pretoria
Asia/Jerusalem (GMT+02:00) Jerusalem Europe/Minsk (GMT+02:00) Minsk
Asia/Damascus (GMT+02:00) Syria Europe/Moscow (GMT+03:00) Moscow, St. Petersburg, Volgograd
Africa/Addis_Ababa (GMT+03:00) Nairobi Asia/Tehran (GMT+03:30) Tehran
Asia/Dubai (GMT+04:00) Abu Dhabi, Muscat Asia/Yerevan (GMT+04:00) Yerevan
Asia/Kabul (GMT+04:30) Kabul Asia/Yekaterinburg (GMT+05:00) Ekaterinburg
Asia/Tashkent (GMT+05:00) Tashkent Asia/Kolkata (GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi
Asia/Katmandu (GMT+05:45) Kathmandu Asia/Dhaka (GMT+06:00) Astana, Dhaka
Asia/Novosibirsk (GMT+06:00) Novosibirsk Asia/Rangoon (GMT+06:30) Yangon (Rangoon)
Asia/Bangkok (GMT+07:00) Bangkok, Hanoi, Jakarta Asia/Krasnoyarsk (GMT+07:00) Krasnoyarsk
Asia/Hong_Kong (GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi Asia/Irkutsk (GMT+08:00) Irkutsk, Ulaan Bataar
Australia/Perth (GMT+08:00) Perth Australia/Eucla (GMT+08:45) Eucla
Asia/Tokyo (GMT+09:00) Osaka, Sapporo, Tokyo Asia/Seoul (GMT+09:00) Seoul
Asia/Yakutsk (GMT+09:00) Yakutsk Australia/Adelaide (GMT+09:30) Adelaide
Australia/Darwin (GMT+09:30) Darwin Australia/Brisbane (GMT+10:00) Brisbane
Australia/Hobart (GMT+10:00) Hobart Asia/Vladivostok (GMT+10:00) Vladivostok
Australia/Lord_Howe (GMT+10:30) Lord Howe Island Etc/GMT-11 (GMT+11:00) Solomon Is., New Caledonia
Asia/Magadan (GMT+11:00) Magadan Pacific/Norfolk (GMT+11:30) Norfolk Island
Asia/Anadyr (GMT+12:00) Anadyr, Kamchatka Pacific/Auckland (GMT+12:00) Auckland, Wellington
Etc/GMT-12 (GMT+12:00) Fiji, Kamchatka, Marshall Is. Pacific/Chatham (GMT+12:45) Chatham Islands
Pacific/Tongatapu (GMT+13:00) Nuku'alofa Pacific/Kiritimati (GMT+14:00) Kiritimati


Orange and SFR DR codes

Table of DR codes returned by Orange and SFR operators
Code Message Code Message
000 Service temporairement indisponible 002 Service temporairement indisponible
003 Service temporairement indisponible 004 Service temporairement indisponible
005 Service temporairement indisponible 006 Service temporairement indisponible
007 Service temporairement indisponible 008 Service temporairement indisponible
009 Code d'erreur illégal 010 Expiration de la temporisation du réseau
100 Fonctionnalité No supportée 101 Abonné inconnu
102 Fonctionnalité No offerte 103 Appel bloqué
104 Opération bloquée 105 Surcharge du SMS-C
106 Fonctionnalité No supportée 107 Abonné absent
108 Echec de remise 109 Surcharge su SMS-C
110 Erreur de protocole 111 Mobile No équipé
112 SMS-C inconnu 113 Surcharge du SMS-C
114 Mobile illégal 115 Mobile pas abonné
116 Erreur dans le mobile 117 Couche basse SMS No provisionnée
118 Echec du système 119 Erreur système du PLMN
120 Erreur système du HLR 121 Erreur du système du VLR
122 Erreur du système du VLR précédent 123 Erreur du système du MSC de contrôle
124 Erreur du système du VMC 125 Erreur du système du EIR
126 Erreur système 127 Valeur inattendue
200 Erreur dans l'adresse du SMS-C 201 Période de validité absolue No valide
202 Message court trop long 203 Impossible de lire le message GSM
204 Impossible de convertir en alphabet IA5 206 Format de période de validité invalide
207 Message dupliqué 208 Indicateur de type de message (MT) invalide


FREE DR codes

Table of DR codes returned by FREE Telecom operators
Code Message Description
1 ENROUTE The message is in enroute state
2 DELIVERED Message is delivered to destination
3 EXPIRED Message validity period has expired
4 DELETED Message has been deleted
5 UNDELIVERABLE Message is undeliverable
6 ACCEPTED Message is in accepted state (i.e. has been manually read on behalf of the subscriber by customer service)
7 UNKNOWN Message is in an invalid state
8 REJECTED Message is in a rejected state


Bouygues and remaining operators DR codes

Table of DR codes returned by Bouygues and remaining operators (Lycamobile, Coriolis, etc)
Code Message Description
2 ACK Message is delivered to destination
5 ERROR Message is undeliverable


International DR Codes

Table of DR codes returned by international operators
Code Message Description
2 DELIVERED Message is delivered to destination
5 UNDELIVERABLE Message is undeliverable

API LBDD iSendPro Telecom