# Message delivery options and the modal view stack

*Slack Developer Study Guide · Design the Interactive Flow of Your App · Last updated October 21, 2026 · https://www.certifyforce.com/study-guide/slack-developer/design-the-interactive-flow-of-your-app/message-delivery-options-and-the-modal-view-stack*

When to post to a channel, a DM, an ephemeral message or a scheduled message, how to deep-link to App Home tabs, and how a modal's three-view stack works: views.open, push and update, private_metadata, view_closed, external_id and the response_action replies to a submission.

- Certification: Salesforce Slack Developer
- Exam section: Design the Interactive Flow of Your App
- Study guide: https://www.certifyforce.com/study-guide/slack-developer

**Official exam objective:**

> Recommend when to use different Slack components and features.

## What the exam expects

- Choose among a channel post, a DM, an ephemeral message, a scheduled message and a modal for a given need.
- Plan for ephemeral delivery limits and the 120-day scheduling window; list, delete and reschedule pending messages.
- Open a one-to-one DM with `conversations.open` and deep-link to a specific App Home tab.
- Work the three-view modal stack: `views.open`, `views.push`, `views.update`, `private_metadata`, `external_id`, `notify_on_close` and `initial_value`.
- Pick the right reply to a `view_submission` (empty 200, `response_action` `update`, `push`, `clear`) versus a `block_actions` click in a modal.

Key terms: **ephemeral message** (visible to one user, not persisted); **scheduled message** (posted later by Slack at `post_at`); **view stack** (up to three views in one modal); **`private_metadata`** (hidden string carried between views); **`response_action`** (the acknowledgement field that changes the modal after a submission).

## Key facts

| Fact | Detail | Source |
|---|---|---|
| Ephemeral delivery | Not guaranteed; user must be active and a channel member | [chat.postEphemeral method](https://docs.slack.dev/reference/methods/chat.postEphemeral) |
| Ephemeral persistence | Gone after reload or session; not across desktop and mobile | [chat.postEphemeral method](https://docs.slack.dev/reference/methods/chat.postEphemeral) |
| One-to-one DM | `conversations.open` with one user, scope `im:write` | [conversations.open method](https://docs.slack.dev/reference/methods/conversations.open) |
| Scheduling window | Up to 120 days in advance | [Sending and scheduling messages](https://docs.slack.dev/messaging/sending-and-scheduling-messages) |
| Editing a scheduled message | Delete it, then schedule a new one | [Sending and scheduling messages](https://docs.slack.dev/messaging/sending-and-scheduling-messages) |
| Home tab deep link | `slack://app?team={TEAM_ID}&id={APP_ID}&tab=home` | [Deep linking into Slack](https://docs.slack.dev/interactivity/deep-linking) |
| View stack size | Up to 3 views | [Modals](https://docs.slack.dev/surfaces/modals) |
| `trigger_id` lifetime | Expires 3 seconds after it is sent | [Modals](https://docs.slack.dev/surfaces/modals) |
| `private_metadata` | Up to 3000 characters, hidden, returned on submit and actions | [Modal views](https://docs.slack.dev/reference/views/modal-views) |

## Check yourself

- Why is an ephemeral message a poor place for a delivery receipt the manager must find later?
- When should an app use `external_id` instead of the payload's `view.id`?
- How does an app remove pending scheduled messages whose IDs it didn't save?
- Why can't a fourth step be pushed onto a modal that already shows two pushed views?

## Sources

- [Modals](https://docs.slack.dev/surfaces/modals)
- [Modal views](https://docs.slack.dev/reference/views/modal-views)
- [Sending and scheduling messages](https://docs.slack.dev/messaging/sending-and-scheduling-messages)
- [chat.postEphemeral method](https://docs.slack.dev/reference/methods/chat.postEphemeral)
- [conversations.open method](https://docs.slack.dev/reference/methods/conversations.open)
- [chat.postMessage method](https://docs.slack.dev/reference/methods/chat.postMessage)
- [Deep linking into Slack](https://docs.slack.dev/interactivity/deep-linking)
- [Handling user interaction in your Slack apps](https://docs.slack.dev/interactivity/handling-user-interaction/)

## About the full unit

The "Core concepts", "Exam traps" and "Worked scenario" sections of this unit, its 12 linked practice questions, and unlimited timed mock exams are included with the Slack Developer pack (USD $19): https://www.certifyforce.com/practice-exams
