getConnection(); if (!function_exists('kirimWA')) { function kirimWA($target, $pesan) { $token = "XjC9oSr4jECWG93JQRWf"; $data = [ "target" => $target, "message" => $pesan, ]; $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => "https://api.fonnte.com/send", CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($data), CURLOPT_HTTPHEADER => [ "Authorization: $token" ], ]); curl_exec($curl); curl_close($curl); } } // 🔥 ID GROUP TEKNISI $groupTeknisi = "120363427232707228@g.us"; // ambil semua ONU yang punya nomor HP + lokasi pelanggan $stmt = $conn->query(" SELECT o.sn, o.status, f.name, f.customer_phone, f.latitude, f.longitude FROM onu_status o JOIN ftth_items f ON f.sn_onu = o.sn JOIN item_types it ON f.item_type_id = it.id WHERE f.customer_phone IS NOT NULL AND LOWER(it.name) = 'pelanggan' "); $data = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($data as $row) { $sn = $row['sn']; $status = $row['status']; $nama = $row['name']; $phone = $row['customer_phone']; $lat = $row['latitude']; $lng = $row['longitude']; // 🔥 buat link maps $maps = ($lat && $lng) ? "https://www.google.com/maps?q={$lat},{$lng}" : "-"; // 🔥 cek status terakhir $cek = $conn->prepare(" SELECT last_status FROM notif_onu_log WHERE sn = ? "); $cek->execute([$sn]); $last = $cek->fetch(PDO::FETCH_ASSOC); $lastStatus = $last['last_status'] ?? null; // ❌ anti spam if ($status == $lastStatus) continue; // ====================== // 🔥 FORMAT PESAN // ====================== $pesan = ""; if ($status == "LASER OUT") { $pesan .= "🚨 *GANGGUAN INTERNET*\n\n"; $pesan .= "Pelanggan: {$nama}\n\n"; $pesan .= "Terjadi gangguan pada kabel fiber (FO CUT).\n"; $pesan .= "kami akan informasikan kepada tim teknis untuk segera ke lokasi kakak.\n\n"; $pesan .= "estimasi perbaikan 4 Jam pengerjaan.\n\n"; $pesan .= "Mohon ditunggu 🙏"; // ====================== // 🔥 NOTIF KE TEKNISI (KHUSUS LOS) // ====================== $pesanTeknisi = "🚨 *FO CUT TERDETEKSI*\n\n"; $pesanTeknisi .= "👤 Pelanggan: {$nama}\n"; $pesanTeknisi .= "📡 SN: {$sn}\n\n"; $pesanTeknisi .= "Status: LOS\n"; $pesanTeknisi .= "Estimasi: 4 Jam\n\n"; $pesanTeknisi .= "📍 Lokasi:\n{$maps}\n\n"; $pesanTeknisi .= "⚠ Segera ke lokasi"; // kirim ke group teknisi kirimWA($groupTeknisi, $pesanTeknisi); } elseif ($status == "POWER FAIL") { // 🔥 NOTIF KE PELANGGAN $pesan .= "⚡ *PERANGKAT MATI*\n\n"; $pesan .= "Pelanggan: {$nama}\n\n"; $pesan .= "Perangkat ONU terdeteksi mati / tidak mendapat listrik.\n"; $pesan .= "Silakan cek adaptor atau listrik di lokasi.\n\n"; $pesan .= "Jika terjadi kendala dilokasi mohon konfirmasinya kakak\n\n"; $pesan .= "Bisa dibantu videokan atau foto kondisi alat 🙏\n\n"; $pesan .= "Terima kasih 🙏"; // ====================== // 🔥 NOTIF KE TEKNISI (POWER FAIL) // ====================== $pesanTeknisi = "⚡ *POWER FAIL TERDETEKSI*\n\n"; $pesanTeknisi .= "👤 Pelanggan: {$nama}\n"; $pesanTeknisi .= "📡 SN: {$sn}\n\n"; $pesanTeknisi .= "Status: POWER FAIL\n\n"; $pesanTeknisi .= "📍 Lokasi:\n{$maps}\n\n"; $pesanTeknisi .= "ℹ Saat ini sedang konfirmasi ke pelanggan terkait kondisi alat di lokasi.\n"; $pesanTeknisi .= "📸 Jika sudah ada info, akan dikirim foto / video alat di grup ini.\n\n"; $pesanTeknisi .= "Mohon standby 🙏"; // kirim ke group teknisi kirimWA($groupTeknisi, $pesanTeknisi); } elseif ($status == "ONLINE" && $lastStatus != "ONLINE") { $pesan .= "✅ *INTERNET NORMAL*\n\n"; $pesan .= "Pelanggan: {$nama}\n\n"; $pesan .= "Koneksi internet sudah kembali normal.\n\n"; $pesan .= "Internet saat ini bisa dicoba kembali\n\n"; $pesan .= "Terima kasih 🙏"; } // kirim kalau ada pesan if ($pesan != "") { // 🔥 kirim WA ke pelanggan (TIDAK DIUBAH) kirimWA($phone, $pesan); // update log $update = $conn->prepare(" INSERT INTO notif_onu_log (sn, last_status, last_sent) VALUES (?, ?, NOW()) ON DUPLICATE KEY UPDATE last_status = VALUES(last_status), last_sent = NOW() "); $update->execute([$sn, $status]); echo "Kirim ke $phone | $status
"; } }