Menu IVR frustrates callers, and every language needs staffing
"Press 1 for..." menus push callers toward agents for things self-service should handle, and offering support in every language your customers speak means staffing agents around the clock across timezones.
This solution replaces menu trees with natural-language intent capture and real-time voice-to-voice translation — so more calls resolve without an agent, and the ones that need one arrive with full context, in any language.
Capture intent → translate & respond → resolve or route → learn
- ✓ Natural-language intent capture
- ✓ Real-time voice-to-voice translation
- ✓ Self-service for common intents
- ✓ Context-rich handoff to agents
- ✓ Continuous tuning from transcripts
- ✓ Amazon Lex
- ✓ Amazon Transcribe
- ✓ Amazon Translate
- ✓ Amazon Polly
- ✓ AWS Lambda + Amazon Connect
- ✓ Confidence-threshold handoff
- ✓ No irreversible actions unconfirmed
- ✓ PII redaction before storage
- ✓ Full transcript logging
Low-confidence intents hand off, they don't guess
The bot only resolves what it's confident about. Below threshold, it routes to a queue with the transcript and detected intent already attached — no dead air, no repeating yourself.
import boto3 translate = boto3.client("translate") polly = boto3.client("polly") CONFIDENCE_THRESHOLD = 0.75 def handle_intent(event: dict) -> dict: intent = event["sessionState"]["intent"] lang = event["bot"]["localeId"] if intent["nluConfidence"]["score"] < CONFIDENCE_THRESHOLD: # Don't guess — hand off with full context attached return route_to_agent(event, reason="low_confidence") reply_en = resolve(intent["name"], intent["slots"]) reply = translate.translate_text( Text=reply_en, SourceLanguageCode="en", TargetLanguageCode=lang )["TranslatedText"] return speak(polly, reply, lang)
Give every caller a language-fluent first line
Deploy standalone, or pair it with Contact Lens QA to score every AI and human interaction the same way.