Si ya ha utilizado la API de WhatsApp Cloud de Meta, ya conoce la nuestra. Misma ruta, mismo JSON, misma autenticación Bearer.
02Envíe su primer mensaje
Un mensaje de texto plano. El cuerpo es el payload estándar de Cloud API.
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 Respuesta
Recibe exactamente lo que devuelve Meta, con el mismo estado HTTP.
200 OK · application/json
{
"messaging_product": "whatsapp",
"contacts": [{ "input": "15551234567", "wa_id": "15551234567" }],
"messages": [{ "id": "wamid.HBgLMTU1NTEyMzQ1NjcVAgARGBI…" }]
}
04Muestre sus datos junto al chat
Cuando un agente abre una conversación, SyBox llama a SU endpoint y muestra lo que devuelva junto al chat.
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
Establezca renderAs para indicar a SyBox cómo mostrar su contenido:
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.
Añada sybox_ref a cualquier fila de tabla para hacerla interactiva.
Enviamos teléfono y correo — responda con { renderAs, content }.
Búsqueda de productos (X-Sybox-Action: products)
El mismo endpoint también puede responder a búsquedas de productos. El agente escribe lo que pide el cliente, SyBox lo envía en "q", y su respuesta se dibuja como fichas de producto junto al chat, con un botón Enviar que coloca el enlace en el cuadro de texto.
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
El único campo obligatorio. Un producto con solo un nombre sigue dando una ficha limpia.
price · oldPrice · currency
Números, no cadenas con formato. Envíe oldPrice solo cuando exista un precio anterior real — el descuento se calcula a partir de ambos.
available · stock
available es true/false; stock es un recuento opcional que se muestra al lado. Omítalos si no controla existencias — un campo ausente no dibuja nada y nunca se lee como «agotado».
image
Una URL de imagen https directa. Lo que no cargue deja un fondo neutro.
link
La URL de la página del producto. Sin ella la ficha es de solo lectura — Enviar aparece solo cuando hay algo que enviar.
note
Una línea libre corta bajo el precio — plazo de entrega, variante, condición.
Nada más que el endpoint que ya construyó: misma URL, misma clave, mismo sobre { "data": "…" }. Use X-Sybox-Action para distinguir una búsqueda de producto de una consulta de cliente. Responda con content como un array (o { items: [ … ] }).