Notifications
What a tenant's messages look like, and when they may arrive. A journey decides what is sent (Actions); these settings shape it.
notifications.quiet_hours
{ "start": "21:00", "end": "07:00" }: a window, on a 24-hour clock, in each participant's own
time zone, which may run across midnight. Empty, or a start equal to its end, means no window,
and so does a participant with no time zone recorded.
Inside the window:
| Message | What happens |
|---|---|
A journey's createUserPushNotification push, an assignment push | Dropped: what it announced is on the home screen in the morning |
| A chat message's push | Held, and sent when the window closes; several held go as one |
| A text message | Held, and sent when the window closes |
The platform's own pushes
Some pushes are the platform's, not a journey's. Each is headed by the app's name, and none names what was assigned or who did it.
| Sent when | One | Several within a minute |
|---|---|---|
| Staff assign a sequence | "You have a new sequence." | "You have 8 new sequences." |
| Staff assign a journey | "You have a new journey." | "You have 3 new journeys." |
| A chat message arrives, from staff or a journey | "You have a new message." | "You have 3 new messages." |
The first goes at once; any more of the same kind to the same participant within the next minute
go as one push carrying the count, which replaces the last on the phone. What a journey assigns
sends no push of its own: add a createUserPushNotification for that.
A schedule never sends anything itself. The app reminds the participant, unprompted and in its own words, when something is due, at the time the schedule names (09:00 when it names none).
email.<template>
The platform's own emails, one row per template, each with subject, html, fromName and
fromEmail; each field falls back to the platform's on its own.
| Template | Sent when | Merge tags |
|---|---|---|
invitation | A participant is invited | recipient.firstName, tenant.name, claimUrl |
staff_invitation | Someone is invited with a staff role; it names the role | recipient.firstName, tenant.name, claimUrl, role.name |
email_validation | A member is asked to confirm their address, where the tenant accepts only some domains | recipient.email, tenant.name, confirmUrl, intervalLabel, linkLifeLabel |
- Write a tag as
{{ tenant.name }}, or{{ tenant.name | fallback: "words" }}for when it is empty. A template naming anything else is refused when it is saved.recipient.firstNameis "there" for someone with no first name. - Set
fromNameandfromEmailtogether: a tenant's name over the platform's address reads as a mistake. - Links are never rewritten for tracking, so a link always opens the app. A plain-text version is made from the HTML.
- There is no password email: passwords are the identity provider's, on its own pages.
A journey's createUserEmailMessage has no template and none of these tags: it goes from the platform's
sender, and fills only the tokens a message that leaves the app may carry
(Referencing a participant's data).
sms.countries
The countries a tenant texts, as codes (NZ, AU). A text to a mobile outside them is skipped,
and the record says why. Empty means the deployment's own list. A participant must have agreed to
be texted, and a STOP reply from a number stops texts to it in every tenant.