WhatsApp Business API
Documentacao completa da API WhatsApp Business da Lidmo. Integre mensagens do WhatsApp na sua aplicacao de forma programatica com nossa API RESTful.
Meta BSP Oficial -- A Lidmo e um Business Solution Provider (BSP) oficial da Meta. Todos os recursos da WhatsApp Cloud API estao disponiveis atraves da nossa plataforma, com suporte completo e cobranca transparente.
Nesta pagina
1. Introducao
A Lidmo oferece uma API RESTful completa para integracao com o WhatsApp Business. Como BSP oficial da Meta, fornecemos acesso direto a todos os recursos da WhatsApp Cloud API com uma camada simplificada de autenticacao, billing e monitoramento.
Principais recursos
- API RESTful -- Endpoints simples e bem documentados para todos os tipos de mensagem
- Webhooks em tempo real -- Receba mensagens e notificacoes de status instantaneamente
- Modelo pay-per-use -- R$ 0,05 por chamada de API, sem mensalidade fixa
- Dashboard completo -- Logs, analytics e gestao de numeros em um unico painel
- Multiplos numeros -- Gerencie diversos numeros WhatsApp Business em uma unica conta
Base URL
https://api.lidmo.com.br
Todas as requisicoes a API devem usar HTTPS. Requisicoes HTTP serao rejeitadas. A API aceita e retorna dados exclusivamente no formato JSON.
2. Autenticacao
A API utiliza autenticacao via OAuth2 Bearer Token. Todas as requisicoes
devem incluir o token no header Authorization.
Obtendo seu token
- Acesse o painel da Lidmo
- Navegue ate WhatsApp API > Credenciais
- Clique em Gerar Token para criar um novo token de acesso
- Copie o token gerado -- ele sera exibido apenas uma vez
Usando o token
Inclua o token no header de todas as requisicoes:
Authorization: Bearer {seu_access_token}
Renovacao e expiracao
- Tokens tem validade de 90 dias por padrao
- Voce pode gerar novos tokens a qualquer momento pelo dashboard
- Tokens antigos podem ser revogados individualmente
- Quando um token expira, a API retorna
401 Unauthorized
Seguranca: Nunca exponha seu token em codigo client-side (JavaScript no navegador, aplicativos moveis). Sempre faca as chamadas a API a partir do seu backend.
3. Quick Start
Siga estes passos para enviar sua primeira mensagem via API em poucos minutos:
Passo 1: Criar conta na Lidmo
Acesse https://lidmo.com.br/register e crie sua conta. Voce tera acesso ao trial de 7 dias.
Passo 2: Adicionar numero WhatsApp Business
No painel, va ate WhatsApp API > Numeros e adicione seu numero de telefone. E necessario que o numero esteja verificado pela Meta atraves do processo de verificacao do WhatsApp Business.
Verificacao Meta: O processo de verificacao pela Meta pode levar de algumas horas a alguns dias. Certifique-se de que sua empresa possui um Facebook Business Manager verificado.
Passo 3: Obter credenciais da API
Em WhatsApp API > Credenciais, gere seu token de acesso. Guarde-o em local seguro.
Passo 4: Enviar primeira mensagem
Use o comando abaixo para enviar sua primeira mensagem de teste:
curl -X POST https://api.lidmo.com.br/whatsapp/send \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone": "5511999999999",
"message": "Hello from Lidmo!"
}'
Resposta de sucesso:
{
"success": true,
"data": {
"message_id": "wamid.HBgNNTUxMTk5OTk5OTk5OQ==",
"status": "sent",
"timestamp": 1712345678
}
}
Importante: Para enviar mensagens fora da janela de 24 horas, voce deve usar um template de mensagem pre-aprovado pela Meta. Mensagens de texto livre so podem ser enviadas dentro da janela de conversa ativa.
4. Enviando Mensagens
A API suporta todos os tipos de mensagem disponiveis no WhatsApp Business. Abaixo voce encontra a documentacao detalhada de cada tipo.
4.1 Mensagens de Texto
O tipo mais simples de mensagem. Envia texto puro para o destinatario.
POST /whatsapp/send
Request body:
{
"phone": "5511999999999",
"message": "Your text message here"
}
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
phone |
string | Sim | Numero do destinatario no formato internacional (ex: 5511999999999) |
message |
string | Sim | Texto da mensagem (max 4096 caracteres) |
Resposta:
{
"success": true,
"data": {
"message_id": "wamid.HBgNNTUxMTk5OTk5OTk5OQ==",
"status": "sent",
"timestamp": 1712345678
}
}
4.2 Mensagens de Midia
Envie imagens, videos, audios e documentos. O campo media_type define o tipo de midia.
POST /whatsapp/send
Tipos de midia suportados:
| media_type | Formatos aceitos | Tamanho maximo |
|---|---|---|
image |
JPEG, PNG | 5 MB |
video |
MP4, 3GPP | 16 MB |
audio |
AAC, MP3, OGG, AMR | 16 MB |
document |
PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX, TXT | 100 MB |
Exemplo -- Enviando uma imagem:
{
"phone": "5511999999999",
"media_type": "image",
"media_url": "https://example.com/photo.jpg",
"caption": "Check this out!"
}
Exemplo -- Enviando um documento:
{
"phone": "5511999999999",
"media_type": "document",
"media_url": "https://example.com/invoice.pdf",
"filename": "invoice.pdf",
"caption": "Segue sua fatura em anexo."
}
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
phone |
string | Sim | Numero do destinatario |
media_type |
string | Sim | Tipo de midia: image, video, audio, document |
media_url |
string | Sim | URL publica do arquivo de midia (HTTPS) |
caption |
string | Nao | Legenda da midia (apenas para image e document) |
filename |
string | Nao | Nome do arquivo (apenas para document) |
4.3 Mensagens de Template
Templates sao mensagens pre-aprovadas pela Meta, obrigatorias para iniciar conversas fora da janela de 24 horas. Eles permitem enviar notificacoes proativas como confirmacoes de pedido, lembretes de agendamento e alertas de seguranca.
POST /whatsapp/send-template
Request body:
{
"phone": "5511999999999",
"template_name": "order_confirmation",
"template_language": "pt_BR",
"components": [
{
"type": "body",
"parameters": [
{ "type": "text", "text": "Joao" },
{ "type": "text", "text": "#12345" }
]
}
]
}
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
phone |
string | Sim | Numero do destinatario |
template_name |
string | Sim | Nome do template aprovado pela Meta |
template_language |
string | Sim | Codigo do idioma do template (ex: pt_BR, en_US) |
components |
array | Nao | Parametros dinamicos do template |
Tipos de parametros nos components:
text-- Texto simples para substituicao de variaveiscurrency-- Valor monetario formatadodate_time-- Data e hora formatadasimage-- Imagem no header do templatedocument-- Documento no header do templatevideo-- Video no header do template
Aprovacao de templates: Templates precisam ser criados e submetidos para aprovacao pela Meta atraves do painel da Lidmo ou diretamente no Facebook Business Manager. O processo de aprovacao geralmente leva de algumas horas a 24 horas.
4.4 Mensagens Interativas
Mensagens interativas permitem que o destinatario interaja com botoes ou listas, proporcionando uma experiencia mais rica e facilitando o fluxo de conversacao.
Botoes de Resposta (ate 3 botoes)
POST /whatsapp/send
{
"phone": "5511999999999",
"type": "interactive",
"interactive": {
"type": "button",
"body": {
"text": "Gostaria de confirmar seu pedido?"
},
"action": {
"buttons": [
{
"type": "reply",
"reply": { "id": "confirm", "title": "Confirmar" }
},
{
"type": "reply",
"reply": { "id": "cancel", "title": "Cancelar" }
},
{
"type": "reply",
"reply": { "id": "edit", "title": "Editar Pedido" }
}
]
}
}
}
Listas (ate 10 secoes)
{
"phone": "5511999999999",
"type": "interactive",
"interactive": {
"type": "list",
"header": {
"type": "text",
"text": "Nosso Cardapio"
},
"body": {
"text": "Selecione uma categoria para ver os itens disponiveis:"
},
"action": {
"button": "Ver Opcoes",
"sections": [
{
"title": "Pratos Principais",
"rows": [
{ "id": "item_1", "title": "Feijoada", "description": "Tradicional feijoada completa" },
{ "id": "item_2", "title": "Moqueca", "description": "Moqueca baiana de peixe" }
]
},
{
"title": "Bebidas",
"rows": [
{ "id": "item_3", "title": "Suco Natural", "description": "Laranja, limao ou maracuja" },
{ "id": "item_4", "title": "Agua de Coco", "description": "Natural gelada" }
]
}
]
}
}
}
Botoes de Resposta Rapida (Reply Buttons)
Reply buttons permitem que o usuario responda rapidamente tocando em um botao
pre-definido. A resposta e registrada como uma mensagem de texto com o id
do botao selecionado.
4.5 Mensagens de Localizacao
Envie localizacoes com coordenadas, nome e endereco.
POST /whatsapp/send
{
"phone": "5511999999999",
"type": "location",
"latitude": -23.5505,
"longitude": -46.6333,
"name": "Lidmo HQ",
"address": "Sao Paulo, SP"
}
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
phone |
string | Sim | Numero do destinatario |
type |
string | Sim | Deve ser location |
latitude |
number | Sim | Latitude da localizacao |
longitude |
number | Sim | Longitude da localizacao |
name |
string | Nao | Nome do local |
address |
string | Nao | Endereco do local |
4.6 Mensagens de Contato
Compartilhe informacoes de contato diretamente no chat.
POST /whatsapp/send
{
"phone": "5511999999999",
"type": "contacts",
"contacts": [
{
"name": {
"formatted_name": "Suporte Lidmo",
"first_name": "Suporte",
"last_name": "Lidmo"
},
"phones": [
{ "phone": "+5511999999999", "type": "WORK" }
],
"emails": [
{ "email": "suporte@lidmo.com.br", "type": "WORK" }
]
}
]
}
4.7 Mensagens de Reacao
Reaja a uma mensagem existente com um emoji. Util para confirmacoes automaticas.
POST /whatsapp/send
{
"phone": "5511999999999",
"type": "reaction",
"message_id": "wamid.HBgNNTUxMTk5OTk5OTk5OQ==",
"emoji": "\u2705"
}
| Campo | Tipo | Obrigatorio | Descricao |
|---|---|---|---|
message_id |
string | Sim | ID da mensagem a reagir (retornado no envio original) |
emoji |
string | Sim | Emoji Unicode para a reacao |
Para remover uma reacao, envie o mesmo request com emoji como string vazia.
5. Recebendo Mensagens (Webhooks)
Webhooks permitem que voce receba mensagens e notificacoes de status em tempo real.
Quando um evento ocorre (mensagem recebida, mensagem entregue, etc.), a Lidmo envia
um POST request para a URL configurada no seu painel.
Configurando o webhook
- Acesse WhatsApp API > Webhooks no painel
- Informe a URL do seu endpoint (deve ser HTTPS)
- Defina um Verify Token para validacao
- Selecione os eventos que deseja receber
- Clique em Salvar e Verificar
Verificacao do webhook (Challenge/Response)
Ao configurar o webhook, a Lidmo faz um GET request para validar a URL.
Seu endpoint deve responder com o valor do parametro hub.challenge:
GET https://seu-servidor.com/webhook?hub.mode=subscribe&hub.verify_token=SEU_TOKEN&hub.challenge=CHALLENGE_STRING
Seu servidor deve verificar se hub.verify_token corresponde ao token configurado
e retornar o valor de hub.challenge como resposta com status 200.
Eventos disponiveis
| Evento | Descricao |
|---|---|
message.received |
Uma nova mensagem foi recebida |
message.delivered |
Mensagem foi entregue ao destinatario |
message.read |
Mensagem foi lida pelo destinatario |
message.failed |
Falha na entrega da mensagem |
status.changed |
Mudanca de status de uma mensagem |
Payload do webhook
Exemplo de payload para o evento message.received:
{
"event": "message.received",
"timestamp": 1712345678,
"data": {
"from": "5511999999999",
"message_id": "wamid.HBgNNTUxMTk5OTk5OTk5OQ==",
"type": "text",
"text": "Hello!",
"timestamp": 1712345678
}
}
Exemplo de payload para o evento message.delivered:
{
"event": "message.delivered",
"timestamp": 1712345680,
"data": {
"message_id": "wamid.HBgNNTUxMTk5OTk5OTk5OQ==",
"recipient": "5511999999999",
"status": "delivered",
"timestamp": 1712345680
}
}
Exemplo de payload para o evento message.failed:
{
"event": "message.failed",
"timestamp": 1712345690,
"data": {
"message_id": "wamid.HBgNNTUxMTk5OTk5OTk5OQ==",
"recipient": "5511999999999",
"error": {
"code": 131047,
"title": "Re-engagement message",
"message": "More than 24 hours have passed since the recipient last replied."
}
}
}
Politica de retry
A Lidmo faz ate 5 tentativas de entrega de webhooks em caso de falha. O intervalo entre tentativas segue um backoff exponencial:
- 1a tentativa: imediata
- 2a tentativa: apos 1 minuto
- 3a tentativa: apos 5 minutos
- 4a tentativa: apos 30 minutos
- 5a tentativa: apos 2 horas
Seu endpoint deve retornar um status 2xx dentro de 10 segundos.
Caso contrario, a tentativa sera considerada como falha.
Seguranca do webhook (verificacao de assinatura)
Cada request de webhook inclui um header X-Lidmo-Signature contendo
uma assinatura HMAC-SHA256 do payload. Valide essa assinatura para garantir que
o request veio da Lidmo.
// Exemplo de validacao em PHP
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_LIDMO_SIGNATURE'];
$expected = hash_hmac('sha256', $payload, $webhookSecret);
if (!hash_equals($expected, $signature)) {
http_response_code(403);
exit('Invalid signature');
}
Seguranca: Sempre valide a assinatura do webhook antes de processar os dados. Requests sem assinatura valida devem ser rejeitados com status 403.
6. Precificacao
A Lidmo cobra uma taxa fixa de R$ 0,05 por chamada de API, acrescida das taxas cobradas pela Meta por conversa. As taxas da Meta variam conforme o tipo de conversa e o pais do destinatario.
Tabela de precos (Brasil)
| Tipo de Mensagem | Descricao | Taxa Meta (USD) | Taxa Lidmo | Total Aproximado |
|---|---|---|---|---|
| Authentication | OTP, codigos de verificacao | $0.0068 | R$ 0,05 | ~R$ 0,09 |
| Utility | Confirmacoes de pedido, atualizacoes | $0.0068 | R$ 0,05 | ~R$ 0,09 |
| Marketing | Ofertas, promocoes, campanhas | $0.0625 | R$ 0,05 | ~R$ 0,38 |
| Service | Resposta dentro da janela de 24h | $0.00 | R$ 0,05 | R$ 0,05 |
Modelo baseado em conversas: A Meta cobra por conversa, nao por mensagem individual. Uma conversa aberta dura 24 horas a partir da primeira mensagem entregue. Todas as mensagens dentro dessa janela de 24h sao cobertas pelo mesmo custo de conversa.
Detalhes sobre as janelas de conversa
- Conversas iniciadas pelo usuario: Quando o usuario envia a primeira mensagem, voce tem 24 horas para responder livremente. A taxa aplicada e a de Service.
- Conversas iniciadas pela empresa: Quando voce envia a primeira mensagem (via template), a taxa depende da categoria do template: Authentication, Utility ou Marketing.
- Free Tier: Cada numero WhatsApp Business tem direito a 1.000 conversas gratuitas do tipo Service por mes.
Nota: Os valores da Meta sao em USD e podem variar conforme o pais do destinatario e atualizacoes da propria Meta. Consulte a tabela de precos oficial da Meta para valores atualizados.
7. Rate Limits
Para garantir a estabilidade da plataforma, a API impoe limites de requisicoes por minuto.
| Tipo de Endpoint | Limite | Janela |
|---|---|---|
| Endpoints autenticados (envio de mensagens) | 120 requests | Por minuto |
| Webhook endpoints (recebimento) | 300 requests | Por minuto |
Quando o limite e atingido, a API retorna status 429 Too Many Requests
com o header Retry-After indicando quantos segundos esperar.
HTTP/1.1 429 Too Many Requests
Retry-After: 30
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests. Please retry after 30 seconds."
}
}
Limites da Meta: Alem dos rate limits da Lidmo, a Meta impoe seus proprios limites baseados na qualidade do seu numero e no tier de mensagens. Numeros novos comecam com limite de 250 conversas por dia, podendo chegar a limites ilimitados conforme o volume e a qualidade.
Tiers de mensagens da Meta
| Tier | Limite de Conversas/Dia | Como alcancar |
|---|---|---|
| Tier 1 (inicial) | 250 | Automatico ao registrar o numero |
| Tier 2 | 1.000 | Enviar 250 conversas em 7 dias com boa qualidade |
| Tier 3 | 10.000 | Enviar 1.000 conversas em 7 dias com boa qualidade |
| Tier 4 | 100.000 | Enviar 10.000 conversas em 7 dias com boa qualidade |
| Ilimitado | Sem limite | Enviar 100.000 conversas em 7 dias com boa qualidade |
8. Tratamento de Erros
A API utiliza codigos de status HTTP padrao para indicar sucesso ou falha. Respostas de erro incluem um corpo JSON com detalhes sobre o problema.
Codigos de status HTTP
| Status | Significado | Descricao |
|---|---|---|
200 |
OK | Requisicao processada com sucesso |
400 |
Bad Request | Dados invalidos na requisicao |
401 |
Unauthorized | Token ausente ou invalido |
403 |
Forbidden | Sem permissao para esta acao |
422 |
Unprocessable Entity | Dados no formato correto mas semanticamente invalidos |
429 |
Too Many Requests | Rate limit excedido |
500 |
Internal Server Error | Erro interno do servidor |
Formato da resposta de erro
{
"success": false,
"error": {
"code": "INVALID_PHONE",
"message": "Phone number format is invalid. Use international format: 5511999999999"
}
}
Codigos de erro comuns
| Codigo | Descricao | Solucao |
|---|---|---|
INVALID_PHONE |
Numero de telefone invalido | Use o formato internacional sem simbolos: 5511999999999 |
INVALID_TOKEN |
Token de autenticacao invalido | Verifique se o token esta correto e nao expirou |
TOKEN_EXPIRED |
Token expirado | Gere um novo token no painel |
TEMPLATE_NOT_FOUND |
Template nao encontrado | Verifique o nome e idioma do template |
TEMPLATE_NOT_APPROVED |
Template nao aprovado pela Meta | Aguarde a aprovacao ou submeta novamente |
MEDIA_URL_INVALID |
URL de midia inacessivel | Verifique se a URL e publica e acessivel via HTTPS |
MEDIA_TOO_LARGE |
Arquivo de midia excede o limite | Reduza o tamanho do arquivo conforme limites da tabela |
RATE_LIMIT_EXCEEDED |
Limite de requisicoes excedido | Aguarde o tempo indicado no header Retry-After |
RECIPIENT_NOT_WHATSAPP |
Destinatario nao usa WhatsApp | Confirme que o numero esta registrado no WhatsApp |
OUTSIDE_WINDOW |
Fora da janela de 24 horas | Use um template aprovado para iniciar nova conversa |
NUMBER_BLOCKED |
Numero bloqueado pela Meta | Verifique a qualidade do numero no painel |
INSUFFICIENT_BALANCE |
Saldo insuficiente | Adicione creditos na sua conta Lidmo |
9. Exemplos de Codigo
Exemplos praticos de integracao nas linguagens mais populares.
cURL
curl -X POST https://api.lidmo.com.br/whatsapp/send \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"phone": "5511999999999",
"message": "Hello from Lidmo!"
}'
PHP (Laravel)
use Illuminate\Support\Facades\Http;
$response = Http::withToken($token)
->post('https://api.lidmo.com.br/whatsapp/send', [
'phone' => '5511999999999',
'message' => 'Hello!',
]);
if ($response->successful()) {
$messageId = $response->json('data.message_id');
// Mensagem enviada com sucesso
} else {
$error = $response->json('error');
// Tratar erro: $error['code'], $error['message']
}
PHP (sem framework)
$ch = curl_init('https://api.lidmo.com.br/whatsapp/send');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $token,
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'phone' => '5511999999999',
'message' => 'Hello!',
]),
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = json_decode($response, true);
Node.js (fetch)
const response = await fetch('https://api.lidmo.com.br/whatsapp/send', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
phone: '5511999999999',
message: 'Hello!',
}),
});
const data = await response.json();
if (data.success) {
console.log('Message sent:', data.data.message_id);
} else {
console.error('Error:', data.error.code, data.error.message);
}
Node.js (axios)
const axios = require('axios');
try {
const { data } = await axios.post('https://api.lidmo.com.br/whatsapp/send', {
phone: '5511999999999',
message: 'Hello!',
}, {
headers: { Authorization: `Bearer ${token}` },
});
console.log('Message sent:', data.data.message_id);
} catch (error) {
console.error('Error:', error.response?.data?.error);
}
Python (requests)
import requests
response = requests.post(
'https://api.lidmo.com.br/whatsapp/send',
headers={'Authorization': f'Bearer {token}'},
json={'phone': '5511999999999', 'message': 'Hello!'}
)
data = response.json()
if data.get('success'):
print(f"Message sent: {data['data']['message_id']}")
else:
print(f"Error: {data['error']['code']} - {data['error']['message']}")
Python (aiohttp -- async)
import aiohttp
async def send_whatsapp(token, phone, message):
async with aiohttp.ClientSession() as session:
async with session.post(
'https://api.lidmo.com.br/whatsapp/send',
headers={'Authorization': f'Bearer {token}'},
json={'phone': phone, 'message': message}
) as response:
return await response.json()
C# (.NET)
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", token);
var content = new StringContent(
JsonSerializer.Serialize(new { phone = "5511999999999", message = "Hello!" }),
Encoding.UTF8,
"application/json"
);
var response = await client.PostAsync("https://api.lidmo.com.br/whatsapp/send", content);
var json = await response.Content.ReadAsStringAsync();
Exemplo de recebimento de webhook (PHP/Laravel)
// routes/api.php
Route::post('/webhook/whatsapp', [WebhookController::class, 'handle']);
// WebhookController.php
public function handle(Request $request)
{
// Verificar assinatura
$signature = $request->header('X-Lidmo-Signature');
$expected = hash_hmac('sha256', $request->getContent(), config('services.lidmo.webhook_secret'));
if (!hash_equals($expected, $signature)) {
return response('Invalid signature', 403);
}
$event = $request->input('event');
$data = $request->input('data');
match ($event) {
'message.received' => $this->handleIncomingMessage($data),
'message.delivered' => $this->handleDelivered($data),
'message.read' => $this->handleRead($data),
'message.failed' => $this->handleFailed($data),
default => null,
};
return response('OK', 200);
}
10. Multiplos Numeros
A Lidmo suporta a gestao de multiplos numeros WhatsApp Business em uma unica conta. Cada numero possui suas proprias configuracoes, templates e limites de envio.
Gerenciando numeros
- Adicione novos numeros em WhatsApp API > Numeros no painel
- Cada numero deve ser verificado independentemente pela Meta
- Tokens de API podem ser associados a numeros especificos ou ter acesso a todos
Especificando o numero de envio
Quando voce tem mais de um numero, inclua o campo from para especificar
de qual numero a mensagem deve ser enviada:
{
"phone": "5511999999999",
"from": "5511888888888",
"message": "Mensagem enviada do numero secundario"
}
Se o campo from nao for informado, a API utiliza o numero padrao
configurado no seu painel.
Qualidade do numero
A Meta atribui um rating de qualidade para cada numero. Monitorar essa metrica e fundamental para manter bons limites de envio:
- Verde (Alto): Numero em boas condicoes, elegivel para aumento de tier
- Amarelo (Medio): Qualidade em declinio, requer atencao
- Vermelho (Baixo): Risco de reducao de tier ou bloqueio
Atencao: Se a qualidade do numero cair para vermelho por mais de 7 dias, a Meta pode reduzir o tier de envio ou bloquear o numero temporariamente. Monitore a qualidade regularmente pelo painel da Lidmo.
11. Logs e Analytics
O painel da Lidmo oferece logs detalhados e analytics completos para todas as mensagens enviadas e recebidas.
Logs de mensagens
- Historico completo de todas as mensagens com status de entrega
- Filtros por data, status (sent, delivered, read, failed), tipo de mensagem e numero
- Detalhes de cada mensagem incluindo payload enviado e resposta da Meta
- Exportacao de logs em CSV
Metricas disponiveis
- Volume de mensagens: Total de mensagens enviadas e recebidas por periodo
- Taxa de entrega: Percentual de mensagens entregues com sucesso
- Taxa de leitura: Percentual de mensagens lidas pelo destinatario
- Custo total: Gasto acumulado por numero e por periodo
- Erros: Breakdown de erros por tipo e frequencia
Acompanhamento de custos
Acompanhe os custos por numero, por tipo de conversa e por periodo. O painel exibe:
- Gasto diario, semanal e mensal
- Custo por numero WhatsApp
- Distribuicao de custos por categoria (Marketing, Utility, Authentication, Service)
- Relatorios mensais exportaveis
12. Boas Praticas
Formatacao de mensagens
- O WhatsApp suporta formatacao basica:
*negrito*,_italico_,~tachado~e```monospacado``` - Use quebras de linha para organizar mensagens longas
- Evite mensagens muito longas -- quebre em mensagens menores quando necessario
Evitando violacoes de politica da Meta
- Sempre obtenha consentimento (opt-in) antes de enviar mensagens
- Nao envie mensagens em massa nao solicitadas (spam)
- Forneca uma opcao clara de cancelamento (opt-out) em toda mensagem de marketing
- Nao use o WhatsApp para conteudo proibido (jogos de azar, conteudo adulto, venda de armas, etc.)
- Respeite as restricoes de horario -- evite envios em horarios inconvenientes
Dicas para aprovacao de templates
- Use linguagem clara e profissional
- Evite linguagem excessivamente promocional no corpo do template
- Inclua o nome da empresa no template
- Forneca contexto claro de por que o usuario esta recebendo a mensagem
- Nao inclua URLs encurtadas (use URLs completas)
- Evite excesso de variaveis -- templates muito genericos tendem a ser rejeitados
Gestao de opt-in/opt-out
- Registre e armazene o consentimento do usuario com data e hora
- Implemente um mecanismo automatico para processar pedidos de opt-out (ex: responder "SAIR")
- Mantenha uma lista atualizada de numeros que optaram por nao receber mensagens
- A Meta pode solicitar comprovacao de opt-in em caso de denuncias
Dica: Numeros com baixo indice de bloqueio e denuncias sobem de tier mais rapidamente, permitindo enviar mais mensagens por dia. Investir em qualidade de conteudo e consentimento tem impacto direto na capacidade de envio.
13. FAQ / Troubleshooting
Problemas comuns
Mensagem nao esta sendo entregue
- Verifique se o numero do destinatario esta no formato internacional correto (ex: 5511999999999)
- Confirme que o destinatario tem o WhatsApp instalado e ativo
- Se estiver fora da janela de 24h, use um template aprovado
- Verifique os logs no painel para identificar o erro especifico
Erro 401 Unauthorized
- Verifique se o token esta correto e nao expirou
- Confirme que o header
Authorizationesta no formatoBearer {token} - Gere um novo token no painel se necessario
Template nao encontrado
- Verifique se o nome do template esta exatamente igual ao cadastrado (case-sensitive)
- Confirme que o idioma (
template_language) esta correto - Verifique se o template foi aprovado pela Meta (templates pendentes ou rejeitados nao podem ser usados)
Numero bloqueado pela Meta
- Bloqueios geralmente ocorrem por excesso de denuncias ou violacoes de politica
- Verifique a qualidade do numero no painel (deve estar verde)
- Reduza o volume de envio e melhore a qualidade das mensagens
- Em casos graves, entre em contato com o suporte da Lidmo para intermediacao com a Meta
Webhook nao recebe eventos
- Confirme que a URL do webhook e acessivel publicamente via HTTPS
- Verifique se o desafio de verificacao (challenge) foi respondido corretamente
- Confirme que seu servidor retorna status
200dentro de 10 segundos - Verifique os logs de webhook no painel para ver tentativas de entrega
Mensagens com atraso na entrega
- Atrasos de ate 30 segundos sao normais em periodos de alto volume
- Verifique se o destinatario tem conexao com a internet
- A Meta pode enfileirar mensagens quando o servidor do destinatario esta indisponivel
- Para mensagens urgentes (OTP), use templates do tipo Authentication que tem prioridade de entrega
Verificacao da conta Meta Business
Para utilizar a API do WhatsApp Business, sua empresa precisa ser verificada pela Meta. O processo inclui:
- Criar ou acessar o Facebook Business Manager
- Enviar documentos de verificacao da empresa (CNPJ, contrato social, etc.)
- Aguardar a analise da Meta (geralmente 2-5 dias uteis)
- Apos aprovacao, vincular o numero de telefone ao WhatsApp Business
Precisa de ajuda? Entre em contato com nosso suporte em suporte@lidmo.com.br para assistencia com configuracao, verificacao Meta ou qualquer duvida tecnica.
Para a referencia completa de endpoints, consulte a secao API Reference.