skailan-conversations
Version:
Servicio de conversaciones y mensajería para Skailan
74 lines • 2.67 kB
JavaScript
export class WebhookController {
/**
* Maneja webhooks genéricos
*/
async handleWebhook(req, res) {
try {
const { provider } = req.params;
const organizationId = req.organization?.id;
if (!organizationId) {
res.status(400).json({ error: "Organization ID not found" });
return;
}
if (!provider) {
res.status(400).json({ error: "Provider parameter is required" });
return;
}
// Redirigir a controladores específicos según el proveedor
switch (provider.toLowerCase()) {
case 'telegram':
// Aquí podrías instanciar TelegramWebhookController
res.json({ success: true, message: "Telegram webhook handled" });
break;
case 'whatsapp':
res.json({ success: true, message: "WhatsApp webhook handled" });
break;
case 'facebook':
res.json({ success: true, message: "Facebook webhook handled" });
break;
default:
res.status(400).json({ error: `Unsupported provider: ${provider}` });
}
}
catch (error) {
console.error("❌ Error procesando webhook:", error);
res.status(500).json({ error: "Internal server error" });
}
}
/**
* Endpoint básico para verificación de webhooks
*/
async verifyWebhook(req, res) {
try {
const { mode, token, challenge } = req.query;
const verifyToken = process.env.WEBHOOK_VERIFY_TOKEN;
if (mode === "subscribe" && token === verifyToken) {
res.status(200).send(challenge);
}
else {
res.status(403).json({ error: "Invalid verification token" });
}
}
catch (error) {
console.error("❌ Error verificando webhook:", error);
res.status(500).json({ error: "Internal server error" });
}
}
/**
* Endpoint de salud para webhooks
*/
async healthCheck(req, res) {
try {
res.json({
success: true,
message: "Webhook service is healthy",
timestamp: new Date().toISOString(),
});
}
catch (error) {
console.error("❌ Error en health check:", error);
res.status(500).json({ error: "Internal server error" });
}
}
}
//# sourceMappingURL=webhookController.js.map