Fix extension transfer system and browser phone compatibility
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>
This commit is contained in:
@@ -209,6 +209,19 @@ class TWP_Twilio_API {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get call status only
|
||||
*/
|
||||
public function get_call_status($call_sid) {
|
||||
$call_result = $this->get_call($call_sid);
|
||||
|
||||
if ($call_result['success']) {
|
||||
return $call_result['data']['status'];
|
||||
}
|
||||
|
||||
throw new Exception('Could not retrieve call status: ' . ($call_result['error'] ?? 'Unknown error'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Create TwiML for queue
|
||||
*/
|
||||
@@ -220,12 +233,14 @@ class TWP_Twilio_API {
|
||||
$response->say($wait_message, ['voice' => 'alice']);
|
||||
}
|
||||
|
||||
$enqueue = $response->enqueue($queue_name);
|
||||
|
||||
// Pass waitUrl as an option to enqueue if provided
|
||||
$enqueue_options = [];
|
||||
if ($wait_url) {
|
||||
$enqueue->waitUrl($wait_url);
|
||||
$enqueue_options['waitUrl'] = $wait_url;
|
||||
}
|
||||
|
||||
$response->enqueue($queue_name, $enqueue_options);
|
||||
|
||||
return $response->asXML();
|
||||
} catch (Exception $e) {
|
||||
error_log('TWP Plugin: Failed to create queue TwiML: ' . $e->getMessage());
|
||||
@@ -682,7 +697,8 @@ class TWP_Twilio_API {
|
||||
if (!$client_name) {
|
||||
$current_user = wp_get_current_user();
|
||||
// Twilio requires alphanumeric characters only - remove all non-alphanumeric
|
||||
$clean_name = preg_replace('/[^a-zA-Z0-9]/', '', $current_user->display_name);
|
||||
// Use user_login for consistency across all client name generation
|
||||
$clean_name = preg_replace('/[^a-zA-Z0-9]/', '', $current_user->user_login);
|
||||
if (empty($clean_name)) {
|
||||
$clean_name = 'user';
|
||||
}
|
||||
|
Reference in New Issue
Block a user