Si vous avez déjà utilisé l'API Cloud WhatsApp, vous connaissez déjà la nôtre. Même chemin, même corps JSON, même authentification Bearer.
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…" }]
}
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: [ … ] }).