Recipe: Multichannel Inbox
This recipe collects messages from every channel your team uses into one board. A slack, discord, teams, and email connector each receive inbound messages, and every one becomes a card on a single kanban board — so support, sales, or ops triage one queue instead of four apps.
The problem it solves
Conversations are scattered across Slack, Discord, Teams, and email, and nobody owns “all of it”. Things fall through the cracks because there is no shared queue and no shared state. This recipe fans every channel into one board where each message is a trackable card with a column, an assignee, and an action — one place to triage, with state everyone can see.
Elements
| Element | Role |
|---|---|
slack | Receives inbound Slack messages. |
discord | Receives inbound Discord messages (Gateway listener). |
teams | Receives inbound Microsoft Teams activity. |
email | Receives inbound email. |
board | One kanban board where every message becomes a card. |
automation | Normalizes each inbound event into a card. |
Flow
- Create a
board. It is a generic kanban with columns, a configurable card schema, and card actions — model columns likeNew → In progress → Doneand add the fields you triage on. - Create your inbound connectors. Each is a bidirectional element that receives when its trigger port is left unwired:
slack(Events API listener),discord(Gateway listener),teams(itseventswebhook receiver, which emitsteams.activity.received), andemail(inbound via the platform mailbox or external IMAP —list-inbox,get-message,unread-count). - For each inbound message, create a card on the board with the board’s
add-cardoperation, carrying the sender, channel, and body as card metadata. Several channels writing into the one board is the fan-in. - Triage on the board: move cards with
update-card, read them withget-card/list-cards, and trigger per-card workflows withrun-card-action. Get a roll-up withboard-summary. - Drive the normalization with an
automation, which referencesslack,discord,teams,email, and (through its step graph) the board — so each inbound event maps to oneadd-cardcall regardless of which channel it came from.
What this shows
Every chat connector on the platform shares the same receive/send duality, so four very different services — Slack, Discord, Teams, email — funnel into one queue through the same pattern: leave the trigger port unwired, map the inbound event to an add-card. The board gives the merged stream what a raw firehose lacks — columns, assignees, a card schema, and actions — turning “messages from everywhere” into a triage surface with shared state. Adding a fifth channel is the same three moves, not a new architecture.