Appearance
Journeys
Event-triggered, multi-step messaging flows. A journey is a trigger event plus a steps graph — build it in the dashboard's visual editor (Journeys → New journey) or as JSON via the API. Unlimited journeys on every plan.
How a journey runs
Subscribers enroll when your app tracks the trigger event (WingBlaze.trackEvent("cart_created") or a Segment inbound event). They then advance through the steps on the scheduler's sweep; sends apply frequency caps and quiet hours like campaigns.
Step types
| Step | Behavior |
|---|---|
| Wait | Pause for minutes/hours/days (max 30 days per wait). |
| Send | Deliver a message to all the subscriber's enabled devices — pick an existing message or compose inline in the editor. |
| Branch | Evaluate a tag filter at that moment; run the matching side, then continue after the branch. |
| Goal | Wait up to N hours for a conversion event. If it happens, the subscriber exits as converted — nothing after runs. On timeout, the flow continues (the nudge path). |
The canonical example — abandoned cart
json
{
"name": "Abandoned cart",
"triggerEvent": "cart_created",
"reentry": "always",
"steps": [
{ "id": "g", "type": "goal", "event": "purchase", "timeoutHours": 24 },
{ "id": "c", "type": "condition",
"filter": { "all": [{ "tag": "plan", "eq": "pro" }] },
"then": [ { "id": "pro_nudge", "type": "send", "messageId": "..." } ],
"else": [ { "id": "free_nudge", "type": "send", "messageId": "..." } ] }
]
}Cart created → enroll. Purchase within 24h → exit converted, no nudge. Otherwise the nudge sends, split by plan.
Lifecycle & rules
- Go live / pause any time; the graph is frozen while live, and pausing exits in-flight subscribers at their next wake.
- Re-entry:
once(default — a subscriber ever enrolls a single time) oralways(re-enroll after finishing; never two active runs at once). - Stats: enrolled / in flow / completed / converted / exited, in the editor header and at
GET /apps/:appId/journeys/:id/stats. - Analytics events
journey_enrolled,journey_converted,journey_completedland in the event stream; delivery receipts carrymeta.journeyId.