# Build the journeys

Each recipe on the pages of this section is one journey. The journeys and their message texts are examples: build the ones you need and replace the texts with your game's tone and rewards. To open the canvas, see [Start creating your first journey](/product/customer-journey/getting-started/#start-creating-your-first-journey). For the canvas basics, see the [Customer Journey overview](/product/customer-journey/pushwoosh-journey-overview/).

<Aside type="tip" title="Let AI Assistant create the journeys">
[AI Assistant](/product/pushwoosh-ai/ai-assistant/) can create the journeys from these recipes in your application. Send it the link to the recipe page and name the journey you need. A journey it creates starts as a draft and doesn't affect players until you launch it. Check each change before you approve it.
</Aside>

Players in many games move through similar stages. Use this table to pick the journeys for the stage where you lose players.

| Stage | What is happening | Journeys |
| --- | --- | --- |
| New | The player installed the game and is learning it | <ul><li>[Onboarding for new players](/tutorials/industry-playbooks/mobile-games/build-the-journeys/new-and-active-players/#onboarding-for-new-players)</li><li>[Second session for new players](/tutorials/industry-playbooks/mobile-games/build-the-journeys/new-and-active-players/#second-session-for-new-players)</li></ul> |
| Playing | The player plays and progresses | <ul><li>[Help for stuck players](/tutorials/industry-playbooks/mobile-games/build-the-journeys/new-and-active-players/#help-for-stuck-players)</li><li>[Daily reward reminder](/tutorials/industry-playbooks/mobile-games/build-the-journeys/new-and-active-players/#daily-reward-reminder)</li></ul> |
| Buying | The player is ready to spend, or has paid | <ul><li>[First purchase offer](/tutorials/industry-playbooks/mobile-games/build-the-journeys/purchases/#first-purchase-offer-for-engaged-non-payers)</li><li>[Second purchase offer](/tutorials/industry-playbooks/mobile-games/build-the-journeys/purchases/#second-purchase-offer)</li><li>[Store abandonment reminder](/tutorials/industry-playbooks/mobile-games/build-the-journeys/purchases/#store-abandonment-reminder)</li></ul> |
| Loyal | The player stays for the long run | <ul><li>[Live event and VIP announcements](/tutorials/industry-playbooks/mobile-games/build-the-journeys/loyalty-and-win-back/#live-event-and-vip-announcements)</li><li>[Anniversary reward](/tutorials/industry-playbooks/mobile-games/build-the-journeys/loyalty-and-win-back/#anniversary-reward)</li></ul> |
| Leaving | The player stopped opening the game | <ul><li>[Reactivation for inactive players](/tutorials/industry-playbooks/mobile-games/build-the-journeys/loyalty-and-win-back/#reactivation-for-inactive-players)</li></ul> |

## Prepare to build a journey

A message element in a journey uses ready content, so create the content first in **Content**: [push presets](/product/content/push-presets/), [in-app templates](/product/content/in-apps/), [email content](/product/content/email-content/), or [App Inbox presets](/product/content/app-inbox-presets/). Each recipe lists the content it needs.

To personalize the content:

* **Player data:** to put a value stored on the player into a push, such as the `player_level` tag, add a [Dynamic content](/product/personalization/dynamic-content/) placeholder to the text.
* **Language:** to send each player the message in their own language, add the languages to the push or in-app content. Pushwoosh picks the version by the device's Language tag, which the SDK sets from the OS locale, so you do not need a custom language tag. See [Multi-language messaging](/product/personalization/multi-language/).

## Best practices for every journey

Apply these to every journey in this playbook:

| Practice | Why |
| --- | --- |
| Set a silence period | A push should not reach a player in the middle of the night. The period blocks messages in each player's device timezone, for example 23:00 to 08:00. Learn more: [Silence period](/product/customer-journey/journey-settings/#silence-period) |
| Limit how often a player enters | A repeating event such as `Level completed` starts the journey every time, so one player could get the same message again and again. Learn more: [Campaign entry limit](/product/customer-journey/journey-settings/#campaign-entry-limit) |
| Choose the message type on every message element | A journey that starts on an event does not preselect the type, and the element shows **Message type not selected** until you choose one. Learn more: [No preselected message type](/product/messaging-channels/marketing-vs-transactional/#no-preselected-message-type) |
| Use Marketing message for offers, reminders, and win-back | A marketing message follows the limits you set: [frequency capping](/tutorials/industry-playbooks/mobile-games/prepare-for-communication/#set-delivery-rules-before-you-message-players), silence periods, and [control groups](/tutorials/industry-playbooks/mobile-games/prepare-for-communication/#set-up-a-control-group-before-you-launch). Transactional messages skip frequency capping and control groups, but not silence periods, so keep them for service messages. Learn more: [Choosing the right message type](/product/messaging-channels/marketing-vs-transactional/#choosing-the-right-message-type) |
| Add a conversion goal | The conversion rate of the goal in **Performance** shows how many players did the action you chose. Learn more: [Conversion goals](/product/customer-journey/journey-settings/#conversion-goals), [Measure results](/tutorials/industry-playbooks/mobile-games/launch-and-measure/#measure-results) |
| Plan for players without push | A player who has not allowed notifications gets no push. Add a Reachability check and send an in-app message or an email instead. Learn more: [Reachability check](/product/customer-journey/journey-elements/flow-controls/reachability-check/), [Ask for push permission at the right moment](/tutorials/industry-playbooks/mobile-games/prepare-for-communication/#ask-for-push-permission-at-the-right-moment) |
| Check who a segment journey takes in | A journey that starts from a segment takes in only devices with a push token. The token arrives when the game asks for push permission, even if the player declines, so these players enter and get the in-app message. Players the game has not asked yet do not enter |
| Set an expiration on in-app messages | A journey in-app usually appears the next time the player opens or returns to the game, so set **In-app expiration**, for example 1 day, to keep old messages from appearing days later. To reach players outside the game, use a push. Learn more: [In-app expiration](/product/customer-journey/journey-elements/channels/in-app/#select-template-and-set-expiration) |
| Test every journey before you launch it | A journey has no test mode, so once it is running, real players who match its entry get its messages. Learn more: [Test each journey before you launch it](/tutorials/industry-playbooks/mobile-games/launch-and-measure/#test-each-journey-before-you-launch-it) |
| Set delivery rules before you launch | They limit how often a player hears from you across all journeys. Learn more: [Set delivery rules before you message players](/tutorials/industry-playbooks/mobile-games/prepare-for-communication/#set-delivery-rules-before-you-message-players) |