mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-20 04:29:16 +00:00
@@ -1,5 +1,6 @@
|
|||||||
const dialogflow = require('@google-cloud/dialogflow');
|
const dialogflow = require('@google-cloud/dialogflow');
|
||||||
const fs = require('fs')
|
const fs = require('fs')
|
||||||
|
const {struct} = require('pb-util');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Debes de tener tu archivo con el nombre "chatbot-account.json" en la raíz del proyecto
|
* Debes de tener tu archivo con el nombre "chatbot-account.json" en la raíz del proyecto
|
||||||
@@ -32,6 +33,7 @@ const checkFileCredentials = () => {
|
|||||||
// Detect intent method
|
// Detect intent method
|
||||||
const detectIntent = async (queryText, waPhoneNumber) => {
|
const detectIntent = async (queryText, waPhoneNumber) => {
|
||||||
let media = null;
|
let media = null;
|
||||||
|
let actions = null;
|
||||||
const sessionId = KEEP_DIALOG_FLOW ? 1 : waPhoneNumber;
|
const sessionId = KEEP_DIALOG_FLOW ? 1 : waPhoneNumber;
|
||||||
const sessionPath = sessionClient.projectAgentSessionPath(PROJECID, sessionId);
|
const sessionPath = sessionClient.projectAgentSessionPath(PROJECID, sessionId);
|
||||||
const languageCode = process.env.LANGUAGE
|
const languageCode = process.env.LANGUAGE
|
||||||
@@ -54,6 +56,7 @@ const detectIntent = async (queryText, waPhoneNumber) => {
|
|||||||
// console.log(singleResponse)
|
// console.log(singleResponse)
|
||||||
if (parsePayload && parsePayload.payload) {
|
if (parsePayload && parsePayload.payload) {
|
||||||
const { fields } = parsePayload.payload
|
const { fields } = parsePayload.payload
|
||||||
|
actions = struct.decode(fields.actions.structValue) || null;
|
||||||
media = fields.media.stringValue || null
|
media = fields.media.stringValue || null
|
||||||
}
|
}
|
||||||
const customPayload = parsePayload ? parsePayload['payload'] : null
|
const customPayload = parsePayload ? parsePayload['payload'] : null
|
||||||
@@ -61,6 +64,7 @@ const detectIntent = async (queryText, waPhoneNumber) => {
|
|||||||
const parseData = {
|
const parseData = {
|
||||||
replyMessage: queryResult.fulfillmentText,
|
replyMessage: queryResult.fulfillmentText,
|
||||||
media,
|
media,
|
||||||
|
actions,
|
||||||
trigger: null
|
trigger: null
|
||||||
}
|
}
|
||||||
return parseData
|
return parseData
|
||||||
@@ -74,4 +78,4 @@ const getDataIa = (message = '', sessionId = '', cb = () => { }) => {
|
|||||||
|
|
||||||
checkFileCredentials();
|
checkFileCredentials();
|
||||||
|
|
||||||
module.exports = { getDataIa }
|
module.exports = { getDataIa }
|
||||||
|
|||||||
8
app.js
8
app.js
@@ -57,8 +57,12 @@ const listenMessage = () => client.on('message', async msg => {
|
|||||||
|
|
||||||
if (process.env.DATABASE === 'dialogflow') {
|
if (process.env.DATABASE === 'dialogflow') {
|
||||||
if (!message.length) return;
|
if (!message.length) return;
|
||||||
const response = await bothResponse(message, number);
|
const response = await bothResponse(message.substring(256,-1), number);
|
||||||
await sendMessage(client, from, response.replyMessage);
|
await sendMessage(client, from, response.replyMessage);
|
||||||
|
if(response.actions){
|
||||||
|
await sendMessageButton(client, from, null, response.actions);
|
||||||
|
return
|
||||||
|
}
|
||||||
if (response.media) {
|
if (response.media) {
|
||||||
sendMedia(client, from, response.media);
|
sendMedia(client, from, response.media);
|
||||||
}
|
}
|
||||||
@@ -168,4 +172,4 @@ if (process.env.DATABASE === 'mysql') {
|
|||||||
server.listen(port, () => {
|
server.listen(port, () => {
|
||||||
console.log(`El server esta listo por el puerto ${port}`);
|
console.log(`El server esta listo por el puerto ${port}`);
|
||||||
})
|
})
|
||||||
checkEnvFile();
|
checkEnvFile();
|
||||||
|
|||||||
@@ -8,11 +8,17 @@ const fs = require('fs')
|
|||||||
|
|
||||||
|
|
||||||
const saveMedia = (media) => {
|
const saveMedia = (media) => {
|
||||||
const extensionProcess = mimeDb[media.mimetype]
|
const extensionProcess = mimeDb[media.mimetype];
|
||||||
const ext = extensionProcess.extensions[0]
|
let ext;
|
||||||
|
if (!extensionProcess) {
|
||||||
|
const fileType = media.mimetype.split('/');
|
||||||
|
ext = fileType[1].split(';')[0];
|
||||||
|
} else {
|
||||||
|
ext = extensionProcess.extensions[0];
|
||||||
|
}
|
||||||
fs.writeFile(`./media/${Date.now()}.${ext}`, media.data, { encoding: 'base64' }, function (err) {
|
fs.writeFile(`./media/${Date.now()}.${ext}`, media.data, { encoding: 'base64' }, function (err) {
|
||||||
console.log('** Archivo Media Guardado **');
|
console.log('** Archivo Media Guardado **');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {saveMedia}
|
module.exports = {saveMedia}
|
||||||
|
|||||||
@@ -69,12 +69,14 @@ const sendMessage = async (client, number = null, text = null, trigger = null) =
|
|||||||
* @param {*} number
|
* @param {*} number
|
||||||
*/
|
*/
|
||||||
const sendMessageButton = async (client, number = null, text = null, actionButtons) => {
|
const sendMessageButton = async (client, number = null, text = null, actionButtons) => {
|
||||||
|
setTimeout(async () => {
|
||||||
number = cleanNumber(number)
|
number = cleanNumber(number)
|
||||||
const { title = null, message = null, footer = null, buttons = [] } = actionButtons;
|
const { title = null, message = null, footer = null, buttons = [] } = actionButtons;
|
||||||
let button = new Buttons(message,[...buttons], title, footer);
|
let button = new Buttons(message,[...buttons], title, footer);
|
||||||
client.sendMessage(number, button);
|
client.sendMessage(number, button);
|
||||||
|
await readChat(number, message, actionButtons)
|
||||||
console.log(`⚡⚡⚡ Enviando mensajes....`);
|
console.log(`⚡⚡⚡ Enviando mensajes....`);
|
||||||
|
}, DELAY_TIME)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
11
package-lock.json
generated
11
package-lock.json
generated
@@ -18,6 +18,7 @@
|
|||||||
"mime-db": "^1.52.0",
|
"mime-db": "^1.52.0",
|
||||||
"moment": "^2.29.4",
|
"moment": "^2.29.4",
|
||||||
"mysql": "^2.18.1",
|
"mysql": "^2.18.1",
|
||||||
|
"pb-util": "^1.0.3",
|
||||||
"qr-image": "^3.2.0",
|
"qr-image": "^3.2.0",
|
||||||
"qrcode-terminal": "^0.12.0",
|
"qrcode-terminal": "^0.12.0",
|
||||||
"socket.io": "^4.5.1",
|
"socket.io": "^4.5.1",
|
||||||
@@ -3415,6 +3416,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
||||||
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
|
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
|
||||||
},
|
},
|
||||||
|
"node_modules/pb-util": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/pb-util/-/pb-util-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-8+weUH2YEYnPf5sTpZ3q7Drq41tSEL8vDSU96/CzSvu2qrbspbjbbuKLjHocAQpmyMbICTcvovVl3cETwxwIkQ=="
|
||||||
|
},
|
||||||
"node_modules/peek-readable": {
|
"node_modules/peek-readable": {
|
||||||
"version": "5.0.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz",
|
||||||
@@ -7965,6 +7971,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
||||||
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
|
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
|
||||||
},
|
},
|
||||||
|
"pb-util": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/pb-util/-/pb-util-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-8+weUH2YEYnPf5sTpZ3q7Drq41tSEL8vDSU96/CzSvu2qrbspbjbbuKLjHocAQpmyMbICTcvovVl3cETwxwIkQ=="
|
||||||
|
},
|
||||||
"peek-readable": {
|
"peek-readable": {
|
||||||
"version": "5.0.0",
|
"version": "5.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz",
|
||||||
|
|||||||
@@ -39,6 +39,7 @@
|
|||||||
"mime-db": "^1.52.0",
|
"mime-db": "^1.52.0",
|
||||||
"moment": "^2.29.4",
|
"moment": "^2.29.4",
|
||||||
"mysql": "^2.18.1",
|
"mysql": "^2.18.1",
|
||||||
|
"pb-util": "^1.0.3",
|
||||||
"qr-image": "^3.2.0",
|
"qr-image": "^3.2.0",
|
||||||
"qrcode-terminal": "^0.12.0",
|
"qrcode-terminal": "^0.12.0",
|
||||||
"socket.io": "^4.5.1",
|
"socket.io": "^4.5.1",
|
||||||
|
|||||||
Reference in New Issue
Block a user