By Sagar Shankaran, Founder of CallSphere
How CallSphere's shared customers/patients tables propagate state across voice, chat, SMS, and email. Vapi has no native cross-channel state.
Key takeaways
CallSphere's data model centers on customers (or patients in healthcare) tables that persist customer state across all channels. When a customer interacts on voice, the agent reads and writes to the same row that the chat agent uses, that the SMS agent uses, that the email agent uses. The result: the customer's preferences, history, and ongoing tasks are always one query away. Vapi exposes voice call records but no first-class cross-channel customer state.
Context is a slippery word. In conversational AI it can mean three different things:
Across-session context is what makes the agent feel like an actual assistant rather than a fresh hire on every call. It is also where most platforms fall down because they treat each session as independent.
The customers table (called patients in healthcare for clarity) is the source of truth for every customer:
| Column | Type | Notes |
|---|---|---|
| id | UUID | Primary key |
| tenant_id | UUID | Scope |
| phone | text | E.164 |
| text | Lowercased | |
| name | text | Full name |
| preferences | jsonb | Channel preference, language, etc. |
| profile | jsonb | Vertical-specific structured data |
| created_at | timestamp | First interaction |
| last_seen_at | timestamp | Most recent interaction (any channel) |
Every agent — voice, chat, SMS, email — reads and writes this row. The customer's stylist preference learned from a voice call is available on chat. The dietary restriction noted in chat is available on the next phone call. The emergency contact captured in email is available everywhere.
In addition to the static customer row, CallSphere maintains:
conversations — long-running conversations spanning sessionssession_state — short-lived key/value state per conversationcall_logs — every session's transcript and enrichmentTogether these provide three layers of memory: long-term (customer row), medium-term (conversation), short-term (session).
Hear it before you finish reading
Talk to a live CallSphere AI voice agent for healthcare in your browser — 60 seconds, no signup.
Vapi exposes call records and call metadata. It does not provide:
A Vapi customer who wants this builds it themselves:
This is doable but requires real engineering and is a common source of bugs (race conditions on concurrent updates, stale state, inconsistent identity resolution).
| Capability | Vapi | CallSphere |
|---|---|---|
| Customer state table | DIY | Built-in |
| Conversation abstraction | No | Yes |
| Session state KV | DIY | Built-in |
| Cross-channel reads/writes | DIY | Native |
| Identity resolution | DIY | Built-in (phone, email, auth, cookie) |
| Concurrency safety | DIY | Built-in (DB transactions) |
| Engineering hours to deploy | 60-160 | 0 |
graph TD
subgraph Channels
V[Voice Agent]
C[Chat Agent]
S[SmsAgent]
E[EmailTriageAgent]
end
subgraph State Layers
CT[(customers - long term)]
CV[(conversations - medium term)]
SS[(session_state - short term)]
CL[(call_logs - history)]
end
V --> CT
C --> CT
S --> CT
E --> CT
V --> CV
C --> CV
S --> CV
E --> CV
V --> SS
C --> SS
V --> CL
C --> CL
S --> CL
E --> CL
CT -->|preferences| V
CT -->|preferences| C
CV -->|open task| V
CV -->|open task| C
SS -->|pending_action| V
SS -->|pending_action| C
The diagram shows that every channel reads from and writes to all four state layers. State propagation is a property of the data model, not a feature each agent must implement.
A salon client has used CallSphere for six months. Her customer record now contains:
She calls on a Tuesday morning. The voice agent's first response: "Hi Maria, want to book your usual with Jen? She has Saturday at 10 AM open this week."
That single sentence is built from six months of cross-channel context. On a Vapi-only stack, the agent would say "Hi, what can I help you with?" and the customer would have to re-explain everything, every time.
Concurrency is where most DIY implementations break. Imagine:
Without proper concurrency control, the writes conflict and one is lost. CallSphere's built-in state model uses Postgres transactions and optimistic locking to handle these correctly. A DIY Vapi-plus-store implementation has to discover and fix this class of bug, often after a customer-facing incident.
Still reading? Stop comparing — try CallSphere live.
See the healthcare AI agent handle a real call — complete, industry-specific, and live in your browser. No signup.
If your conversations are stateless one-shots (a single survey, a single appointment confirmation), state persistence is unnecessary. For any business that aspires to a persistent customer relationship, this is foundational.
Book a demo to see the customer-state model in action.
Yes at rest with KMS-managed keys. PHI fields in healthcare are encrypted with field-level keys.
The customer record can have multiple identifiers (phone, email, auth ID). Resolution uses the first available match. Customers can be merged by an admin when duplicates are detected.
Yes. The profile jsonb column accepts arbitrary structured data, schema-validated per tenant.
GDPR data-rights deletion wipes the customer row, all conversations, all session state, and all call_logs. Audit logs of the deletion request are retained per legal requirement.
Yes. Default TTL is 30 days for conversations and 24 hours for session_state. Configurable per tenant.
Yes. Webhooks fire on customer create/update/delete; bidirectional sync to Salesforce, HubSpot, and Zoho is supported.

Written by
Sagar Shankaran· Founder, CallSphere
LinkedInSagar Shankaran is the founder of CallSphere, where he builds production AI voice and chat agents deployed across healthcare, hospitality, real estate, and home services. He writes about agentic AI, LLM engineering, and shipping voice agents that handle real calls in production.
See how AI voice agents work for your industry. Live demo available -- no signup required.
How CallSphere's 14 healthcare tools are designed: clear naming, idempotency, auth-bound, error contract. Practical patterns for voice AI tool schemas.
k3s + hostPath volumes give CallSphere agent hot-reload without redeploys. Vapi customers ship through their pipeline. Engineering velocity matters.
Triage to specialist to return-to-orchestrator pattern explained with code. CallSphere's OpenAI Agents SDK handoffs vs Vapi Squads' linear chain.
Direct OpenAI Realtime + Agents SDK = thinner stack vs Vapi's vendor middleware layer. CallSphere ships voice agents in days, not sprints.
Server-side VAD via OpenAI Realtime beats client-side VAD on false-trigger and cut-off problems. CallSphere's turn detection vs Vapi's pipeline.
Why PCM16 24kHz is the right audio format for realtime voice AI. CallSphere's pipeline vs Vapi's opinionated stack — codecs, sample rate, intelligibility.
© 2026 CallSphere Inc. All rights reserved.
Made within San Francisco
Watch how CallSphere handles real customer calls, schedules appointments, and processes payments — live.
Try Live DemoBook a DemoCalculate Your ROI