One inbox for every client conversation
TLDR: Home service businesses talk to clients across texts, phone calls, voicemails, and a stack of marketplace inboxes. I designed an omnichannel mailbox that pulls every channel into one thread, attaching it to either a new lead or an existing client, with per-branch control over the lines, hours, and greetings behind it.
One client texts on Monday, another calls on Tuesday, and another messages through Google on Wednesday.
Three, or more, separate systems not speaking to each other, and three separate systems to maintain just for client communications.
Skip straight to the shipped design↓Key insights about how these businesses actually communicate.
I sat with call center agents, office administrators, and owner-operators. The clearest finding was that there is no single operating model: the same feature has to work for a ten-seat call center and for a one person operator.
- There was no shared record. Call history, text threads, and marketplace messages each lived in a different tool, and none of them wrote back to the client's file.
- Tools are diverse in order to capture leads. Companies use Angi's List, Thumbtack, Yelp, and Google Local Services, and all of these have the capability to message the client.
- Speed decided who won the job. Marketplace leads went to whoever replied first, often inside a few minutes, so a missed notification was a lost job.
- Many operators have many lines used for different things. Some are used for marketing purposes, printed on cars or ads. Some are used as a direct line of communication to a worker or operator. In a multi-branch org those lines belong to different branches, and each branch wants its own hours, greeting, and voicemail.
Three shapes of business, one feature. Each one changed a different part of the design.
"I need the next conversation served to me, not to go hunting for it."
"We have multiple lines and multiple tools a client can message. I need it all to go into one place."
"I need to know who's a hot lead or what's urgent, so I can follow up immediately."
One mailbox. Every channel lands in it, and every message attaches to the client it came from. Plus, an AI Receptionist to help with volume and after-hours tasks.
Texts, inbound and outbound calls, voicemails, and third party tools share a single inbox.
Unify
Every endpoint writes into one mailbox, so there is a single place to look.
Resolve
Each message is matched to a client record, so scattered touchpoints collapse into one history.
Route
Ownership rules flex to the team, from an assigned queue down to a single owner's phone.
The hard part was never the inbox. It was making various different endpoints behave like one.
Each channel arrives in its own shape: a call is an event with a recording, a text is a message, a marketplace lead is a form with a message stapled to it. I normalized all of them into one message primitive, then resolved each one to a lead or a client.
- Normalize on arrival. Every endpoint maps to the same record: channel, direction, participant, body, and attachments. A voicemail is a message with audio and a transcript.
- Resolve to a lead or a client. Match on phone number and email first, fall back to the marketplace lead id, and open a new lead when nothing matches.
- Respect each channel's rules. Marketplaces only accept replies inside their own thread, so an outbound message routes back through the endpoint it arrived on.
- One ownership model. Assignment behaves the same whether a queue claims it, an admin picks it up, or an owner is the only person there.
- Settings inherit, then override. Every line belongs to a branch, and a branch either takes the org's defaults or sets its own voicemail, greeting, and hours. One model covers a single-office shop and a twelve-branch operation.
The high fidelity surfaces: the mailbox, the thread, the dialler, the AI Receptionist, and the settings behind them.
Texts, calls, and voicemails in one list, each tagged with the channel it came in on, and filterable down to just one of them.
A missed call, a voicemail with its transcript, and a reply all sit in the same timeline, so anyone opening the thread sees the whole relationship. Quick actions turn it into a lead, an event, or an estimate without leaving the conversation.
Call back
Call back
Take and place calls without leaving the inbox. Mute, hold, forward, or transfer to whoever is free, with presence showing who is online, on a call, or out on a job. The keypad stays available for working through an IVR.
Let Meni help out with the volume. It answers messages, books appointments, creates leads, picks up the phone, and escalates to a real person when it needs to.
Save an answer once instead of rewriting it every time. A snippet stays personal, or gets shared across the whole team.
/snippetnameSet it once for the organization, or tailor it per branch: greeting, voicemail, ring queue, permissions and user rules, and what the AI Receptionist is allowed to handle and when it should hand off.