Execuções e testes
O botão Testar, no topo do editor, cria uma execução com o selo Teste. A seção Atividade, no trilho esquerdo, reúne essa execução e as que vieram de gatilhos reais.
Teste não significa ambiente descartável: o run e seus passos ficam no histórico, algumas consultas usam registros reais e Analisar com IA executa e consome créditos. Use um alvo apropriado e leia as limitações abaixo antes de interpretar o resultado.
Acesso e versão
Section titled “Acesso e versão”Testar exige automations.write (editar Automações), mas a automação pode estar desligada. Testes repetidos são permitidos e cada um cria outro run no histórico. A consulta da Atividade segue o acesso de leitura das automações da organização.
Ao abrir Testar automação:
- Canvas atual é o padrão e executa o grafo aberto, inclusive alterações não salvas;
- Versão no ar aparece quando existe publicação e executa essa versão imutável.
O backend valida o grafo antes de criar o run. Erros cobertos pelo validador fecham o diálogo e destacam os nós no canvas. Nem toda configuração obrigatória de ação é validada; um teste ainda pode começar e falhar num passo vazio ou incompleto.
Gatilho e alvo
Section titled “Gatilho e alvo”Com mais de um gatilho, selecione Qual gatilho simular. O teste começa no ramo que sai desse nó.
| Gatilho | Alvo pedido |
|---|---|
| Evento de conversa; Sem resposta na conversa | conversa |
| Tag do contato; Contato adicionado à lista; Audiência | contato |
| Agendar | objeto JSON com o payload simulado |
Para Agendar, o exemplo contém scheduled_for e fired_at em ISO. A ajuda ainda chama esse objeto de payload de Webhook, embora Webhook não seja um gatilho atual. Em Contato adicionado à lista, escolher o contato não preenche list_id, list_name ou consent_source; teste expressões que dependam desses campos separadamente.
É possível continuar sem conversa ou contato; passos que exigem esse contexto podem falhar. A pesquisa lê registros reais da organização, não uma cópia isolada.
O que o teste faz
Section titled “O que o teste faz”O teste usa o mesmo encadeamento do motor. Ele executa imediatamente por até cerca de 20 segundos, ou para antes ao chegar em Aguardar, ao terminar ou falhar. Se precisar continuar depois, o motor normal retoma o run pela fila.
| Passo ou efeito | No teste |
|---|---|
| Enviar mensagem | interpola e grava simulated: true e would_send; não envia |
| Enviar e-mail | grava assunto/lista simulados; não cria disparo |
| Chamar webhook | grava a chamada simulada; não faz requisição |
| Atribuir, tags, gravar no contato, passar para agente e concluir conversa | calcula a saída, sem alterar o registro de negócio |
| Escolher contato | consulta um contato real, mas não o propaga corretamente aos passos seguintes |
| Obter conversa do contato | reutiliza uma conversa existente; se não houver, apenas informa que criaria |
| Condição | avalia o contexto disponível e escolhe um ramo |
| Aguardar | respeita duração e janela reais; uma espera longa também atrasa o teste |
| Analisar com IA | chama o modelo e consome créditos; pode tentar até três vezes |
| Encerrar automação | conclui o run naquele ponto |
O aviso do diálogo diz que Obter conversa do contato pode abrir uma conversa real. O runtime atual não cria conversa no teste: reutiliza uma existente ou simula a criação sem propagá-la.
O que a simulação não comprova
Section titled “O que a simulação não comprova”Mensagem e e-mail retornam antes das proteções de saída; o e-mail também retorna antes de validar módulo e remetente. Webhook retorna antes da guarda final de destino e da rede. Um teste simulado não comprova:
- opt-out, adiamento, vez da resposta ou limite de frequência;
- janela Meta, modelo aprovado e caixa compatível;
- módulo de e-mail, remetente ou criação do disparo;
- alcance, autenticação, resposta ou bloqueio SSRF do webhook.
Valide esses contratos na configuração e acompanhe uma execução real controlada.
Atividade
Section titled “Atividade”A lista mostra 25 runs por página, do mais novo ao mais antigo, com Quando, Gatilho, Status e Custo. Não há filtros. Enquanto uma linha da página está na fila ou em execução, a lista consulta atualizações a cada cinco segundos.
Audiência, Sem resposta na conversa e Agendar usam um run pai para descobrir ocorrências e filhos para percorrer o grafo. O histórico pode conter uma linha pai sem passos e linhas para cada contato, conversa ou horário.
Excluir a automação apaga em cascata versões, runs e passos; desligá-la preserva o histórico.
Status efetivos
Section titled “Status efetivos”| Status | Interpretação atual |
|---|---|
| Na fila | próximo tick, continuação após o orçamento ou horário de um Aguardar |
| Executando | reivindicada e processando um passo |
| Aguardando | existe na interface, mas o motor não grava esse status; esperas aparecem como Na fila |
| Concluída | chegou ao fim, encontrou Encerrar ou uma condição de saída de Aguardar |
| Falhou | um passo/requisito falhou; leia erro e saída |
| Cancelada | usada por runs pais de agenda/campanha substituídos ou desativados; não pela saída de Aguardar |
O cron roda uma vez por minuto e reivindica até 50 runs elegíveis. Um gatilho normal pode esperar quase um minuto; Testar inicia o run na própria requisição.
Caminho percorrido
Section titled “Caminho percorrido”Ao selecionar uma linha, o grafo é o da versão usada pelo run, não o rascunho atual. Nós executados recebem estado e os demais ficam esmaecidos; uma Condição indica o ramo escolhido.
Limitações atuais:
- o gatilho não gera passo, então seu cartão e a primeira ligação ficam esmaecidos mesmo no ramo usado;
- a lista não consulta
trigger_node_id; Entrou por não distingue dois gatilhos do mesmo tipo; - Agendar e seus filhos aparecem como Sem gatilho.
Use grafo e sequência de passos juntos; o primeiro trecho iluminado e o rótulo do gatilho não são prova completa.
Linha do tempo
Section titled “Linha do tempo”Cada item mostra nó, hora, tentativa do run, status, Entrada, Saída e erro. A saída é o melhor registro disponível: JSON da IA, ramo, would_send, skipped ou canceled_by.
Entrada não é o valor resolvido recebido pelo passo. O motor grava apenas { "config": ... }, a configuração crua. Texto/prompt final, variáveis, headers e body resolvidos podem não ficar registrados.
Quando uma proteção impede um envio real, a razão entra em output.skipped, mas o passo fica Concluído. O selo Pulado existe, porém o runner atual não grava esse status.
Código de skipped | Significado |
|---|---|
contact_opted_out | contato recusou comunicação automática |
conversation_snoozed | conversa adiada |
customer_awaiting_reply | cliente falou por último |
frequency_cap | limite agregado das últimas 24 horas atingido |
meta_window_closed | texto livre bloqueado e sem fallback utilizável |
template_not_found | modelo não encontrado |
template_no_inbox | caixa compatível não resolvida |
template_wrong_inbox | modelo de outra WABA/caixa |
template_not_approved | modelo não aprovado |
template_invalid | componentes ou variáveis inválidos |
Quando todos os passos visíveis fecham, a linha do tempo para de atualizar. Isso ocorre em Aguardar e quando o orçamento termina entre passos. Se a lista mudar de Na fila para Concluída e o detalhe não mudar, recarregue ou selecione o run novamente.
Uma falha pode mostrar a explicação do primeiro alerta de configuração aberto da automação abaixo do erro técnico. Esse alerta não é correlacionado ao run ou nó; confirme código e passo antes de agir.
Custo e diagnóstico
Section titled “Custo e diagnóstico”Custo soma débitos de credit_usage associados aos passos. Hoje o consumo direto vem de Analisar com IA. tentativa N é a tentativa do run, não cada chamada interna ao modelo. Em retry por JSON inválido, o provedor pode cobrar até três chamadas, mas o ledger atual pode registrar somente a primeira; em BYOK, compare com o provedor.
- Diferencie Teste, run pai e run real de contato/conversa.
- Leia status e erro; não confunda Na fila de uma espera com travamento.
- Abra a versão histórica e localize o último passo.
- Leia Saída primeiro e trate Entrada como configuração crua.
- Procure
skipped,canceled_by,simulated,would_sendebranch. - Após espera/continuação, recarregue para buscar passos posteriores.
- Confirme proteções, canal, modelo Meta, e-mail e webhook fora da simulação.
- Só então altere o canvas e rode outro teste; o run antigo continua ligado à versão usada.