Add background notifications and fix Discord/Slack notification bugs

Background Notification Features:
- Implement Web Push Notifications for alerts when browser is minimized
- Add Service Worker for persistent background notification support
- Integrate Page Visibility API to detect when page is in background
- Add browser notification permission request with user consent flow
- Create more aggressive background polling (10 seconds) when page hidden
- Add vibration patterns for mobile device alerts

Bug Fixes:
- Fix Discord/Slack notification parameter order bug preventing delivery
- Add comprehensive logging for notification debugging
- Correct webhook function signatures for proper data passing

Mobile Enhancements:
- Support system notifications on Android browsers
- Add click-to-focus functionality for notifications
- Implement background alert system for multitasking
- Add notification button with visual feedback

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-08-15 16:51:47 -07:00
parent 9832f899c3
commit d050f1538b
5 changed files with 352 additions and 3 deletions

View File

@@ -0,0 +1,78 @@
/**
* Twilio WP Plugin Service Worker
* Handles background notifications for incoming calls
*/
self.addEventListener('install', function(event) {
console.log('TWP Service Worker: Installing...');
self.skipWaiting();
});
self.addEventListener('activate', function(event) {
console.log('TWP Service Worker: Activated');
event.waitUntil(clients.claim());
});
// Handle notification clicks
self.addEventListener('notificationclick', function(event) {
console.log('TWP Service Worker: Notification clicked');
event.notification.close();
// Focus the window if it's already open, otherwise open a new one
event.waitUntil(
clients.matchAll({
type: 'window',
includeUncontrolled: true
}).then(function(clientList) {
// Check if there's already a window/tab open
for (let i = 0; i < clientList.length; i++) {
const client = clientList[i];
if (client.url.includes('/browser-phone') && 'focus' in client) {
return client.focus();
}
}
// If not, open a new window
if (clients.openWindow) {
return clients.openWindow('/browser-phone');
}
})
);
});
// Handle push events (for future use with push notifications)
self.addEventListener('push', function(event) {
console.log('TWP Service Worker: Push event received');
let data = {};
if (event.data) {
try {
data = event.data.json();
} catch (e) {
data = {
title: 'New Call Alert',
body: event.data.text()
};
}
}
const options = {
body: data.body || 'You have a new call waiting',
icon: data.icon || '/wp-content/plugins/twilio-wp-plugin/assets/images/phone-icon.png',
badge: '/wp-content/plugins/twilio-wp-plugin/assets/images/phone-badge.png',
vibrate: [300, 200, 300],
tag: data.tag || 'twp-notification',
requireInteraction: true,
data: data.data || {}
};
event.waitUntil(
self.registration.showNotification(data.title || 'Incoming Call', options)
);
});
// Handle messages from the main script
self.addEventListener('message', function(event) {
if (event.data && event.data.type === 'SHOW_NOTIFICATION') {
self.registration.showNotification(event.data.title, event.data.options);
}
});