WhatsApp: caixa de entrada
Atendimento por WhatsApp: conversas, respostas, carrinho do atendente, notas, respostas prontas, presença, busca, métricas e representantes B2B.
A caixa de entrada é onde a equipe da loja atende clientes pelo WhatsApp. O assistente automático responde primeiro; quando o cliente pede um humano, ou quando um atendente decide assumir, a conversa passa para as pessoas. Esta seção cobre tudo que a tela de atendimento faz: listar e abrir conversas, responder com texto e mídia, montar o carrinho do cliente dentro da conversa, anotar, usar respostas prontas, ver quem está online e acompanhar métricas.
Como funciona
Quem responde
Cada conversa tem bot_enabled. Com true, o assistente responde sozinho. Quando o cliente pede um atendente, human_requested_at é preenchido, o assistente desliga e a conversa ganha urgency_state = human_requested com uma contagem regressiva. Se ninguém responder dentro do prazo, um processo automático devolve a conversa ao assistente.
urgency_state | Significado |
|---|---|
normal | Assistente ligado, nada urgente. |
human_requested | O cliente pediu um humano e ainda não houve resposta. Há urgency_seconds_remaining. |
waiting_client | A loja falou por último e aguarda o cliente (contagem de 5 minutos por padrão). |
manual_mode | O assistente foi desligado à mão e ninguém pediu urgência. |
Fluxo típico do atendente
- Ver o que espera
GET /threads?status=pendinglista conversas com mensagens não lidas. - Abrir e ler
GET /threads/{id}traz as últimas 50 mensagens. Para ler a mídia,GET /media/{message_id}. - Responder
POST /threads/{id}/reply(texto) oureply-media. O assistente fica desligado nesta conversa. - Vender
GET /threads/{id}/quick-add,POST /threads/{id}/send-carte, se for B2B,send-cart-pdf. - Encerrar
POST /threads/bulkcomclose, outoggle-botcomenabled: truepara devolver ao assistente.
Conceitos-chave
Conversa e mensagem
Uma conversa é única por par número da loja + telefone do cliente. Os ids de conversa são UUID; os ids de mensagem são inteiros. O telefone vem com + e código do país.
Seller (lojista) e escopo
Lojas multi-seller têm conversas no número da loja e no número de cada seller. Se o usuário do token estiver vinculado a um seller, todas as listagens e ações são restritas a ele, mesmo que o pedido tente outro vendor_id. Um administrador sem vínculo vê tudo.
Cliente cadastrado
customer_user_id só existe quando o telefone da conversa bate com um cliente cadastrado. As rotas de carrinho exigem esse vínculo.
Dinheiro e datas
Preços vêm em centavos inteiros (30000 = R$ 300,00). Datas são RFC 3339 em UTC.
Status de mensagem
Nas mensagens da conversa o status é uma letra (P pendente, S enviada, V entregue, R lida, F falhou). No histórico de envios da plataforma ele vem por extenso.
Endpoints
| Método | Caminho | Para que serve | Página |
|---|---|---|---|
GET | /api/v1/admin/whatsapp/threads | Lista as conversas, as mais recentes primeiro, com filtros | Conversas |
GET | /api/v1/admin/whatsapp/threads/{id} | Devolve a conversa e as últimas 50 mensagens | Conversas |
POST | /api/v1/admin/whatsapp/threads/{id}/mark-read | Zera o contador de não lidas da conversa | Conversas |
POST | /api/v1/admin/whatsapp/threads/{id}/toggle-bot | Liga ou desliga o assistente automático nesta conversa | Conversas |
POST | /api/v1/admin/whatsapp/threads/bulk | Aplica uma ação a várias conversas de uma vez | Conversas |
POST | /api/v1/admin/whatsapp/threads/{id}/reply | Envia uma mensagem de texto ao cliente da conversa | Responder ao cliente |
POST | /api/v1/admin/whatsapp/threads/{id}/reply-media | Envia imagem, vídeo, áudio ou documento ao cliente | Responder ao cliente |
GET | /api/v1/admin/whatsapp/media/{message_id} | Devolve os bytes da mídia (imagem, áudio, documento) de uma mensagem | Responder ao cliente |
GET | /api/v1/admin/whatsapp/threads/{id}/quick-add | Busca produtos do seller da conversa para o atendente adicionar | Carrinho do atendente |
GET | /api/v1/admin/whatsapp/products/{productId}/variants | Lista as variações (tamanho, cor...) de um produto | Carrinho do atendente |
POST | /api/v1/admin/whatsapp/threads/{id}/send-cart | Adiciona itens ao carrinho do cliente e envia o resumo no WhatsApp | Carrinho do atendente |
POST | /api/v1/admin/whatsapp/threads/{id}/clear-cart | Remove todos os itens do carrinho do cliente da conversa | Carrinho do atendente |
GET | /api/v1/admin/whatsapp/threads/{id}/cart-pdf | Gera e devolve o PDF do carrinho, sem enviar | Orçamento em PDF |
POST | /api/v1/admin/whatsapp/threads/{id}/send-cart-pdf | Gera o PDF do carrinho e o envia como documento no WhatsApp | Orçamento em PDF |
GET | /api/v1/admin/whatsapp/threads/{id}/notes | Lista as notas internas da conversa | Notas internas |
POST | /api/v1/admin/whatsapp/threads/{id}/notes | Cria uma nota interna na conversa | Notas internas |
PATCH | /api/v1/admin/whatsapp/threads/{id}/notes/{note_id} | Altera o texto ou o estado de fixação de uma nota | Notas internas |
DELETE | /api/v1/admin/whatsapp/threads/{id}/notes/{note_id} | Exclui (logicamente) uma nota interna | Notas internas |
GET | /api/v1/admin/whatsapp/canned-replies | Lista as respostas prontas do seu escopo | Respostas prontas |
POST | /api/v1/admin/whatsapp/canned-replies | Cria uma resposta pronta | Respostas prontas |
PUT | /api/v1/admin/whatsapp/canned-replies/reorder | Define a ordem da lista | Respostas prontas |
PUT | /api/v1/admin/whatsapp/canned-replies/{id} | Altera uma resposta pronta | Respostas prontas |
DELETE | /api/v1/admin/whatsapp/canned-replies/{id} | Exclui (logicamente) uma resposta pronta | Respostas prontas |
POST | /api/v1/admin/whatsapp/heartbeat | Registra que o usuário do token está ativo agora | Presença dos atendentes |
GET | /api/v1/admin/whatsapp/presence | Lista os atendentes e o estado de cada um | Presença dos atendentes |
POST | /api/v1/admin/whatsapp/presence/status | Define o recado de status do usuário do token | Presença dos atendentes |
GET | /api/v1/admin/whatsapp/messages/search | Procura mensagens por texto, tipo, direção, seller e data | Busca e métricas |
GET | /api/v1/admin/whatsapp/metrics | Resume o volume de conversas e mensagens num período | Busca e métricas |
POST | /api/v1/admin/whatsapp/test | Envia um texto de teste para conferir a configuração | Mensagens enviadas |
POST | /api/v1/admin/whatsapp/send | Envia um template ou um texto a um telefone | Mensagens enviadas |
GET | /api/v1/admin/whatsapp/messages | Lista as mensagens enviadas pela plataforma, com filtros | Mensagens enviadas |
POST | /api/v1/admin/whatsapp/queue/{id}/retry | Coloca de volta na fila um envio que falhou | Mensagens enviadas |
GET | /api/v1/admin/whatsapp/rep-assignments | Lista quem atende quem | Representantes B2B |
POST | /api/v1/admin/whatsapp/rep-assignments | Liga um representante a um cliente | Representantes B2B |
DELETE | /api/v1/admin/whatsapp/rep-assignments/{id} | Desfaz a ligação entre representante e cliente | Representantes B2B |
GET | /api/v1/admin/whatsapp/discount-approvals | Lista os pedidos de desconto feitos por representantes | Representantes B2B |
POST | /api/v1/admin/whatsapp/discount-approvals/{id}/review | Aprova ou recusa um pedido de desconto | Representantes B2B |
Erros comuns
- Tentar responder com texto depois de 24 horas: a Meta recusa e a rota devolve 502. Envie um template.
- Esperar que
status=pendingfiltre "humano pedido": ele filtra por mensagens não lidas. - Esquecer que responder desliga o assistente: depois, devolva com
toggle-bot. - Usar
send-cartem conversa sem cliente cadastrado: 422thread_no_customer_user. - Reenviar o mesmo item em
send-cartachando que ele substitui: a quantidade é somada. - Usar só
manage_ordersno token: toda a família exige tambémmanage_settings. - Abrir conversas por script só para ler: cada
GET /threads/{id}marca mensagens como lidas no WhatsApp do cliente.