WEB_PROJECT_TA/api/auto_notif_onu.php

162 lines
4.8 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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") {
// 🔥 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 <br>";
}
}