Testar um fluxo
Simula uma conversa num fluxo e descobre para onde uma mensagem real cairia.
Antes de ativar (ou quando o bot "não responde"), use estas duas rotas. A simulação roda o fluxo que você escolher com uma mensagem fictícia. A sonda diz qual fluxo a plataforma escolheria para um telefone real.
Simular uma conversa
Roda uma rodada do fluxo com uma mensagem de cliente fictícia e devolve tudo o que o bot responderia. Nada é enviado à Meta e nenhum cliente real é afetado. Cada chamada é uma mensagem: para uma conversa de várias falas, chame de novo com o mesmo phone_number.
/api/v1/admin/whatsapp/flows/{id}/simulateAdminSimula uma mensagem de cliente num fluxo
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
user_messagestringbutton_id, ou list_reply_id, ou form_payload.button_idstringoption_0). Tem prioridade sobre os demais campos.list_reply_idstringform_payloadobjectphone_numberstring+sim- e acrescenta um sufixo do seu usuário, para dois administradores não se misturarem. Omitido, usa um derivado do fluxo.reset_sessionbooleanpadrão: falsetrue descarta a sessão sintética e começa do bloco inicial.Exemplo de requisição (Simular uma conversa)
curl -X POST "$BASE_URL/api/v1/admin/whatsapp/flows/fa4b0c91-2883-43c6-94ef-86e5b540a2aa/simulate" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"user_message": "oi",
"reset_session": true
}'Resposta (Simular uma conversa)
{
"session_id": "0b7d3c1e-5a42-4d8f-9e61-3c2a7f4b8d10",
"phone_number": "+sim-fa4b0c91-a1a25b87",
"events": [
{
"kind": "inbound",
"at": "2026-10-11T14:40:00.100Z",
"text": "oi",
"payload": {
"user_message": "oi"
}
},
{
"kind": "state_change",
"at": "2026-10-11T14:40:00.090Z",
"text": "session created",
"payload": {
"session_id": "0b7d3c1e-5a42-4d8f-9e61-3c2a7f4b8d10",
"state": "active",
"current_block_id": "5cf73b43-5e23-480c-8037-7a7385251a22"
}
},
{
"kind": "outbound",
"at": "2026-10-11T14:40:00.300Z",
"text": "Oi! Bem-vindo à nossa loja.",
"payload": {
"kind": "send_text",
"body": "Oi! Bem-vindo à nossa loja."
}
},
{
"kind": "state_change",
"at": "2026-10-11T14:40:00.310Z",
"text": "waiting for input",
"payload": {
"state": "waiting_for_input"
}
}
]
}Campos da resposta
session_iduuidreset_session.phone_numberstring+sim-). Reenvie-o para continuar a mesma conversa.eventsarrayEventos desta rodada, em ordem.
kindstringinboundoutboundstate_changeflow_transitionerroratstringtextstringpayloadobjectoutbound é a ação do bot: kind (send_text, send_media, send_cta_url, send_buttons, send_list, wait_for_input, complete, handoff_to_human), body, media_url, buttons, items.Erros (Simular uma conversa)
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo que não é JSON, fluxo inexistente, ou fluxo sem start_block_id. | {"error":"whatsapp/simulator: flow ... has no start_block_id"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido. | {"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"} |
Sondar o caminho real de uma mensagem
Responde à pergunta "se este telefone escrevesse agora, o que o bot faria?", olhando as conversas e sessões reais. Só lê: não grava, não responde ao cliente e não fala com a Meta. A simulação acima roda o fluxo que você escolher; a sonda mostra qual fluxo (ou sessão) a plataforma escolheria sozinha.
/api/v1/admin/whatsapp/inbound-probeAdminMostra para onde uma mensagem de um telefone cairia
Parâmetros de consulta
phonestringobrigatóriotextstringvendor_iduuidExemplo de requisição (Sondar uma mensagem)
curl "$BASE_URL/api/v1/admin/whatsapp/inbound-probe?phone=5511999990000&text=oi" \
-H "Authorization: Bearer $TOKEN"Resposta (Sondar uma mensagem)
{
"phone": "5511999990000",
"body": "oi",
"bot_enabled": true,
"verdict": "nenhum flow casa: a mensagem cai no atendimento por LLM, sem flow",
"session_stale": false,
"warnings": [
"sem flow inbound_default ativo para este vendedor"
]
}Campos da resposta
phonestringbodystringvendor_iduuidthread_iduuidbot_enabledbooleanfalse quando o bot está desligado nessa conversa: nenhuma resposta automática sai.verdictstringsession_iduuidsession_flow_iduuidsession_block_namestringsession_statestringsession_expires_atstringsession_stalebooleanfalse: uma sessão vencida é abandonada e recriada na próxima mensagem.trigger_flow_iduuidtrigger_flow_namestringwarningsarrayErros (Sondar uma mensagem)
| Status | Quando | Corpo |
|---|---|---|
| 400 | phone ausente. | {"error":"telefone obrigatório"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | O módulo WhatsApp Commerce está desligado na loja, o usuário não é administrador ou não tem o privilégio exigido. | {"error":"module_disabled","module":"whatsapp-commerce"} ou {"error":"insufficient privileges","required":"manage_settings"} ou {"error":"admin access required"} |