Abstract
Retell Bridge is iSM's production AI phone and chat infrastructure — a FastAPI WebSocket server that connects inbound phone calls and chat sessions to Bedrock Claude Sonnet, with transcript archival, lead scoring, caller recognition, and Slack-gated follow-up approval.
Problem
Handling inbound leads 24/7 without human intervention requires more than a simple LLM wrapper. Calls need spam detection, returning caller recognition, warm transfer capabilities, and a record that lands in the CRM immediately — not after a human reviews a voicemail in the morning.
Automated follow-up email sequences that run without human review create compliance and quality risks. A lead captured at 2am deserves a thoughtful response approved by a human, not a generic drip that fires unconditionally.
Approach
Server and call handling
The server runs on ECS Fargate behind an Application Load Balancer with HTTPS termination. Inbound calls via Retell connect over WebSocket; the server streams responses from Bedrock Claude Sonnet 4.6 using a 10-service system prompt with industry talking points, after-hours awareness, and multi-language support (Spanish).
Human-in-loop follow-up
Every qualified call (score ≥ 4 from a post-call Haiku scoring step) is written synchronously to Apex DynamoDB as a LEAD record. A Slack approval card posts to `#isim-phone-leads` with four buttons — day1, day3, day7, or skip.
Follow-up emails only fire when a human clicks a button; the automated drip system was removed after a 2026-04-11 incident where a missing `s3:DeleteObject` IAM permission caused the same day7 email to send 48 times to 3 leads.
Digest and recognition
A daily digest runs at 7am CT, emails a branded roll-up, and posts a Block Kit summary to Slack. Returning caller recognition looks up the caller's phone number in S3 and personalizes the greeting.
Status
- Live at retell.isimplifyme.com, handling inbound calls.
- Spam gate: owner numbers and S3 allowlist bypass. Three separate spam-scored calls required before blocklisting.
- HMAC-verified Slack interactive endpoint for approval buttons requires `SLACK_SIGNING_SECRET` and Slack Interactivity URL configured before buttons go live.
- S3 archival of call logs with CloudWatch alarms on 3 conditions → SNS email.