PHP JQUERY KULLANARAK SESLİ BİLDİRİM SİSTEMİ
Merhabalar,
Şuan QR Menü sistemi yapıyorum birçok işlevi bitirdim ancak çok önemli birşey var ve sistemimi zora soktu hatta tıkadı diyebilirim bu da sesli bildirim
müşteri siparişini websitesi üzerinden verdiğinde anlık olarak garsona bildirim düşmesi lazım bu bildirim hem sesli hemde yazılı olması gerekiyor
PHP ve jQuery kullanarak denedim ama tarayıcı politikası yüzünden sesli bildirim düşmüyor pc'de bir ihtimal düşüyor ancak telefonlarda bu bildirim düşmüyor
bu sorunu nasıl aşabilirim
let audio = new Audio('audio/yeni.mp3');
let isAudioInitialized = false;
let lastCounts = JSON.parse(localStorage.getItem('lastCounts')) || {
beklemede: null,
hazirlaniyor: null,
hazir: null
};
let notificationQueue = [];
let isNotificationShowing = false;
if (Notification.permission !== "granted" && Notification.permission !== "denied") {
Notification.requestPermission().then(permission => {
if (permission === "granted") {
console.log("Bildirim izni verildi");
}
});
}
function initAudio() {
if (!isAudioInitialized) {
audio.play().then(() => {
audio.pause();
audio.currentTime = 0;
isAudioInitialized = true;
console.log("Ses sistemi başlatıldı");
}).catch(error => {
console.error("Ses başlatma hatası:", error);
});
}
}
function playNotificationSound() {
if (isAudioInitialized) {
audio.play().catch(error => {
console.error("Ses çalma hatası:", error);
});
} else {
initAudio();
}
}
function updateCount(action, elementId) {
$.ajax({
url: URL,
method: 'GET',
data: {
action: action
},
dataType: 'json',
success: function (response) {
let currentCount = response.count;
let statusKey = elementId.split('-')[1];
let element = $(`#${elementId}`);
if (response.status === false || currentCount === 0) {
if (element.length) {
element.text('');
element.removeClass('pyrz-icon');
}
} else {
if (element.length) {
element.text(currentCount).addClass('pyrz-icon');
} else {
$('<span></span>')
.attr('id', elementId)
.text(currentCount)
.addClass('pyrz-icon')
.appendTo('body');
}
let stat;
if (statusKey === 'hazir') {
stat = 'Teslim Edilecek Siparişler';
} else if (statusKey === 'hazirlaniyor') {
stat = 'Hazırlanacak Siparişler';
} else {
stat = 'Yeni Sipariş';
}
if (lastCounts[statusKey] === null || currentCount > lastCounts[statusKey]) {
queuePushNotification(`${stat} | Toplam: ${currentCount}`);
}
}
lastCounts[statusKey] = currentCount;
localStorage.setItem('lastCounts', JSON.stringify(lastCounts));
}
});
}
// Bildirim kuyruğu
function queuePushNotification(message) {
notificationQueue.push(message);
if (!isNotificationShowing) {
showNextNotification();
}
}
// Kuyruktaki bildirimi gösterme
function showNextNotification() {
if (notificationQueue.length > 0) {
isNotificationShowing = true;
const message = notificationQueue.shift();
const notification = $('#pushNotification');
notification.text(message);
notification.addClass('animate');
// Görsel bildirim gönder
showBrowserNotification(message);
setTimeout(() => {
notification.removeClass('animate');
isNotificationShowing = false;
showNextNotification();
}, 5000);
}
}
// Bildirim div'i ekle
if (!$('#pushNotification').length) {
$('body').append('<div id="pushNotification" class="push-notification"></div>');
}
// Ses sistemini başlatma girişimi
initAudio();
function updateAllCounts() {
updateCount('getBeklemedeCount', 'ntfy-beklemede');
updateCount('getHazirlaniyorCount', 'ntfy-hazirlaniyor');
updateCount('getHazirCount', 'ntfy-hazir');
}
function showBrowserNotification(message) {
if (Notification.permission === "granted") {
new Notification("Yeni Bildirim", {
body: message
});
playNotificationSound();
} else {
playNotificationSound();
}
}
// Düzenli aralıklarla güncelleme yap
setInterval(() => {
updateAllCounts();
}, 3000);
updateAllCounts();