An AI phone receptionist,
built end-to-end.
Relay answers business phones in real time — bridging callers to a Gemini-powered voice assistant that takes messages, books appointments, transfers urgent callers, and silently switches languages on the fly. Relay is fully released at relayconnect.net.
Sign up free — Relay phones you within seconds for a ten-minute live demo. No credit card.
What Relay does for a small business.
A solo dentist, a contractor, a pet groomer — they miss calls. Relay picks up instead, holds a natural conversation with the caller, captures what they need, and emails a clean summary. Two modes share one number: external callers get a polite receptionist; the owner gets an open-ended assistant that can search the web and recall their own message history by voice.
Picks up 24/7
Greets callers, takes messages, classifies urgency. No voicemail, no hold music.
Speaks 29 languages
Greets in your chosen language and silently mirrors the caller mid-call.
Books appointments live
Connects to Google Calendar — checks availability and books on the call.
Hands off urgent calls
Live transfer to a real phone, with a private whisper announcing the caller.
A consulting case study, deployed.
Relay is what Sandy Brook DevWorks looks like when given a real product with real constraints — regulated telephony, real-time audio, multi-tenant billing, and zero-downtime infrastructure-as-code. Four deployed surfaces stacked together to ship an AI product that actually picks up the phone.
Real-time voice bridge
Twilio Media Streams ↔ Gemini Live
A long-lived WebSocket per call shuttles raw audio in both directions: G.711 μ-law 8 kHz from Twilio, PCM16 16 kHz to Gemini Live's bidirectional speech endpoint, and back again. Two concurrent System.Threading.Channels loops keep the pipeline lossless under load. Built-in VAD with tuned start/end-of-speech sensitivity, μ-law ↔ PCM16 + 8 kHz ↔ 16 kHz transcoding from scratch (no external codec), and a SHAKEN/STIR carrier-attestation filter that rejects spoofed calls before billable audio ever flows.
AI orchestration
Semantic Kernel + tool calling
Mode-gated plugins are registered with the live model at call start: Receptionist gets the Calendar plugin (check availability, book, cancel — with timezone-aware slot sampling); Assistant Mode gets Messages ("what did Sarah call about?") and WebSearch (Gemini text-API with native google_search grounding for live weather, traffic, hours). Receptionist can also conditionally register a RedirectCall tool that emits live TwiML to bridge the caller to a real phone — with a one-line whisper to the dialed party only.
Multi-tenant SaaS
4 Cloud Run services · 26 controllers · ~120 endpoints
Three .NET services with strict boundaries plus a static RelayConnect marketing service: a Blazor Server BFF for the dashboard, a JWT-auth REST API for tenant operations, and an internal voice service that owns the Twilio and Brevo integrations. Tenants authenticate via Google OAuth, Firebase email/password, or WebAuthn passkeys; cross-service calls use Google-signed OIDC instead of shared secrets. Stripe subscriptions are managed by Pulumi (catalog) plus webhook-driven self-heal; per-line config overrides cascade from global tenant settings; phone-number lifecycle (provision, hold, resume, release) is fully reversible from the dashboard.
Production-grade infrastructure
Pulumi · GCP · OpenTelemetry
Everything is code. Pulumi (C#) provisions Cloud Run services, Firestore composite indexes, Cloud Tasks queues, Cloud Scheduler jobs, KMS keyrings, Stripe products, Secret Manager secrets, and the IAM triangles required for OIDC service-to-service auth. Post-call enrichment runs on Cloud Tasks; daily-summary fan-out runs on Cloud Scheduler. Calendar OAuth refresh tokens are envelope-encrypted via Cloud KMS before persistence. Custom OpenTelemetry instrumentation around the Gemini Live session exports gemini.session.duration, gemini.turn.latency, and gemini.interruptions via an otelcol-google sidecar to Cloud Trace + Cloud Monitoring.
Four services, two product planes.
RelayConnect is the static front door. Behind it, the voice plane is hot — sub-second audio streaming end-to-end. The dashboard plane is transactional — JWT, REST, and reads off the same Firestore that the voice plane writes. Service-to-service hops are OIDC-signed, never shared secrets.
┌──────────┐ ┌─────────────┐ │ Caller │ PSTN call │ Twilio │ └──────────┘ ─────────────────▶ └─────────────┘ │ HTTP webhook │ + WSS audio ▼ ┌────────────────────────────┐ │ Twilio.API (Cloud Run) │ ◀───── Gemini Live (Vertex AI) │ ─ voice bridge │ bidirectional WSS │ ─ SK plugins (tools) │ │ ─ post-call enrichment │ ─────▶ Cloud Tasks ─▶ self └────────────────────────────┘ (transcribe, summarize, │ email) │ writes ▼ ┌────────────────────────────┐ │ Firestore │ ◀──── Relay.API (Cloud Run) └────────────────────────────┘ ─ JWT REST API ▲ │ OIDC │ bearer ▼ ┌────────────────┐ │ Relay.Web │ │ Blazor BFF │ │ Tenant signs │ │ in here ──┐ │ └────────────│───┘ ▼ Google OAuth Firebase Auth WebAuthn
Sub-second audio. WebSockets. Tuned VAD. Built-in spam filter.
JWT REST. Tenant-scoped queries. Stripe-driven plan limits.
Cloud Tasks for enrichment. Scheduler for digests. Idempotent.
What it's built with.
ASP.NET Core, Blazor Server
Live Audio + Text + Search grounding
Plugins, tool calling
Media Streams, TwiML, Voice
4 services, autoscaling
Multi-tenant document store
Async + cron, OIDC-gated
OAuth token envelope encryption
All infra as code
Custom Gemini metrics + traces
Subscriptions + metered billing
Firebase Auth + WebAuthn
Try Relay live.
Sign up free, pick a language, and Relay will phone you within seconds for a ten-minute live demo of the receptionist on your line.
Try the demoNeed something like this?
Sandy Brook DevWorks builds AI-integrated systems end-to-end — from real-time audio pipelines to multi-tenant SaaS to cloud infrastructure. Relay is one of them.
Talk to Sandy Brook