$ticketId, 'title' => $ticketData['title'] ?? 'Untitled', 'priority' => (int)($ticketData['priority'] ?? 4), 'category' => $ticketData['category'] ?? 'General', 'type' => $ticketData['type'] ?? 'Issue', 'status' => $ticketData['status'] ?? 'Open', 'source' => $source, 'url' => UrlHelper::ticketUrl($ticketId), 'trigger' => $trigger, 'notify_users' => $notifyUsers, ]; $ch = curl_init($webhookUrl); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $curlError = curl_error($ch); curl_close($ch); if ($curlError) { error_log("Matrix webhook cURL error for ticket #{$ticketId}: {$curlError}"); } elseif ($httpCode < 200 || $httpCode >= 300) { error_log("Matrix webhook failed for ticket #{$ticketId}. HTTP {$httpCode}: {$response}"); } } } ?>