talkHandler = $talkHandler; $this->logger = $logger; } /** * @PublicPage * @NoCSRFRequired * Handle incoming webhook from Nextcloud Talk */ public function talk(): Response { $body = file_get_contents('php://input'); $signature = $this->request->getHeader('X-Nextcloud-Talk-Signature'); $random = $this->request->getHeader('X-Nextcloud-Talk-Random'); $this->logger->info('========== Talk AI Webhook Received ==========', [ 'has_signature' => !empty($signature), 'has_random' => !empty($random), 'body_length' => strlen($body), ]); try { $this->talkHandler->handleIncoming([ 'body' => $body, 'signature' => $signature, 'random' => $random, ]); $this->logger->info('========== Webhook Processing Complete =========='); $response = new Response(); $response->setStatus(Http::STATUS_OK); return $response; } catch (Exception $e) { $this->logger->error('========== Webhook Processing FAILED ==========', [ 'error' => $e->getMessage(), 'exception' => $e, ]); $response = new Response(); $response->setStatus(Http::STATUS_OK); // Return 200 anyway to not trigger Talk retries return $response; } } }