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.