Overview
In conversational applications, it’s important to handle situations where users go silent or inactive. Pipecat provides built-in idle detection throughLLMUserAggregator and UserTurnProcessor, allowing your bot to respond appropriately when users haven’t spoken for a defined period.
How It Works
Idle detection monitors user activity and:- Starts a timer when the bot finishes speaking (
BotStoppedSpeakingFrame) - Cancels the timer when the user or bot starts speaking
- Suppresses the timer during function calls and active user turns (to avoid false triggers during interruptions)
- Emits an
on_user_turn_idleevent when the timer expires - Allows you to implement escalating responses or gracefully end the conversation in your application code
Basic Implementation
Step 1: Enable Idle Detection
Enable idle detection by setting theuser_idle_timeout parameter when creating your aggregator:
Step 2: Handle Idle Events
Create an event handler to respond when the user becomes idle:Step 3: Implement Retry Logic (Optional)
For escalating responses, track retry count in your application:Updating Timeout at Runtime
You can enable, disable, or change the idle timeout at runtime by pushing aUserIdleTimeoutUpdateFrame:
0 to 10.0), the timer arms right away without waiting for the next bot turn.
This is useful when you want to enable idle detection only at certain points in the conversation, or adjust the timeout based on context.
Best Practices
- Set appropriate timeouts: Shorter timeouts (5-10 seconds) work well for voice conversations
- Use escalating responses: Start with gentle reminders and gradually become more direct
- Limit retry attempts: After 2-3 unsuccessful attempts, consider ending the conversation gracefully by pushing an
EndWorkerFrame - Reset on user activity: Use the
on_user_turn_startedevent to reset your retry counter when the user speaks - Let the LLM respond naturally: Use developer messages to prompt the LLM rather than hardcoded TTS responses for more natural interactions
Next Steps
Try the User Idle Example
Explore a complete working example that demonstrates how to detect and
respond to user inactivity in Pipecat.
Turn Events
Learn about all available turn events and their parameters.