WEB_PROJECT_TA/api/auto_notif_onu-bc.txt

145 lines
4.2 KiB
Plaintext

<?php
require_once __DIR__ . '/../config/database.php';
$db = new Database();
$conn = $db->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") {
$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 di bantu videokan alat atau foto alat dilokasi kakak🙏\n\n";
$pesan .= "Terima kasih 🙏";
}
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 <br>";
}
}