diff --git a/app.js b/app.js
index 5ab128e4b4..a714657e57 100644
--- a/app.js
+++ b/app.js
@@ -1,61 +1,42 @@
-const express = require("express");
+// Import Express.js
+const express = require('express');
+
+// Create an Express app
const app = express();
-const port = process.env.PORT || 3001;
-
-app.get("/", (req, res) => res.type('html').send(html));
-
-const server = app.listen(port, () => console.log(`Example app listening on port ${port}!`));
-
-server.keepAliveTimeout = 120 * 1000;
-server.headersTimeout = 120 * 1000;
-
-const html = `
-
-
-
- Hello from Render!
-
-
-
-
-
-
-
-
-`
+
+// Middleware to parse JSON bodies
+app.use(express.json());
+
+// Set port and verify_token
+const port = process.env.PORT || 3000;
+const verifyToken = process.env.VERIFY_TOKEN;
+
+// Route for GET requests
+app.get('/', (req, res) => {
+ const { 'hub.mode': mode, 'hub.challenge': challenge, 'hub.verify_token': token } = req.query;
+
+ if (mode === 'subscribe' && token === verifyToken) {
+ console.log('WEBHOOK VERIFIED');
+ res.status(200).send(challenge);
+ } else {
+ res.status(403).end();
+ }
+});
+
+// Route for POST requests
+app.post('/', (req, res) => {
+ const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19);
+ console.log(`\n\nWebhook received ${timestamp}\n`);
+ console.log(JSON.stringify(req.body, null, 2));
+ res.status(200).end();
+});
+
+// Start the server
+const server = app.listen(port, () => {
+ console.log(`\nListening on port ${port}\n`);
+});
+
+// Configure server timeouts to avoid proxy idle timeouts
+// Ensure headersTimeout is greater than keepAliveTimeout
+server.keepAliveTimeout = 65000; // 65 seconds
+server.headersTimeout = 66000; // 66 seconds