Construtor de Jornadas
Uma jornada e um drip multi-etapa que reage a eventos conforme acontecem. Enquanto uma campanha e "enviar essa mensagem a esse segmento agora", uma jornada e "quando isso acontecer, iniciar essa sequencia".
Navegacao
Jornadas em Engage > Jornadas.
Tipos de No
Toda jornada e um grafo desses seis tipos:
| No | Proposito |
|---|---|
| Entrada | Gatilho baseado em evento que admite um condutor na jornada |
| Espera | Pausa por duracao fixa ou ate outro evento |
| Envio | Email, SMS ou push usando um modelo |
| Ramificacao | Predicado sobre estado do cliente - divide em if_true / if_false |
| Meta | Checkpoint de conversao que sai da jornada em sucesso |
| Saida | No terminal |
Gatilhos de Entrada
| Evento | Dispara quando |
|---|---|
customer.created | Novo condutor se cadastra |
ride.ended | Viagem termina |
ride.force_ended | Viagem encerrada forcadamente |
wallet.low_balance | Carteira cai abaixo do limite |
violation.created | Infracao registrada |
subscription.lapsed | Assinatura para canceled ou expired |
rider_score.tier_changed | Nivel de score muda |
referral.converted | Indicado faz primeira viagem |
Cada gatilho aceita expressao de filtro opcional.
Regras de Re-Entrada
| Regra | Comportamento |
|---|---|
never | Uma vez por cliente para sempre (Serie de Boas-Vindas) |
after_cooldown | Re-entra apos N dias (Win-Back) |
every_trigger | Re-entra a todo evento (raro - Saldo Baixo) |
Exemplo - Serie de Boas-Vindas
┌────────────┐
│ ENTRADA │ customer.created (consent = true)
└─────┬──────┘
▼
┌────────────┐
│ ENVIA email│ tpl_welcome_intro
└─────┬──────┘
▼
┌────────────┐
│ ESPERA 48h │
└─────┬──────┘
▼
┌────────────┐ ┌───────────────┐
│ RAMIFIC. │── true ─►│ META │
│ rides ≥ 1 │ │ first_ride │
└─────┬──────┘ └───────────────┘
│ false
▼
┌────────────┐
│ ENVIA email│ tpl_how_to_ride
└─────┬──────┘
▼
┌────────────┐
│ ESPERA 72h │
└─────┬──────┘
▼
┌────────────┐
│ ENVIA email│ tpl_promo_first_ride
└─────┬──────┘
▼
SAIDA
JSON:
{
"entry": {
"type": "event",
"event": "customer.created",
"filters": { "marketing_email_consent": true }
},
"reentry": "never",
"steps": [
{ "id": "s1", "type": "send", "channel": "email", "template_id": "tpl_welcome_intro", "next": "s2" },
{ "id": "s2", "type": "wait", "duration_hours": 48, "next": "s3" },
{
"id": "s3",
"type": "branch",
"predicate": { "rides.total_count": { "gte": 1 } },
"if_true": "goal_hit",
"if_false": "s4"
},
{ "id": "s4", "type": "send", "channel": "email", "template_id": "tpl_how_to_ride", "next": "s5" },
{ "id": "s5", "type": "wait", "duration_hours": 72, "next": "s6" },
{ "id": "s6", "type": "send", "channel": "email", "template_id": "tpl_promo_first_ride", "next": "exit" },
{ "id": "goal_hit", "type": "goal", "name": "first_ride_taken" },
{ "id": "exit", "type": "exit" }
]
}
Presets Integrados
| Preset | Gatilho | Etapas |
|---|---|---|
| Serie de Boas-Vindas | customer.created | 3 envios + 1 ramificacao + 1 meta |
| Win-Back 30/60/90 | Varredura de inatividade | 3 envios com ramificacoes |
| Saldo Baixo | wallet.low_balance | Push, email apos 4h |
| Em Branco | Escolha sua | Apenas entrada + saida |
Editando Jornadas
O painel mostra canvas SVG somente-leitura mais editor JSON. Voce edita:
- Iniciando um preset.
- Modificando JSON.
- Salvando (incrementa
version). - Publicando.
Por que editor JSON?
A primeira versao do Engage usa canvas somente-leitura mais editor JSON. Drag-and-drop esta planejado.
Predicados de Ramificacao
{ "wallet.current_balance": { "gt": 5 } }
{ "rides.total_count": { "gte": 3 } }
{ "subscription.status": { "eq": "active" } }
{ "rider_score_tier": { "in": ["gold", "platinum"] } }
Operadores: eq, ne, gt, gte, lt, lte, in, nin, exists.
Nos de Espera
| Tipo | Uso |
|---|---|
| Duracao fixa | duration_hours: 48 |
| Ate proximo evento | Pausa ate evento especifico |
Rastreamento de Metas
Um no de meta tem um name e e tratado como saida bem-sucedida.
Condicoes de Corrida e Locks
Multiplos workers podem avancar a mesma jornada simultaneamente. Engage usa locks de nivel de linha Postgres:
journey_runsdevidos reivindicados viaengage_claim_due_journey_runsusandoFOR UPDATE SKIP LOCKED.- Dois workers chamando a RPC ao mesmo tempo recebem conjuntos disjuntos.
next_step_due_atatualizado atomicamente.
Dados Obsoletos em uma Jornada
Engage evita essa classe de bug completamente. Todo envio re-resolve variaveis e re-avalia ramificacoes no momento do envio.
Cliente em Multiplas Jornadas
Um unico condutor pode estar em qualquer numero de jornadas simultaneamente. Dedup de 24h previne mesmo modelo disparando duas vezes em 24h.
Publicando e Pausando
| Acao | Efeito |
|---|---|
| Salvar | Incrementa version; nao afeta runs ativos |
| Publicar | Jornada aceita novas entradas |
| Pausar | Sem novas entradas; runs em voo continuam |
| Arquivar | Sem novas entradas; runs encerrados |
Melhores Praticas
- Sempre inclua ramificacao que sai em sucesso.
- Mantenha duracoes de espera realistas.
- Use metas.
- Teste com segmento pequeno primeiro.
Solucao de Problemas
Jornada "publicada" mas sem runs
Verificar gatilho de entrada e filtros.
Run preso em no wait
Verificar next_step_due_at.
Mesmo modelo disparou duas vezes
Verificar janela de dedup de 24h e regra de re-entrada.
Precisa de ajuda?
Ajuda com jornadas: support@levyelectric.com.