Major Fixes: - Fixed extension transfers going directly to voicemail for available agents - Resolved browser phone call disconnections during transfers - Fixed voicemail transcription placeholder text issue - Added Firefox compatibility with automatic media permissions Extension Transfer Improvements: - Changed from active client dialing to proper queue-based system - Fixed client name generation consistency (user_login vs display_name) - Added 2-minute timeout with automatic voicemail fallback - Enhanced agent availability detection for browser phone users Browser Phone Enhancements: - Added automatic microphone/speaker permission requests - Improved Firefox compatibility with explicit getUserMedia calls - Fixed client naming consistency across capability tokens and call acceptance - Added comprehensive error handling for permission denials Database & System Updates: - Added auto_busy_at column for automatic agent status reversion - Implemented 1-minute auto-revert system for busy agents with cron job - Updated database version to 1.6.2 for automatic migration - Fixed voicemail user_id association for extension voicemails Call Statistics & Logging: - Fixed browser phone calls not appearing in agent statistics - Enhanced call logging with proper agent_id association in JSON format - Improved customer number detection for complex call topologies - Added comprehensive debugging for call leg detection Voicemail & Transcription: - Replaced placeholder transcription with real Twilio API integration - Added manual transcription request capability for existing voicemails - Enhanced voicemail callback handling with user_id support - Fixed transcription webhook processing for extension voicemails Technical Improvements: - Standardized client name generation across all components - Added ElevenLabs TTS integration to agent connection messages - Enhanced error handling and logging throughout transfer system - Fixed TwiML generation syntax errors in dial() methods 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Twilio WordPress Plugin
A comprehensive WordPress plugin for Twilio voice and SMS integration with advanced call center functionality.
⚠️ IMPORTANT: SDK Required
This plugin requires the Twilio PHP SDK v8.7.0 to function. The plugin will not work without it.
Quick Installation
- 
Install the Twilio SDK (Required):
chmod +x install-twilio-sdk.sh ./install-twilio-sdk.sh - 
Test the SDK installation:
php test-sdk.php - 
Configure Twilio Credentials in WordPress admin:
- Go to Twilio → Settings
 - Enter Account SID and Auth Token
 - Configure default phone numbers
 
 - 
Set up Phone Numbers in Twilio Console:
- Configure webhook URLs for voice and SMS
 - Voice: 
https://yoursite.com/wp-json/twilio-webhook/v1/voice - SMS: 
https://yoursite.com/wp-json/twilio-webhook/v1/sms 
 
Requirements
- PHP 8.0+ (required for Twilio SDK v8.7.0)
 - WordPress 5.0+
 - Twilio Account with active phone number
 - curl and tar (for SDK installation)
 
Key Features
📞 Call Center Operations
- Agent Groups: Organize agents into groups with priority levels
 - Call Queues: Manage incoming calls with position announcements
 - Smart Routing: Distribute calls based on availability and schedules
 - SMS Accept: Agents can text "1" to accept incoming calls
 - Queue Notifications: SMS alerts to designated numbers when calls enter queues
 
🌐 Browser Phone (WebRTC)
- In-Browser Calling: Make and receive calls directly from WordPress admin or frontend
 - Twilio Voice SDK v2: Uses latest SDK for WebRTC functionality
 - Visual Dialpad: Click-to-dial interface with DTMF support
 - Call Controls: Mute, hold indicators, call timer
 - Auto-Answer: Optional automatic call acceptance
 - Queue Integration: Accept calls from specific queues
 - Token Management: Automatic token refresh for uninterrupted service
 - Mobile-Friendly: Responsive design optimized for smartphones and tablets
 - Shortcode Support: Embed browser phone on any page with 
[twp_browser_phone] 
🕒 Business Hours Management
- Schedule-based Routing: Different call flows for business hours vs after-hours
 - Holiday Support: Define specific dates for holiday routing
 - Multiple Schedules: Create different schedules for departments
 - After-Hours Actions: Configurable routing when closed
 
🎛️ Workflow Builder
- Visual Interface: Drag-and-drop workflow creation
 - Step Types:
- Greeting: Welcome messages with multiple voice options
 - IVR Menu: Interactive voice response with digit collection
 - Call Queue: Place callers in queue with hold music
 - Forward: Route calls to specific numbers
 - Voicemail: Record messages with transcription
 - Schedule Check: Route based on business hours
 
 - Voice Options:
- Default Twilio voice (Say)
 - ElevenLabs text-to-speech integration with voice persistence
 - Custom audio file URLs
 
 - Smart Voice Loading: Saved voices display without API calls
 
📱 SMS Integration
- Agent Notifications: Automatic SMS alerts when calls arrive
 - Queue Management: Agents receive queue status updates
 - Command System: Text commands to manage availability
 - SMS Logging: Complete history of all SMS interactions
 
🔔 Discord & Slack Notifications
- Real-time Alerts: Instant notifications to Discord channels and Slack workspaces
 - Multiple Event Types: Incoming calls, queue timeouts, and missed calls
 - Rich Formatting: Structured messages with caller info, queue details, and timestamps
 - Webhook Integration: Simple configuration with webhook URLs
 - Configurable Options: Enable/disable specific notification types
 - Automatic Monitoring: Background checks for queue timeout situations
 
📊 Real-time Dashboard
- Queue Monitor: Live view of waiting calls
 - Agent Status: Track agent availability
 - Call Statistics: Performance metrics and reporting
 - Call Logs: Detailed history with filtering options
 - Active Call Display: Real-time call count monitoring
 
🎤 Advanced Features
- Voicemail Transcription: Automatic speech-to-text
 - Callback System: Offer callbacks instead of long holds
 - Outbound Calling: Click-to-call with proper caller ID
 - Multiple Phone Numbers: Support for multiple business lines per workflow
 - Agent Phone Management: Store and validate agent phone numbers
 - Duplicate Prevention: Ensures unique phone numbers per agent
 - Enhanced Notifications: Discord and Slack integration for real-time alerts
 - Premium Voice Synthesis: ElevenLabs TTS integration for professional-grade voice prompts
 - Automatic Queue Creation: Personal and hold queues created automatically for all agents
 - Smart Extension System: Unique 3-4 digit extensions auto-assigned for direct dialing
 
Recent Updates
MAJOR: Complete Call Control System Overhaul (September 2025)
Comprehensive redesign of hold, transfer, and requeue functionality with professional-grade reliability.
🎯 Hold Function - Complete Solution
- Problem Solved: "Queue not found" errors that prevented calls from being put on hold
 - Automatic Setup: Personal and hold queues are now created automatically for all agents
 - Smart Extensions: Unique 3-4 digit extensions (100-9999) auto-assigned to each agent
 - Seamless Experience: Works immediately without any manual queue setup
 - Premium Audio: Professional hold messages using ElevenLabs voices (with fallback to Twilio)
 - Browser Phone Ready: Handles complex call scenarios from browser phone users
 
📞 Transfer Function - Professional Grade
- Audio Quality Fixed: Eliminated customers hearing technical webhook URLs during transfers
 - Multiple Transfer Types: Extension transfers, queue transfers, browser phone transfers, and external number transfers all work perfectly
 - Professional Announcements: "Transferring to extension 101" and "Transferring your call" messages
 - Smart Detection: Automatically identifies the correct call to transfer (customer, not agent)
 - Outbound Call Support: Transfer functionality now works for both incoming and outgoing calls
 - Enhanced Reliability: Comprehensive error handling prevents transfer failures
 
🔄 Requeue Function - Seamless Operation
- User Experience Fixed: Customers now hear "Placing you back in the queue" instead of technical errors
 - Proper Queue Integration: Seamless integration with queue waiting experience and hold music
 - Call Preservation: Maintains call history and position tracking when requeuing
 - Professional Audio: Uses same premium voice technology as other functions
 - Database Consistency: Works with all database schemas and maintains data integrity
 
CRITICAL: Outbound Call Issues Fixed (September 2025)
- Customer Disconnection Issue Resolved: Fixed major problem where hold, transfer, and requeue functions were disconnecting customers in outbound calls
 - Call Leg Detection System: New intelligent system identifies customer vs agent call legs in complex call topologies
 - Browser Phone Transfers: Fixed "Invalid phone number format" errors when transferring to browser phone agents
 - Outbound Call Stability: All call control functions now work correctly for both inbound and outbound scenarios
 - Enhanced Logging: Comprehensive debugging for call relationship tracking
 
Customer Number Detection Improvements (September 2025)
- Voicemail Interface Fix: Customer numbers now display correctly instead of showing "client:agentname" for browser phone calls
 - Call Recording Interface Fix: Recording admin interface now shows actual customer phone numbers for all call types
 - Smart Number Detection: Enhanced fallback logic retrieves customer numbers from call logs and parent call analysis
 - Browser Phone Support: Proper handling of complex call topologies created by browser phone calls
 - User Experience: Admin interfaces now consistently display meaningful customer information
 
Browser Phone Upgrade (v2.0)
- Migrated to Twilio Voice SDK v2: Replaced deprecated Client SDK v1.14
 - Improved Stability: Better error handling and automatic recovery
 - Token Management: Auto-refresh tokens before expiration
 - Enhanced Performance: Modern WebRTC implementation
 
Queue System Improvements
- Notification Numbers: Queues now use notification_number field for SMS alerts
 - No Direct Assignment: Queues are workflow destinations, not directly assigned to numbers
 - Better Integration: Improved queue handling in IVR and workflow steps
 
Voice Configuration Enhancements
- Voice Persistence: ElevenLabs voices save both ID and name
 - No Unnecessary API Calls: Saved voices display immediately without loading
 - Improved UX: Load voices only when changing selection
 
IVR Fixes
- Form Field Handling: Fixed IVR option saving and loading
 - Queue Selection: Proper queue routing based on digit selection
 - Voice Selection: Fixed voice dropdown persistence issues
 
Multiple Phone Numbers Support
- Workflow Enhancement: Workflows can now be assigned to multiple phone numbers
 - Junction Table: New 
twp_workflow_phonestable for many-to-many relationships - Backward Compatibility: Existing single-number workflows continue to work
 - Validation Fixes: Proper validation for multiple phone number selections
 
Discord & Slack Notifications
- Real-time Integration: Instant notifications to Discord channels and Slack workspaces
 - Event Monitoring: Automated tracking of incoming calls, queue timeouts, and missed calls
 - Rich Message Format: Structured notifications with caller details, queue info, and timestamps
 - Configurable Settings: Toggle notification types and set custom webhook URLs
 - Background Processing: Cron-based monitoring for queue timeout alerts
 
How It Works
Call Flow
- Incoming Call → Twilio webhook triggers
 - Workflow Processing → System loads assigned workflow
 - Step Execution → Each workflow step processes sequentially:
- Greeting plays welcome message
 - IVR collects user input
 - Schedule check determines routing
 - Queue or forward based on configuration
 
 - Agent Connection → Call routed to available agent
 - Logging → All interactions logged for reporting
 
Queue System
- Queue Assignment: Calls routed to queues through workflows
 - Notification Numbers: Optional SMS alerts to designated numbers (not agents)
 - Agent Groups: Queues linked to agent groups for distribution
 - Wait Experience: Configurable hold music and position announcements
 - Timeout Handling: Automatic callback offers after timeout
 - Browser Phone Integration: Agents can accept queue calls via browser
 
Agent Management
- Phone Number Storage: Agent numbers stored in WordPress user profiles
 - Status Tracking: Available/Busy/Offline states
 - SMS Commands: Text "1" to accept calls
 - Priority Levels: Agents have priority within groups
 - Browser Phone Mode: Option to receive calls in browser or cell phone
 
Configuration
Initial Setup
- Install Plugin and activate in WordPress
 - Install Twilio SDK using provided script
 - Configure Credentials:
- Navigate to Twilio → Settings
 - Enter Twilio Account SID and Auth Token
 - Set default SMS number for notifications
 - Configure TwiML App SID for browser phone (optional)
 
 
Phone Number Setup
- 
In Twilio Console:
- Purchase or select phone number
 - Configure Voice webhook: 
https://yoursite.com/wp-json/twilio-webhook/v1/voice - Configure SMS webhook: 
https://yoursite.com/wp-json/twilio-webhook/v1/sms - Set method to HTTP POST
 
 - 
In WordPress Admin:
- Go to Twilio → Phone Numbers
 - Verify numbers are synchronized
 - Assign workflows to numbers (multiple numbers per workflow supported)
 
 
Creating Workflows
- 
Navigate to Twilio → Workflows
 - 
Create New Workflow:
- Name your workflow
 - Select phone numbers to assign (multiple selection supported)
 - Add steps using the builder
 
 - 
Configure Steps:
- Greeting: Set welcome message and voice
 - IVR Menu: Define options and routing
 - Queue: Select target queue
 - Schedule: Choose business hours schedule
 
 
Setting Up Queues
- 
Create Queue (Twilio → Queues):
- Queue Name: Descriptive name
 - Notification Number: SMS alerts for queue activity (optional)
 - Agent Group: Select assigned group
 - Wait Music: URL for hold music
 - Timeout: Maximum wait time
 
 - 
Use in Workflows:
- Add Queue step to workflow
 - Select queue from dropdown
 - Configure announcement message
 
 
Browser Phone Setup
- 
Create TwiML App in Twilio Console:
- Voice Request URL: Your server's TwiML endpoint
 - Copy the Application SID
 
 - 
Configure in WordPress:
- Go to Twilio → Settings
 - Enter TwiML App SID
 - Save settings
 
 - 
Access Browser Phone:
- Navigate to Twilio → Browser Phone
 - Select caller ID from available numbers
 - Start making/receiving calls
 
 
Agent Configuration
- Create Agent Groups (Twilio → Agent Groups)
 - Add Agents to groups with priorities
 - Set Phone Numbers in user profiles
 - Configure Call Mode: Browser or cell phone
 - Train Agents on SMS commands and browser phone
 
Discord & Slack Setup
- 
Discord Configuration:
- Create a webhook URL in your Discord server settings
 - Navigate to Twilio → Settings → Notifications
 - Paste Discord webhook URL
 - Enable desired notification types
 
 - 
Slack Configuration:
- Create a webhook URL in your Slack workspace
 - Navigate to Twilio → Settings → Notifications
 - Paste Slack webhook URL
 - Configure notification preferences
 
 - 
Notification Types:
- Incoming Calls: Alert when calls enter queues
 - Queue Timeouts: Alert when calls wait too long (configurable threshold)
 - Missed Calls: Alert when calls are abandoned or timeout
 
 
Frontend Browser Phone
Shortcode Usage
The browser phone can be embedded on any WordPress page using the [twp_browser_phone] shortcode. This is perfect for creating dedicated agent pages or customer service portals.
Basic Usage:
[twp_browser_phone]
With Options:
[twp_browser_phone title="Customer Service Phone" show_title="true" compact="false"]
Shortcode Parameters
- title: Custom title for the phone widget (default: "Browser Phone")
 - show_title: Display the title above the phone (default: "true")
 - compact: Use compact layout for smaller spaces (default: "false")
 
Permission Requirements
- Users must be logged in to access the browser phone
 - Users need the 
twp_access_browser_phonecapability ormanage_options - Phone Agent role users have access by default
 
Mobile Optimization
- Responsive Design: Adapts to all screen sizes
 - Touch-Friendly: Large buttons optimized for mobile devices
 - Haptic Feedback: Vibration on button press (where supported)
 - Auto-Zoom Prevention: Proper viewport handling for mobile browsers
 - Dark Mode Support: Automatically adapts to user's system preference
 
Voice Configuration
ElevenLabs Integration
- Get API Key from ElevenLabs dashboard
 - Configure in Settings: Add API key
 - Select Voices in workflow steps:
- Click "Load Voices" to fetch available options
 - Selected voices are saved with both ID and name
 - Voice names persist across edits without API calls
 
 
Audio Options per Step
- Say: Default Twilio text-to-speech
 - TTS: ElevenLabs premium voices with persistence
 - Audio: Custom MP3 file URLs
 
Troubleshooting
Common Issues
Browser Phone "Client version not supported"
- Fixed in latest version: Upgraded to Voice SDK v2
 - Clear browser cache and reload page
 - Check TwiML App SID is configured
 
"Twilio SDK classes not available"
# Reinstall SDK
./install-twilio-sdk.sh
# Test installation
php test-sdk.php
Calls Not Routing to Queues
- Verify queue exists and is active
 - Check agent group has members
 - Ensure agents have valid phone numbers
 - Review workflow step configuration
 - Check notification_number field (not phone_number)
 
Outbound Call Control Issues - RESOLVED
- Customer Disconnections: FIXED - All call control functions now work perfectly for outbound calls
 - Hold Not Working: RESOLVED - Automatic queue creation eliminates "queue not found" errors
 - Transfer Failures: FIXED - Professional TwiML generation prevents webhook URL errors
 - Browser Phone Transfers: ENHANCED - Full support for 
client:identifier transfers with smart detection - Requeue Problems: RESOLVED - Customer call leg detection ensures proper queue placement
 - Audio Quality: ENHANCED - Premium TTS voices replace technical error messages
 - Setup Required: ELIMINATED - Everything works automatically without manual configuration
 
Customer Number Display Issues - RESOLVED
- "client:agentname" in Voicemails: FIXED - Real customer numbers now display correctly in all interfaces
 - Wrong Numbers in Recording Interface: RESOLVED - Enhanced detection shows actual customer phone numbers
 - Missing Customer Info: ENHANCED - Smart fallback logic retrieves customer numbers from multiple sources
 - Browser Phone Call Issues: PERFECTED - Proper customer identification in all call scenarios
 - Admin Interface: IMPROVED - All admin interfaces now consistently show meaningful customer information
 - Data Consistency: ENSURED - Customer information remains accurate across all features
 
SMS Not Sending from Admin
- Test with direct PHP script: 
php test-twilio-direct.php send - Verify Twilio credentials in settings
 - Check WordPress error logs
 - Ensure number is SMS-capable in Twilio
 
Voice Selections Not Saving
- Voices now save both ID and name automatically
 - No API call needed to display saved voices
 - Click "Load Voices" only to change selection
 - Check browser console for JavaScript errors
 
IVR Options Not Working
- Ensure only active form fields are enabled
 - Check queue selections are properly saved
 - Verify digit mappings in workflow data
 
Debug Mode
Enable WordPress debugging in wp-config.php:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Testing Tools
- Direct SMS Test: 
php test-twilio-direct.php send - SDK Test: 
php test-sdk.php - Webhook Simulator: Use Twilio Console debugger
 - Call Logs: Review in WordPress admin
 - Browser Phone: Test WebRTC connectivity
 
Database Structure
The plugin creates these tables:
twp_phone_schedules- Business hours definitionstwp_call_queues- Queue configurations (uses notification_number)twp_queued_calls- Active calls in queuestwp_workflows- Call flow definitions with voice persistencetwp_workflow_phones- Junction table for multiple phone numbers per workflowtwp_call_log- Complete call historytwp_sms_log- SMS message trackingtwp_voicemails- Recordings and transcriptionstwp_agent_groups- Agent group definitionstwp_group_members- User-to-group relationshipstwp_agent_status- Real-time agent availabilitytwp_callbacks- Callback request queue
Webhook Endpoints
All webhooks are REST API endpoints under /wp-json/twilio-webhook/v1/:
/voice- Main incoming call handler/sms- SMS message handler/ivr-response- IVR digit collection (fixed in latest)/queue-wait- Queue hold experience/agent-connect- Agent connection handler/callback-request- Callback system/outbound-agent-with-from- Outbound calling
Technical Details
Dependencies
- Twilio PHP SDK v8.7.0 - Server-side API operations
 - Twilio Voice SDK v2 - Browser phone WebRTC
 - WordPress REST API - Webhook handling
 - jQuery - Admin interface interactions
 
Browser Compatibility
- Chrome/Edge: Full support
 - Firefox: Full support
 - Safari: Requires HTTPS for WebRTC
 - Mobile Browsers: Limited WebRTC support
 
Security Considerations
- All webhooks use WordPress nonce verification
 - Phone numbers validated and sanitized
 - SQL queries use prepared statements
 - Sensitive data encrypted in database
 - HTTPS required for production use
 
Version History
v2.2.0 (Current - September 2025) - MAJOR RELEASE
- COMPLETE CALL CONTROL REDESIGN: Hold, transfer, and requeue functions completely rebuilt from the ground up
 - Automatic Queue Creation: Personal and hold queues created automatically for all users with unique extensions
 - Professional Audio Experience: Eliminated technical errors customers could hear during call operations
 - ElevenLabs TTS Integration: Premium voice synthesis throughout all call operations with intelligent fallback
 - Call Leg Detection: Advanced system for complex outbound call topologies preventing customer disconnections
 - Browser Phone Enhancement: Full support for browser phone transfers and complex call scenarios
 - User Experience: Seamless call control without any manual setup or configuration required
 - Database Consistency: Enhanced schema support with comprehensive fallback mechanisms
 - Professional Grade: Enterprise-level reliability and error handling throughout
 - Customer Number Detection: Enhanced voicemail and recording interfaces to show real customer numbers
 - Extension Management: Automatic 3-4 digit extension assignment for direct dialing capabilities
 
v2.1.0
- Multiple Phone Numbers: Workflows can now handle multiple phone numbers
 - Discord & Slack Integration: Real-time notifications for call events
 - Enhanced Monitoring: Automated queue timeout tracking and alerts
 - Notification System: Configurable webhook-based notifications
 - Background Processing: Cron jobs for timeout monitoring
 - Database Enhancements: New junction table for phone number relationships
 
v2.0.0
- Upgraded to Twilio Voice SDK v2 for browser phone
 - Fixed queue notification_number field naming
 - Enhanced voice selection persistence
 - Fixed IVR option saving and loading
 - Improved error handling and logging
 - Added automatic token refresh
 
v1.3.x
- Initial release with full call center features
 - Browser phone with Client SDK v1.14
 - Basic workflow builder
 - Queue management system
 
Support
- Check 
CLAUDE.mdfor detailed technical documentation - Review error logs in 
/wp-content/debug.log - Monitor Twilio Console for webhook errors
 - Test components individually using provided scripts
 - Report issues with specific error messages and logs
 
License
This plugin integrates with Twilio services and requires a Twilio account.