build-your-own-x/Messenger_BOT/bot.js
2025-10-25 22:29:37 +06:00

110 lines
2.9 KiB
JavaScript

const express = require("express");
const bodyParser = require("body-parser");
const request = require("request");
const apiai = require("apiai");
const app = express();
// Environment variables
const PAGE_ACCESS_TOKEN = process.env.PAGE_ACCESS_TOKEN || "your_page_token";
const CLIENT_ACCESS_TOKEN =
process.env.CLIENT_ACCESS_TOKEN || "your_apiai_token";
const VERIFY_TOKEN = process.env.VERIFY_TOKEN || "tuxedo_cat";
// Initialize API.AI
const apiaiApp = apiai(CLIENT_ACCESS_TOKEN);
// Middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// Start server
const server = app.listen(process.env.PORT || 5000, () => {
console.log(
"Express server listening on port %d in %s mode",
server.address().port,
app.settings.env,
);
});
// Facebook Webhook Verification
app.get("/webhook", (req, res) => {
// Fixed: hub.mode (was hub.mdoe)
if (
req.query["hub.mode"] === "subscribe" &&
req.query["hub.verify_token"] === VERIFY_TOKEN
) {
console.log("Validating webhook");
res.status(200).send(req.query["hub.challenge"]);
} else {
console.error("Failed validation. Make sure the validation tokens match.");
res.status(403).end();
}
});
// Handle all messages
// Fixed: Added missing '/' in route
app.post("/webhook", (req, res) => {
console.log("Webhook received:", req.body);
if (req.body.object === "page") {
req.body.entry.forEach((entry) => {
entry.messaging.forEach((event) => {
console.log("Event:", event);
// Process message events
if (event.message && event.message.text) {
sendMessage(event);
}
});
});
}
res.status(200).end();
});
// Send message function
function sendMessage(event) {
let sender = event.sender.id;
let text = event.message.text;
// Send text to API.AI
let apiai = apiaiApp.textRequest(text, {
sessionId: "tabby_cat", // use any arbitrary id
});
apiai.on("response", (response) => {
// Got a response from api.ai
let aiText = response.result.fulfillment.speech;
// Send response back to Facebook Messenger
request(
{
// Fixed: facebook.com (was facebok.com)
url: "https://graph.facebook.com/v2.6/me/messages",
// Fixed: PAGE_ACCESS_TOKEN (was PAGE_ACCSESS_TOKEN)
qs: { access_token: PAGE_ACCESS_TOKEN },
method: "POST",
json: {
recipient: { id: sender },
message: { text: aiText }, // Fixed: use aiText not original text
},
},
function (error, response) {
if (error) {
console.log("Error sending message:", error);
} else if (response.body.error) {
console.log("Error:", response.body.error);
} else {
console.log("Message sent successfully!");
}
},
);
});
apiai.on("error", (error) => {
console.log("API.AI Error:", error);
});
apiai.end();
}