Gestion des Campagnes SMS
Les campagnes SMS vous permettent d’envoyer des messages personnalisés à un groupe de destinataires. Notre API REST offre une solution complète pour créer et gérer vos campagnes, avec support pour les messages standards, programmés et répétés.
Fonctionnalités
- Envoi de messages personnalisés
- Support des messages programmés
- Support des messages répétés
- Gestion des groupes de destinataires
- Personnalisation des expéditeurs
- Suivi des campagnes
Types de campagnes
Notre API supporte plusieurs types de campagnes :
- Campagnes standards : Envoi immédiat de messages
- Campagnes programmées : Envoi à une date et heure précises
- Campagnes répétées : Envoi récurrent selon un planning défini
Limites des messages
Les SMS sont soumis à des limites de caractères selon l’encodage utilisé :
- GSM-7 : 160 caractères par message
- UCS-2 : 70 caractères par message (pour les caractères spéciaux)
- Messages longs : Segmentation automatique (153 caractères par segment)
Important : Incluez l’indicatif du pays sans le symbole (+) avant le numéro de téléphone. Exemple : “22500000000” pour un numéro ivoirien.
Utilisation
Après avoir initialisé votre API, vous pouvez utiliser les endpoints suivants pour gérer vos campagnes SMS.
Création d’une campagne
POST /v1/campaign/create
Content-Type: application/json
{
"apiKey": "YOUR_API_KEY",
"companyId": "YOUR_COMPANY_ID",
"name": "Ma campagne",
"contacts": [
{
"id": "contact_1",
"phone": "22500000000",
"sex": "M"
},
{
"phone": "2250101010101"
}
],
"groupsIds": ["group_1", "group_2"],
"text": "Bonjour !",
"senderId": "My Sender",
"type": "SMS"
}Création d’une campagne programmée
POST /v1/campaign/create
Content-Type: application/json
{
"apiKey": "YOUR_API_KEY",
"companyId": "YOUR_COMPANY_ID",
"name": "Rappel rendez-vous",
"contacts": [
{
"id": "contact_1",
"phone": "22500000000",
"name": "John Doe"
}
],
"groupsIds": ["group_1"],
"text": "Rappel : Votre rendez-vous est demain à 10h.",
"senderId": "My Sender",
"type": "SCHEDULED",
"scheduledDate": "2024-03-20T10:00:00Z" // Date et heure d'envoi de la campagne
}Important : Les dates programmées doivent être des multiples de 15 minutes. Par exemple : 10:00, 10:15, 10:30, 10:45.
Création d’une campagne répétée
POST /v1/campaign/create
Content-Type: application/json
{
"apiKey": "YOUR_API_KEY",
"companyId": "YOUR_COMPANY_ID",
"name": "Rappel hebdomadaire",
"contacts": [
{
"id": "contact_1",
"phone": "22500000000",
}
],
"groupsIds": ["group_1"],
"text": "Rappel hebdomadaire : N'oubliez pas votre séance.",
"senderId": "My Sender",
"type": "RECURRING",
"recurring": {
"monday": "2024-03-18T09:00:00Z", // Jour et heure de l'envoi de la campagne
"wednesday": "2024-03-20T09:00:00Z", // Jour et heure de l'envoi de la campagne
"friday": "2024-03-22T09:00:00Z" // Jour et heure de l'envoi de la campagne
}
}Important : Les heures de répétition doivent être des multiples de 15 minutes. Par exemple : 09:00, 09:15, 09:30, 09:45. La date n’a pas d’importance, c’est la heure qui compte.
Documentation de l’API
POST /v1/campaign/create
Crée une nouvelle campagne SMS avec les paramètres spécifiés.
| Nom | Description | Type | Facultatif | Valeur par défaut |
|---|---|---|---|---|
| apiKey | Clé API | String | Non | - |
| companyId | Identifiant de l’entreprise | String | Non | - |
| name | Nom de la campagne | String | Oui | |
| contacts | Liste des contacts destinataires. Facultatif si groupsIds est renseigné. | Array of Contact Object | Oui* | |
| groupsIds | Liste des identifiants de groupes | Array of String | Oui | [] |
| text | Contenu du message | String | Non | |
| senderId | Nom d’expéditeur complet (ex: “My Sender”). Doit appartenir à l’entreprise et être approuvé. | String | Non | - |
| type | Type de campagne | ”SMS” | “SCHEDULED” | “RECURRING” | Oui | SMS |
Le senderId est obligatoire. C’est le nom exact d’un expéditeur
appartenant à l’entreprise et dont le statut est approuvé. Un nom inconnu,
en attente d’approbation ou appartenant à une autre entreprise est rejeté avec
l’erreur sender-not-found-or-not-approved : aucun expéditeur par défaut n’est
substitué et aucun crédit n’est débité.
* contacts et groupsIds sont facultatifs pris séparément, mais la
campagne doit aboutir à au moins un destinataire — sinon l’appel échoue avec
l’erreur no-contacts.
Structure des contacts
{
"id": "string",
"phone": "string",
"name": "string",
"firstName": "string",
"lastName": "string",
"sex": "M" | "F"
}Seul le numéro de téléphone (phone) est obligatoire. Tous les autres champs
sont optionnels. Un numéro inconnu de l’entreprise est automatiquement
enregistré comme nouveau contact — seuls phone et name sont alors
persistés. Les champs firstName, lastName et sex ne servent qu’à la
personnalisation du message de cette campagne ; pour les enregistrer, créez le
contact au préalable.
Liste des campagnes
Vous pouvez récupérer la liste de vos campagnes avec leurs détails de base.
POST /v1/campaign/list
Content-Type: application/json
{
"apiKey": "YOUR_API_KEY",
"companyId": "YOUR_COMPANY_ID"
}Réponse
{
"success": true,
"data": [
{
"id": "6826f4b75393b60866510ab9",
"isEnabled": true,
"text": "test msg",
"type": "SMS",
"createdAt": "2025-05-16T08:17:59.608Z",
"contactCount": 1,
"creditUsed": 1,
"scheduledDate": null,
"user": { "fullName": "John Doe" },
"sender": { "name": "My Sender" },
"_count": { "contacts": 1, "groups": 0 }
}
]
}L’expéditeur est renvoyé sous la forme d’un objet imbriqué sender: { name }.
Une campagne créée avant la mise en place de l’expéditeur obligatoire peut
avoir sender: null.
Paramètres de la liste
| Nom | Description | Type | Facultatif | Valeur par défaut |
|---|---|---|---|---|
| apiKey | Clé API | String | Non | - |
| companyId | Identifiant de l’entreprise | String | Non | - |
| orderBy | Champ de tri | ”type” | “createdAt” | Oui | createdAt |
| sort | Ordre de tri | ”asc” | “desc” | Oui | desc |
| page | Numéro de page | Number | Oui | - |
| count | Nombre d’éléments par page (minimum 5) | Number | Oui | - |
La pagination n’est pas encore appliquée côté serveur : page et count sont
acceptés mais l’endpoint renvoie toutes les campagnes, triées selon orderBy
et sort. La réponse ne contient donc ni totalCount, ni totalPage.
Bonnes pratiques
- Longueur des messages : Respectez les limites de caractères
- Personnalisation : Utilisez les variables disponibles (@nom_complet, etc.)
- Expéditeur : Utilisez le nom exact d’un expéditeur approuvé de l’entreprise
- Test : Vérifiez vos messages avant envoi
- Segmentation : Évitez les messages trop longs
- Programmation : Vérifiez les fuseaux horaires pour les campagnes programmées
- Répétitions : Testez les campagnes répétées sur un petit groupe
- Intervalles : Utilisez des intervalles de 15 minutes pour les campagnes programmées et répétées
Cas d’utilisation
- Campagnes marketing
- Notifications clients
- Alertes et rappels
- Communications internes
- Service client
- Rappels de rendez-vous
- Alertes de sécurité
FAQ
Comment personnaliser mes messages ?
Utilisez les variables comme @name dans votre texte pour personnaliser automatiquement chaque message.
Comment gérer les messages longs ?
Les messages dépassant la limite de caractères sont automatiquement segmentés, chaque segment étant facturé séparément.
Puis-je envoyer à des groupes ?
Oui, utilisez le paramètre groupsIds pour envoyer à des groupes de contacts prédéfinis.
Comment programmer une campagne ?
Utilisez le type “SCHEDULED” avec le paramètre scheduledDate pour définir la date et l’heure d’envoi.
Comment créer une campagne répétée ?
Utilisez le type “RECURRING” avec le paramètre recurring pour définir les jours et heures de répétition.