Playbooks

A message at each customer's 9:00, in their language

One journey for customers in several countries. The Cases node splits people by timezone and by language, so everyone gets the right template at the right time.

Ana lives in Mexico City and speaks Spanish. Lucas is in São Paulo and speaks Portuguese. Emily is in Miami and prefers English. All three are in the same campaign, and the message should reach each of them at 9:00 in their own morning, not yours, and in their own language.

You don't need one journey per country. One journey with two Cases nodes does it: one splits by timezone, the other by language.

Before you start: two attributes on every person

The journey decides with what you already know about each customer, so every person needs two attributes in the CDP:

  • language: for example es, pt, en.
  • timezone: the timezone name, for example America/Mexico_City, America/Bogota, America/Sao_Paulo.

You can load them with a CSV, through the API or from your integration. Before building anything, check which values you actually have, because a Cases node compares the exact value. It ignores capitals and spaces (ES and es both land on the es case), but nothing else: es-MX does not land on es. If your data mixes formats, normalize it or add a case for each form.

For the timezone, use standard names like America/Mexico_City instead of abbreviations like CST or offsets like -06:00. They are the same names you will pick in the waits, and they already account for each country's daylight saving time.

Step 1: split by timezone

After the trigger, add a Cases node:

  1. Under Attribute, pick timezone.
  2. With Add case, create one per zone: value America/Mexico_City with label CDMX, value America/Bogota with label Bogotá, and so on. Up to 10 fit.
  3. The Default output takes anyone with no timezone, or one you didn't list. Don't leave it loose: the journey can't be published without it.

Step 2: one wait on each branch

On each branch, add a Wait node:

  1. Pick the Time window mode.
  2. Tick the days (for example, Monday to Friday) and the send window, From 9:00 To 10:00.
  3. Under Timezone, pick that branch's zone: America/Bogota on the Bogotá branch, America/Sao_Paulo on the São Paulo one.

On the Default branch, leave the timezone on Organization default.

If the person arrives inside the window, they continue right away. If they arrive outside it, they wait until the next ticked day at 9:00 in their zone.

Use Time window, not the other two modes. Exact date points at one fixed instant, the same for everyone: the timezone only changes how you see it in the editor. Duration doesn't use a timezone at all.

Step 3: join the branches and pick the language

Connect every wait to one shared Cases node, this time with the Attribute language:

  1. One case per language: es, pt, en.
  2. Each case goes to a send node with the approved template in that language.
  3. Default goes to the template in your main language.

Split by language after the waits, not before. That way you build it once instead of repeating it in every timezone branch. The attribute is also read at the moment the person reaches the node, so if someone corrected their language while they were waiting, they get the message in the corrected one.

The whole journey

  1. Trigger: your campaign's segment or event.
  2. Cases on timezone: one branch per zone, plus Default.
  3. Wait, on each branch: Time window, Monday to Friday, 9:00 to 10:00, in that branch's zone.
  4. Cases on language, where every branch joins.
  5. Send message with each language's template.
  6. End.

If you build the journey through the MCP or the API, the wait on the Bogotá branch looks like this. Minutes count from midnight (540 is 9:00):

{
  "mode": "until_weekday",
  "weekdays": [1, 2, 3, 4, 5],
  "windowStartMinutes": 540,
  "windowEndMinutes": 600,
  "timezone": "America/Bogota"
}

Three details that prevent surprises

  • Don't turn on the legacy business-hours window on the sends. That option works out the hours in your organization's timezone, not the branch's, and could hold until 9:00 in Mexico City a message that was about to go out at 9:00 in São Paulo. Each branch's wait already takes care of the time.
  • Check who lands on Default. Each enrollment's timeline shows which branch the person took. If many take the default one, you're missing cases or have values in another format.
  • Test with one person per zone. Enroll a test person on each branch, especially the zone farthest from yours, and check in their timeline when the wait resumes before you launch the full campaign.

The Cases node works for any attribute with a few values, not just language and timezone: plan, country, customer stage. The full node reference is in our documentation.

Sergio GarciaCo-founder, Boom

See what Boom can do for your customers

Put an AI workforce to work on follow-up, retention, and research across every channel.