Eliminate Dead Air in AI Voice Assistants with Filler Messages — Telnyx AI Assistant Webhook Demo | Low Latency Club
Skip to main content
Blog<br>Code-first technical deep dives
Glossary<br>Voice AI & telecom terminology
Developer Docs<br>API references & integration guides
GitHub<br>Open-source repos & SDKs
Articles<br>Tutorials & support articles
AI Agents<br>Build voice AI agents
Voice API<br>Programmable voice calls
ClawHouse<br>AI-powered voice assistant
ClawdTalk<br>Conversational AI platform
Events<br>Videos<br>Podcast<br>Integrations
Resources
Blog<br>Code-first technical deep dives
Glossary<br>Voice AI & telecom terminology
Developer Docs<br>API references & integration guides
GitHub<br>Open-source repos & SDKs
Articles<br>Tutorials & support articles
Products
AI Agents<br>Build voice AI agents
Voice API<br>Programmable voice calls
ClawHouse<br>AI-powered voice assistant
ClawdTalk<br>Conversational AI platform
Contact us<br>Join our Slack
When an AI voice assistant calls a sync webhook tool — to look up an order, query a database, check inventory — the caller hears silence. Five seconds of dead air on a phone call feels like thirty. Hang up. Call again. Complaint filed.
Filler messages solve this. Configured per-tool in Telnyx Mission Control, they let the AI Assistant speak scripted phrases while waiting for the webhook to respond: "Let me look that up for you." at 0 seconds, "Still working on this, one moment please." at 5 seconds, "Almost there, thanks for your patience." at 15 seconds. The caller stays engaged. The webhook takes the time it needs. No dead air.
This walkthrough builds a complete demo: a Flask webhook server with a live split-screen dashboard that shows the webhook call, the filler messages firing, and the countdown in real time. 124 lines of Python, one AI Assistant, one phone number, one dashboard — and zero silence.
What You'll Build
A webhook server that an AI Assistant calls when a caller asks about an order:
Caller dials the AI Assistant — a voice AI agent configured in Mission Control
Caller asks a question — "What's the status of my order 12345?"
AI Assistant calls the webhook — a sync tool call to /webhook/order-status
Webhook delays — intentionally sleeps for 12 seconds (configurable) to simulate a slow backend
Filler messages fire — the AI Assistant speaks scripted phrases at 0s, 5s, and 15s while the webhook is processing
Webhook responds — returns mock order status as JSON
AI Assistant reads the result — "Your order 12345 has shipped via FedEx, tracking number FX-98765, estimated delivery July 20th."
Dashboard shows everything — a split-screen browser UI with the call timeline on the left and server logs on the right, updated in real time via Server-Sent Events
The whole flow is visible: the tool call arrives, the filler messages fire, the countdown ticks, the response goes back.
Why Filler Messages Matter
Every voice AI developer hits the same problem: sync webhook tool calls take time. A database query takes 2 seconds. A third-party API takes 5 seconds. A complex lookup takes 10 seconds. On a phone call, that's dead air — and dead air is the enemy of conversation.
Without filler messages, developers build workarounds:
Background music — doesn't tell the caller what's happening
"Please hold" TTS — fires once, then silence resumes
Async tools — more complex to build, don't work for all use cases
Faster webhooks — not always possible when you depend on external systems
Filler messages are the carrier-grade solution: the AI Assistant speaks configurable phrases at configurable intervals while the webhook processes. The caller knows the system is working. The developer doesn't have to build a workaround.
Prerequisites
Python 3.8+
A Telnyx account with funded balance
A Telnyx API key
A Telnyx phone number assigned to an AI Assistant
An AI Assistant with telephony enabled
ngrok for exposing your local server
The Architecture
Caller dials AI Assistant<br>┌──────────────────────┐<br>│ Telnyx AI Assistant │<br>│ (Mission Control) │<br>└────────┬─────────────┘<br>│ sync tool call<br>┌──────────────────────┐ SSE ┌──────────────────┐<br>│ Flask Webhook Server │──────────►│ Browser Dashboard │<br>│ POST /webhook/ │ │ Split-screen UI │<br>│ order-status │ │ (timeline + logs) │<br>└──────────────────────┘ └──────────────────┘<br>delays N seconds,<br>then returns mock<br>order status<br>The AI Assistant calls the webhook as a sync tool. The webhook sleeps for WEBHOOK_DELAY_SECONDS (default 12). During that delay, the AI Assistant speaks the filler messages. The browser dashboard receives real-time events via SSE.
Step 1: Clone and Configure
git clone https://github.com/team-telnyx/telnyx-code-examples.git<br>cd telnyx-code-examples/ai-assistant-filler-messages-demo-python<br>cp .env.example .env<br>pip install -r requirements.txt<br>Edit .env with your credentials:
TELNYX_API_KEY=your_telnyx_api_key_here<br>WEBHOOK_DELAY_SECONDS=12<br>PORT=5000<br>The WEBHOOK_DELAY_SECONDS controls how long the webhook waits before responding. Set it to 12-15 seconds...