Files
2026-08-20 18:39:37 +07:00

75 lines
2.9 KiB
PHP

<?php
include "/www/wwwroot/bilspro/config/connect.php";
include "/www/wwwroot/bilspro/config/whatsapp_api.php";
date_default_timezone_set('Asia/Jakarta');
// 1. Ambil data server sekaligus
$stmtSV = $pdo->prepare("SELECT id, status_koneksi_off, interval_koneksi_off FROM data_server WHERE status_koneksi_off = 'Aktif'");
$stmtSV->execute();
$serverSettings = $stmtSV->fetchAll(PDO::FETCH_UNIQUE | PDO::FETCH_ASSOC);
if (!$serverSettings) {
die("Tidak ada server dengan fitur Pesan Off yang aktif.\n");
}
// 2. Ambil data MikroTik
$stmt = $pdo->prepare("SELECT id, id_data_server, nama FROM setting_mikrotik");
$stmt->execute();
$mikrotiks = $stmt->fetchAll(PDO::FETCH_ASSOC);
if ($mikrotiks) {
foreach ($mikrotiks as $row) {
$mikName = $row['nama'];
$idServer = $row['id_data_server'];
// Cek apakah setting server untuk mikrotik ini ada
if (!isset($serverSettings[$idServer])) continue;
$setting = $serverSettings[$idServer];
$intervalMenit = (int)$setting['interval_koneksi_off'];
if ($intervalMenit <= 0) continue;
$batasWaktu = date('Y-m-d H:i:s', strtotime("-$intervalMenit minutes"));
// 3. Ambil pelanggan yang off sekaligus
$stmtInt = $pdo->prepare("SELECT id, id_data_server, nomor_whatsapp FROM pelanggan
WHERE pesan_off = '0'
AND status = 'aktif'
AND status_koneksi = 'Off'
AND id_setting_mikrotik = :id
AND time_update < :batasWaktu");
$stmtInt->bindValue(':id', $row['id']);
$stmtInt->bindValue(':batasWaktu', $batasWaktu);
$stmtInt->execute();
$customersOff = $stmtInt->fetchAll(PDO::FETCH_ASSOC);
if ($customersOff) {
$APIwa = new PesanWA();
$updatedIds = [];
foreach ($customersOff as $Val) {
// Kirim Pesan
$APIwa->Create_Pesan($Val['id_data_server'], $Val['id'], 'Pesan Koneksi Off');
$Pesan = $APIwa->Get_Pesan();
$APIwa->Send_Pesan($Val['id_data_server'], ['sendMessage','Pesan Koneksi Off'], [$Val['nomor_whatsapp']], $Pesan);
$updatedIds[] = $Val['id'];
echo "[$mikName] Pesan Off dikirim ke => " . $Val['nomor_whatsapp'] . "\n";
}
// 4. Update status pesan_off sekaligus (Batch Update)
if (!empty($updatedIds)) {
$placeholders = implode(',', array_fill(0, count($updatedIds), '?'));
$stmtUpdate = $pdo->prepare("UPDATE pelanggan SET pesan_off = '1' WHERE id IN ($placeholders)");
$stmtUpdate->execute($updatedIds);
}
} else {
echo "[$mikName] Tidak ada pelanggan baru yang memenuhi kriteria Off.\n";
}
}
} else {
echo "No MikroTik data found.\n";
}
?>