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). Se você passar um template junto a um primário (texto/mídia ou resposta rápida), o servidor decide pela janela de 24h: envia o primário se 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 dois contatos distintos o compartilham no mesmo canal, a API responde 409 (USERNAME_AMBIGUOUS); o mesmo username em canais distintos não é ambíguo: channel o resolve.
string
Telefone no formato E.164. Se estiver duplicado entre dois contatos distintos do mesmo canal, a API responde 409 (PHONE_NUMBER_AMBIGUOUS) em vez de adivinhar; o mesmo número em canais distintos não é ambíguo: channel o resolve.
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 marcadores de pagamento mal usados (PAYMENT_MARKER_UNKNOWN, PAYMENT_MARKER_UNSUPPORTED_FIELD, TEMPLATE_BODY_TOO_LONG — a correção está no texto que você enviou, não na conversa), 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.