←Pierre Sauvignononsilent.com ↗
Case study · OnSilent

OnSilent Case Study

OnSilent replaced a mobile phone's voicemail with an AI receptionist for Australian tradespeople and real-estate agents. It answered missed calls, transcribed and triaged every message, and called people back. I designed, built and ran the whole system solo, from the first commit in March 2024 until I retired it in October 2026: the iOS and Android app, two realtime voice services, an AWS serverless backend, an admin backoffice and the marketing site.

The onsilent.com homepage showing the message inbox on a phone
The OnSilent homepage, with the app’s triaged message inbox, October 2026

At a glance

RoleSole engineer and product owner
PeriodMarch 2024 to October 2026, about 2,875 commits
ProductiOS and Android app sold by subscription, Australia, English
StackAWS serverless (Lambda, DynamoDB, SQS, SNS, EventBridge), ECS Fargate, Twilio, Expo / React Native, Next.js, WordPress
AIOpenAI Realtime (gpt-realtime, gpt-realtime-mini), GPT-4.1, GPT-4o mini, gpt-4o-mini-transcribe, Whisper
Scale83 Lambda functions, 2 realtime voice services, 22 DynamoDB tables

Traction

Between the first voicemail in April 2024 and its retirement on 1 October 2026, OnSilent processed 7,032 messages, about 65 hours of caller audio, for Australian small businesses.

MetricValue
Accounts with live call traffic23
Registered accounts64
Calls handled (missed, voicemail, AI-answered)9,457
Messages transcribed, summarised and classified7,032
Caller audio processed65 hours
Calls answered live by the AI assistant774
Outbound AI calls placed3,929 (30 hours of talk time)
Messages auto-tagged as sales leads1,787
Callers based in Australia98%
Outbound AI calls became the main source of messages from mid-2025Messages processed per month, Apr 2024 to Sep 2026 · 53% from outbound calls since Jul 2025Calls to the businessOutbound AI calls0200400600Apr 2024: 58 messages from calls to the businessApr2024May 2024: 197 messages from calls to the businessJun 2024: 34 messages from calls to the businessJulOct 2024: 558 messages from calls to the businessOctNov 2024: 193 messages from calls to the businessDec 2024: 37 messages from calls to the businessJan 2025: 21 messages from calls to the businessJan2025Feb 2025: 38 messages from calls to the businessMar 2025: 66 messages from calls to the businessApr 2025: 52 messages from calls to the businessAprMay 2025: 186 messages from calls to the businessJun 2025: 475 messages from calls to the businessJul 2025: 277 messages from calls to the businessJul 2025: 46 messages from outbound AI callsJulAug 2025: 150 messages from calls to the businessAug 2025: 495 messages from outbound AI callsSep 2025: 178 messages from calls to the businessSep 2025: 370 messages from outbound AI callsOct 2025: 176 messages from calls to the businessOct 2025: 198 messages from outbound AI callsOctNov 2025: 245 messages from calls to the businessNov 2025: 276 messages from outbound AI callsDec 2025: 199 messages from calls to the businessDec 2025: 234 messages from outbound AI callsJan 2026: 158 messages from calls to the businessJan 2026: 131 messages from outbound AI callsJan2026Feb 2026: 131 messages from calls to the businessFeb 2026: 149 messages from outbound AI callsMar 2026: 192 messages from calls to the businessMar 2026: 199 messages from outbound AI callsApr 2026: 111 messages from calls to the businessApr 2026: 57 messages from outbound AI callsAprMay 2026: 146 messages from calls to the businessMay 2026: 126 messages from outbound AI callsJun 2026: 142 messages from calls to the businessJun 2026: 162 messages from outbound AI callsJul 2026: 126 messages from calls to the businessJul 2026: 126 messages from outbound AI callsJulAug 2026: 88 messages from calls to the businessAug 2026: 70 messages from outbound AI callsSep 2026: 78 messages from calls to the businessSep 2026: 79 messages from outbound AI calls645no records
OnSilent production database archive · processed messages by month, Apr 2024 to Sep 2026

Launching the AI caller drove volume to a record 645 messages in August 2025, its first full month.

The product

A user picks a plan, gets a dedicated local number, and the app dials the carrier code that forwards their unanswered calls to it. From then on, a missed call is never lost. The caller hears a greeting and can leave a message or press 1 to talk to an AI assistant that knows the business: its services, its opening hours and, for real-estate agents, its current listings, crawled nightly from the agency's website.

Seconds later the user gets a push notification with a summary, the caller's name, a category, an urgency score from 1 to 10, and two suggested SMS replies. Urgent messages also go out by SMS, and every message can go to email or Zapier. During business hours, the AI caller can ring the person back on the user's behalf. Users can also run outbound campaigns, such as appointment reminders or follow-ups, from a CSV file or a voice command in the app.

The hard part was not the AI. It was the phone network: forwarding codes that differ by carrier, calls that hang up mid-greeting, pocket dials, spam callers and silent lines. All of it had to be handled without the user ever noticing.

Architecture

Two voice services and 83 Lambdas sit between the phone network and OpenAIwebhookslive audioMobile app (iOS, Android)Expo 54, React Native 0.81Apple in-app purchase, pushWebRTC voice assistantMarketing siteWordPress, Ollie child themeLive demo: record a messageResults over WebSocketBackoffice (admin)Next.js 14, Amplify Gen2AppSync, Cognito admin poolUsers, calls, prompts, billingAPI Gateway + Cognito4 REST and 7 HTTP / WebSocket APIs, Cognito user poolApple server notifications, OAuth, short linksTwilio · phone networkCarrier forwards missed callsLocal AU numbers, TwiMLRecordings, Lookup spam score83 Lambda functions · Node 20 to 24Call routing, transcribe, triage, notify, billing, crawlersSQS and SNS between stages, 7 EventBridge schedulesDynamoDB · 22 tablesUsers, calls, messagesOutbound calls, contactsStreams trigger call-backsS3 · 4 bucketsCall recordings, 1.2 GBGreetingsWeb app and assetsECS Fargate · 2 servicesInbound AI assistantOutbound AI callerBridges Twilio and OpenAIOpenAIVoice: gpt-realtime, gpt-realtime-mini · transcription: gpt-4o-mini-transcribe, WhisperText: GPT-4.1 triage, GPT-4.1 mini supervisor, GPT-4o mini contact summaries
Architecture · 3 frontends, Twilio, 83 Lambdas, 2 Fargate services, OpenAI

Eight repositories on one AWS account. Everything short-lived is a Lambda connected by queues, and state lives in DynamoDB and S3. The one thing Lambda cannot do, holding a live two-way audio stream for the length of a call, runs as two small ARM containers on Fargate that bridge Twilio's audio to OpenAI Realtime.

The call pipeline

Every missed call becomes a triaged message, and a stalled step is swept upCall forwardedfrom the carrierGreetingspam score checkedPress 1?yesnoAI conversationlive, gpt-realtimeVoicemailup to 60 secondsRecording to S3WAV from TwilioConvert to MP3ffmpeg LambdaTranscribegpt-4o-mini-transcribeTriageGPT-4.1, JSON schemaAI call-backbusiness hoursNotifypush, email, SMS, ZapierSafety net, every 10 minutesre-queues recordings stuck for 5 to 15 minutes
Message pipeline · 2 inbound paths, 4 queued stages, 1 safety net

Voicemails and AI conversations end in the same recording, so one pipeline processes both. Each stage is a Lambda triggered through a queue, and one GPT-4.1 call returns the whole message card at once: summary, caller, category, urgency and replies. A single SNS message then fans out to every channel the user turned on. For missed calls, the AI caller rings back once business hours start.

How AI is used

Each job uses the cheapest model that does it well. Live voice runs on OpenAI Realtime, and everything after the call runs on smaller text models.

JobModelWhy this model
Answer inbound calls livegpt-realtime, Whisper for the caller's wordsNatural speech with low latency; tools look up listings, book viewings and end the call
Place outbound callsgpt-realtime-mini, with a GPT-4.1 mini supervisorThe mini model keeps campaign calls cheap; the supervisor handles the harder reasoning
In-app voice assistantgpt-realtime over WebRTCTalks directly from the phone, with tools run by the backend
Transcribe recordingsgpt-4o-mini-transcribe, AssemblyAI as an alternativeLow cost per minute; the provider is a config switch
Triage each messageGPT-4.1 with a strict JSON schemaSummary, caller name, category, urgency, sentiment and suggested replies in one call
Remember each contactGPT-4o miniRolling summary of every past call with that person

What running live voice AI on a phone line taught me:

Making it reliable

A receptionist that loses one message is worse than none, so most of the work after launch went into the paths where calls fail. Each fix below came from production.

ProblemFix
After hanging up, the AI kept prompting a dead line and spent tokens every 20 secondsHang-up now tears down the silence detector, and any stream that never identifies itself is closed after 5 seconds
Transcription sometimes finished before the message record existedA retry on the write, so the message is saved once the record appears
A recording could stall between conversion, transcription and triageA safety-net job every 10 minutes re-queues any recording stuck for 5 to 15 minutes
Pocket dials and instant hang-ups filled the inbox with empty messagesRecordings under 2 seconds and AI calls under 14 seconds are logged as missed calls, not messages
Spam callers reached the AI and cost moneyA spam score from Twilio Lookup sends high-risk callers straight to voicemail
A scheduler running every minute could pick up the same outbound call twiceAtomic status changes, a FIFO queue with deduplication, and a second read before dialling

The pattern: every stage hands off through a queue, every hand-off is retried or swept up by a scheduled job, and nothing depends on a single webhook arriving.

Monetization and growth

Revenue. OnSilent sold monthly or yearly subscriptions through Apple in-app purchase, priced in AUD including GST, with a free trial. Each plan included AI minutes, billed per second: half rate for voicemail and outbound calls, 5% for a missed call. A single Lambda verified Apple's signed server notifications and drove a 13-state account lifecycle, from trial through grace period to archive. Archiving released the phone number and deleted the login.

Acquisition. The WordPress site let visitors record a message in the browser and watch it transcribed and triaged live. For real-estate agents, OnSilent sent appraisal leads into the agency's CRM (LeadPlus / Reapit) and read calendars and contacts through Google and Microsoft sign-in.

Outcomes

Working alone for two and a half years, I took OnSilent from a Twilio voicemail script to a production AI receptionist. It handled 9,457 calls and placed 3,929 AI calls before I retired it on 1 October 2026.

My lessons for teams building voice AI products:

  1. Telephony is the product. Carrier forwarding, short calls, spam and silence took more engineering than the models did.
  2. Put a queue and a sweeper behind every step that depends on a third party, and treat a webhook as a hint, not a guarantee.
  3. Record cost, duration and outcome on every call. With that data on each record, prompts, silence thresholds and model choices could be tuned against real traffic instead of guesses.

Contact

Hiring a hands-on product or engineering lead in Toulouse? Let's talk.

pierre.sauvignon at gmail dot com

Message on XLinkedInGitHub