Skip to main content
Each message step in a Journey sends a message to the user when they reach that point in the flow. You can add push notification, email, SMS, and in-app message steps — each with its own template and delivery behavior. To add a message step, click the (+) button in the Journey canvas and select the channel.
Message scheduling within individual steps is not currently supported. Push, email, and SMS messages send immediately when the user reaches the step. Use a Wait step before the message step if you need a delay.

Push notification

  1. Click (+) and select Push Notification.
  2. In the side panel, select an existing message template or create a new one.
  3. Save the step.
When a user reaches this step, OneSignal sends the push notification immediately. The user must have an active push subscription to receive it.
Give templates descriptive names (e.g., “Welcome — Day 1 Push”) so they are easy to find in the dropdown.

Email

Before adding an email step, confirm you have email set up in your OneSignal app.
  1. Click (+) and select Email.
  2. In the side panel, select an existing email template or create a new one.
  3. Save the step.
OneSignal sends the email immediately when the user reaches this step. The user must have a subscribed email address. You can personalize email content using Liquid syntax, Data Tags, or Data Feeds for real-time API data at send time.

SMS

Before adding an SMS step, confirm you have SMS messaging set up in your OneSignal app.
  1. Click (+) and select SMS.
  2. In the side panel, select an existing SMS template. If you haven’t created one yet, go to Messages > Templates > + New Template > New SMS Template.
  3. Save the step.
OneSignal sends the SMS immediately when the user reaches this step. The user must have a subscribed phone number.

In-app message

Before adding an in-app message step, confirm you have in-app messaging set up in your app.
  1. Click (+) and select In-App Message.
  2. In the side panel, design your message using the drag-and-drop editor or HTML editor.
  3. Optionally configure trigger conditions and a delivery schedule (the window of time the user has to open the app and see the message).
  4. Save the step.

Session timing

In-app messages require a new session to display. A new session begins when the app has been out of focus for 30+ seconds and is brought back into focus. This means:
  1. The user reaches the in-app message step in the Journey.
  2. The message does not display during the current session.
  3. The next time the user opens the app (starting a new session), the message displays if the trigger conditions are met and the delivery schedule has not expired.
If the user is actively using the app when they reach the in-app message step, they will not see the message until they close and reopen the app (after 30+ seconds). Plan your Journey flow accordingly — consider placing a Wait step before the in-app message to allow time for a natural session break.
In-app messages in a Journey display only once per user. Even if the user re-enters the Journey, the same in-app message will not display again.

Webhooks

In addition to message steps, you can add webhook steps to send real-time data to external systems (CRMs, analytics platforms, custom backends) at any point in the Journey. Webhooks are useful for syncing user state, triggering external workflows, or logging Journey progress outside of OneSignal.

Journey webhooks

Configure webhook steps to send data to external tools during a Journey.

FAQ

Can I schedule a message to send at a specific time?

Not within the message step itself. To delay delivery, add a Wait step before the message step. You can also use the Journey’s schedule settings to control when the entire Journey is active.

Why didn’t my in-app message display?

In-app messages require a new session to display. If the user was already in the app when they reached the step, the message queues until the next session (app out of focus for 30+ seconds, then reopened). Also check that trigger conditions are met and the delivery schedule has not expired.

Will a user see the same in-app message if they re-enter the Journey?

No. In-app messages in a Journey display only once per user, regardless of re-entry. To show a message again, create a new in-app message step with different content.

What happens if a user doesn’t have a subscription for the message channel?

The message step is skipped for that user. For example, if an email step is reached but the user has no subscribed email address, the email is not sent and the user continues to the next step in the Journey.

Can I personalize Journey messages?

Yes. Push, email, and SMS templates support Liquid syntax for inserting user attributes, Data Tags, and Custom Event properties. Email templates also support Data Feeds for real-time API data at send time.

Journey webhooks

Send real-time data to external systems at any point in a Journey.

Journey actions

Add wait steps, branching logic, and split paths between message steps.

Journey settings

Configure entry rules, exit rules, re-entry, and scheduling.

Message personalization

Personalize messages with tags, Liquid syntax, and custom event properties.

Templates

Create and manage reusable message templates across channels.

Data Feeds

Pull real-time API data into email messages at send time.