elevenlabs-twilio-memory-bridge
Personalization webhook service for ElevenLabs + Twilio voice agents with persistent caller memory.
What It Does
When a call arrives on your Twilio number, ElevenLabs' native integration triggers this webhook. The bridge looks up the caller's history, loads long-term memory facts and daily context notes, combines them with a customizable soul/personality template, and returns everything as a system prompt override so your agent greets each caller with full context.
Architecture
- •No audio proxying - ElevenLabs and Twilio handle media directly
- •Webhook only - called once per inbound call to inject context
- •File-based persistence - JSON files in
./data/, zero external dependencies - •OpenClaw compatible - works with any OpenAI-compatible LLM endpoint
Endpoints
| Endpoint | Method | Purpose |
|---|---|---|
/webhook/personalize | POST | ElevenLabs calls this on inbound call |
/webhook/post-call | POST | Optional post-call cleanup |
/api/memory/{phone_hash} | POST | Add long-term fact about a caller |
/api/notes | POST | Add global or caller-scoped context note |
/health | GET | Health check |
Setup
- •Clone repo,
pip install -r requirements.txt - •Copy
.env.exampleto.env, fill in secrets - •Configure ElevenLabs agent with Custom LLM pointing to your OpenClaw instance
- •Enable system prompt + first message overrides in agent Security settings
- •Add webhook URL
https://your-domain/webhook/personalizein ElevenLabs settings - •Import Twilio number in ElevenLabs dashboard
- •Run:
uvicorn app:app --host 0.0.0.0 --port 8000
Required Environment Variables
- •
ELEVENLABS_API_KEY- scoped ElevenLabs key - •
ELEVENLABS_AGENT_ID- your agent ID - •
OPENCLAW_API_BASE_URL- your OpenClaw instance URL - •
PUBLIC_BASE_URL- publicly reachable URL of this service
Security
- •All caller phone numbers are SHA-256 hashed before storage/logging
- •Secrets loaded exclusively from environment variables
- •Optional HMAC webhook signature verification
- •Safe for public GitHub repos, no secrets in source