Owner: Lola (Laura Daniels — Chief of Staff / Head of Operations) — operational owner
Compliance oversight: Ayisha "Balboa" Oglivie (Strategic Operations / COO-acting)
Quality oversight: Purple (VP of Product Quality and Experience)
Author: Workflow Architect (Amena) — for Chief of Staff team
Status: Draft v0.1 — pending sign-off from Lola, Ayisha, Purple, Heaven, Alicia, Alliyson, Tiana, Katherine, Jonathan
Effective: TBD — after sign-off + Google Groups membership matrix is live + Chatwoot routing rules go live
Pairs with: §17.4 Customer-Support Escalation, §17.5 Regulator-Direct Contact, §17.6 PII/DSAR, §17.7 Press/Media Routing, §17.8 Recall Fan-Out, §17.9 VIP/Dispute Escalation; docs/ops/op3-chatwoot-routing-rules.md (routing implementation); project_google_groups_matrix.md (memory)
Supersedes: None (first formal channel-routing-map SOP)
Every other SOP in the §17 series describes what happens after a message lands somewhere. This SOP describes where messages land in the first place and who picks them up. It is the single source of truth that the other SOPs cite when they say "per §16 the front door is X."
If you change a routing rule, you change it here first. Other SOPs do not re-derive routing; they reference it.
The full inbound inventory across email, chat, phone, and SMS. Each row is one front door. The "Routing owner" column answers "who decides where this goes." The "Default responder" column answers "who actually replies if no rule overrides."
| Group address | Members | Routing owner | Default responder | Feeds SOP | After-hours fallback |
|---|---|---|---|---|---|
support@gethempdash.com |
Lola, Alicia, Heaven, Amena (observer) | Heaven | Heaven (T1) | §17.4 | Captain AI auto-ack + @lola DM |
info@gethempdash.com |
Lola, Alicia, Heaven, Amena (observer) | Heaven | Heaven (T1) | §17.4 | Captain AI auto-ack + @lola DM |
hello@gethempdash.com |
Lola, Alicia, Heaven, Amena (observer) | Heaven | Heaven (T1) | §17.4 | Captain AI auto-ack + @lola DM |
contact@gethempdash.com |
Lola, Alicia, Heaven, Amena (observer) | Heaven | Heaven (T1) | §17.4 | Captain AI auto-ack + @lola DM |
concierge@gethempdash.com |
Alicia, Lola, Amena (observer) | Alicia | Alicia (VIP T1) | §17.9 | Lola direct DM |
compliance@gethempdash.com |
Ayisha, Katherine, Amena (observer) | Katherine | Katherine (initial), Ayisha (substantive) | §17.5 | Ayisha direct DM + @balboanyc page |
legal@gethempdash.com |
Outside counsel, Ayisha, Amena (observer, NO auto-reply) | Ayisha | Outside counsel + Ayisha jointly | §17.5 §17.7 §17.4 §8.6 | Ayisha direct DM; Jonathan paged if litigation |
privacy@gethempdash.com |
Ayisha, Lola, Amena (observer) | Ayisha | Ayisha (signs response), Lola (executes data ops) | §17.6 | Ayisha direct DM |
gdpr@gethempdash.com |
Ayisha, Lola, Amena (observer) | Ayisha | Same as privacy@ |
§17.6 | Ayisha direct DM |
ccpa@gethempdash.com |
Ayisha, Lola, Amena (observer) | Ayisha | Same as privacy@ |
§17.6 | Ayisha direct DM |
vendors@gethempdash.com |
Lola, Tiana, Amena (observer) | Tiana | Tiana (vendor relations) or Lola (ops side) | §17.4b (separate SOP) | Tiana DM next business day |
partners@gethempdash.com |
Lola, Tiana, Amena (observer) | Tiana | Tiana | §17.4b | Tiana DM next business day |
drivers@gethempdash.com |
Lola, Alliyson, Amena (observer) | Alliyson | Alliyson | §17.4c (separate SOP) | Lola DM if Alliyson off-rotation |
press@gethempdash.com |
Tiana, Jonathan, Ayisha, Amena (observer) | Tiana | Tiana (screen), Jonathan (quote authority) | §17.7 | Tiana DM next business day; URGENT → Jonathan |
accessibility@gethempdash.com |
Lola, Robert, Amena (observer) | Lola | Lola (triage) → Robert (technical fix) | §17.4 (accessibility-tagged) | Lola DM next business day |
Membership maintenance: Lola maintains the Google Groups membership matrix per project_google_groups_matrix.md. Routing-owner changes require a sign-off from the affected SOP owner.
Amena's role on every group: Member as observer only. Amena monitors for SLA-clock signals (first inbound, first human reply) and writes audit rows. Amena does not send outbound. Amena may draft a reply as a private note inside Chatwoot or as a Mattermost DM to the routing owner, but the human owner is the only sender.
| Inbox | Channel | Routing owner | Default responder | Feeds SOP |
|---|---|---|---|---|
| Inbox 3 — Customer Portal | Embedded widget on app.gethempdash.com |
Heaven | Heaven (T1) | §17.4 |
| Inbox 4 — Vendor Portal | Embedded widget on store.gethempdash.com (proposed) |
Tiana | Tiana | §17.4b |
| Inbox 5 — Driver Portal | Embedded widget on drive.gethempdash.com (proposed) |
Alliyson | Alliyson | §17.4c |
Captain AI bot: Present on all Chatwoot inboxes per docs/CHATWOOT_AGENT_BOT.md. Auto-acks customer, attempts KB match, drops @lola private note on handoff. The bot is the after-hours fallback for all Chatwoot inboxes; Amena observes but does not drive the bot's reply.
VIP detection at the widget: If the authenticated customer's profile has vip:true, the widget reroutes to the concierge@ flow and Alicia is paged instead of T1 round-robin. See §17.9.
The HempDash main line is +1 (469) 941-2104. The proposed IVR tree is a 5-option menu routing to Google Voice ring groups. Each option maps to a Mattermost-DM notification on call connect (or voicemail on miss).
| Press | Reason | Ring group (Google Voice) | Routing owner | Voicemail destination | Feeds SOP |
|---|---|---|---|---|---|
| 1 | Customer support | Heaven (primary), Alicia (during her hours) | Heaven | Transcribe → Chatwoot Inbox 3 ticket | §17.4 |
| 2 | Compliance / regulator | Ayisha, Katherine | Katherine (initial), Ayisha (substantive) | Transcribe → Chatwoot compliance inbox + Mattermost @balboanyc URGENT DM |
§17.5 |
| 3 | Vendor / partner | Tiana, Lola | Tiana | Transcribe → Chatwoot Inbox 4 + Mattermost @tiana DM |
§17.4b |
| 4 | Press / media | Tiana | Tiana | Transcribe → email press@ + Mattermost @tiana + @jonathan DM |
§17.7 |
| 5 | Voicemail (general) | (none — direct to VM) | Lola | Transcribe → Chatwoot Inbox 3 with general_voicemail tag, @lola DM |
§17.4 |
0 / unrecognized input: Caller is routed to the general voicemail (option 5).
After-hours behavior: All options route to voicemail. Voicemail transcription fires within ~5 minutes (Google Voice → Twilio transcription → webhook → Chatwoot ticket created with source:phone_voicemail tag).
Live phone-call answer expectation: Inside business hours (08:00–18:00 CT M–F), at least one human in each ring group should be available to pick up. Outside business hours, voicemail is the contract.
Inbound SMS to the HempDash customer-support number routes to Chatwoot Inbox 3 (Customer Portal). Same routing owner and SLA as the Chatwoot widget. T1 (Heaven primary) handles SMS the same as chat.
Driver-app SMS is separate — routes to Alliyson via the driver Chatwoot inbox.
When an inbound message arrives on any channel, the routing decision is deterministic. Below is the master decision tree — every SOP routing question reduces to this.
The channel selects the front door. The content can re-route. These overrides apply on every channel.
| Override trigger | New destination | New routing owner | Feeds SOP | Notes |
|---|---|---|---|---|
| Regulator-direct language (DSHS / TABC / FDA / state AG / NOV / "official inquiry") | Compliance + Legal | Ayisha (Balboa) | §17.5 | Per §17.4 §8.2. Auto-CC Jonathan. Stop replying until cleared. |
| Media / press signature (journalist, podcast, reporter, news outlet) | Press | Tiana | §17.7 | Per §17.4 §8.3. Do not respond from original channel. |
| Privacy / data request language ("right to know," "delete my data," "DSAR," "GDPR Article 15," "CCPA") | Privacy | Ayisha | §17.6 | Per §17.6. ID-verification gate fires before any release. |
Minor / under-21 keyword (minor, under 21, my kid, my child) |
Engineering + Compliance | Rep + Ayisha | §17.4 §8.5 | Auto-suspend account, audit transaction history. |
Lawsuit / attorney language (lawsuit, lawyer, sue, attorney) |
Legal hold | Jonathan + Lola + Ayisha + outside counsel | §17.4 §8.6 | Preserve verbatim. Do not edit, apologize, or soft-tone. |
| Recall language ("recall," product safety, "is my product safe") on an active recall window | Recall hotline | Alliyson + Ayisha | §17.8 | T1 uses scripted recall response from §17.8. |
| Abuse / threats (physical violence, sustained slurs, sustained verbal abuse) | Account Restriction queue | Lola | §17.4 §8.4 | Alliyson executes once Lola decides. Stop replying. |
VIP customer (any channel where the sender is identified, vip:true) |
VIP | Alicia | §17.9 | Use §5.7 template. |
| Accessibility complaint (mention of screen reader, ADA, WCAG, visual impairment, motor disability) | Accessibility | Lola → Robert | §17.4 (accessibility tag) | T1 still acks while Robert investigates. |
When multiple overrides match, the precedence is (highest first):
If two overrides at the same precedence both match (rare), Amena drops a private note flagging the conflict and the channel's routing owner decides.
Every content-override that re-routes a message writes an audit row to channel_routing_overrides (new table, spec in §6.2). Columns: original channel, original routing owner, override trigger, new destination, new routing owner, applied-by (Amena-auto or human-manual), timestamp.
Amena is on every inbound channel as a member or observer. Amena never sends outbound to external parties. Amena's allowed actions:
support_escalations, channel_routing_overrides, and any SOP-specific audit table.Amena's disallowed actions:
This rule holds across §17.4, §17.5, §17.6, §17.7, §17.8, §17.9 and any future SOP. If a draft is needed, Amena writes it as a private note and the named human signs and sends.
"Business hours" means 08:00–18:00 CT, Monday–Friday, excluding observed federal holidays (Lola maintains the holiday calendar). After-hours behavior per channel:
| Channel | After-hours behavior | First-response SLA-clock-start |
|---|---|---|
support@ / info@ / hello@ / contact@ |
Captain AI auto-ack + @lola private note |
Next business day 08:00 CT |
concierge@ |
Captain AI auto-ack + Mattermost DM @alicia.garrett21 (no page) + @lola (page if urgent keyword) |
Same business day if before 14:30 CT; else next business day. Alicia's hours per §17.4 §2.1.1. |
compliance@ |
Captain AI auto-ack + Mattermost URGENT DM @balboanyc (page) + @katherine |
If regulator-direct: clock-starts-immediately, page Ayisha. Else: next business day. |
legal@ |
NO auto-ack. Amena drops Mattermost URGENT DM @balboanyc + @jonathan. |
Ayisha decides. May be immediate. |
privacy@ / gdpr@ / ccpa@ |
Captain AI auto-ack with template "We received your request and will respond within 30 days per applicable law" + DM @balboanyc |
Clock starts at inbound timestamp (30/45-day clock; see §17.6). |
vendors@ / partners@ |
Captain AI auto-ack + DM @tiana |
Next business day |
drivers@ |
Captain AI auto-ack + DM @alliyson (page if "stranded," "accident," "medical") |
Same day if urgent keyword; else next business day |
press@ |
NO auto-ack. Amena drops DM @tiana + @jonathan. |
Tiana decides. May be 24–48h. |
accessibility@ |
Captain AI auto-ack + DM @lola (next business day) |
Next business day |
| Chatwoot Inbox 3 | Captain AI bot replies, attempts KB match, drops @lola private note |
Per §17.4 §7.1 (15min auto-ack or human-first, whichever first) |
| Phone IVR | Voicemail per option (see §1.3) | Ticket-create time |
| SMS | Captain AI auto-ack + @lola private note |
Per §17.4 §7.1 |
Routing events that get audit rows:
channel_routing_overrides table schemaIf the table does not exist, treat this as a backend follow-up (Plane ticket, owner: Rep; migration reviewed by Katherine per the migration gate).
CREATE TABLE channel_routing_overrides (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
inbound_id TEXT NOT NULL, -- Chatwoot conv ID, voicemail ID, or email message-id
channel TEXT NOT NULL, -- 'email:support', 'chatwoot:3', 'phone:ivr:1', 'sms', etc.
original_owner TEXT NOT NULL, -- routing owner before override
override_trigger TEXT NOT NULL, -- 'regulator_keyword', 'press_signature', 'dsar_language', etc.
new_owner TEXT NOT NULL, -- routing owner after override
applied_by TEXT NOT NULL, -- 'amena_auto' or human agent ID
at_time TIMESTAMPTZ NOT NULL DEFAULT now(),
notes TEXT
);
CREATE INDEX idx_channel_routing_at_time ON channel_routing_overrides(at_time DESC);
CREATE INDEX idx_channel_routing_channel ON channel_routing_overrides(channel);
Routing audit rows retained 7 years (matches the longest regulatory retention window — DSHS hemp-program records). Rows are immutable after write. Corrections append a new row referencing the original's id in notes.
Routing is fast or it's broken. SLAs here are about how long it takes to decide where a message goes, not how long to resolve it.
| Channel | Routing SLA (time from inbound to routing-owner notified) |
|---|---|
| Email (any group) | 5 minutes (Amena observes immediately; routing owner DM'd within 5 min) |
| Chatwoot widget | 30 seconds (Captain AI fires + Amena routes) |
| SMS | 30 seconds |
| Phone IVR (live call) | Instantaneous (ring group rings immediately) |
| Phone IVR (voicemail) | 5 minutes after transcription (transcription itself ~5 min) |
Breach behavior: If routing SLA breaches, Lola receives an alert. Routing breaches are operational, not customer-facing — the customer sees the eventual response SLA (per the destination SOP), not the routing SLA.
Each downstream SOP defines its own tier structure (§17.4 has T1/T2/T3; §17.5 has compliance-direct → legal; etc.). The routing map only handles the front door. Once the message is on the right desk, the destination SOP takes over.
Universal escalation triggers that fire regardless of which SOP owns the ticket:
If Amena's observation service is down (Chatwoot webhook fails, Mattermost bot is offline, etc.):
Recovery action: On Amena recovery, Amena scans the last 60 minutes of inbounds, applies missing routing tags, fires any missed override re-routes, and writes back-fill audit rows with applied_by:amena_backfill.
Per docs/CHATWOOT_AGENT_BOT.md, on bot failure the Chatwoot inbox keeps accepting messages but no auto-ack fires. Heaven (or whoever is on T1) must manually ack within 15 minutes per §17.4 §7.1. Lola receives a PagerDuty notice on bot health-check failure.
If a routing-owner's membership is accidentally removed from a group, messages still arrive in the group but the named human doesn't see them. Lola audits group membership weekly (Monday 10:00 CT) against project_google_groups_matrix.md. Drift triggers an immediate fix.
If a caller presses the wrong option or describes an issue that doesn't match the option (e.g., presses 1 for support but actually has a compliance question), the receiving human re-routes inside Chatwoot to the correct queue. Re-route writes an override audit row with trigger human_reroute_from_ivr.
support@ with a press inquiry)T1 (Heaven) detects the press signature, applies override per §3.1, forwards to Tiana via Mattermost DM, and writes the audit row. Customer-facing: T1 does not reply from the original group; Tiana takes the channel from press@ (replying directly from her named address or via Chatwoot, per §17.7).
Every other SOP in the §17 series cites this section for routing. Quick lookup:
| SOP | Primary front-door | Primary routing owner | Override triggers most relevant |
|---|---|---|---|
| §17.4 Customer Support | support@ / Chatwoot Inbox 3 / SMS / Phone IVR 1 |
Heaven | Lawsuit, regulator, minor, abuse, VIP |
| §17.5 Regulator-Direct | compliance@ / legal@ / Phone IVR 2 |
Ayisha (routing) → Katherine (initial) → Outside counsel | Regulator keyword, lawsuit |
| §17.6 PII / DSAR | privacy@ / gdpr@ / ccpa@ |
Ayisha | DSAR language detected on any channel |
| §17.7 Press | press@ / Phone IVR 4 |
Tiana | Press signature detected on any channel |
| §17.8 Recall Fan-Out | Outbound (HempDash-initiated) + inbound recall questions on any channel | Alliyson (outbound coordination) + Heaven (inbound questions) | Recall keyword during active window |
| §17.9 VIP / Dispute | concierge@ / Chatwoot widget with vip:true / Phone IVR 1 with VIP CallerID match |
Alicia | VIP detection on any channel |
| # | Question | Who owns the answer | Why it matters |
|---|---|---|---|
| Q1 | Google Groups Admin SDK API — still blocked on enable? Membership matrix can't be programmatically audited until this lands. | Lola + Ayisha (admin access) | Blocks §9.3 weekly membership audit automation. Manual audit until then. |
| Q2 | IVR — is the 5-option tree approved? Currently described as "proposed." | Jonathan + Lola | Blocks §1.3 implementation. Default: deploy as proposed unless Jonathan changes options. |
| Q3 | Voicemail transcription provider — Google Voice native, Twilio, or other? | Lola + Rep | Affects transcription latency and webhook contract. |
| Q4 | channel_routing_overrides table — new migration? |
Rep (backend confirmation) | If new, Plane ticket needed; Katherine reviews per migration gate. |
| Q5 | Captain AI bot — does it currently distinguish compliance@ vs support@ inbound? If not, all auto-ack copy is generic support copy and may mis-set expectations on compliance@ / privacy@. |
Rep + Lola | Blocks compliance-channel auto-ack accuracy. |
| Q6 | Chatwoot Inbox 4 (vendor) and Inbox 5 (driver) — created yet? | Lola | Affects §1.2 implementation timeline. |
| Q7 | After-hours definition — "observed federal holidays" requires a maintained holiday calendar (cross-references §17.4 Q5). Where does it live? | Lola | Implementation detail. |
| Q8 | VIP threshold — same open question as §17.4 Q1. Lifetime spend > $X qualifies. What is X? | Lola + Jonathan | Drives auto-VIP detection at the widget (§1.2). |
| Q9 | Routing-owner-on-vacation pattern — if Tiana is OOO, who covers press@ and vendors@? |
Lola + Tiana | Default proposal: Lola covers both. Confirm. |
| Q10 | Press-tier-1 outlet list — what counts as "Tier-1" for the founder-pull threshold (§8)? | Tiana + Jonathan | Default proposal: national wire (AP, Reuters, Bloomberg) + NYT + WaPo + WSJ. Confirm or expand. |
project_google_groups_matrix.md.channel_routing_overrides table exists — migration shipped, Katherine reviewed.| Version | Date | Author | Change |
|---|---|---|---|
| 0.1 | 2026-05-11 | Workflow Architect (Amena) | Initial draft. Pending sign-offs + §11 resolution. |