Chapter 2
Hands-on walkthrough of Courier's Journeys platform from Segment integration to production deployment. Covers trigger configuration, visual workflow design, conditional branching, delays, fetch data nodes, throttling, and channel-specific template creation within send nodes. Includes code examples and testing workflows.

Courier's Journeys combines visual workflow design with deep CDP integrations and omnichannel orchestration, enabling cross-functional teams to ship sophisticated customer journeys without custom infrastructure.
Customer journeys consist of three fundamental components:
Triggers determine when journeys begin. You have two options: Segment event triggers respond when Twilio Segment forwards behavioral events automatically. API triggers invoke journeys directly from application code.

Logic controls journey flow through branching and data enrichment. Branch nodes evaluate conditions and route users. Delay nodes pause execution. Fetch nodes pull information from external APIs. Throttle nodes control messaging frequency.
Actions execute operations within journeys. Send nodes deliver notifications through configured channels. Each includes an integrated template designer with personalization and send time configuration.
API triggers let you invoke journeys directly from application code by calling Courier's Send API:
Copied!
await courier.send({message: {to: { user_id: "user_123" },template: "trial-onboarding",data: {trial_duration: 14,plan_type: "enterprise",user_name: "Sarah"}}});
CDP integrations through Segment or RudderStack forward behavioral events automatically. Your application instruments the CDP once with track, identify, and group calls. The CDP handles routing to Courier. When you add new journeys, you configure triggers for existing events rather than instrumenting new API calls.
Most products use both. For this guide, we focus primarily on Segment event triggers because they provide the richest behavioral foundation.
Twilio Segment operates as the central nervous system for customer data. It collects behavioral events, unifies them with profile data, and routes everything to your tools.

Configure Courier as a Segment destination:
Verify in Courier: Navigate to Integrations and select Segment. Learn more about configuring integrations.
Track events capture user actions like trial_started, feature_activated, or payment_failed. The event name becomes available as a trigger option. Properties become data variables.
Identify events update user profiles with traits like name, email, company, plan type.
Group events establish relationships between users and organizations, useful for B2B multi-tenant applications.
For open-source alternatives, RudderStack provides identical capabilities through the Courier destination.
Journey design happens through Journeys, a visual canvas where you drag nodes to build multi-step workflows. Navigate to Journeys in Courier Studio and click "Create Journey."
Click the trigger placeholder and select "Segment" from trigger types. Type the event name (like trial_started) and add filters to match specific events (like data.plan_type = "enterprise").
Click the + button below the trigger and select "Send." Configure:
${profile.user_id} to target the user who triggered the journey${data.trial_duration}Connect nodes by dragging from the connection point at the bottom of one node to the top of another. Save with a descriptive name. Test before publishing to production.
Send nodes deliver messages to users through specific channels. To create omnichannel delivery, combine multiple send nodes with conditional branching.

When you add a send node, select which channel it targets. The template editor provides channel-appropriate controls: email editors include subject lines and HTML, SMS editors have character counting, Slack editors use Block Kit formatting.
Use if/then nodes to check channel availability:
profile.slack_token exists → If yes, send via Slackprofile.push_token exists → If yes, send via pushUse Handlebars syntax for dynamic content:
{{profile.name}} for user's name from profile{{data.feature_name}} for event propertiesFor developers preferring code:
Copied!
await courier.send({message: {to: { user_id: "user_123" },template: "trial-welcome-email",data: {trial_duration: 14,features_included: ["reporting", "integrations", "api_access"]}}});
Branch nodes create decision points where journeys evaluate conditions and route users accordingly.
data.setup_completed === trueprofile.company_size > 500refs.welcome_email.status === "CLICKED"After sending a welcome email and waiting three days, check setup completion:
Nested branches create sophisticated routing. After checking setup completion, check engagement level. Route high-engagement users to expansion conversations, low-engagement users to reactivation.
Delay nodes pause journey execution for specified durations or until specific times.
Set delays like "3 days", "24 hours", or "1 week" between steps to space out communication naturally.
Delay until "9am in user's timezone tomorrow" ensures follow-ups arrive during business hours regardless of signup time.
Courier handles timezone logic based on user profile. If you set profile.timezone = "America/New_York", delays use that timezone. Without explicit timezone, Courier defaults to UTC.

Fetch data nodes pull contextual information from your APIs into journey context.
https://api.yourcompany.com/accounts/${profile.account_id}/healthAdd conditional logic to check whether fetch succeeded: data.health_score exists routes users with data one way, failed fetches another way.
Audiences automatically include or exclude users based on rules you define, evaluated in real-time.
Create conditions like:
profile.plan_type EQUALS "enterprise_trial"profile.features_activated LESS THAN 3Combine with AND/OR logic for precise segments.
is, is notincludes, does not include, starts with, ends withgreater than, less than, greater than or equal toafter, beforeSegment profile data from your CDP integration powers audience rules. When Segment sends identify events with traits, these become profile attributes available for audience rules.
Throttle nodes control how frequently journeys send to prevent notification fatigue.
Example: A collaboration platform with 1-hour throttling on comment notifications. Users receive the first comment immediately, additional comments within the hour get suppressed, next comment after an hour triggers a new notification.
Templates are channel-specific, created directly within send nodes as you build journeys.

Drag-and-drop text, image, and action blocks. Blocks adapt to channel capabilities: buttons work in email and Slack, become text links in SMS.
Handlebars personalization makes templates dynamic:
Copied!
{{#if (condition (var "profile.plan_type") "==" "enterprise")}}Your enterprise features are now active.{{else}}Upgrade to enterprise for advanced capabilities.{{/if}}
Apply conditions to content blocks to show/hide based on user data. Show premium features block only when profile.plan_type === "enterprise". One template serves multiple segments through conditional rendering.
Configure "9am in user's timezone" so New York users receive at 9am EST while London users receive at 9am GMT.
Configure quiet hours like "7pm-9am weekdays" for non-urgent messages. Critical alerts can override.
Configure send windows like "9am-11am" and Courier delivers when users historically engage most.
Test mode verifies journey logic before production. Click Test and provide sample event data. Watch execution in real-time as each node highlights during execution.
View delivery history and logs to see delivery status, channels attempted, and any errors. Search by user ID, template name, or journey name.

View journey analytics for completion rates, drop-off points, and engagement metrics.

Ready to build your first journey? Start free or request a demo.
Previous chapter
Understanding B2B Customer Journey Management
Why linear messaging automation fails product-led companies and what behavior-based journey building actually requires. This chapter covers the platform choice between marketing automation, developer-first tools, and cross-functional infrastructure. Explains how CDPs like Segment enable behavior-driven workflows and why omnichannel delivery matters beyond email.
Next chapter
Advanced Capabilities and Use Cases
Sophisticated orchestration patterns including event-driven triggers, multi-journey coordination, and Handlebars personalization tied to CDP data. Features detailed industry implementations for SaaS trial onboarding, healthcare patient engagement, HR tech employee lifecycle, and marketplace transaction coordination with expected outcomes.
© 2025 Courier. All rights reserved.