Documentation Développeurs

Connectez vos propres logiciels à votre boîte SyBox

Votre ERP, votre caisse ou votre logiciel de bureau peut envoyer des messages WhatsApp depuis votre numéro connecté, afficher les données du client à côté du chat et ouvrir des dossiers. La route d'envoi utilise le même format de requête que l'API WhatsApp Cloud de Meta : un code écrit pour elle n'a besoin que d'une nouvelle URL de base et d'une clé d'appareil SyBox — et chaque envoi est transmis à Meta sous votre propre compte WhatsApp Business.

01Démarrage rapide

Trois éléments pour envoyer votre premier message: l'URL de base, une clé d'appareil et le point de terminaison.

Base URL
https://api.smartsybox.com
Authentication
Authorization: Bearer <YOUR_DEVICE_KEY>
Content type
application/json

Point de terminaison

POST /v26.0/{phone-number-id}/messages
Le segment de version est accepté sous toute forme v<n> (v26.0, v1.0, …) — conservez celle qu'utilise déjà votre code. Le {phone-number-id} est l'identifiant de votre numéro WhatsApp, exactement comme chez Meta.

02Envoyez votre premier message

Un message texte simple. Le corps est le charge utile standard de l'API Cloud — nous le transmettons tel quel.

cURL
curl -X POST https://api.smartsybox.com/v26.0/PHONE_NUMBER_ID/messages \
  -H "Authorization: Bearer YOUR_DEVICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "messaging_product": "whatsapp",
    "to": "15551234567",
    "type": "text",
    "text": { "body": "Hello from SyBox 👋" }
  }'
C# · HttpClient
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;

var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Bearer", "YOUR_DEVICE_KEY");

string json = @"{
  ""messaging_product"": ""whatsapp"",
  ""to"": ""15551234567"",
  ""type"": ""text"",
  ""text"": { ""body"": ""Hello from SyBox"" }
}";

var res = await http.PostAsync(
    "https://api.smartsybox.com/v26.0/PHONE_NUMBER_ID/messages",
    new StringContent(json, Encoding.UTF8, "application/json"));

Console.WriteLine(await res.Content.ReadAsStringAsync());

La réponse

Vous recevez exactement ce que Meta renvoie, avec le même statut HTTP.

200 OK · application/json
{
  "messaging_product": "whatsapp",
  "contacts": [{ "input": "15551234567", "wa_id": "15551234567" }],
  "messages": [{ "id": "wamid.HBgLMTU1NTEyMzQ1NjcVAgARGBI…" }]
}

03Tous les types de messages sont pris en charge

Modèles, images, documents, messages interactifs. Voici un exemple d'envoi de modèle.

Request body · template
{
  "messaging_product": "whatsapp",
  "to": "15551234567",
  "type": "template",
  "template": {
    "name": "hello_world",
    "language": { "code": "en_US" }
  }
}

04Affichez vos données à côté de la conversation

À l'ouverture d'une conversation, SyBox appelle VOTRE point de terminaison et affiche votre réponse juste à côté du chat — commandes, solde, tickets du client. Nous envoyons le téléphone du client, ou son e-mail pour une conversation par e-mail.

Request · SyBox → your endpoint
POST YOUR_ERP_URL
Authorization: Bearer YOUR_ERP_KEY
X-Sybox-Action: lookup

# body: { "data": "<json string>" } — the decoded "data":
{
  "phone": "15551234567",
  "email": "customer@example.com",
  "ref": ""
}
Your reply · application/json
{
  "renderAs": "table",
  "content": [
    { "Order": "#10432", "Status": "Shipped", "Total": "$1,250.00" }
  ]
}

renderAs

Définissez renderAs pour indiquer à SyBox comment afficher vos données — l'une de :

table
Rows & columns. content = an array of flat objects (or { rows: [ … ] }). Object keys become the column headers.
cards · kpi
Compact tiles (a balance, an order count). content = an array of { label, value } (or { cards: [ … ] }).
feed · list · thread
A timeline of rich cards. content = an array of { title, text, date, tags, media:[{ type, url, name }] }.
message
A single message-style card (one record laid out as a note).
html
Your own trusted HTML — content = a string. Use only for markup you generate yourself.
sections
Several blocks at once: content = { sections: [ { title, renderAs, content } ] } — mix a table + cards + a feed in one reply.
json
The default when renderAs is omitted — SyBox pretty-prints your content as-is.

Ajoutez un sybox_ref à une ligne de tableau ou une carte pour la rendre cliquable — SyBox vous rappelle avec ce ref afin que vous renvoyiez le détail de cet enregistrement.

Nous envoyons le téléphone et l'e-mail — l'un peut être vide ; faites la correspondance avec celui qui identifie le client dans votre système, et répondez avec { renderAs, content }.

Recherche de produits (X-Sybox-Action: products)

Le même endpoint peut aussi répondre aux recherches de produits. L'agent saisit ce que demande le client, SyBox l'envoie dans "q", et votre réponse s'affiche en fiches produits à côté de la conversation, avec un bouton Envoyer qui place le lien dans le champ de saisie.

Request · SyBox → your endpoint
POST YOUR_ERP_URL
Authorization: Bearer YOUR_ERP_KEY
X-Sybox-Action: products

# body: { "data": "<json string>" } — the decoded "data":
{
  "q": "wireless keyboard",
  "phone": "15551234567",
  "email": "customer@example.com",
  "ref": ""
}
Your reply · application/json
{
  "content": [
    {
      "name":      "Wireless Keyboard K380",
      "price":     449,
      "oldPrice":  520,
      "currency":  "USD",
      "available": true,
      "stock":     12,
      "image":     "https://cdn.example.com/k380.jpg",
      "link":      "https://shop.example.com/p/k380",
      "note":      "Ships in 24h"
    }
  ]
}
name
Le seul champ obligatoire. Un produit réduit à son nom donne quand même une fiche propre.
price · oldPrice · currency
Des nombres, pas des chaînes formatées. N'envoyez oldPrice que s'il existe un vrai prix précédent — la remise est calculée à partir des deux.
available · stock
available vaut true/false ; stock est un compteur facultatif affiché à côté. Omettez-les si vous ne suivez pas le stock — un champ absent n'affiche rien et n'est jamais lu comme « rupture ».
image
Une URL d'image https directe. Une image qui ne charge pas laisse place à un fond neutre.
link
L'URL de la fiche produit. Sans elle, la carte est en lecture seule — Envoyer n'apparaît que s'il y a quelque chose à envoyer.
note
Une courte ligne libre sous le prix — délai de livraison, variante, condition.
Rien de plus que l'endpoint déjà en place : même URL, même clé, même enveloppe { "data": "…" }. Lisez X-Sybox-Action pour distinguer une recherche produit d'une recherche client. Répondez avec content sous forme de tableau (ou { items: [ … ] }).

05Créer un dossier depuis votre propre système

C'est la route utilisée par un ERP ou système comptable pour ouvrir un ticket ou dossier dans SyBox CRM.

cURL
curl -X POST "https://api.smartsybox.com/v1/case" \
  -H "Authorization: Bearer $SYBOX_CASE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_unique_id": "CUST-10432",
    "header": "Screen replacement not delivered",
    "description": "Paid on 12 Aug, promised in 3 days, still nothing.",
    "department_id": 5,
    "ext_ref": "TICKET-99817"
  }'

Les champs

customer_unique_id
Votre propre identifiant client.
header / description
Au moins un champ est requis.
department_id
Obligatoire. Le département auquel le dossier est attribué : le numéro affiché à côté dans Paramètres › Départements (par exemple #5).
ext_ref
Votre numéro de ticket.
Le client doit déjà exister.
Utilisez une clé de type 'case'.

06Injecter un message depuis un autre programme

Pour tout ce qui n'est pas WhatsApp: une note de caisse, une alerte d'appareil.

cURL
curl -X POST "https://api.smartsybox.com/v1/inbound" \
  -H "Authorization: Bearer $SYBOX_INBOUND_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "15551234567",
    "text": "Order 4821 has left the warehouse."
  }'
Entrant uniquement, par conception.

07Gestion des erreurs

Les erreurs sont renvoyées textuellement depuis Meta.

4xx · application/json
{
  "error": {
    "message": "(#131030) Recipient phone number not in allowed list",
    "type": "OAuthException",
    "code": 131030
  }
}

08Obtenir une clé d'appareil

Les clés sont créées dans votre espace de travail.

  • Ouvrez votre espace de travail → Paramètres → Clés API.
  • Chaque clé est liée à un seul numéro.
  • Votre vrai jeton WhatsApp ne quitte jamais notre serveur.
  • La passerelle est désactivée par défaut.
SMART SOUQ

SMART SOUQ · RC Marrakech N° 154779 · RC Fès N° 87323 · ICE 003587569000031
© 2026. All rights reserved.

SyBox™ is a registered trademark of SMART SOUQ · OMPIC N° 307572.