Seu ERP, PDV ou programa de desktop pode enviar mensagens de WhatsApp pelo seu número conectado, mostrar dados do cliente ao lado do chat e abrir casos. A rota de envio usa o mesmo formato de requisição da WhatsApp Cloud API da Meta, então um código escrito para ela só precisa de uma nova URL base e de uma chave de dispositivo SyBox — e cada envio é encaminhado à Meta na sua própria conta do WhatsApp Business.
02Envie sua primeira mensagem
Uma mensagem em texto simples. O corpo é o payload padrão da 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());
A Resposta
Você recebe de volta exatamente o que a Meta retorna, com o mesmo status HTTP.
200 OK · application/json
{
"messaging_product": "whatsapp",
"contacts": [{ "input": "15551234567", "wa_id": "15551234567" }],
"messages": [{ "id": "wamid.HBgLMTU1NTEyMzQ1NjcVAgARGBI…" }]
}
04Mostre seus dados ao lado do chat
Quando um agente abre uma conversa, o SyBox chama SEU endpoint e exibe o que você retornar ao lado do 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
Defina renderAs para informar ao SyBox como exibir seu conteúdo:
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.
Adicione sybox_ref a qualquer linha de tabela para torná-la clicável.
Enviamos telefone e e-mail — responda com { renderAs, content }.
Busca de produtos (X-Sybox-Action: products)
O mesmo endpoint também responde a buscas de produtos. O agente digita o que o cliente procura, o SyBox envia em "q", e a sua resposta aparece como cartões de produto ao lado da conversa, com um botão Enviar que coloca o link no campo de mensagem.
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
O único campo obrigatório. Um produto só com nome ainda vira um cartão limpo.
price · oldPrice · currency
Números, não textos formatados. Envie oldPrice apenas quando houver um preço anterior real — o desconto é calculado a partir dos dois.
available · stock
available é true/false; stock é uma contagem opcional exibida ao lado. Omita ambos se você não controla estoque — um campo ausente não desenha nada e nunca é lido como esgotado.
image
Uma URL de imagem https direta. Imagens que falham dão lugar a um fundo neutro.
link
A URL da página do produto. Sem ela o cartão é somente leitura — Enviar só aparece quando há algo a enviar.
note
Uma linha livre curta sob o preço — prazo de entrega, variante, condição.
Nada além do endpoint que você já construiu: mesma URL, mesma chave, mesmo envelope { "data": "…" }. Use X-Sybox-Action para distinguir uma busca de produto de uma consulta de cliente. Responda com content como um array (ou { items: [ … ] }).
05Abra um chamado a partir do seu sistema
Seu sistema solicita ao SyBox a abertura de um registro unificado de atendimento.
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"
}'
Os campos
customer_unique_id
Seu próprio ID de registro do cliente.
header / description
Pelo menos um é obrigatório. O cabeçalho é o que os atendentes veem na lista.
department_id
Obrigatório. O departamento em que o caso está registrado: o número exibido ao lado em Configurações › Departamentos (por exemplo #5).
ext_ref
Seu número de chamado.
O cliente já deve existir no sistema.
Use uma chave do tipo 'case'.