v2.5.2
Giriş yap

PHP JQUERY KULLANARAK SESLİ BİLDİRİM SİSTEMİ

poyrazbeysi
223 defa görüntülendi ve 1 kişi tarafından değerlendirildi

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();
Cevap yaz
Cevaplar (1)
terso
29 gün önce

WebSocket ile yapabilirsin.Bir araştır, eğer yine bir sorunun olursa buraya yaz.