[Collaboration integration]

Turn Slack threads into approval-first postal mail operations

Use Slack as the operator console for mailbox.bot: trigger postal mail from a thread, let an agent draft through MCP or your app call REST, require approval in-thread, then post tracking, delivery proof, forwarded documents, and mail photos back where the team is already working.

recommended shape
slash command or thread shortcut
agent decides paper is needed
dry run previewed in the thread
approver clicks approve in Slack
delivery proof posted to the thread
Best for
Teams that already run customer operations, legal escalations, or notices out of Slack threads.
Agent workflows where the human should approve a dry run without leaving the conversation.
Status-heavy mail such as certified notices, document packets, and follow-ups where delivery proof should land back in chat.
Triggers
A slash command, message shortcut, or Workflow Builder step asks to mail a letter or packet.
An agent in Slack decides a stalled conversation needs physical mail fallback.
mailbox.bot webhooks post mailed, delivered, or failed updates back into the original thread.
[Workflow]
1

A Slack bot, slash command, shortcut, or workflow captures the thread context, recipient, and requested document.

2

An agent uses mailbox.bot MCP to decide what should be mailed, or your backend calls REST directly when the packet is already known.

3

mailbox.bot creates a dry run so the thread can preview class, recipient, and estimated cost before anything is mailed.

4

An approver confirms the send in Slack or in your app, and the integration submits the live mail job.

5

mailbox.bot lifecycle webhooks update the same thread with submission, tracking, delivery proof, forwarded scans, document files, or failure details.

Technical pattern
A slash command or message shortcut collects intent; Block Kit buttons carry the approval; verify Slack's request signature before acting on the interaction payload.
Keep the live send on your server: the button click only records an approval, the server submits with requires_approval cleared by a person.
Store team_id, channel_id and thread_ts in metadata; the mail status handler posts into that thread with chat.postMessage.
Use MCP when the agent should decide whether paper is needed at all.
Metadata to preserve
source=slack
team_id
channel_id
thread_ts
user_id
approval_message_ts
workflow_id
intent
POST/api/v1/maildry_run=true
curl -X POST https://mailbox.bot/api/v1/mail \
  -H "Authorization: Bearer sk_agent_test_..." \
  -H "X-Mailbox-MD-Version: <version>" \
  -H "X-Max-Cost-Cents: 2500" \
  -F "document=@thread-notice.pdf" \
  -F "recipient_name=<recipient>" \
  -F "recipient_line1=<street>" \
  -F "recipient_city=<city>" \
  -F "recipient_state=<state>" \
  -F "recipient_zip=<zip>" \
  -F "mail_class=certified" \
  -F "dry_run=true" \
  -F 'metadata[team_id]=<team_id>' \
  -F 'metadata[channel_id]=<channel_id>' \
  -F 'metadata[thread_ts]=<thread_ts>' \
  -F 'metadata[source]=slack'
Agent prompts
"In this Slack thread, decide whether postal mail is the right next step. If yes, draft a mailbox.bot dry run, show the estimated class and cost, and wait for approval."
"When mailbox.bot confirms this certified letter was delivered, post the proof back into the originating Slack thread and mark the case as complete."