From 4da794ed0c800ee8c430f4ee4b03e95234101526 Mon Sep 17 00:00:00 2001
From: Claude
Date: Fri, 6 Mar 2026 14:43:21 -0800
Subject: [PATCH] Remove Twilio Push Credential references and add real
Firebase config
All FCM push notifications are handled by WordPress backend (TWP_FCM),
so Twilio Push Credentials are unnecessary. Also replaces placeholder
google-services.json with real Firebase project config (twp-softphone).
Co-Authored-By: Claude Opus 4.6
---
CLAUDE.md | 97 ++++++++++++-------------
admin/mobile-app-settings.php | 18 -----
includes/class-twp-mobile-api.php | 5 --
mobile/android/app/google-services.json | 10 +--
4 files changed, 51 insertions(+), 79 deletions(-)
diff --git a/CLAUDE.md b/CLAUDE.md
index 35aa4e2..55218f0 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -6,8 +6,26 @@
- **URL**: `https://phone.cloud-hosting.io/`
- **Deployment**: rsync to Docker (remote server only, not local)
- **SDK**: Twilio PHP SDK v8.7.0
+- **PHP**: 8.0+ required
+- **Optional**: AWS SDK (`aws/aws-sdk-php`) for SNS SMS provider
- **External SDK**: `wp-content/twilio-sdk/` (survives plugin updates)
+## Commands
+- **Install SDK (recommended)**: `./install-twilio-sdk-external.sh` (installs to `wp-content/twilio-sdk/`)
+- **Install SDK (internal)**: `./install-twilio-sdk.sh` (installs to `vendor/`, lost on plugin update)
+- **Test SDK**: `php test-sdk.php`
+- **Composer install SDK**: `composer install-sdk`
+- **Deploy**: rsync to Docker (remote server, see production path above)
+- **CI/CD**: Gitea workflows in `.gitea/workflows/` — `release.yml`, `update-version.yml`
+
+## Directory Structure
+- `twilio-wp-plugin.php` — Main plugin file, constants, SDK loading
+- `includes/` — All backend classes (28 class files)
+- `admin/` — Admin UI class (`TWP_Admin`), mobile app settings page
+- `assets/js/` — Browser phone JS, service worker
+- `assets/images/`, `assets/sounds/` — Static assets
+- `.gitea/workflows/` — CI/CD (release, version update)
+
## Phone Variable Names
**Use**: `incoming_number`, `agent_number`, `customer_number`, `workflow_number`, `queue_number`, `default_number`
**Don't use**: `from_number`, `to_number`, `phone_number`, `$agent_phone`
@@ -18,11 +36,20 @@
- **TWP_Admin**: Has `find_customer_call_leg()` - CRITICAL for call control
- **TWP_TTS_Helper**: ElevenLabs/Alice fallback, 30-day cache
- **TWP_User_Queue_Manager**: Auto-creates queues/extensions (100-9999)
-- **TWP_Webhooks**: 26 endpoints at `twilio-webhook/v1`
-- **TWP_Activator**: Creates 15 DB tables, run `ensure_tables_exist()` if missing
+- **TWP_Webhooks**: 35 endpoints at `twilio-webhook/v1`
+- **TWP_Activator**: Creates 16 DB tables, run `ensure_tables_exist()` if missing
+- **TWP_Core**: Main plugin orchestrator, hooks all classes together
+- **TWP_SMS_Manager**: SMS abstraction with provider interface
+- **TWP_SMS_Provider_Twilio** / **TWP_SMS_Provider_SNS**: SMS providers (Twilio default, AWS SNS optional)
+- **TWP_Mobile_API**: REST API for mobile app
+- **TWP_Mobile_Auth** / **TWP_Mobile_SSE** / **TWP_FCM**: Mobile auth, server-sent events, push notifications
+- **TWP_Call_Queue**: Queue operations and management
+- **TWP_Callback_Manager**: Callback request handling
+- **TWP_Workflow**: Workflow step execution engine
+- **TWP_Auto_Updater**: Plugin auto-update from Gitea releases
## Database
-15 tables with `twp_` prefix. Key notes:
+16 tables with `twp_` prefix. Key notes:
- `twp_call_queues`: User queues (general/personal/hold)
- `twp_agent_status`: Has `auto_busy_at` for 1-min auto-revert
- `twp_queued_calls`: Uses `enqueued_at` not `joined_at`
@@ -41,32 +68,6 @@ $api->update_call($customer_call_sid, ['twiml' => $twiml_xml]);
- Queue: Pass `waitUrl` as option in `enqueue()`
- TwiML: Use SDK classes, not raw XML
-## Recent Changes (v2.3.0)
-- Browser phone moved to admin-only
-- Call control uses `find_customer_call_leg()` to prevent disconnections
-- Auto-creates user queues/extensions when needed
-- Firefox support added
-- 1-min agent status auto-revert
-
-## SDK Installation
-- **External SDK (Recommended)**: Use `install-twilio-sdk-external.sh` to install SDK to `wp-content/twilio-sdk/`
- - Survives WordPress plugin updates
- - SDK location defined by `TWP_EXTERNAL_SDK_DIR` constant
- - Loading priority: External first, then internal `vendor/` fallback
-- **Internal SDK (Alternative)**: Use `install-twilio-sdk.sh` to install to `vendor/`
- - Will be deleted when WordPress updates the plugin
- - Requires reinstallation after each plugin update
-- **SDK Loading**: Plugin checks external location first via autoloader, falls back to internal
-- **Post-Update Detection**: Hook on `upgrader_process_complete` checks SDK status and shows warning
-
-## Browser Phone Configuration
-- **Edge Location Setting**: Configurable via Settings → Twilio Edge Location
- - Default: `roaming` (auto-select closest edge)
- - Options: ashburn, umatilla, dublin, frankfurt, singapore, sydney, tokyo, sao-paulo
- - Stored in: `twp_twilio_edge` option
- - Used by: Browser phone JavaScript for WebRTC connection
- - Critical: Wrong edge causes immediate call failures (e.g., US calls with Sydney edge)
-
## Development Notes
- **API**: E.164 format (+1XXXXXXXXXX)
- **Database**: Use `$wpdb`, prepared statements
@@ -79,30 +80,24 @@ $api->update_call($customer_call_sid, ['twiml' => $twiml_xml]);
- User-specific queues with extensions
- Browser phone at `admin.php?page=twilio-wp-browser-phone`
- ElevenLabs TTS with Alice fallback
-- 68 AJAX actions, 26 REST endpoints
+- 77 AJAX actions, 35 REST endpoints
+- Browser phone moved to admin-only (v2.3.0)
+- Firefox, Chrome, Safari, Edge support
+- 1-min agent status auto-revert
-## Recent Technical Changes (v2.8.9)
+## SDK Loading
+- **External SDK (Recommended)**: `wp-content/twilio-sdk/` — survives plugin updates
+- **Internal SDK**: `vendor/` — deleted on plugin update, needs reinstall
+- Loading priority: External first (`TWP_EXTERNAL_SDK_DIR`), then internal fallback
+- Post-update hook (`upgrader_process_complete`) warns if SDK missing
-### SDK Persistence Between Plugin Updates
-- **Problem**: WordPress plugin updates delete entire plugin folder including `vendor/` SDK
-- **Solution**: External SDK installation at `wp-content/twilio-sdk/` survives updates
-- **Implementation**:
- - New constant: `TWP_EXTERNAL_SDK_DIR` points to `wp-content/twilio-sdk/`
- - Loading priority in `twp_check_sdk_installation()`: External first, internal fallback
- - Classes updated: `TWP_Twilio_API`, `TWP_Webhooks` constructors check external location first
- - New script: `install-twilio-sdk-external.sh` automates external installation
- - Post-update hook: `twp_check_sdk_after_update()` detects missing SDK after updates
- - Admin notices: `twp_sdk_missing_notice()` shows both installation options
- - Warning system: `twp_show_sdk_update_warning()` via transient after plugin updates
+## Browser Phone Configuration
+- **Edge Location**: `twp_twilio_edge` option, default `roaming`
+- Options: roaming, ashburn, umatilla, dublin, frankfurt, singapore, sydney, tokyo, sao-paulo
+- Wrong edge causes immediate call failures (e.g., US calls with Sydney edge)
-### US Calls Failing Fix (Browser Phone)
-- **Problem**: Browser phone had hardcoded `edge: 'sydney'`, causing US calls to fail with immediate HANGUP
-- **Solution**: Configurable edge location via WordPress settings
-- **Implementation**:
- - New setting: `twp_twilio_edge` with default value `roaming`
- - Settings UI: Dropdown in admin settings with 8 edge options
- - Browser phone JS: Uses `get_option('twp_twilio_edge', 'roaming')` instead of hardcoded value
- - Edge options: roaming, ashburn, umatilla, dublin, frankfurt, singapore, sydney, tokyo, sao-paulo
+## Changelog
+See `README.md` for detailed version history. Current version: v2.8.9.
---
-*Updated: Jan 2026*
\ No newline at end of file
+*Updated: Mar 2026*
\ No newline at end of file
diff --git a/admin/mobile-app-settings.php b/admin/mobile-app-settings.php
index cc92f58..f1ead94 100644
--- a/admin/mobile-app-settings.php
+++ b/admin/mobile-app-settings.php
@@ -54,7 +54,6 @@ if (isset($_POST['twp_save_mobile_settings']) && check_admin_referer('twp_mobile
update_option('twp_gitea_token', sanitize_text_field($_POST['twp_gitea_token']));
update_option('twp_twilio_api_key_sid', sanitize_text_field($_POST['twp_twilio_api_key_sid']));
update_option('twp_twilio_api_key_secret', sanitize_text_field($_POST['twp_twilio_api_key_secret']));
- update_option('twp_fcm_push_credential_sid', sanitize_text_field($_POST['twp_fcm_push_credential_sid']));
$settings_saved = true;
}
@@ -68,7 +67,6 @@ $gitea_repo = get_option('twp_gitea_repo', 'wp-plugins/twilio-wp-plugin');
$gitea_token = get_option('twp_gitea_token', '');
$twilio_api_key_sid = get_option('twp_twilio_api_key_sid', '');
$twilio_api_key_secret = get_option('twp_twilio_api_key_secret', '');
-$fcm_push_credential_sid = get_option('twp_fcm_push_credential_sid', '');
// Get update status
require_once TWP_PLUGIN_DIR . 'includes/class-twp-auto-updater.php';
@@ -208,22 +206,6 @@ $total_sessions = $wpdb->get_var("SELECT COUNT(*) FROM $sessions_table");
-
- |
-
- |
-
-
-
- Twilio Push Credential SID. Create in Twilio Console > Messaging > Push Credentials using your FCM service account JSON. Required for incoming call push notifications.
-
- |
-
diff --git a/includes/class-twp-mobile-api.php b/includes/class-twp-mobile-api.php
index dd8cc9d..77e7d9f 100644
--- a/includes/class-twp-mobile-api.php
+++ b/includes/class-twp-mobile-api.php
@@ -696,7 +696,6 @@ class TWP_Mobile_API {
$api_key_sid = get_option('twp_twilio_api_key_sid');
$api_key_secret = get_option('twp_twilio_api_key_secret');
$twiml_app_sid = get_option('twp_twiml_app_sid');
- $push_credential_sid = get_option('twp_fcm_push_credential_sid');
if (empty($api_key_sid) || empty($api_key_secret)) {
return new WP_Error('missing_api_key', 'Twilio API Key SID and Secret must be configured', array('status' => 500));
@@ -715,10 +714,6 @@ class TWP_Mobile_API {
$voiceGrant->setOutgoingApplicationSid($twiml_app_sid);
$voiceGrant->setIncomingAllow(true);
- if (!empty($push_credential_sid)) {
- $voiceGrant->setPushCredentialSid($push_credential_sid);
- }
-
$token->addGrant($voiceGrant);
return new WP_REST_Response(array(
diff --git a/mobile/android/app/google-services.json b/mobile/android/app/google-services.json
index 6d096cc..8904b59 100644
--- a/mobile/android/app/google-services.json
+++ b/mobile/android/app/google-services.json
@@ -1,13 +1,13 @@
{
"project_info": {
- "project_number": "000000000000",
- "project_id": "twp-softphone-placeholder",
- "storage_bucket": "twp-softphone-placeholder.appspot.com"
+ "project_number": "187457540438",
+ "project_id": "twp-softphone",
+ "storage_bucket": "twp-softphone.firebasestorage.app"
},
"client": [
{
"client_info": {
- "mobilesdk_app_id": "1:000000000000:android:0000000000000000",
+ "mobilesdk_app_id": "1:187457540438:android:d6d777270c23f6660946f7",
"android_client_info": {
"package_name": "io.cloudhosting.twp.twp_softphone"
}
@@ -15,7 +15,7 @@
"oauth_client": [],
"api_key": [
{
- "current_key": "PLACEHOLDER_API_KEY"
+ "current_key": "AIzaSyAdGJrWPy9b9arqHnlY5G_hsGiDcm6cchA"
}
],
"services": {