A local Amazon Connect emulator — learn cloud contact centers without an AWS bill.
Amazon Connect is AWS's cloud contact center: contact flows (IVR), queues,
routing profiles, agents in a browser softphone, Lambda data dips, real-time
dashboards. It's also pay-per-use with no local mode. Switchboard reproduces
the whole mental model on localhost — the same flow-language JSON the real
console exports, the same routing rules, the same metric definitions — plus
the one thing AWS can't sell you: a simulated floor of callers and agents,
so the system is always alive.
No AWS account. No cloud calls. No dependencies beyond FastAPI. Restart to reset.
Unaffiliated with Amazon/AWS; Amazon Connect is a trademark of Amazon.com, Inc. All customer data is fictional (Ridgeline Outfitters, an invented outdoor-gear retailer).
pip install -r requirements.txt
python run.py
Open http://127.0.0.1:5250 — the simulator starts automatically at 6 calls/min with seven auto-agents staffed. Then work through LABS.md (ten hands-on labs) with LEARNING.md (the Switchboard ↔ Amazon Connect concept map) beside it.
Queues, routing profiles (priority + delay per queue), agents, hours of operation, claimed phone numbers mapped to flows — the layout of a real Connect instance, plus the simulator controls.
Flows are stored and edited as Amazon Connect flow-language JSON
(Version 2019-10-30, the exact format the real console exports). 14 block
types implemented: DTMF menus, hours/staffing checks, Lambda invocations
with the real event shape and flat-response rule, attribute updates with
$.Attributes / $.External interpolation, loops, priority changes, queue
transfers with capacity error branches. A validator flags broken transitions
and a step debugger walks a test contact through block by block.
Go available, get offered contacts by the router, see the screenpop built from IVR + Lambda data, talk, wrap up with a disposition in after-contact work. Miss an offer and you're benched while the contact keeps its place in line — exactly like the real Contact Control Panel.
Real-time queue/agent state plus historical service level, abandon rate, AHT, ASA, and occupancy — computed with Amazon Connect's definitions — and searchable contact records (CTRs) with the full flow trace per contact.
Synthetic callers arrive as a Poisson process, listen to prompts, press menu keys (or don't), wait with limited patience, and abandon when ignored. Auto-agents ring, answer, talk, and do after-contact work. Crank the arrival rate past capacity and watch service level collapse in real time — the queueing dynamics behind every contact-center SLA argument, reproducible on demand.
app/
flow_engine.py # interpreter for the Connect flow language
routing.py # routing order: profile priority → contact priority → wait
simulator.py # caller personas + auto-agents
metrics.py # SL / abandon / AHT / ASA / occupancy
seed.py # the fictional Ridgeline Outfitters instance
main.py # FastAPI app + REST API
flows/ # seed flows (importable Connect JSON)
lambdas/ # local "Lambda" functions (crm_lookup data dip)
static/ # zero-build UI: console, flows, CCP, metrics
tests/ # 49 tests: engine, routing, metrics, simulator, API
Run the tests:
python -m pytest tests -q
Amazon Connect skills show up constantly in government and enterprise work, but practicing on the real service means an AWS account, a payment method, and per-day charges for any phone number you forget to release. Switchboard is the $0 rehearsal: build the vocabulary and muscle memory here, then do the 15-minute tour of the real console (see LEARNING.md § "When you're ready for real AWS") already knowing what every screen does.
MIT — see LICENSE.



