How to Build an Agentic Hotel PMS: Multi-Agent Architecture Explained
A technical guide to designing a multi-agent hotel PMS from scratch — agent boundaries, tool design, handoff patterns, and PMS integration.
TL;DR
Building an agentic hotel PMS requires careful agent decomposition, tool design, handoff logic, and PMS integration. Here is the architecture blueprint, drawn from CallSphere's production 11-agent stack.
Why Multi-Agent?
A monolithic "super agent" trying to handle every hotel workflow fails in production. Problems:
flowchart LR
CALLER(["Guest or Prospect"])
subgraph TEL["Telephony"]
SIP["Twilio SIP and PSTN"]
end
subgraph BRAIN["Hotel Concierge AI Agent"]
STT["Streaming STT<br/>Deepgram or Whisper"]
NLU{"Intent and<br/>Entity Extraction"}
TOOLS["Tool Calls"]
TTS["Streaming TTS<br/>ElevenLabs or Rime"]
end
subgraph DATA["Live Data Plane"]
CRM[("CRM and Notes")]
CAL[("Calendar and<br/>Schedule")]
KB[("Knowledge Base<br/>and Policies")]
end
subgraph OUT["Outcomes"]
O1(["Reservation confirmed"])
O2(["Room service order"])
O3(["Front desk handoff"])
end
CALLER --> SIP --> STT --> NLU
NLU -->|Lookup| TOOLS
TOOLS <--> CRM
TOOLS <--> CAL
TOOLS <--> KB
NLU --> TTS --> SIP --> CALLER
NLU -->|Resolved| O1
NLU -->|Schedule| O2
NLU -->|Escalate| O3
style CALLER fill:#f1f5f9,stroke:#64748b,color:#0f172a
style NLU fill:#4f46e5,stroke:#4338ca,color:#fff
style O1 fill:#059669,stroke:#047857,color:#fff
style O2 fill:#0ea5e9,stroke:#0369a1,color:#fff
style O3 fill:#f59e0b,stroke:#d97706,color:#1f2937
- Tool call explosion (40+ tools in one context)
- Policy drift across domains
- Handoff confusion
- Hallucinations on rarely-used tools
- Debugging nightmare
Multi-agent decomposition solves these by giving each agent a narrow domain.
Agent Decomposition Principles
- One agent per primary business domain (reservation, check-in, housekeeping, etc.)
- Shared context via typed state (not just conversation history)
- Explicit handoff contracts (each handoff includes required context)
- Tool specialization (tools live with the agent that owns them)
- Clear escalation paths (every agent can escalate to human)
Tool Design
Tools should be:
- Idempotent where possible (safe to retry)
- Strongly typed (JSON schema enforcement)
- Observable (all tool calls logged)
- Rate-limited per tenant
Example tool schema for create_reservation:
Hear it before you finish reading
Talk to a live CallSphere AI voice agent in your browser — 60 seconds, no signup.
{
name: "create_reservation",
description: "Create a confirmed reservation in the PMS",
parameters: {
guest_id: "string",
check_in: "ISO 8601 date",
check_out: "ISO 8601 date",
room_type: "enum: standard|deluxe|suite",
rate_plan: "string",
payment_token: "string (Stripe token)"
},
returns: {
reservation_id: "string",
confirmation_number: "string"
}
}
Handoff Contracts
Each handoff includes:
- Current agent's summary of conversation
- Required context for receiving agent
- Open tool calls to complete
- Guest profile state
Example handoff from Concierge to Reservation:
{
"from": "concierge",
"to": "reservation",
"context": {
"guest_phone": "+15551234567",
"guest_name": "John Smith",
"loyalty_tier": "Gold",
"intent": "book_room",
"dates_mentioned": ["2026-05-15", "2026-05-17"],
"language": "en"
}
}
PMS Integration Layer
Build a PMS abstraction layer so agent code is PMS-agnostic:
[Agents] -> [PMS Abstraction] -> [Opera|Mews|Cloudbeds|ASI adapters]
Each adapter implements the same interface (create_reservation, update_folio, get_room_status, etc.) but translates to the specific PMS API.
Guardrails
Multi-layer guardrails:
- Input guardrails: language validation, intent confidence threshold
- Tool guardrails: schema enforcement, rate limiting, policy checks
- Output guardrails: hallucination detection, policy compliance
- Human escalation: when any guardrail fails
Observability
Log every:
Still reading? Stop comparing — try CallSphere live.
CallSphere ships complete AI voice agents per industry — 14 tools for healthcare, 10 agents for real estate, 4 specialists for salons. See how it actually handles a call before you book a demo.
- Agent activation
- Tool call (with parameters and result)
- Handoff (with context payload)
- User utterance + agent response
- Guardrail trigger
Feed into LangSmith, Langfuse, or a custom observability stack.
Deployment
Production deployment uses:
- Containerized agents (Docker/Kubernetes)
- Stateless message-queue orchestration (NATS or Kafka)
- Persistent conversation state (PostgreSQL)
- Redis for low-latency state cache
- ChromaDB / Pinecone for RAG
FAQ
Q: How many agents is too many? A: Depends on domain. Hotels benefit from ~10–12 agents. Fewer = monolithic, more = handoff chaos.
Q: Can I use LangGraph instead of OpenAI Agents SDK? A: Yes. LangGraph, CrewAI, AutoGen all work.
Q: What's the biggest production pitfall? A: Handoff context loss. Invest in typed context contracts.
Related: CallSphere hotel stack | Hotel industry
#Architecture #MultiAgent #Design #CallSphere
Try CallSphere AI Voice Agents
See how AI voice agents work for your industry. Live demo available -- no signup required.