Every customer email sent to info@forknfilm.com (or any of the eight city aliases: newyork@, losangeles@, dallas@, detroit@, portland@, vegas@, arizona@, sanfrancisco@) lands in Admin → Messages within five minutes. You reply from there, the customer sees the reply as if it came straight from the original Gmail account, and the whole conversation stays grouped on one thread.
This guide covers what every button on the thread page does, when to use which one, and the cleanups (snooze, close, archive) that keep the inbox sane.
Where things live
- Admin → Messages is the inbox.
- Admin → Messages → (a thread) is the thread view.
- Admin → Settings → Saved replies is where canned messages live.
- Admin → Settings → AI brand voice is where the AI draft tone is configured.
The inbox is feature-flagged. If you don't see it in the left nav, ask Matt to flip the flag for your account.
The inbox columns
| Column | What it shows |
|---|---|
| From | Customer name (if we can match them to an order) and email |
| Subject + snippet | Latest message subject + first 140 chars of the body. Category pill if one was matched (urgent, refund_request, group_booking, etc.) |
| Attached | Order number if the customer is matched, "ghost" if not |
| Mailbox | Which alias the email landed in (drives where your reply gets sent from) |
| State | Open, Replied, Escalated, Snoozed, or Closed |
| When | An SLA chip on top (open Xm in green/amber/red, or "replied in Xm" in gray) and the relative time below |
The top bar shows the count of open threads, the oldest unanswered, and the mean response time today. The oldest-unanswered colors at the same SLA breakpoints as the per-row chips:
- Green under 1 hour
- Amber under 4 hours
- Red over 4 hours
If you see red, that's the one to grab.
Filters
Pills across the top (state, category) plus dropdowns (mailbox, assignee, ghost-only, @ mentions me) compose with each other. Hit Apply after changing the dropdowns.
The defaults are: state = Open, mailbox = All, assignee = All, category = All. Set them once per session and they ride along on each click.
Picking up a thread
Click any row. The thread view shows:
- Header: subject, customer name + email, which mailbox it landed in, message count, "Save as FAQ" button.
- State / assignee bar: state pills, assignee dropdown, "Assign me" shortcut, and a Snooze button.
- Attached order block (if any): one click to the order, total, status, show, city, date.
- Conversation: every message in chronological order. Inbound (white), operator reply (green), system (blue), internal note (amber).
- Composer tabs: Reply to customer / Internal note.
If a thread is "ghost" (no attached customer), the top of the conversation shows an Attach to customer prompt. Search by email or name, click "Attach customer" or "+ most recent order" to wire the thread to a profile/order.
State workflow
States and when to use them:
- Open — the customer is waiting on us. Default for any new inbound.
- Replied — we've replied; ball is in their court. Set automatically when you Send.
- Escalated — needs admin attention. Use this if you (as a manager) hit a refund request, group quote over $1000, or anything you can't resolve.
- Snoozed — hide from the default Open view until a later time. See the Snooze section below.
- Closed — fully resolved, no follow-up needed.
The state on the LATEST row of the thread is what the inbox uses for filtering, so don't worry about historical inconsistency.
A snoozed or closed thread automatically flips back to Open the moment the customer writes back. You don't need to manually re-open.
Replying
The Reply tab has four places to fill in:
- From — auto-set to the original mailbox. Read-only. Replies always come from the alias the customer wrote to.
- To — the most recent inbound's From address. You can edit if you need to redirect.
- Subject — auto-set to "Re: original subject".
- Body — empty by default; type or use one of the helpers below.
Three helpers above the Send button:
1. AI Draft (purple bar, "pick an outcome")
Pills for the most common reply intents. Click one and Claude reads the thread + customer context + brand voice, drafts a reply in 2-3 short sentences, and pastes it into the body box. Edit before sending. Always.
- Reschedule + credit — for "I can't make it, can I move?" or "I missed the show."
- Refund — for explicit refund requests where you can fulfill.
- Apologize + credit — when something went wrong on our side.
- Rebooking info — point them at upcoming dates without committing.
- Confirm details — answer their logistical question with specifics from the order.
- Decline politely — say no in a way that respects them.
- Acknowledge — 2-sentence holding reply when you don't have the answer yet.
If none fits, click Custom... and type a one-line steer ("offer to comp drinks instead of refund"), then Draft with this. Or click Auto draft to let Claude infer.
2. Insert saved reply (sky-blue button)
Modal with all the canned replies, grouped by category. Search by label or body content. Click one — variables ({{first_name}}, {{show_date}}, {{show_city}}, {{order_label}}) are filled in from the thread context — and the body is spliced into the composer.
Use saved replies for the verbatim 50x/week messages ("Confirmed, your booking for Saturday 7pm in NYC is locked in"). Use AI draft for nuanced one-offs.
To add or edit replies: Settings → Saved replies → "+ New saved reply".
3. Insert one-off promo (green button)
Mints a single-use, email-locked promo code for this customer and splices a paragraph into the reply body. Pick:
- Amount — preset $10/$20/$50/$100, or custom.
- Valid for — 14 / 30 / 60 / 90 days.
- Tickets only — usually yes (excludes merch + add-ons).
The code is locked to the customer's email so they can't share it. It's logged on their profile.
Internal notes (the amber tab)
Click Internal note on the composer toggle. The customer never sees these. Use them to:
- Brief a teammate before they pick up a thread you couldn't resolve.
- Document why you decided what you decided.
- Flag a customer for the team ("she got bumped from May 4 too, second time").
Type @ and pick a teammate to mention them. Mentioned operators can find threads where they were tagged via the @ mentions me filter on the inbox.
Notes don't change the thread state. A thread can be Open with three notes attached and still be waiting on a customer reply.
Snooze (hide until later)
Click Snooze in the state bar. Pick:
- In 3 hours — for "I'll get back to this after lunch."
- Tomorrow morning — for "this needs a fresh head."
- Next Monday — for stuff that can wait a few days.
- Custom — pick any datetime.
Snoozed threads disappear from the default Open view. You can find them under the Snoozed state pill. They wake up automatically:
- When the time you picked passes.
- Or when the customer writes back (immediate).
Click Wake up now in the snooze badge if you want to surface a thread early.
Save as FAQ (purple button on the header)
If a thread contains a great Q+A that other customers will probably ask, click Save as FAQ. Claude distils the thread into a question-and-answer pair, you edit, and it gets saved to the FAQ database. Future AI drafts pull from this, so good operator answers train the assistant over time.
Skip this for one-off threads; only use it for "we get this question constantly" threads.
Collision detection
If another operator is viewing this thread or typing a reply, you'll see a rose-colored bar above the composer: "Esperanza is viewing this thread." If two of you are working at the same time, talk in Slack first or split who handles which thread.
The indicator updates every 15 seconds.
When to escalate
Hit the red Escalate state pill if:
- The customer is asking for something only an admin can authorise (large refund, partnership, press).
- You can't resolve it within your role's scope.
- You've replied twice and the customer is escalating themselves.
Escalating reassigns visibility, not action. Admins (Matt, Fran, Nick) check the Escalated filter regularly.
Common patterns
- "I missed my show" → AI Draft → Reschedule + credit. Most folks take a credit; if they push back, refund via the order page.
- "Can I bring 8 people?" → category should auto-tag as group_booking. Use the Group inquiry intro saved reply, then loop in admin.
- "This is the third time I've had a problem" → Internal note documenting context, escalate, admin handles.
- Customer replies to a closed thread → it auto-reopens. No action needed; just pick it up.
- Bounce / mailer-daemon → category auto-tags as bounce. Usually safe to close; check the Email Log if the original send was important.
What's automated, what's not
| Action | Automated? |
|---|---|
| Capture inbound to all 9 mailboxes | Yes (every 5 min) |
| Capture operator-sent Sent folder messages | Yes |
| Auto-attach to customer + order from email match | Yes |
| Subject-based classification | Yes |
| Auto-reply to customer | No. Replies are always operator-driven. |
| Snooze sweep | Yes (every 5 min) |
| Auto-reopen on customer reply | Yes |
| Slack ping when a thread @-mentions you | No. Use the @ mentions me filter. |
Troubleshooting
The inbox is empty / not updating.
The inbound poller runs every 5 min. Check /admin/feature-flags to confirm messages_inbox is on for your account. If it's been more than 10 min and nothing's landing, ping Matt.
A reply I sent isn't showing in the thread. The Sent folder gets captured on the next poll cycle. Wait 5-10 minutes and refresh. If still missing, the Send may have failed; check the feedback message on the composer.
An attached order looks wrong. The auto-attach matches by email + 30-day window. If the customer used a different email or it's older than a month, the thread is "ghost" — click Attach to customer and search manually.
The customer says they sent something I can't see. Check Gmail directly first (the message may have hit spam or filters). If it's there but not in the inbox, message Matt — sometimes the labelling fails and the poll skips a row.
An AI draft used an em-dash. It shouldn't. The runtime sanitiser strips them. If you see one, screenshot and send to Matt — that's a bug, not expected behaviour.