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:
78
assets/js/twp-service-worker.js
Normal file
78
assets/js/twp-service-worker.js
Normal 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);
|
||||
}
|
||||
});
|
Reference in New Issue
Block a user