Messaging and Notifications
Canonical maker page for Messaging building blocks. The deep book remains Application Messaging Foundation Guide. Extra messaging how-tos redirect there or here. This page absorbs the maker-facing parts of the local first-win and entitlements notes (levels, not admin override order).
What this is / when to use it
Section titled “What this is / when to use it”Messaging moves the event. Workflow does the work. Approvals get a decision. Use Messaging when someone must be notified, must converse, must receive an announcement, or when a workflow must create inbox work and later resume on a named reply.
A topic is the event name on a channel. It is not a comment. Publishers, Wait steps, Decision outcomes, and Conversation screens only match when they use the same string. See Topics that perform work.
When not to: you only need a form thank-you. Use submit actions. You need a place for people to act — add a Decision or Work Queue screen. The topic creates the card; the screen is where they act.
Before you start
Section titled “Before you start”Messaging entitlement is on. Know the level you have:
| Level | What you may do |
|---|---|
| Draft | Build routes. Do not publish live messages. |
| Intra | Same-app messaging and in-app Notification Center. |
| Inter | Linked-app messages (application-link). |
| External API | Inbound/outbound HTTP, partner webhooks. |
If the builder shows Request access, use that. Do not paste JSON to bypass a level.
Build it
Section titled “Build it”- Open Automation Home. Prefer Create your first automation: Notify someone (see wizard).
- For anything beyond a first notify, open Messaging Foundation:
- Create a channel (where messages go).
- Create a contract (shape of the payload).
- Add subscriptions (who receives).
- Add publishers (what may send).
- Add a Notification Center screen if users should read in-app notices.
- Add a Conversation screen if they should reply. Guide: Conversation.
- Publish messaging + the app. Send a test.
Every control
Section titled “Every control”| Block | What it is | Maker controls |
|---|---|---|
| Channel | Pipe | Name, allowed topics, type (in-app / email / webhook), entitlement level required |
| Topic | Event name on a channel | Must match on publish, Wait, Decision reply, and Conversation. Named catalog below. |
| Contract | Schema | Fields the payload must include |
| Subscription | Audience | Role, user, people field, webhook URL |
| Publisher | Who may send | Workflow step, maker, inbound webhook |
| Announcement | Broadcast | Severity info / warning / critical |
| Application-link | State machine between two apps | States for request / accept / reject / expire (Linked App Exchange screen) |
| Notification prefs | End user | Profile screen + audience how-to |
Inbox item types that messaging can create (AutomationItemType): decision (Decision / Needs Review), task (Work Queue), message (Conversation), notification (Notification Center), plus linked_app_request when exchanging with another app. Claim/waiting/expired are item statuses, not message types. See Approval workflows for the shared inbox.
Topics that perform work
Section titled “Topics that perform work”Topics are the contract that turns a publish into work or a wait resume. The Publish Message and Wait for message steps offer these names in the builder. Prefer the dropdown. Do not invent a nearby name (review.sent, client.approved) and expect the queue or the Wait to notice.
Allow every topic you use on the channel. A publish or reply with a topic the channel does not list is dropped.
Named topics (builder presets)
Section titled “Named topics (builder presets)”| Topic | What it does | Inbox item | Typical next step |
|---|---|---|---|
client.review.requested |
Puts a Decision card in Needs Review (for example when Status becomes With Client) | decision |
Client decides on the Decision screen |
client.intake.submitted |
Puts a Task card in the Agency / Work Queue after intake | task |
Staff claims and works the item |
supervisor.review.requested |
Puts a Decision card in a supervisor inbox | decision |
Supervisor decides |
checklist.ready |
Puts a Task when a related checklist (for example photo slots) is ready | task |
Staff completes the checklist |
client.decision.approve |
Reply published when the client approves | — | Wakes Wait for message |
client.decision.changes_requested |
Reply published when the client requests changes | — | Wakes Wait for message |
client.decision.reject |
Reply published when the client rejects | — | Wakes Wait for message |
supervisor.decision.approve |
Supervisor approve reply | — | Wakes Wait for message |
supervisor.decision.escalate |
Supervisor escalate reply | — | Wakes Wait for message |
The three client.decision.* topics are the closed set the builder’s Use all client decision topics control writes onto a Wait step.
Same channel, two kinds of work
Section titled “Same channel, two kinds of work”One workflow channel can carry both reviews and intake. The topic plus the item type keep the inboxes apart:
- Publish
client.review.requestedas a decision → Decision screen (Approve / Changes / Reject). - Publish
client.intake.submittedas a task → Work Queue (claim and work).
Do not send intake as a decision, or a client review as a task. The cards will land in the wrong inbox.
If you type a custom topic, the builder still infers an item type from the suffix:
- Ends with
.review.requestedor.approval.requested→decision - Ends with
.intake.submittedor.submitted→task
Otherwise set the item type yourself.
The wait loop (do not invent names)
Section titled “The wait loop (do not invent names)”A review route only resumes when Publish, Decision, and Wait agree:
Publish client.review.requested (item type decision) → Decision screen → outcome publishes client.decision.approve | changes_requested | reject → Wait for message on those exact topics wakes → Condition branches on the decisionWait for message listens for the reply topics, not the request topic. A custom request topic never wakes a Wait that lists client.decision.approve. A Decision outcome that publishes a homemade reply never wakes a Wait that lists the presets.
Notification Center is the ping. Preference categories (for example email / social / project alerts) can mute the notice. The Decision or Work Queue card still exists if the user turned the ping off.
Conversation screens bind a channel (and usually stay on the workflow channel) so replies stay on the same asset. They do not replace the topic contract above.
Custom topics
Section titled “Custom topics”Custom is allowed when the presets do not fit. Then you own both sides:
- Add the exact string to the channel’s allowed topics.
- Use that same string on Publish Message (and set item type).
- Use that same string on Wait for message, Message received, or the Decision reply step.
- Bind Conversation to the same channel if people reply in-app.
Examples such as task.assigned or approval.requested in older guides are naming style, not extra platform topics. They only work if you wire them on every side.
What users see
Section titled “What users see”Notification Center cards, email, Conversation threads, or a Linked App Exchange request. They set prefs on Profile (mute email, keep in-app, and so on).
Limits and plans
Section titled “Limits and plans”External webhook subscribers need External API level. Intra cannot send to another app. Draft cannot reach customers. Workflow Notify / Call webhook and wait are a different product — Workflow vs Messaging Webhooks. File the rest in the Foundation guide.
Example
Section titled “Example”First win: form submitted → notify record owner in Notification Center + email. Review loop: Status becomes With Client → publish client.review.requested as a decision → client decides → client.decision.* wakes Wait. Intake loop: publish client.intake.submitted as a task on the same channel → Agency Work Queue.
Fix problems
Section titled “Fix problems”| Symptom | What to do |
|---|---|
| Notify wizard blocked | Request Messaging access |
| In-app empty, email works | Add Notification Center, publish the app, and use Notify someone / in_app — not a channel subscriber. How the screen gets populated |
| Decision or Work Queue empty | Publish used the wrong topic or item type, or the topic is not allowed on the channel. See Topics that perform work. |
| Wait never resumes after a decision | Wait topics must match the Decision reply topics exactly. Use the presets or Use all client decision topics. |
| Webhook subscriber 401 | Webhook reference. Wrong product? Workflow vs Messaging Webhooks |
Related
Section titled “Related”Workflow vs Messaging Webhooks. Which automation. Approval workflows. Step catalog (publish_message, wait_for_message). Notification Center — how to populate it. Conversation screen. Foundation guide (deep book).