active: false. Para inserir ou reordenar uma etapa sem reenviar o JSON inteiro: POST /api/v1/automations/:id/steps e POST /api/v1/automations/:id/steps/:stepId/move. PATCH com steps completo continua válido.
Duas etapas mentais
Modelo mental
trigger_event.O template não é uma etapa. Ele é o conteúdo da action (
data.subject, data.body, data.message, …).
O fluxo termina quando não há próximo step, quando um end corre, ou quando a condition não tem ramo verdadeiro e não há if_false.
Capability manifesto
Não existem:
equals, contains, order.shipped, order.created. Edição incremental: POST .../steps e POST .../steps/:stepId/move, ou PATCH do documento. Templates: POST /api/v1/automation/templates + data.template_id.
Trigger → contexto → mensagem
Confirme sempre em
GET /api/v1/automation/metatags?triggerType=....
Como a LLM deve trabalhar
1
Entender a intenção
O que dispara? Espera? Condição? Qual canal? Qual tom?
2
Escolher o trigger
Só um dos 14. “Pedido enviado” →
tracking_code_updated. “PIX gerado” → pix.generated.3
Desenhar o plano
Lista linear: delay, condition, action. Se o recurso não existir, pare e explique.
4
Escrever as mensagens
Ver Templates. Só metatags daquele gatilho.
5
Montar o JSON
name, trigger_event, active, steps. IDs estáveis se for edição.6
Validar
Checklist abaixo. Depois mostre o preview em português.
Preview (antes de salvar)
Sempre explique o fluxo assim:remetente_nome / remetente_email) — não invente o e-mail da loja.
Operações de edição (no JSON)
Editar =PATCH no documento ou POST /api/v1/automations/:id/steps e POST /api/v1/automations/:id/steps/:stepId/move. Preserve id / nextId / parentId das etapas que você não pediu para mudar.
Invariantes: não recrie o fluxo inteiro para uma troca pontual; não mude
id de steps existentes; não altere trigger, nome ou outras actions sem pedido; máximo 50 steps; delay continua 1–10080.
Exemplo: só o delay
Antes:"minutes": 30. Pedido: “troque 30 minutos por 1 hora”.
Validação antes de entregar
- Trigger existe nos 14?
- Cada
step.typeé um dos 6? - Cada
action.nameé um dos 5?webhooktemurlHTTPS?create_coupontemcoupon_name+discountType+amount? - Operator é
=(nuncaequals) /in/empty/ …? - Campo da condition está na lista curta?
payment_statususapaidpendingcancelled?- Delay em minutos inteiros (24 h = 1440, não
24 hours)? - E-mail tem remetente, assunto ≥ 3,
bodyouhtml? - SMS ≤ 160?
- WhatsApp tem
message(texto) ou o campo obrigatório do tipo? - Cada
{{chave}}existe naqueletrigger_event? - Tronco sem
parentId; ramos comparentId=branches[].id? - 1–50 steps, nome 3–100?
- Edição: ids antigos preservados?
Biblioteca intenção → automação
Recuperar PIX
Intent: “Avise quem gerar PIX e não pagar.”
JSON (formato aninhado, válido):
Recuperar carrinho
Intent: “Uma hora depois de abandonar o checkout, envie um lembrete.” Não existe campo de conditionhas_purchased. O gatilho cart.abandoned já significa checkout abandonado. Delay + envio é o fluxo suportado. Opcional: só enviar se houver telefone (lead.phone not-empty).
{{order.pix_code}} aqui.
Pós-compra
Intent: “Quando o pagamento for confirmado, envie instruções.” Triggerpayment.confirmed. Sem delay. Sem PIX.
Rastreio
Intent: “Quando o código de rastreio estiver disponível, envie ao cliente.” Triggertracking_code_updated. WhatsApp ou e-mail com {{tracking.code}} e {{tracking.url}}.
O que recusar
Matrizes rápidas
Canal × template
Campo × operator
Não há
contains, starts_with, before, after.