WhatsApp chave ace_
Conecte o número da empresa por QR, envie textos e mídias, e receba mensagens por
webhook. A instância é provisionada automaticamente na primeira chamada. Só o envio cobra
1 unidade; QR, status e webhook são grátis. Requer o produto whatsapp vinculado.
GET /whatsapp/qrcode GET /whatsapp/status POST /whatsapp/mensagens # texto (cobra 1) POST /whatsapp/midia # mídia (cobra 1) GET/PUT /whatsapp/webhook POST /whatsapp/desconectar
1 · Conectar
Gera o QR code para parear o WhatsApp (validade ~2 min). Exiba qrcode direto num
<img src>; ou use o pairing_code para parear por código.
Erro 409 ja_conectado: o número já está conectado (chame
POST /whatsapp/desconectar antes de trocar de aparelho).
curl .../api/v1/whatsapp/qrcode \
-H "Authorization: Bearer ace_SEU_TOKEN"
$qr = $cli->whatsapp()->qrcode(); // echo '<img src="'.$qr['qrcode'].'">';
R := Api.Get('whatsapp/qrcode');
{ "qrcode": "data:image/png;base64,iVBOR...",
"expira_em": "2026-07-14 02:31:00",
"pairing_code": "ABCD-1234",
"status": "conectando" }
2 · Status da conexão
Confirme a conexão depois do usuário escanear (faça polling a cada poucos segundos).
{ "status": "conectado", // conectando|desconectado
"conectado": true,
"telefone": "5531999998888",
"webhook_url": "https://..." }
3 · Enviar texto cobra 1 un.
| Campo | Descrição | |
|---|---|---|
para | obrig. | Número com DDI+DDD, só dígitos (5531999998888) |
mensagem | obrig. | Texto (emojis suportados) |
status "reenvio_automatico" com
tentar_em_segundos — a mensagem entra na fila e é reenviada sozinha. Não reenvie,
senão duplica.curl -X POST .../api/v1/whatsapp/mensagens \ -H "Authorization: Bearer ace_SEU_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "para": "5531999998888", "mensagem": "Olá! Seu pedido foi aprovado. 🎉" }'
$cli->whatsapp()->enviarTexto( '5531999998888', 'Olá! Pedido aprovado.');
Api.EnviarWhatsAppTexto( '5531999998888', 'Olá! Pedido aprovado.').Free;
{ "message_id": "3EB0...",
"status": "enviada" }
4 · Enviar mídia cobra 1 un.
| Campo | Descrição | |
|---|---|---|
para | obrig. | Número (só dígitos) |
arquivo | obrig. | URL pública — imagem JPG/PNG, PDF, áudio ou vídeo |
legenda | opc. | Texto junto da mídia |
nome_arquivo | opc. | Nome exibido (para documentos) |
curl -X POST .../api/v1/whatsapp/midia \ -H "Authorization: Bearer ace_SEU_TOKEN" \ -d '{ "para": "5531999998888", "arquivo": "https://.../danfe.pdf", "legenda": "Segue a nota", "nome_arquivo": "nota-1234.pdf" }'
$cli->whatsapp()->enviarMidia([ 'para'=>'5531999998888', 'arquivo'=>'https://.../danfe.pdf', 'nome_arquivo'=>'nota-1234.pdf', ]);
P := JSONFromStr('{"para":"5531999998888",'+ '"arquivo":"https://.../danfe.pdf"}'); Api.Post('whatsapp/midia', P);
5 · Webhook · receber mensagens
Defina sua URL ({"url":"https://..."}; envie "" para remover). A partir daí,
toda mensagem recebida e eventos de conexão são entregues na sua URL via POST JSON, num formato
limpo padronizado (não é o payload cru do WhatsApp). Responda 200 rápido e processe em background.
Cabeçalhos de cada entrega
X-AceleraAPI-Evento— tipo do evento (ex.:mensagem_recebida)X-AceleraAPI-Assinatura—sha256=<hmac>(HMAC-SHA256 do corpo cru com osecret)
evento: mensagem_recebida, mensagem_enviada,
status_mensagem ou conexao. Guarde o secret (whsec_…).
{ "empresa_id": 12,
"evento": "mensagem_recebida",
"de": "5531988887777",
"nome": "Cliente Fulano",
"tipo": "texto",
"mensagem": "Quero saber do meu pedido",
"id_mensagem": "MSG123",
"de_mim": false,
"timestamp": 1789350000 }
# header: X-AceleraAPI-Assinatura: sha256=<hmac> # hmac = HMAC-SHA256(corpo_bruto, secret)
$corpo = file_get_contents('php://input'); $assin = $_SERVER['HTTP_X_ACELERAAPI_ASSINATURA']; $ok = hash_equals( 'sha256='.hash_hmac('sha256', $corpo, $SECRET), $assin); if (!$ok) { http_response_code(401); exit; }
// HMAC-SHA256 do corpo cru com o secret // e compare com o header, formato sha256=... // (System.Hash.THashSHA2.GetHMAC)