Architecture Visual

How a GoTo Connect voicemail becomes a triaged, urgency-flagged email: from S3 upload through Whisper transcription, GPT-4o-mini triage, DynamoDB persistence, and SES delivery, plus a scheduled weekly digest.

Call Ingestion

GoTo Connect
Tenant call recorded and dropped as an audio file
S3: recordings/
Existing bucket, untouched, pipeline only adds an event notification

Transcription and Triage

λ Lambda: start_transcription
S3 ObjectCreated trigger, orchestrates the whole call flow
OpenAI Whisper
Speech-to-text transcription of the call recording
GPT-4o-mini
Category, urgency flags, summary, and action items

Persistence and Notification

DynamoDB: CallLog
One item per call, keyed by call_id + processed_at
Amazon SES
Per-call triage email to the property manager

Weekly Digest

EventBridge: weekly schedule
Cron trigger, Monday 08:00
λ Lambda: weekly_summary
Queries the past 7 days from CallLog, rolls up highlights
Amazon SES
Weekly digest email

Filename/metadata parsing never raises: anything it can't confidently extract degrades to "unknown" rather than stalling the pipeline. Secrets (OpenAI API key) are injected via a sensitive Terraform variable at deploy time, never hardcoded.

Ingestion layer: GoTo Connect drops call recordings into an existing S3 bucket under recordings/. The pipeline adds a notification; it doesn't take ownership of the bucket.
Transcription layer: Lambda calls the OpenAI Whisper API to turn the recording into text, then hands it to GPT-4o-mini for classification.
Triage layer: GPT-4o-mini returns category, urgency flags (e.g. maintenance_emergency), a plain-language summary, and action items.
Persistence layer: DynamoDB's CallLog table is the single source of truth for both per-call lookups and the weekly digest query.
Notification layer: Amazon SES sends both the immediate per-call triage email and the Monday-morning weekly digest.
Scheduling layer: An EventBridge cron rule triggers weekly_summary independently of call volume, so the digest always goes out.
Read Build Story Back to Demo GitHub README
Back to Portfolio