SDK officiels
Votre langage, notre API
Des bibliothèques qui gèrent pour vous l’authentification, les relances, l’idempotence, la pagination et la vérification des webhooks. Installez, ajoutez votre clé, envoyez.
Go
github.com/mysms/mysms-go
En préparation
Bientôt
Java & Kotlin
ma.mysms:mysms-java
En préparation
Bientôt
Guide
Du premier appel à la production
Choisissez votre langage une fois : tous les exemples de la page suivent.
Installer
Un seul paquet, sans dépendance lourde. Les SDK suivent la version v1 de l’API et le versionnage sémantique.
composer require mysms/mysms-php
npm install @mysms/node# oupnpm add @mysms/node
pip install mysms# ouuv add mysms
Configurer la clé
Lisez la clé depuis une variable d’environnement, jamais en dur dans le code. Une clé sk_test_ suffit pour tout développer.
# .envMYSMS_KEY=sk_test_••••••••// config/services.php (Laravel)'mysms' => [ 'key' => env('MYSMS_KEY'),],
# .envMYSMS_KEY=sk_test_••••••••// sms.tsimport MySms from '@mysms/node';export const sms = new MySms(process.env.MYSMS_KEY, { timeout: 10_000, // ms maxRetries: 2, // relances automatiques (5xx, réseau)});
# .envMYSMS_KEY=sk_test_••••••••# sms.pyimport osfrom mysms import Clientclient = Client(os.environ["MYSMS_KEY"], timeout=10, max_retries=2)
Envoyer un SMS
L’appel renvoie immédiatement le message créé, avec son identifiant, son encodage, ses segments et son prix. Le SDK ajoute une clé d’idempotence à chaque envoi.
use MySms\Client;$sms = new Client(config('services.mysms.key'));$message = $sms->messages->send([ 'to' => '+212612345678', 'from' => 'MyShop', 'body' => 'Commande #20481 confirmée. Livraison demain.',]);// $message->id === 'msg_9fK2', $message->status === 'queued'
import { sms } from './sms';const message = await sms.messages.send({ to: '+212612345678', from: 'MyShop', body: 'Commande #20481 confirmée. Livraison demain.',});// message.id === 'msg_9fK2', message.status === 'queued'
from sms import clientmessage = client.messages.send( to="+212612345678", sender="MyShop", body="Commande #20481 confirmée. Livraison demain.",)# message.id == "msg_9fK2", message.status == "queued"
Gérer les erreurs
Chaque erreur de l’API devient une exception typée qui porte le code stable, le paramètre fautif et l’identifiant de requête à communiquer au support.
use MySms\Exceptions\InsufficientBalanceException;use MySms\Exceptions\InvalidRequestException;try { $sms->messages->send($payload);} catch (InvalidRequestException $e) { report("{$e->code} sur {$e->param}"); // invalid_phone_number sur to} catch (InsufficientBalanceException $e) { Notification::route('mail', 'finance@myshop.ma')->notify(new LowBalance);}
import { MySmsError } from '@mysms/node';try { await sms.messages.send(payload);} catch (err) { if (err instanceof MySmsError && err.code === 'invalid_phone_number') { console.warn(`Numéro refusé (${err.param}) — requête ${err.requestId}`); } else { throw err; }}
from mysms import InvalidRequestError, InsufficientBalanceErrortry: client.messages.send(**payload)except InvalidRequestError as e: log.warning("%s sur %s (requête %s)", e.code, e.param, e.request_id)except InsufficientBalanceError: alert_finance()
Vérifier les webhooks
Le SDK vérifie la signature HMAC-SHA256 et l’horodatage (moins de 5 minutes) avant de vous rendre l’événement typé. Passez-lui le corps brut de la requête.
// routes/web.php — exclure la route du middleware CSRFRoute::post('/hooks/sms', function (Request $request) use ($sms) { $event = $sms->webhooks->verify( $request->getContent(), $request->header('MySms-Signature'), config('services.mysms.webhook_secret'), ); // lève InvalidSignatureException si la signature est fausse if ($event->type === 'message.delivered') { Order::markSmsDelivered($event->data->metadata->order_id); } return response()->noContent();});
import express from 'express';import { sms } from './sms';const app = express();app.post('/hooks/sms', express.raw({ type: 'application/json' }), (req, res) => { const event = sms.webhooks.verify( req.body, // Buffer brut req.header('MySms-Signature'), process.env.MYSMS_WEBHOOK_SECRET, ); // lève une erreur si la signature est fausse if (event.type === 'message.delivered') markDelivered(event.data.id); res.sendStatus(204);});
import osfrom flask import Flask, requestfrom sms import clientapp = Flask(__name__)@app.post("/hooks/sms")def sms_hook(): event = client.webhooks.verify( request.get_data(), # corps brut request.headers["MySms-Signature"], os.environ["MYSMS_WEBHOOK_SECRET"], ) # lève InvalidSignatureError si la signature est fausse if event.type == "message.delivered": mark_delivered(event.data.id) return "", 204
Laravel
Un canal de notification natif
Le paquet PHP inclut un canal pour les notifications Laravel : vos SMS partent en file d’attente comme vos e-mails.
use Illuminate\Notifications\Notification;use MySms\Laravel\MySmsChannel;use MySms\Laravel\MySmsMessage;class OrderShipped extends Notification{ public function via(object $notifiable): array { return [MySmsChannel::class]; } public function toMySms(object $notifiable): MySmsMessage { return MySmsMessage::create("Commande #{$this->order->number} expédiée.") ->from('MyShop'); }}
// Le modèle indique le numéro à utiliserpublic function routeNotificationForMysms(): string{ return $this->phone; // +212612345678}// Puis, n’importe où (en file d’attente si la notification est ShouldQueue)$user->notify(new OrderShipped($order));
Ce que les SDK font pour vous
Les bonnes pratiques de l’API, appliquées par défaut.
Relances automatiques
Erreurs réseau et 5xx relancées avec un délai exponentiel, sans risque de double envoi grâce à l’idempotence.
Typage complet
Types TypeScript, PHPDoc et annotations Python : l’autocomplétion connaît chaque paramètre et chaque statut.
Pagination automatique
Itérez sur des milliers de messages sans gérer les curseurs vous-même.
Webhooks vérifiés
Une fonction pour vérifier la signature et obtenir un événement typé.
Mode test intégré
Changez de clé, pas de code : le SDK fonctionne à l’identique avec sk_test_.
Délais configurables
Timeout, nombre de relances et client HTTP personnalisables, globalement ou appel par appel.
Sans code
Plugins e-commerce
Pour les boutiques qui veulent les SMS sans intégration : installez, choisissez vos messages, c’est tout.
Shopify
BientôtConfirmations de commande, expédition et relance de panier abandonné, sans une ligne de code.
- commande.créée
- commande.expédiée
- panier.abandonné
WooCommerce
BientôtUne extension WordPress : vos statuts de commande déclenchent les SMS que vous avez rédigés.
- order.processing
- order.completed
- note client
YouCan
BientôtPour les boutiques YouCan : confirmation de commande par SMS et réponse « 1 » pour valider le paiement à la livraison.
- commande.créée
- confirmation COD
- livraison
Vous éditez une plateforme e-commerce ou de livraison ? Construisons l’intégration ensemble.
Un autre langage ?
Tout client HTTP fait l’affaire
L’API est une API REST en JSON : Go, Java, Ruby, C# ou Bash, il suffit d’une requête HTTPS avec votre clé. Une spécification OpenAPI arrive pour générer votre propre client.
Commencez à envoyer en 5 minutes
Créez un compte gratuit, recevez 100 messages de test et constatez la rapidité de la livraison locale. Sans carte bancaire.