Skip to main content
Endpoint · POST /conversation/actions
O endpoint POST /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.
Cada ação tem sua própria página com seus campos e um exemplo — abra a que precisar pela tabela ou pelo nav. Para enviar mídia, primeiro envie o arquivo com o fluxo de Enviar mídia.

Identificar a conversa

O grupo roda sobre uma conversa: você a identifica com o objeto conversation, 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).
Referência completa (ordem de resolução, unificação de conversas e ambiguidades de contato) em Identificar uma conversa.

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.
O 202 confirma que o grupo foi aceito, não que cada ação teve sucesso. O resultado por ação não viaja na resposta — consulte-o no estado da conversa ou no activity log do negócio.

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 array actions, 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 de conversation (channel vai sempre); o resto da requisição não muda:
Passar para um humano — uma única ação unassign_ai, sem campos. É idempotente: se a conversa já não tiver AI, é um no-op bem-sucedido.
Se o preflight rejeitar o grupo, a resposta é um 4xx síncrono e nenhuma ação é executada. Ver Erros.