Endpoint ·
POST /conversation/actionsPOST /conversation/actions executa um grupo de até 10
ações sobre uma única conversa, na ordem em que você as envia. Em vez
de fazer N requisições para etiquetar, deixar uma nota e executar o AI, você
as encadeia em uma única requisição. É o caminho recomendado para modificar uma
conversa a partir de um cliente externo.
Cada elemento do array actions leva um campo type. send_message unifica
os quatro modos de envio (texto, mídia, resposta rápida, template).
send_quick_reply_or_template é a única cujo modo é decidido pelo servidor: envia
a resposta rápida se a janela de 24h estiver aberta, ou o
template se estiver fechada.
Um grupo admite até 10 ações, das quais no máximo 3 podem
disparar o AI. Excedê-lo falha com
BATCH_LIMIT_EXCEEDED.Identificar a conversa
O grupo roda sobre uma conversa: você a identifica com o objetoconversation, que leva exatamente um de uuid, whatsapp_user_id,
username ou phone, mais channel (obrigatório).
string
Chave estável de uma conversa que você já conhece. O caminho mais direto.
string
BSUID do contato (identidade opaca do Meta). Resolve por igualdade exata;
identificador recomendado daqui em diante.
string
Username público de WhatsApp, com ou sem
@ e sem distinguir maiúsculas. Se
vários contatos o compartilham, a API responde 409 (USERNAME_AMBIGUOUS).string
Telefone no formato E.164. Se estiver duplicado entre contatos, a API responde
409 (PHONE_NUMBER_AMBIGUOUS) em vez de adivinhar.string
obrigatório
Chave pública do canal — copie-a do dashboard em Configurações → Canais
(campo Chave do canal), ou liste-as com
GET /channels. Obrigatório em toda
requisição: fixa o canal objetivo. Nas vias por contato (phone, username,
whatsapp_user_id) restringe a resolução a esse canal; com uuid o motor o
ignora, mas o contrato o exige mesmo assim. Uma chave que não existe → 404
(CHANNEL_NOT_FOUND).Como é executado
1
Validação síncrona
A API valida a requisição. Se o preflight a rejeitar (ex. o AI não tem
tokens), responde um
4xx síncrono e nenhuma ação é executada.2
202 Accepted
Se passar na validação, responde
202 imediatamente; o grupo roda em
background.3
Execução em ordem
As ações são executadas uma por uma, na ordem enviada.
Stop on error
stop_on_error controla o que acontece quando uma ação falha durante a execução:
Escalonamento para pending
escalate_on_error controla se uma falha do grupo escala a conversa para inbox_status='pending' para que um humano a revise:
Os erros de input do integrador (
*_NOT_FOUND, *_AMBIGUOUS, WINDOW_CLOSED, TEMPLATE_NOT_APPROVED, etc.), os guards de billing (WALLET_BLOCKED, VISION_WALLET_BLOCKED) e o guard de integridade do mark_resolved (TRANSCRIPTION_REQUIRED_TO_RESOLVE) nunca escalam — corrija e tente novamente sem intervenção humana.Montar uma lista de ações
Cada ação é um objeto no arrayactions, identificada por seu type. Uma
requisição agrupa várias ações sobre a mesma conversa, executadas na ordem
enviada. O objeto conversation sempre inclui channel. Exemplo — etiquetar,
deixar uma nota e executar o AI, sem interromper ante falhas:
Identificar por campos diferentes
Mude apenas o identificador dentro deconversation (channel vai sempre); o
resto da requisição não muda:
unassign_ai, sem campos. É idempotente:
se a conversa já não tiver AI, é um no-op bem-sucedido.