WhatsApp Business Platform officielle

Ajoutez WhatsApp à votre produit sans recréer l’infrastructure Meta.

SMSV gère l’activation officielle, l’isolation de chaque organisation, les modèles approuvés et les statuts de livraison. Votre application conserve son expérience et son identité.

Envoyer un modèle approuvébash
curl -X POST "https://smsv.tech/api/v1/partner/cloud/messages/send-template" \
  -H "X-Partner-Key: pk_cloud_xxxxx" \
  -H "Idempotency-Key: order-1042-ready" \
  -H "Content-Type: application/json" \
  -d '{
    "externalOrgId": "client-123",
    "to": "+22370000000",
    "template": {
      "name": "order_ready",
      "language": "fr",
      "variables": ["1042", "12 500 FCFA"]
    }
  }'

Une intégration officielle, avec des responsabilités claires.

Votre produit

Crée les organisations, déclenche les messages et affiche les statuts à ses utilisateurs.

SMSV

Accompagne l’activation Meta, protège les clés, route les messages et distribue les webhooks.

Meta

Examine l’entreprise, approuve les modèles et applique ses politiques et tarifs de messagerie.

Authentification

La clé partenaire pilote plusieurs organisations. Conservez-la exclusivement côté serveur, dans un gestionnaire de secrets, et ne l’exposez jamais au navigateur ou à une application mobile.

Partner Key

X-Partner-Key: pk_cloud_xxxxx

Utilisée avec les endpoints `/v1/partner/cloud/*`.

App API Key

X-API-Key: sp_live_xxxxx

Réservée aux opérations d’une seule application SMSV.

Activation du canal officiel

Le client termine le parcours Meta guidé par SMSV. Une fois son numéro enregistré et son sender créé, votre backend rattache ce sender à son identifiant dans votre produit.

  1. 01

    Créer l’espace client

    Créez ou sélectionnez l’application SMSV correspondant à votre organisation cliente.

  2. 02

    Terminer l’activation Meta

    Le client autorise son portefeuille Meta, sélectionne son numéro et soumet les informations nécessaires.

  3. 03

    Rattacher le sender

    Associez le sender officiel à votre externalOrgId avant d’envoyer le premier message.

POST/v1/partner/cloud/senders/{externalOrgId}/meta-link

Rattache un sender Meta déjà créé dans SMSV à l’organisation correspondante dans votre produit. appId et senderId doivent appartenir au même espace autorisé.

Requestjson
{
  "appId": "app_xxx",
  "senderId": "sender_xxx"
}
Responsejson
{
  "id": "sender_xxx",
  "externalOrgId": "client-123",
  "displayName": "Boutique Awa",
  "status": "ACTIVE",
  "phoneNumber": "+22370000000"
}

Senders officiels

GET/v1/partner/cloud/senders?ownerExternalOrgId={ownerId}

Liste les senders accessibles dans le périmètre du propriétaire indiqué.

Responsejson
{
  "senders": [{
    "id": "sender_xxx",
    "externalOrgId": "client-123",
    "displayName": "Boutique Awa",
    "status": "ACTIVE",
    "phoneNumber": "+22370000000"
  }]
}
GET/v1/partner/cloud/senders/{externalOrgId}/status

Retourne l’état du sender. Ne considérez le canal prêt que lorsque l’API renvoie un état actif utilisable.

Responsejson
{
  "externalOrgId": "client-123",
  "status": "ACTIVE",
  "phoneNumber": "+22370000000",
  "connectedAt": "2026-08-31T12:00:00Z"
}

Envoyer dans le respect de la fenêtre WhatsApp

En dehors des 24 heures suivant le dernier message du client, utilisez un modèle approuvé. Les messages libres sont réservés à une fenêtre de service client ouverte.

POST/v1/partner/cloud/messages/send-template

Envoie un modèle approuvé. Fournissez une clé d’idempotence stable afin qu’une reprise réseau ne crée pas de doublon.

Requestjson
{
  "externalOrgId": "client-123",
  "to": "+22370000000",
  "template": {
    "name": "order_ready",
    "language": "fr",
    "variables": ["1042", "12 500 FCFA"]
  }
}
Responsejson
{
  "success": true,
  "messageId": "msg_xxx",
  "status": "queued"
}
POST/v1/partner/cloud/messages/send

Envoie un texte libre uniquement lorsqu’une fenêtre de service client est ouverte.

Requestjson
{
  "externalOrgId": "client-123",
  "to": "+22370000000",
  "text": "Bonjour, comment pouvons-nous vous aider ?"
}
Responsejson
{
  "success": true,
  "messageId": "msg_xxx",
  "status": "queued"
}

Webhooks et statuts

Répondez rapidement en `2xx`, puis traitez l’événement dans une file. Vérifiez la signature configurée pour votre endpoint et dédupliquez chaque événement par son identifiant.

  • message.queued
  • message.sent
  • message.delivered
  • message.read
  • message.failed
  • message.received
Exemple d’événementjson
{
  "id": "evt_xxx",
  "type": "message.delivered",
  "createdAt": "2026-08-31T12:01:05Z",
  "data": {
    "externalOrgId": "client-123",
    "messageId": "msg_xxx",
    "to": "+22370000000",
    "status": "DELIVERED"
  }
}

Erreurs et reprises

HTTPSignificationAction
400Payload ou numéro invalideCorriger la requête, ne pas relancer à l’identique.
401/403Clé absente, invalide ou hors périmètreVérifier le secret et l’organisation ciblée.
409État incompatible ou doublonLire l’état courant avant de reprendre.
429Limite temporaireAppliquer un backoff exponentiel avec jitter.
5xxErreur transitoireRelancer avec la même clé d’idempotence.

Exemple serveur à serveur

L’exemple suivant garde la clé partenaire côté serveur et réutilise une clé d’idempotence issue de la commande métier.

Node.jsts
export async function notifyOrderReady(order) {
  const response = await fetch(
    "https://smsv.tech/api/v1/partner/cloud/messages/send-template",
    {
      method: "POST",
      headers: {
        "content-type": "application/json",
        "x-partner-key": process.env.SMSV_PARTNER_KEY,
        "idempotency-key": `order-${order.id}-ready`,
      },
      body: JSON.stringify({
        externalOrgId: order.merchantId,
        to: order.customerPhone,
        template: {
          name: "order_ready",
          language: "fr",
          variables: [order.reference, order.totalLabel],
        },
      }),
    },
  );

  if (!response.ok) {
    throw new Error(`SMSV request failed: ${response.status}`);
  }

  return response.json();
}

Préparer une intégration partenaire

Créez votre espace puis contactez l’équipe SMSV pour valider le parcours Meta et les webhooks avant le passage en production.

Créer mon espace