-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.js
141 lines (126 loc) · 5.16 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
const express = require("express");
const body_parser = require("body-parser");
const axios = require("axios");
const DataExtractor = require("./FlowFunctions/DataExtractor");
// modulos de comandos
const markAsRead = require("./commands/read");
const CommandSelector = require("./commands/CommandSelector");
const AyudaCommand = require("./commands/AyudaCommand");
const ErrorCommand = require("./commands/ErrorCommand");
const QuienesSomosCommand = require("./commands/QuienesSomosCommand");
const ServiciosCommandsGroup = require("./commands/ServiciosCommandGroup");
const ContactoCommand = require("./commands/ContactoCommand");
require("dotenv").config();
const app = express().use(body_parser.json());
const app_port = process.env.PORT || 8000;
app.listen(app_port, () => {
console.log(`Webhook is running on port ${app_port}.`);
});
const webhook_token = process.env.WEBHOOK_TOKEN;
// to verify the callback url from dashboard side - cloud api side
app.get("/webhook", (req, res) => {
let mode = req.query["hub.mode"];
let challenge = req.query["hub.challenge"];
let token = req.query["hub.verify_token"];
if (mode && token) {
if (mode === "subscribe" && token === webhook_token) {
res.status(200).send(challenge);
} else {
res.status(403);
}
}
});
app.post("/webhook", (req, res) => {
let body_params = req.body;
// console.log("Body of the request: ");
console.log(JSON.stringify(body_params, null, 2));
// extraemos la data de los mensajes
const extracted_data = DataExtractor(body_params);
// console.log(extracted_data);
// verificamos que hay datos disponibles
if (extracted_data) {
let message_id = extracted_data.message.id;
// marcar el mensaje como leído
// enviamos nuestro el id del mensaje recibido y nuestro número de teléfono
markAsRead(message_id, extracted_data.my_phone_number);
// ahora verificamos que el siguiente mensaje sea un comando disponible
let command = CommandSelector(extracted_data.message);
// si no es nulo proseguimos
if (command) {
if (command === "!ayuda") {
// enviamos el mensaje de ayuda
AyudaCommand(
extracted_data.my_phone_number,
extracted_data.sender_name,
extracted_data.sender_phone_number);
}
else if (command === "!quienes_somos") {
QuienesSomosCommand(
extracted_data.my_phone_number,
extracted_data.sender_name,
extracted_data.sender_phone_number);
}
else if (command === "!contacto") {
ContactoCommand(
extracted_data.my_phone_number,
extracted_data.sender_name,
extracted_data.sender_phone_number);
}
else if (command.startsWith("!servicios")) {
// en este caso verificaremos que nuestro comando comience con el string "!servicios"
if (command === "!servicios") {
// si solo contiene el string "!servicios" quiere decir que el usuario únicamente
// quiere ver la lista de servicios
ServiciosCommandsGroup.ServiciosCommand(
extracted_data.my_phone_number,
extracted_data.sender_name,
extracted_data.sender_phone_number);
} else {
// si no solo es "!servicios" quiere decir que hemos recibido el identificador
// extra de un servicio seleccionado por el usuario
const servicio_command_id = command.split(' ')[1];
if (servicio_command_id ===
ServiciosCommandsGroup.services_data.automatization.chatbot.id) {
// el usuario quiere ver el servicio de chatbot
ServiciosCommandsGroup.SendChatbotServiceInformation(
extracted_data.my_phone_number,
extracted_data.sender_phone_number
);
} else if (servicio_command_id ===
ServiciosCommandsGroup.services_data.automatization.promotions.id) {
// el usuario quiere ver el servicio de promociones automatizadas
ServiciosCommandsGroup.SendPromotionsServiceInformation(
extracted_data.my_phone_number,
extracted_data.sender_phone_number
);
} else if (servicio_command_id ===
ServiciosCommandsGroup.services_data.marketing.content_generation.id) {
// el usuario quiere ver el servicio de generación de contenido
ServiciosCommandsGroup.SendContentGenerationServiceInformation(
extracted_data.my_phone_number,
extracted_data.sender_phone_number
);
} else if (servicio_command_id ===
ServiciosCommandsGroup.services_data.services_file.id) {
// el usuario quiere ver el documento de archivos
ServiciosCommandsGroup.SendServicesFile(
extracted_data.my_phone_number,
extracted_data.sender_phone_number
);
}
}
} else {
ErrorCommand(
extracted_data.my_phone_number,
extracted_data.sender_name,
extracted_data.sender_phone_number);
}
}
res.sendStatus(200);
} else {
res.sendStatus(404);
}
});
app.get("/", (req, res) => {
res.status(200).send("Webhook setup whatsapp API");
});