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.

PHP & Laravel

mysms/mysms-php PHP 8.2+ · Laravel 11+ Guide PHP

Node.js & TypeScript

@mysms/node Node 18+ · types inclus Guide Node.js

Python

mysms Python 3.9+ · sync et async Guide Python

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.

01

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
02

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

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

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()
05

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

Confirmations 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ôt

Une extension WordPress : vos statuts de commande déclenchent les SMS que vous avez rédigés.

  • order.processing
  • order.completed
  • note client

YouCan

Bientôt

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