Perbaiki .gitignore agar log dan file sensitif tidak ikut commit
This commit is contained in:
+88
-25
@@ -1,8 +1,9 @@
|
||||
<?php
|
||||
include __DIR__ . "/../config/connect.php";
|
||||
include __DIR__ . "/send_to_app2.php";
|
||||
|
||||
// --- CONFIG LOGGING ---
|
||||
$enableLogging = true;
|
||||
$enableLogging = false;
|
||||
$logFile = __DIR__ . '/webhook_log.jsonl';
|
||||
|
||||
function writeLog($data) {
|
||||
@@ -81,31 +82,65 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
|
||||
$text = ($type === 'text') ? $message['text']['body'] ?? '' : '[Pesan non-teks: ' . $type . ']';
|
||||
writeLog(["event" => "INCOMING_MESSAGE", "from" => $from, "type" => $type, "text" => $text]);
|
||||
|
||||
// Cek apakah nomor sudah ada di database
|
||||
$stmt = $pdo->prepare("SELECT * FROM contact_number_api WHERE whatsapp_number = :number_id");
|
||||
$stmt->execute([':number_id' => $from]);
|
||||
$waNumber = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
// Tentukan apakah sudah lewat 24 jam
|
||||
$shouldSend = false;
|
||||
if (!$waNumber) {
|
||||
// Nomor baru → tambahkan ke DB dan tandai perlu kirim
|
||||
$shouldSend = true;
|
||||
$pdo->prepare("INSERT INTO contact_number_api (whatsapp_number, updated_at) VALUES (:number_id, NOW())")
|
||||
->execute([':number_id' => $from]);
|
||||
} else {
|
||||
$lastUpdate = strtotime($waNumber['updated_at']);
|
||||
$now = time();
|
||||
$hoursPassed = ($now - $lastUpdate) / 3600;
|
||||
|
||||
if ($hoursPassed >= 24) {
|
||||
$shouldSend = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ($shouldSend) {
|
||||
// --- Kirim balasan template ---
|
||||
$reply = [
|
||||
"messaging_product" => "whatsapp",
|
||||
"to" => $from,
|
||||
"type" => "template",
|
||||
"template" => [
|
||||
"name" => "customer_service_contact",
|
||||
"language" => ["code" => "id"],
|
||||
"components" => []
|
||||
]
|
||||
];
|
||||
|
||||
$url = "https://graph.facebook.com/v17.0/$phone_number_id/messages";
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
"Authorization: Bearer $access_token",
|
||||
"Content-Type: application/json"
|
||||
]);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($reply));
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
$response = curl_exec($ch);
|
||||
curl_close($ch);
|
||||
|
||||
// Kirim ke aplikasi 2
|
||||
forwardToApp2([
|
||||
"data" => $reply,
|
||||
"respon" => $response
|
||||
]);
|
||||
|
||||
// Update waktu eksekusi terakhir
|
||||
$pdo->prepare("UPDATE contact_number_api SET updated_at = NOW() WHERE whatsapp_number = :number_id")
|
||||
->execute([':number_id' => $from]);
|
||||
}
|
||||
|
||||
// --- Kirim balasan template ---
|
||||
$reply = [
|
||||
"messaging_product" => "whatsapp",
|
||||
"to" => $from,
|
||||
"type" => "template",
|
||||
"template" => [
|
||||
"name" => "customer_service_contact",
|
||||
"language" => ["code" => "id"],
|
||||
"components" => []
|
||||
]
|
||||
];
|
||||
|
||||
$url = "https://graph.facebook.com/v17.0/$phone_number_id/messages";
|
||||
$ch = curl_init($url);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
"Authorization: Bearer $access_token",
|
||||
"Content-Type: application/json"
|
||||
]);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($reply));
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
$response = curl_exec($ch);
|
||||
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
writeLog(["event"=>"REPLY_SENT","to"=>$from,"http_code"=>$http_code]);
|
||||
}
|
||||
@@ -144,6 +179,34 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --- Forward ke webhook baru (jika ada) ---
|
||||
$forwardUrl = "http://172.16.254.226/webhook/receive";
|
||||
|
||||
try {
|
||||
$ch = curl_init($forwardUrl);
|
||||
curl_setopt($ch, CURLOPT_POST, true);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $input);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
|
||||
// Jika webhook baru masih HTTP, nonaktifkan verifikasi SSL sementara
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
|
||||
$result = curl_exec($ch);
|
||||
$err = curl_error($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
writeLog([
|
||||
"event" => "FORWARDED_TO_NEW_WEBHOOK",
|
||||
"url" => $forwardUrl,
|
||||
"http_code" => $httpCode,
|
||||
"error" => $err ?: null
|
||||
]);
|
||||
} catch (Exception $e) {
|
||||
writeLog(["event" => "FORWARD_FAILED", "error" => $e->getMessage()]);
|
||||
}
|
||||
|
||||
http_response_code(200);
|
||||
echo "EVENT_RECEIVED";
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
function forwardToApp2($payload)
|
||||
{
|
||||
// URL endpoint di aplikasi 2 (CI3)
|
||||
$endpoint = 'http://172.16.254.226/webhook/send';
|
||||
|
||||
// Encode payload ke JSON
|
||||
$data_string = json_encode($payload);
|
||||
|
||||
// Kirim dengan CURL
|
||||
$ch = curl_init($endpoint);
|
||||
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
|
||||
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_HTTPHEADER, [
|
||||
'Content-Type: application/json',
|
||||
'Content-Length: ' . strlen($data_string)
|
||||
]);
|
||||
|
||||
$result = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
curl_close($ch);
|
||||
|
||||
// Log hasil kirim
|
||||
// file_put_contents('forward_log.txt', date('Y-m-d H:i:s') . " | HTTP $httpCode | " . $result . "\n", FILE_APPEND);
|
||||
|
||||
return $httpCode == 200;
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
{"timestamp":"2025-10-04 20:53:17","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4MTI5ODY5ODQyMhUCABEYEkFERTI3OEY3M0E1NDdFNDYxQgA=","new_status":"PROSES"}}
|
||||
{"timestamp":"2025-10-04 20:53:17","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4MTI5ODY5ODQyMhUCABEYEkFERTI3OEY3M0E1NDdFNDYxQgA=","new_status":"TERKIRIM"}}
|
||||
{"timestamp":"2025-10-04 20:53:17","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4MTI5ODY5ODQyMhUCABEYEkFERTI3OEY3M0E1NDdFNDYxQgA=","new_status":"TERKIRIM"}}
|
||||
{"timestamp":"2025-10-04 20:53:22","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4MTI5ODY5ODQyMhUCABEYEkFERTI3OEY3M0E1NDdFNDYxQgA=","new_status":"DIBACA"}}
|
||||
{"timestamp":"2025-10-04 21:59:29","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4MTI5ODY5ODQyMhUCABEYEjI4QzBBOUQwMjNGMjE2RjhCMwA=","new_status":"PROSES"}}
|
||||
{"timestamp":"2025-10-04 21:59:30","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4MTI5ODY5ODQyMhUCABEYEjI4QzBBOUQwMjNGMjE2RjhCMwA=","new_status":"TERKIRIM"}}
|
||||
{"timestamp":"2025-10-04 21:59:56","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4MTI5ODY5ODQyMhUCABEYEjI4QzBBOUQwMjNGMjE2RjhCMwA=","new_status":"DIBACA"}}
|
||||
{"timestamp":"2025-10-04 23:31:22","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4MTI5ODY5ODQyMhUCABEYEjBCNDMzNDY4NTA0MUU4NzUyNAA=","new_status":"PROSES"}}
|
||||
{"timestamp":"2025-10-04 23:31:22","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4MTI5ODY5ODQyMhUCABEYEjBCNDMzNDY4NTA0MUU4NzUyNAA=","new_status":"TERKIRIM"}}
|
||||
{"timestamp":"2025-10-04 23:31:27","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4MTI5ODY5ODQyMhUCABEYEjBCNDMzNDY4NTA0MUU4NzUyNAA=","new_status":"DIBACA"}}
|
||||
{"timestamp":"2025-10-05 12:08:17","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4NTg2MzQ1ODQ0MBUCABEYEjYxQTlFQ0ZDMEEzRjgyRTY3NAA=","new_status":"PROSES"}}
|
||||
{"timestamp":"2025-10-05 12:08:20","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4NTg2MzQ1ODQ0MBUCABEYEjYxQTlFQ0ZDMEEzRjgyRTY3NAA=","new_status":"TERKIRIM"}}
|
||||
{"timestamp":"2025-10-05 12:47:01","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4NTg2MzQ1ODQ0MBUCABEYEjYxQTlFQ0ZDMEEzRjgyRTY3NAA=","new_status":"DIBACA"}}
|
||||
{"timestamp":"2025-10-05 13:24:48","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4NTg4ODU2MTk4NxUCABEYEkJGNkI2M0U0RjY1N0I4ODdGRQA=","new_status":"GAGAL"}}
|
||||
{"timestamp":"2025-10-05 13:25:00","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4NTg4ODU2MTk4NxUCABEYEkFGMDQzQkZBQzBFNDVGNTBDQgA=","new_status":"GAGAL"}}
|
||||
{"timestamp":"2025-10-05 13:25:42","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4NTg4ODU2MTk4NxUCABEYEkQ1MUNDM0UyQjA4QzJBODUyRgA=","new_status":"GAGAL"}}
|
||||
{"timestamp":"2025-10-05 13:28:27","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4NTg4ODU2MTk4NxUCABEYEkJBMTcyRTBDRTcxRTkwOEVEQwA=","new_status":"GAGAL"}}
|
||||
{"timestamp":"2025-10-05 13:29:22","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4NTg4ODU2MTk4NxUCABEYEkVEN0Y3OTdDQjJEQkE3QkFFMQA=","new_status":"GAGAL"}}
|
||||
{"timestamp":"2025-10-05 13:29:24","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4NTg4ODU2MTk4NxUCABEYEjU1RDhGNEI5N0FDOTNEN0EyNAA=","new_status":"GAGAL"}}
|
||||
{"timestamp":"2025-10-05 13:34:32","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4NTY1NTU1ODAxNxUCABEYEjc0ODJGMDU3QzNDMzcxQkM0QwA=","new_status":"PROSES"}}
|
||||
{"timestamp":"2025-10-05 13:34:34","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4NTY1NTU1ODAxNxUCABEYEjc0ODJGMDU3QzNDMzcxQkM0QwA=","new_status":"TERKIRIM"}}
|
||||
{"timestamp":"2025-10-05 14:15:32","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4NTY1NTU1ODAxNxUCABEYEjc0ODJGMDU3QzNDMzcxQkM0QwA=","new_status":"DIBACA"}}
|
||||
{"timestamp":"2025-10-05 14:18:40","data":{"event":"INCOMING_MESSAGE","from":"6285655558017","type":"image","text":"[Pesan non-teks: image]"}}
|
||||
{"timestamp":"2025-10-05 14:18:41","data":{"event":"REPLY_SENT","to":"6285655558017","http_code":200}}
|
||||
{"timestamp":"2025-10-05 14:30:41","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4MTU2MzY1ODcyNRUCABEYEjYzMkY5MzA3RkMzQkZEODVFQQA=","new_status":"PROSES"}}
|
||||
{"timestamp":"2025-10-05 14:30:47","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4MTU2MzY1ODcyNRUCABEYEjYzMkY5MzA3RkMzQkZEODVFQQA=","new_status":"TERKIRIM"}}
|
||||
{"timestamp":"2025-10-05 14:45:25","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4MjIxNjEzMjc3NxUCABEYEjYwOTFFOTZFOTZDODgyM0EzMgA=","new_status":"PROSES"}}
|
||||
{"timestamp":"2025-10-05 14:45:39","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4MjIxNjEzMjc3NxUCABEYEjYwOTFFOTZFOTZDODgyM0EzMgA=","new_status":"TERKIRIM"}}
|
||||
{"timestamp":"2025-10-05 14:45:44","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4MjIxNjEzMjc3NxUCABEYEjYwOTFFOTZFOTZDODgyM0EzMgA=","new_status":"DIBACA"}}
|
||||
{"timestamp":"2025-10-05 15:59:08","data":{"event":"INCOMING_MESSAGE","from":"6285655558017","type":"text","text":"Transaksi pembayaran saya knp blom di konfirmasi"}}
|
||||
{"timestamp":"2025-10-05 15:59:09","data":{"event":"REPLY_SENT","to":"6285655558017","http_code":200}}
|
||||
{"timestamp":"2025-10-06 06:52:54","data":{"event":"STATUS_UPDATED","wa_message_id":"wamid.HBgNNjI4MTU2MzY1ODcyNRUCABEYEjYzMkY5MzA3RkMzQkZEODVFQQA=","new_status":"DIBACA"}}
|
||||
{"timestamp":"2025-10-07 11:40:31","data":{"event":"INCOMING_MESSAGE","from":"6282114113413","type":"text","text":"Kenapa gangguan ya"}}
|
||||
{"timestamp":"2025-10-07 11:40:32","data":{"event":"REPLY_SENT","to":"6282114113413","http_code":200}}
|
||||
Reference in New Issue
Block a user