mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-17 19:26:23 +00:00
improve
This commit is contained in:
@@ -32,7 +32,6 @@ const reply = (step) => new Promise((resolve, reject) => {
|
||||
if (process.env.DATABASE === 'none') {
|
||||
let resData = { replyMessage: '', media: null, trigger: null }
|
||||
const responseFind = stepsReponse[step] || {};
|
||||
console.log('Responder:',responseFind)
|
||||
resData = {
|
||||
...resData,
|
||||
...responseFind,
|
||||
|
||||
73
app.js
73
app.js
@@ -4,6 +4,7 @@
|
||||
require('dotenv').config()
|
||||
const fs = require('fs');
|
||||
const express = require('express');
|
||||
const cors = require('cors')
|
||||
const qrcode = require('qrcode-terminal');
|
||||
const { Client } = require('whatsapp-web.js');
|
||||
const mysqlConnection = require('./config/mysql')
|
||||
@@ -13,10 +14,27 @@ const { connectionReady, connectionLost } = require('./controllers/connection')
|
||||
const { saveMedia } = require('./controllers/save')
|
||||
const { getMessages, responseMessages, bothResponse } = require('./controllers/flows')
|
||||
const { sendMedia, sendMessage, lastTrigger, sendMessageButton } = require('./controllers/send')
|
||||
|
||||
const app = express();
|
||||
app.use(cors())
|
||||
app.use(express.json())
|
||||
app.use('/',require('./routes/web'))
|
||||
|
||||
const server = require('http').Server(app)
|
||||
const io = require('socket.io')(server, {
|
||||
cors: {
|
||||
origins: ['http://localhost:4200']
|
||||
}
|
||||
})
|
||||
|
||||
let socketEvents = {sendQR:() => {} ,sendStatus:() => {}};
|
||||
|
||||
io.on('connection', (socket) => {
|
||||
const CHANNEL = 'main-channel';
|
||||
socket.join(CHANNEL);
|
||||
socketEvents = require('./controllers/socket')(socket)
|
||||
console.log('Se conecto')
|
||||
})
|
||||
|
||||
app.use('/', require('./routes/web'))
|
||||
|
||||
const port = process.env.PORT || 3000
|
||||
const SESSION_FILE_PATH = './session.json';
|
||||
@@ -29,10 +47,11 @@ var sessionData;
|
||||
const listenMessage = () => client.on('message', async msg => {
|
||||
const { from, body, hasMedia } = msg;
|
||||
// Este bug lo reporto Lucas Aldeco Brescia para evitar que se publiquen estados
|
||||
if(from === 'status@broadcast'){
|
||||
return
|
||||
if (from === 'status@broadcast') {
|
||||
return
|
||||
}
|
||||
message = body.toLowerCase();
|
||||
console.log('BODY',message)
|
||||
/**
|
||||
* Guardamos el archivo multimedia que envia
|
||||
*/
|
||||
@@ -48,7 +67,7 @@ const listenMessage = () => client.on('message', async msg => {
|
||||
if (process.env.DATABASE === 'dialogflow') {
|
||||
const response = await bothResponse(message);
|
||||
await sendMessage(client, from, response.replyMessage);
|
||||
if(response.media){
|
||||
if (response.media) {
|
||||
sendMedia(client, from, response.media);
|
||||
}
|
||||
return
|
||||
@@ -61,7 +80,7 @@ const listenMessage = () => client.on('message', async msg => {
|
||||
*/
|
||||
|
||||
const lastStep = await lastTrigger(from) || null;
|
||||
console.log({lastStep})
|
||||
console.log({ lastStep })
|
||||
if (lastStep) {
|
||||
const response = await responseMessages(lastStep)
|
||||
await sendMessage(client, from, response.replyMessage);
|
||||
@@ -71,27 +90,36 @@ const listenMessage = () => client.on('message', async msg => {
|
||||
* Respondemos al primero paso si encuentra palabras clave
|
||||
*/
|
||||
const step = await getMessages(message);
|
||||
console.log({step})
|
||||
console.log({ step })
|
||||
|
||||
if (step) {
|
||||
const response = await responseMessages(step)
|
||||
await sendMessage(client, from, response.replyMessage, response.trigger);
|
||||
// await sendMessageButton(client, from);
|
||||
|
||||
if(!response.delay && response.media){
|
||||
|
||||
if (!response.delay && response.media) {
|
||||
sendMedia(client, from, response.media);
|
||||
}
|
||||
if(response.delay && response.media){
|
||||
if (response.delay && response.media) {
|
||||
setTimeout(() => {
|
||||
sendMedia(client, from, response.media);
|
||||
},response.delay)
|
||||
}, response.delay)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if(process.env.DEFAULT_MESSAGE === 'true'){
|
||||
console.log('hehehe',(process.env.DEFAULT_MESSAGE) , step)
|
||||
//Si quieres tener un mensaje por defecto
|
||||
if (process.env.DEFAULT_MESSAGE === 'true') {
|
||||
const response = await responseMessages('DEFAULT')
|
||||
await sendMessage(client, from, response.replyMessage, response.trigger);
|
||||
|
||||
/**
|
||||
* Si quieres enviar botones
|
||||
*/
|
||||
if(response.hasOwnProperty('actions')){
|
||||
const { actions } = response;
|
||||
await sendMessageButton(client, from, null, actions);
|
||||
}
|
||||
return
|
||||
}
|
||||
});
|
||||
@@ -112,11 +140,12 @@ const withSession = () => {
|
||||
],
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
client.on('ready', () => {
|
||||
connectionReady()
|
||||
listenMessage()
|
||||
loadRoutes(client);
|
||||
socketEvents.sendStatus()
|
||||
});
|
||||
|
||||
client.on('auth_failure', () => connectionLost())
|
||||
@@ -141,12 +170,14 @@ const withOutSession = () => {
|
||||
client.on('qr', qr => generateImage(qr, () => {
|
||||
qrcode.generate(qr, { small: true });
|
||||
console.log(`Ver QR http://localhost:${port}/qr`)
|
||||
socketEvents.sendQR(qr)
|
||||
}))
|
||||
|
||||
client.on('ready', () => {
|
||||
|
||||
client.on('ready', (a) => {
|
||||
connectionReady()
|
||||
listenMessage()
|
||||
loadRoutes(client);
|
||||
// socketEvents.sendStatus(client)
|
||||
});
|
||||
|
||||
client.on('auth_failure', () => connectionLost());
|
||||
@@ -167,7 +198,7 @@ const withOutSession = () => {
|
||||
* Cargamos rutas de express
|
||||
*/
|
||||
|
||||
const loadRoutes = (client) => {
|
||||
const loadRoutes = (client) => {
|
||||
app.use('/api/', middlewareClient(client), require('./routes/api'))
|
||||
}
|
||||
/**
|
||||
@@ -179,10 +210,12 @@ const withOutSession = () => {
|
||||
* Verificamos si tienes un gesto de db
|
||||
*/
|
||||
|
||||
if(process.env.DATABASE === 'mysql'){
|
||||
if (process.env.DATABASE === 'mysql') {
|
||||
mysqlConnection.connect()
|
||||
}
|
||||
|
||||
app.listen(port, () => {
|
||||
server.listen(port, () => {
|
||||
console.log(`El server esta listo por el puerto ${port}`);
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
|
||||
@@ -36,14 +36,10 @@ const sendMessage = async (client, number = null, text = null, trigger = null) =
|
||||
* Enviamos un mensaje con buttons a nuestro cliente
|
||||
* @param {*} number
|
||||
*/
|
||||
const sendMessageButton = async (client, number = null, text = null, trigger = null) => {
|
||||
const sendMessageButton = async (client, number = null, text = null, actionButtons) => {
|
||||
number = cleanNumber(number)
|
||||
const message = text
|
||||
|
||||
let button = new Buttons("holaaaa", [
|
||||
{ body: "Leer" },
|
||||
{ body: "SIII" }
|
||||
], "ssssss", "foonooooter");
|
||||
const { title = null, message = null, footer = null, buttons = [] } = actionButtons;
|
||||
let button = new Buttons(message,[...buttons], title, footer);
|
||||
client.sendMessage(number, button);
|
||||
|
||||
console.log(`⚡⚡⚡ Enviando mensajes....`);
|
||||
|
||||
16
controllers/socket.js
Normal file
16
controllers/socket.js
Normal file
@@ -0,0 +1,16 @@
|
||||
module.exports = (socket) => {
|
||||
return {
|
||||
sendQR:(qr) => {
|
||||
socket.emit('connection_qr',{
|
||||
qr
|
||||
})
|
||||
},
|
||||
sendStatus:() => {
|
||||
socket.emit('connection_status',{
|
||||
a:1
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -66,5 +66,23 @@
|
||||
"vale gracias"
|
||||
],
|
||||
"key": "STEP_4"
|
||||
},
|
||||
{
|
||||
"keywords": [
|
||||
"👉 Youtube"
|
||||
],
|
||||
"key": "STEP_5"
|
||||
},
|
||||
{
|
||||
"keywords": [
|
||||
"😎 Cursos"
|
||||
],
|
||||
"key": "STEP_6"
|
||||
},
|
||||
{
|
||||
"keywords": [
|
||||
"😁 Telegram"
|
||||
],
|
||||
"key": "STEP_7"
|
||||
}
|
||||
]
|
||||
@@ -1,13 +1,21 @@
|
||||
{
|
||||
"DEFAULT":{
|
||||
"replyMessage":[
|
||||
"✌️ Bienvenido a este 🤖 CHATBOT de Whatsapp, lo primero \n",
|
||||
"decirte que mi nombre es *Leifer Mendez*😎 \n",
|
||||
"\n Si necesitas ver más info sobre las capacitacion tecnicas ",
|
||||
"escribe *cursos* o *info*"
|
||||
"🆗 Bienvenido a este 🤖 CHATBOT de Whatsapp, lo primero \n",
|
||||
"decirte que mi nombre es *Leifer Mendez*😎 y te dejo opciones rapidas \n"
|
||||
],
|
||||
"media":null,
|
||||
"trigger":null
|
||||
"trigger":null,
|
||||
"actions":{
|
||||
"title":"¿Que te interesa ver?",
|
||||
"message":"Recuerda todo este contenido es gratis y estaria genial que me siguas!",
|
||||
"footer":"Gracias",
|
||||
"buttons":[
|
||||
{"body":"😎 Cursos"},
|
||||
{"body":"👉 Youtube"},
|
||||
{"body":"😁 Telegram"}
|
||||
]
|
||||
}
|
||||
},
|
||||
"STEP_0":{
|
||||
"replyMessage":[
|
||||
@@ -95,5 +103,33 @@
|
||||
],
|
||||
"media":"https://media4.giphy.com/media/hur0SFIU5SH4mxNBWa/giphy.gif",
|
||||
"trigger":null
|
||||
},
|
||||
"STEP_5":{
|
||||
"replyMessage":[
|
||||
"Muy bien te comparto el canal de Youtube \n"
|
||||
],
|
||||
"media":"https://youtube.com/leifermendez",
|
||||
"trigger":null
|
||||
},
|
||||
"STEP_6":{
|
||||
"replyMessage":[
|
||||
"Perfecto, te voy a pasar la lista ",
|
||||
"de los temas que tengo y un breve video 🙂🤖 \n\n",
|
||||
"*Angular* Basico (Pago) \n",
|
||||
"*Angular* Basico (Gratis) \n",
|
||||
"*Node* Basico (Gratis) \n",
|
||||
"*NGRX* Basico (Gratis) \n",
|
||||
"*AWS* Basico (Pago) \n\n",
|
||||
"Escribe la palabra del tema que te interese \n"
|
||||
],
|
||||
"media":"https://i.giphy.com/media/5J5gN0WUk0VToHaK2p/giphy-downsized.gif",
|
||||
"trigger":null
|
||||
},
|
||||
"STEP_7":{
|
||||
"replyMessage":[
|
||||
"Vente al telegram \n"
|
||||
],
|
||||
"media":"https://t.me/leifermendez",
|
||||
"trigger":null
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,7 @@
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@google-cloud/dialogflow": "^4.6.0",
|
||||
"cors": "^2.8.5",
|
||||
"dotenv": "^11.0.0",
|
||||
"exceljs": "^4.3.0",
|
||||
"express": "^4.17.2",
|
||||
|
||||
Reference in New Issue
Block a user