'Unauthorized: Admin access required']); exit; } error_log("--- [send_whatsapp_message.php] Script execution started ---"); // استقبال المعطيات من POST $receiver = filterRequest("receiver"); // رقم الهاتف $message = filterRequest("message"); // نص الرسالة if (empty($receiver) || empty($message)) { error_log("[send_whatsapp_message.php] Error: Missing receiver or message."); jsonError('Phone number and message are required.'); exit(); } // Validate phone number format (basic international format) if (!preg_match('/^\+?[1-9]\d{6,14}$/', $receiver)) { jsonError('Invalid phone number format.'); exit(); } // Limit message length to prevent abuse if (strlen($message) > 4096) { jsonError('Message too long. Maximum 4096 characters.'); exit(); } // بيانات Raseel $instanceId = getenv("RASEEL_DRIVER_INSTANCE_ID"); $accessToken = getenv("RASEEL_DRIVER_ACCESS_TOKEN"); // API URL $apiUrl = 'https://raseelplus.com/api/send'; // تجهيز البيانات للإرسال $payload = [ "number" => $receiver, "type" => "text", "message" => $message, "instance_id" => $instanceId, "access_token"=> $accessToken ]; error_log("[send_whatsapp_message.php] Sending payload: " . json_encode($payload)); // إرسال الطلب $response = callAPI("POST", $apiUrl, json_encode($payload)); error_log("[send_whatsapp_message.php] Raw response: " . print_r($response, true)); // فحص الاستجابة if ($response && !isset($response->error) && (isset($response->status) && $response->status == 'success' || isset($response->message))) { jsonSuccess(null, "Message sent successfully."); } else { $errorMessage = isset($response->message) ? $response->message : "Unknown error."; error_log("[send_whatsapp_message.php] Failed to send: $errorMessage"); jsonError("Failed to send message: $errorMessage"); } // دالة cURL function callAPI($method, $url, $data) { $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => $method, CURLOPT_POSTFIELDS => $data, CURLOPT_HTTPHEADER => [ "Content-Type: application/json", "Accept: application/json" ], ]); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { error_log("[callAPI] cURL Error: $err"); return null; } else { return json_decode($response); } } ?>