Sparrow SMS envoie vos campagnes, vos codes à usage unique et vos notifications vers tous les opérateurs : expéditeur à votre nom, routage direct, accusés de réception en temps réel et interface aussi bien manuelle qu'automatisée par API.
Cliquez sur un cas d'usage pour découvrir en détail comment Sparrow SMS l'active pour votre entreprise.
Le SMS s'ouvre presque toujours, et presque tout de suite : c'est le canal du message court et daté — une promotion qui se termine dimanche, une ouverture de magasin, un rappel de solde. Vous composez le texte, choisissez le segment, et programmez l'heure d'envoi.
Vérification d'un numéro, validation d'un paiement, confirmation d'une commande : ces messages doivent partir à la seconde. Ils empruntent une file séparée des campagnes et ne sont jamais retardés par un envoi en masse en cours.
Le SMS ne suppose ni application installée, ni connexion de données, ni compte ouvert : il atteint un téléphone de base comme un smartphone. C'est ce qui en fait le canal des rappels de rendez-vous, des avis de livraison et des convocations.
Une requête HTTP suffit à envoyer un SMS : votre site, votre ERP ou votre logiciel métier appelle l'API et le message part. L'authentification se fait par jeton, et chaque application peut porter le sien pour que les statistiques restent séparées.
Le SMS renvoie un accusé de l'opérateur : remis, non remis, et le motif du rejet. Vous savez donc précisément quels numéros ont reçu le message, lesquels sont invalides et lesquels sont hors service — de quoi nettoyer votre base au fil des envois.
Un même canal, des messages qui n'obéissent pas aux mêmes règles : le promotionnel se planifie et porte une mention STOP, le transactionnel part à la seconde et n'en porte pas.
Offres, soldes, ouvertures et opérations à durée limitée, adressées à un segment choisi.
Mention STOP obligatoireConfirmation de commande, avis de paiement, changement de statut : déclenché par votre application.
File prioritaireCode à usage unique pour valider une connexion, un paiement ou un changement de coordonnées.
Remise en quelques secondesLivraison, incident, interruption de service, information urgente à diffuser largement.
Sans application requiseRendez-vous, échéance de paiement, expiration d'un document : envoyé la veille ou quelques heures avant.
Envoi programméUn même message adressé à une liste entière, en une seule requête ou depuis l'interface web.
Jusqu'à plusieurs centaines de milliersBienvenue, anniversaire, relance à J+3 : une séquence se déclenche sur un événement et se déroule seule.
Déclenché par événementVos destinataires hors du Maroc, joints par les mêmes liens opérateurs et la même interface.
Tarif par destinationVos destinataires répondent, et leurs réponses reviennent dans la campagne d'origine ou par webhook.
Réponses rattachées à la campagneLa plateforme, le routage opérateur et l'API dans un même abonnement, sans outil supplémentaire à brancher.
Vos messages s'affichent sous votre nom commercial plutôt qu'un numéro anonyme. Nous nous chargeons de l'enregistrement auprès des opérateurs, marché par marché.
Des liens directs, sans revente en cascade : c'est ce qui tient le délai de remise à quelques secondes et le taux de rejet au plus bas.
Importez vos listes depuis un fichier ou votre CRM, dédoublonnez, segmentez, et laissez la plateforme écarter les numéros invalides et les désinscrits.
Choisissez la date et l'heure, ou laissez un événement déclencher l'envoi : rappel la veille, relance à J+3, message d'anniversaire.
Chaque numéro porte son statut — remis, en attente, rejeté — et son motif. Export CSV, webhooks, et réponses entrantes rattachées à la campagne.
Une requête HTTP et le message part. Jeton par application, envoi unitaire ou en masse, exemples fournis dans les principaux langages.
Aucune bibliothèque propriétaire à installer. L'API REST s'appelle depuis n'importe quel langage, et l'interface web reste disponible pour les envois manuels.
POST /api/v1/login avec vos identifiants renvoie un jeton
(api_token) que vous placez ensuite dans l'en-tête
Authorization: Bearer {api_token} de chaque envoi.
Un compte peut porter plusieurs applications, chacune avec son jeton :
les statistiques restent séparées, application par application.
| Opération | Méthode | URL |
|---|---|---|
| Obtenir un jeton | POST | https://app.sparrowmessage.com/api/v1/login |
| Envoyer un SMS | POST | https://app.sparrowmessage.com/api/v1/sms/send/one |
| Envoyer en masse | POST | https://app.sparrowmessage.com/api/v1/sms/send/bulk |
| Statut d'un SMS | POST | https://app.sparrowmessage.com/api/v1/sms/status |
| Statut d'une liste | POST | https://app.sparrowmessage.com/api/v1/sms/status/bulk |
SEMS
Amplitude RH
1 — Obtenir le jeton, puis envoyer un SMS.
<?php
$base = 'https://app.sparrowmessage.com/api/v1';
// — Authentification : le jeton est à conserver, pas à redemander à chaque envoi
$ch = curl_init("$base/login");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Accept: application/json', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'email' => 'vous@societe.ma',
'password' => 'votre-mot-de-passe',
]),
]);
$jeton = json_decode(curl_exec($ch), true)['api_token'];
curl_close($ch);
// — Envoi d'un SMS
$ch = curl_init("$base/sms/send/one");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Accept: application/json',
'Content-Type: application/json',
"Authorization: Bearer $jeton",
],
CURLOPT_POSTFIELDS => json_encode([
'phone' => '+2126XXXXXXXX',
'text' => 'Votre code de vérification est 385 214.',
// Facultatif : Sparrow y postera les changements de statut
'notifyurl' => 'https://votre-site.ma/sparrow/statut',
]),
]);
$reponse = json_decode(curl_exec($ch), true);
curl_close($ch);
// Toute réponse porte un champ code : OK ou KO
echo $reponse['code'] === 'OK' ? "SMS envoyé\n" : "Échec : {$reponse['error']}\n";
Envoi unitaire, puis envoi en masse.
import requests
base = 'https://app.sparrowmessage.com/api/v1'
# — Authentification
jeton = requests.post(f'{base}/login', json={
'email': 'vous@societe.ma',
'password': 'votre-mot-de-passe',
}).json()['api_token']
entetes = {'Authorization': f'Bearer {jeton}', 'Accept': 'application/json'}
# — Envoi d'un SMS
r = requests.post(f'{base}/sms/send/one', headers=entetes, json={
'phone': '+2126XXXXXXXX',
'text': 'Votre code de vérification est 385 214.',
'notifyurl': 'https://votre-site.ma/sparrow/statut',
}).json()
print('SMS envoyé' if r['code'] == 'OK' else f"Échec : {r['error']}")
# — Envoi en masse : une seule requête, plusieurs destinataires
requests.post(f'{base}/sms/send/bulk', headers=entetes, json={
'phones': ['+2126XXXXXXXX', '+2126YYYYYYYY'],
'text': 'Soldes : -20 % jusqu\'à dimanche. STOP au 36000',
})
# — Statut d'un envoi, à partir de l'identifiant renvoyé
statut = requests.post(f'{base}/sms/status', headers=entetes, json={
'message_id': '8f21c4',
}).json()
print(statut['result'])
Node 18 ou plus récent : fetch est natif.
const base = 'https://app.sparrowmessage.com/api/v1';
// — Authentification
const { api_token } = await fetch(`${base}/login`, {
method: 'POST',
headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
body: JSON.stringify({
email: 'vous@societe.ma',
password: 'votre-mot-de-passe',
}),
}).then(r => r.json());
const entetes = {
'Content-Type': 'application/json',
Accept: 'application/json',
Authorization: `Bearer ${api_token}`,
};
// — Envoi d'un SMS
const reponse = await fetch(`${base}/sms/send/one`, {
method: 'POST',
headers: entetes,
body: JSON.stringify({
phone: '+2126XXXXXXXX',
text: 'Votre code de vérification est 385 214.',
notifyurl: 'https://votre-site.ma/sparrow/statut',
}),
}).then(r => r.json());
console.log(reponse.code === 'OK' ? 'SMS envoyé' : `Échec : ${reponse.error}`);
// — Envoi en masse
await fetch(`${base}/sms/send/bulk`, {
method: 'POST',
headers: entetes,
body: JSON.stringify({
phones: ['+2126XXXXXXXX', '+2126YYYYYYYY'],
text: 'Soldes : -20 % jusqu\'à dimanche. STOP au 36000',
}),
});
.NET 6 ou plus récent.
using System.Net.Http.Json;
var http = new HttpClient { BaseAddress = new Uri("https://app.sparrowmessage.com/api/v1/") };
// — Authentification
var auth = await http.PostAsJsonAsync("login", new {
email = "vous@societe.ma",
password = "votre-mot-de-passe",
});
var jeton = (await auth.Content.ReadFromJsonAsync<Dictionary<string, string>>())["api_token"];
http.DefaultRequestHeaders.Authorization = new("Bearer", jeton);
// — Envoi d'un SMS
var envoi = await http.PostAsJsonAsync("sms/send/one", new {
phone = "+2126XXXXXXXX",
text = "Votre code de vérification est 385 214.",
notifyurl = "https://votre-site.ma/sparrow/statut",
});
var resultat = await envoi.Content.ReadFromJsonAsync<Dictionary<string, object>>();
Console.WriteLine(resultat["code"].ToString() == "OK" ? "SMS envoyé" : $"Échec : {resultat["error"]}");
// — Envoi en masse
await http.PostAsJsonAsync("sms/send/bulk", new {
phones = new[] { "+2126XXXXXXXX", "+2126YYYYYYYY" },
text = "Soldes : -20 % jusqu'à dimanche. STOP au 36000",
});
Java 11 ou plus récent, client HTTP natif.
import java.net.URI;
import java.net.http.*;
var client = HttpClient.newHttpClient();
var base = "https://app.sparrowmessage.com/api/v1";
// — Authentification
var auth = HttpRequest.newBuilder(URI.create(base + "/login"))
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.POST(HttpRequest.BodyPublishers.ofString("""
{"email":"vous@societe.ma","password":"votre-mot-de-passe"}"""))
.build();
var jeton = extraire(client.send(auth, HttpResponse.BodyHandlers.ofString()).body(), "api_token");
// — Envoi d'un SMS
var envoi = HttpRequest.newBuilder(URI.create(base + "/sms/send/one"))
.header("Content-Type", "application/json")
.header("Accept", "application/json")
.header("Authorization", "Bearer " + jeton)
.POST(HttpRequest.BodyPublishers.ofString("""
{"phone":"+2126XXXXXXXX",
"text":"Votre code de vérification est 385 214.",
"notifyurl":"https://votre-site.ma/sparrow/statut"}"""))
.build();
System.out.println(client.send(envoi, HttpResponse.BodyHandlers.ofString()).body());
À copier tel quel dans un terminal.
# — 1. Obtenir le jeton
curl -X POST https://app.sparrowmessage.com/api/v1/login \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"email":"vous@societe.ma","password":"votre-mot-de-passe"}'
# Réponse : {"code":"OK","api_token":"eyJ0eXAiOiJKV1Qi..."}
# — 2. Envoyer un SMS
curl -X POST https://app.sparrowmessage.com/api/v1/sms/send/one \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $JETON" \
-d '{"phone":"+2126XXXXXXXX",
"text":"Votre code de vérification est 385 214.",
"notifyurl":"https://votre-site.ma/sparrow/statut"}'
# — 3. Envoyer en masse
curl -X POST https://app.sparrowmessage.com/api/v1/sms/send/bulk \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $JETON" \
-d '{"phones":["+2126XXXXXXXX","+2126YYYYYYYY"],
"text":"Rappel : votre rendez-vous est demain a 14h30."}'
# — 4. Statut d'un envoi
curl -X POST https://app.sparrowmessage.com/api/v1/sms/status \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $JETON" \
-d '{"message_id":"8f21c4"}'
# — 5. Statut d'une liste
curl -X POST https://app.sparrowmessage.com/api/v1/sms/status/bulk \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $JETON" \
-d '{"messages_id":["8f21c4","8f21c5"]}'
Toutes les réponses portent un champ code valant OK ou
KO. En cas d'OK, result — ou results
pour les appels en masse — porte le détail ; en cas de KO,
error en donne la raison.
Documentation complète et bac à sable fournis à l'ouverture du compte.
Grands comptes, institutions et administrations, au Maroc comme à l'international. Les mêmes organisations, quel que soit le canal.

Communication collaborateurs, fournisseurs et clients

Communication clients et collaborateurs

Communication clients et collaborateurs

Communication fournisseurs

Communication clients et collaborateurs

Communication candidats et entreprises

Communication membres et partenaires

Communication adhérents

Communication partenaires et donateurs

Communication clients

Notifications clients depuis le CRM

Communication clients

Communication candidats et entreprises

Communication adhérents

Communication clients et partenaires

Communication fournisseurs

Communication étudiants et partenaires

Communication professionnels du tourisme

Communication clients

Communication adhérents

Communication clients et usagers

Communication étudiants et administration

Communication étudiants et administration

Communication clients et points de vente

Communication collaborateurs

Communication clients et prospects

Communication clients et prospects

Communication clients

Communication clients

Communication clients

Notifications et relation clients

Notifications clients et fournisseurs

Notifications et campagnes clients
Promotions à durée limitée, confirmation de commande, avis de retrait en magasin.
Codes de validation d'opération, avis d'échéance, alertes de sécurité.
Convocations aux examens, résultats disponibles, information immédiate aux parents.
Confirmation de visite, rappel de rendez-vous, relance des prospects.
Avis d'expédition, créneau de livraison, code de retrait du colis.
Convocations aux assemblées, rappels de cotisation, informations urgentes.
Consignes aux équipes de terrain, astreintes, alertes de production.
Rappels de rendez-vous, résultats disponibles, campagnes de prévention.
Pas d'abonnement : vous achetez un volume de SMS, valable sans date d'expiration. Le prix unitaire baisse par palier, et la commande minimale est de 1 000 SMS.
Pour démarrer, tester un canal ou couvrir des envois ponctuels.
Pour des campagnes régulières et des notifications quotidiennes.
Au-delà de 50 000 SMS par envoi ou par mois.
Virement bancaire à E-solution, Casablanca. Facture marocaine avec ICE, TVA applicable.
Facturé par E-SOLUTION TECHNOLOGIES LLC, New York — EIN 32-0781906. Utile si votre comptabilité travaille en dollars, où que vous soyez.
Les coordonnées bancaires et le lien de paiement sécurisé vous sont transmis avec la facture, jamais publiés sur cette page.
Prix hors taxes, pour le Maroc. Un SMS compte 160 caractères ; au-delà, le message est découpé et chaque partie est décomptée. Une conservation des journaux plus longue est possible sur demande. Les paliers ci-dessus valent pour les envois vers le Maroc ; à l'international, le prix dépend du pays d'arrivée — le simulateur l'applique automatiquement.
Indiquez votre volume : le prix unitaire s'ajuste au palier atteint. Le devis reprend exactement ce que vous sélectionnez ici.
Commande minimale : 1 000 SMS. Les crédits n'expirent pas.
L'expéditeur partagé est inclus. Chaque nom d'expéditeur à votre marque fait l'objet d'un dépôt auprès des opérateurs, facturé une seule fois : 500 DH par nom, le premier étant compris dans l'offre à partir de 10 001 SMS.
La facturation du pack de support est annuelle.
Estimation indicative hors taxes, établie sur la base de nos tarifs publics.
Au-delà des paliers publics, nous construisons avec vous une grille adaptée à vos volumes, à vos destinations et à votre saisonnalité. Parlons-en : nous vous répondons sous 24 heures ouvrées.
160 caractères pour un message en alphabet latin standard. Au-delà, le message est découpé et chaque partie est décomptée : 306 caractères font deux SMS, 459 en font trois. Les caractères accentués passent, mais un emoji ou un caractère arabe fait basculer le message en encodage Unicode, où la limite tombe à 70 caractères. La plateforme vous affiche le décompte pendant la saisie.
Oui. Le nom d'expéditeur peut porter jusqu'à onze caractères et remplace le numéro d'émission. Il doit être déposé auprès des opérateurs, avec un justificatif d'existence de l'entreprise ; nous nous en chargeons. Comptez quelques jours ouvrés. À noter : un expéditeur alphanumérique n'est pas un numéro, il ne permet donc pas de recevoir de réponse ; l'envoi se fait alors depuis un numéro d'émission.
Le SMS transactionnel répond à une action du destinataire — un code de vérification, une confirmation de commande, un avis de livraison. Il part à la seconde, par une file prioritaire, et ne porte pas de mention de désinscription. Le SMS marketing propose quelque chose qui n'a pas été demandé : il exige le consentement préalable, la mention STOP, et le respect des horaires autorisés.
Les envois publicitaires sont à réserver aux horaires ouvrables et à éviter la nuit, tôt le matin, les dimanches et les jours fériés. Cette règle relève autant du bon sens commercial que de la réglementation : un message reçu à 23 h produit surtout des désinscriptions. Les messages de service, eux, ne sont pas concernés.
Chaque campagne marketing porte une mention de désinscription. Le destinataire qui répond STOP est retiré automatiquement de vos listes, et la plateforme l'écarte de tous vos envois publicitaires ultérieurs, sans intervention de votre part. Il continue en revanche de recevoir vos messages de service, qui ne relèvent pas du consentement commercial.
L'opérateur renvoie un accusé négatif avec son motif : numéro inexistant, téléphone éteint depuis trop longtemps, abonné hors service. Le message n'est pas décompté deux fois, et le numéro est signalé dans le rapport de campagne. Vos envois successifs nettoient ainsi votre base au fil de l'eau.
Oui, sur les campagnes envoyées depuis un numéro d'émission. Les réponses reviennent dans l'interface, rattachées à la campagne d'origine, et peuvent être renvoyées à votre système par webhook. C'est ce qui permet les confirmations de rendez-vous par réponse, les sondages et les jeux par SMS.
Non. Les crédits achetés restent disponibles sans date limite. Le prix unitaire est celui du palier atteint au moment de la commande : commander en une fois plutôt qu'en plusieurs petites tranches revient donc moins cher.
Oui, la couverture est internationale. Le tarif dépend alors de la destination, et certains pays imposent leurs propres règles sur le nom d'expéditeur ou l'enregistrement préalable des campagnes. Indiquez-nous vos destinations et nous vous remettons une grille correspondante.
Au Maroc, le traitement des données personnelles relève de la loi 09-08 et de la CNDP : votre fichier de numéros doit faire l'objet d'une déclaration, et tout envoi publicitaire suppose le consentement préalable du destinataire. La mention STOP figure sur chaque campagne marketing et est appliquée immédiatement ; consentements, dates de collecte et demandes de suppression sont conservés et exportables pour vos justificatifs. Nous ne sommes pas juristes : faites valider votre dispositif et votre déclaration CNDP par votre conseil.
Le RGPD impose un consentement libre, spécifique et éclairé avant tout envoi publicitaire, ainsi qu'un moyen simple de le retirer. La mention STOP figure sur chaque campagne marketing et est appliquée immédiatement ; consentements, dates de collecte et demandes de suppression sont conservés et exportables, de quoi alimenter votre registre des traitements. Nous ne sommes pas juristes : pour vos mentions d'information et la base légale de vos envois, faites valider votre dispositif par votre conseil.
Aux États-Unis, le SMS commercial relève du Telephone Consumer Protection Act, appliqué par la FCC, et les règles du CAN-SPAM Act encadrent l'email. Le TCPA exige un consentement écrit explicite avant tout message publicitaire, un moyen de désinscription rappelé dans les messages, et le respect des horaires locaux du destinataire. S'y ajoutent les règles des opérateurs, qui conditionnent l'usage d'un numéro à l'enregistrement de la campagne. Les réponses STOP sont traitées automatiquement et conservées. Nous ne sommes pas juristes : le TCPA ouvrant un droit d'action individuel, faites valider votre dispositif par votre conseil avant toute campagne.
Le compte est ouvert sous 24 heures et les premiers envois de test peuvent partir immédiatement avec un expéditeur partagé. Le délai réel dépend du dépôt de votre nom d'expéditeur auprès des opérateurs, qui prend quelques jours ouvrés.
Votre plateforme SMS opérationnelle en 4 phases
De la signature au premier envoi, un parcours balisé et un interlocuteur unique.
Délai courant : compte ouvert sous 24 h, premier envoi dès la validation du nom d'expéditeur par les opérateurs.