Deterministic intake engine

Turn every conversation into structured business state.

RoomState answers, extracts, validates, and updates a deterministic record your business can actually act on — from voice, chat, SMS, email, and web forms.

Voice · Chat · SMS · Email · FormsTyped schemasAudit-grade events
Inboundvoice
“My roof is leaking above the kitchen after the storm last night. How fast can someone come out?”
caller · ext. 415-555-0144 · 00:00:14
Assistant: “I can dispatch a team this morning. What address should they go to?”
roomstate · live
“812 Oak Ridge Lane. We need help ASAP — water is dripping on the counter.”
caller · 00:00:31
Room stateschema · v1 · valid
{
  "service_type": "roofing",
  "urgency": "high",
  "problem": "active leak",
  "location": "kitchen",
  "cause": "storm",
  "address": "812 Oak Ridge Lane",
  "status": "ready_for_dispatch"
}
All required fields satisfied · 6 / 6audit #4831

Designed for operations teams in

Home ServicesHVACRoofingPlumbingRestorationMedSpaProperty Mgmt
The differentiator

Not a chatbot. A state machine.

Most AI agents finish a conversation and leave the work for someone else. RoomState finishes the conversation and leaves the work done — as a validated record in your system of record.

Chatbot

Output: a transcript

  • Responds conversationally
  • Leaves operators to interpret the transcript
  • Hard to audit after the call ends
  • No durable record beyond message history
RoomState

Output: a Room you can act on

  • Extracts structured fields against your schema
  • Validates each field — types, ranges, formats
  • Tracks what is still missing and asks for it
  • Produces an actionable business record per Room
How it works

A pipeline, not a prompt.

Every stage is observable, replayable, and typed. The runtime moves a message from a channel to a validated record — and nothing silently mutates the state in between.

01

Channels

Voice, web chat, SMS, email, web forms, and the Agent API all land on the same surface.

voicechatsmsemailapi
02

Transcript

Inbound speech and messages are normalized into an append-only conversation timeline.

03

Extractor

Typed extractors lift fields from the transcript with confidence and source spans.

04

Schema validation

Every field is validated against your Domain Pack — types, formats, business rules.

05

Room record

A single Room represents the active business objective. Missing fields are tracked.

06

Handoff

Dispatch, CRM, calendar, or webhook. Approved by an operator or by your policy.

The Room

One record per business objective.

Every Room shows the identity, the timeline, the fields the schema requires, what is still missing, what the assistant proposes, and a full audit trail. Operators see the system — and they have the final say on what leaves it.

Customer

Marcus Lin+1 415-555-0144marcus.l@example.comReturning · 2 prior rooms

Stats

Channelvoice → twilio
Domain packroofing.v1
Room idrm_8f3c…
Opened02:14 ago
Webhookdelivered

Conversation

inbound00:14
My roof is leaking above the kitchen after the storm.
assistant00:18extracted 4 facts
I can dispatch a team this morning. What address should they go to?
inbound00:31
812 Oak Ridge Lane. Water is dripping on the counter.
assistant · proposed00:36
Got it — a team will be at 812 Oak Ridge Lane in 45–60 minutes. Anything else we should know before they arrive?

Suggested next action

Dispatch Crew B to 812 Oak Ridge Lane and send arrival ETA via SMS — awaiting operator approval.

Required fields

service_typesatisfied
urgencysatisfied
problemsatisfied
addresssatisfied
preferred_windowmissing

Extractor confidence

0.92

Audit log

00:14message.inbound
00:16fact.proposed × 4
00:31fact.accepted: address
00:35action.proposed: dispatch
02:14webhook.delivered
Use cases

Built for operations, not novelty.

RoomState ships a generic intake runtime plus Domain Packs that encode the schema, required fields, and reply patterns for a specific vertical. The conversation is the surface; the record is the product.

AI receptionist

Answer the phone after hours and during overflow. Capture the caller, the reason, and the urgency — and route the right way.

Output caller, intent, callback window

Home services intake

Roofing, HVAC, plumbing, restoration. The Domain Pack defines the required fields; the Room collects them and validates.

Output service_type, address, urgency

Appointment scheduling

Negotiate windows against a real calendar. Propose, confirm, and write back — with a human in the loop on irreversible writes.

Output confirmed_slot, attendees, location

Lead qualification

Score against a typed schema, not a sentiment vibe. Pass qualified leads downstream; ask follow-ups on the rest.

Output qualification, budget, timeline

Claims & incident intake

Capture the incident, the parties, the timeline, and the supporting evidence — with an append-only audit trail.

Output incident_summary, parties, evidence_refs

Property management requests

Tenants describe an issue; RoomState classifies it, captures location and access, and routes to the right vendor.

Output issue_category, unit, access_window
Developer surface

A runtime your team can integrate, not a black box.

Send events. Read state. Subscribe to webhooks. Every change to a Room is an addressable, replayable event — written through an adapter, never inferred from a transcript.

The contract is small and explicit.

Post a customer event; receive the new validated state plus the list of fields the Room is still missing. Subscribe to a Room webhook to hear every transition.

  • API-first runtime
  • Typed schemas per Domain Pack
  • Signed, retry-safe webhooks
  • Event log per Room
  • Named state transitions
  • Idempotent updates
  • Replayable intake sessions
  • Mock adapters for local dev
POST /v1/rooms/:id/events
// Send a customer message — RoomState extracts, validates, returns state.
POST /v1/rooms/rm_8f3c…/events

{
  "event_type": "customer_message",
  "payload": {
    "text": "My roof is leaking above the kitchen."
  }
}
// Response — deterministic state, what is still missing, and an audit id. 200 OK { "state_updated": true, "room_state": { "service_type": "roofing", "problem": "active leak", "location": "kitchen" }, "missing_fields": ["preferred_window"], "audit_event_id": "evt_4831a…" }
Security & reliability

Built for the boring parts of an enterprise rollout.

The runtime treats audit, validation, and human authority as first-class. You can hand this to a security review without inventing controls after the fact.

Audit log per Room

Every transition emits an immutable audit event. Corrections are new events, never edits.

Schema validation

Fields are validated against a typed Domain Pack before they touch any downstream system.

Guardrails

Required-field gates, range checks, and intent classifiers keep extractors from leaving partial state.

Human review

Outbound messages and irreversible actions ship with operator approval by default.

Redaction

PII can be scrubbed from transcripts at the adapter boundary before extraction runs.

Role-based access

Workspace, operator, and per-Room scoping keep agents and operators inside their lane.

Retry-safe webhooks

Idempotency keys and signed payloads make downstream delivery safe to retry without dupes.

Observability

Processing runs, model calls, and webhook deliveries are first-class records, not log lines.

Your business does not need more conversations.
It needs cleaner state.