From b3c13d5f983a8ca4168b9a9e7adef5e431c6bf30 Mon Sep 17 00:00:00 2001 From: HKong31 <113340082+HKong31@users.noreply.github.com> Date: Wed, 7 Dec 2022 07:52:13 -0400 Subject: [PATCH 1/6] DialogFlow botones por payload --- adapter/diaglogflow.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/adapter/diaglogflow.js b/adapter/diaglogflow.js index 1d0d9a8..9a4586c 100644 --- a/adapter/diaglogflow.js +++ b/adapter/diaglogflow.js @@ -1,5 +1,6 @@ const dialogflow = require('@google-cloud/dialogflow'); 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 @@ -32,6 +33,7 @@ const checkFileCredentials = () => { // Detect intent method const detectIntent = async (queryText, waPhoneNumber) => { let media = null; + let actions = null; const sessionId = KEEP_DIALOG_FLOW ? 1 : waPhoneNumber; const sessionPath = sessionClient.projectAgentSessionPath(PROJECID, sessionId); const languageCode = process.env.LANGUAGE @@ -54,6 +56,7 @@ const detectIntent = async (queryText, waPhoneNumber) => { // console.log(singleResponse) if (parsePayload && parsePayload.payload) { const { fields } = parsePayload.payload + actions = struct.decode(fields.actions.structValue) || null; media = fields.media.stringValue || null } const customPayload = parsePayload ? parsePayload['payload'] : null @@ -61,6 +64,7 @@ const detectIntent = async (queryText, waPhoneNumber) => { const parseData = { replyMessage: queryResult.fulfillmentText, media, + actions, trigger: null } return parseData @@ -74,4 +78,4 @@ const getDataIa = (message = '', sessionId = '', cb = () => { }) => { checkFileCredentials(); -module.exports = { getDataIa } \ No newline at end of file +module.exports = { getDataIa } From f88607c2c2945553ce46a6a3ec688219d597ffd6 Mon Sep 17 00:00:00 2001 From: HKong31 <113340082+HKong31@users.noreply.github.com> Date: Wed, 7 Dec 2022 08:02:00 -0400 Subject: [PATCH 2/6] DialogFlow botones por payload Evita crash si el mensaje excede los 256 caracteres + botones por el payload de DialogFlow --- app.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/app.js b/app.js index 36580c1..77d773a 100644 --- a/app.js +++ b/app.js @@ -57,8 +57,12 @@ const listenMessage = () => client.on('message', async msg => { if (process.env.DATABASE === 'dialogflow') { 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); + if(response.actions){ + await sendMessageButton(client, from, null, response.actions); + return + } if (response.media) { sendMedia(client, from, response.media); } @@ -168,4 +172,4 @@ if (process.env.DATABASE === 'mysql') { server.listen(port, () => { console.log(`El server esta listo por el puerto ${port}`); }) -checkEnvFile(); \ No newline at end of file +checkEnvFile(); From 2d6c1879cedcc47a936e21b44c255756fff32849 Mon Sep 17 00:00:00 2001 From: HKong31 <113340082+HKong31@users.noreply.github.com> Date: Wed, 7 Dec 2022 08:18:32 -0400 Subject: [PATCH 3/6] DialogFlow botones por payload --- package-lock.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/package-lock.json b/package-lock.json index 589ad0f..af9632e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "mime-db": "^1.52.0", "moment": "^2.29.4", "mysql": "^2.18.1", + "pb-util": "^1.0.3", "qr-image": "^3.2.0", "qrcode-terminal": "^0.12.0", "socket.io": "^4.5.1", @@ -3415,6 +3416,11 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "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": { "version": "5.0.0", "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", "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": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz", From b24c005e3e2d406ee43508ed4a9ae95810ba1b00 Mon Sep 17 00:00:00 2001 From: HKong31 <113340082+HKong31@users.noreply.github.com> Date: Wed, 7 Dec 2022 08:20:30 -0400 Subject: [PATCH 4/6] DialogFlow botones por payload --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 20a8d94..fcb275f 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "mime-db": "^1.52.0", "moment": "^2.29.4", "mysql": "^2.18.1", + "pb-util": "^1.0.3", "qr-image": "^3.2.0", "qrcode-terminal": "^0.12.0", "socket.io": "^4.5.1", From babff11c70df7b05e104ca0e08d13f8938fa5064 Mon Sep 17 00:00:00 2001 From: HKong31 <113340082+HKong31@users.noreply.github.com> Date: Wed, 7 Dec 2022 08:33:14 -0400 Subject: [PATCH 5/6] Fix crash when voice message recieved Fix crash si recibe nota de voz --- controllers/save.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/controllers/save.js b/controllers/save.js index 92555e0..3adfda0 100644 --- a/controllers/save.js +++ b/controllers/save.js @@ -8,11 +8,17 @@ const fs = require('fs') const saveMedia = (media) => { - const extensionProcess = mimeDb[media.mimetype] - const ext = extensionProcess.extensions[0] + const extensionProcess = mimeDb[media.mimetype]; + 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) { console.log('** Archivo Media Guardado **'); }); } -module.exports = {saveMedia} \ No newline at end of file +module.exports = {saveMedia} From e8aed880d8c9b89e67df52c99a88309be5f68a13 Mon Sep 17 00:00:00 2001 From: HKong31 <113340082+HKong31@users.noreply.github.com> Date: Wed, 7 Dec 2022 12:19:06 -0400 Subject: [PATCH 6/6] =?UTF-8?q?Retraso=20en=20el=20env=C3=ADo=20de=20boton?= =?UTF-8?q?es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modificado para que los botones sean enviados después del mensaje --- controllers/send.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/controllers/send.js b/controllers/send.js index d081381..5cda9ac 100644 --- a/controllers/send.js +++ b/controllers/send.js @@ -69,12 +69,14 @@ const sendMessage = async (client, number = null, text = null, trigger = null) = * @param {*} number */ const sendMessageButton = async (client, number = null, text = null, actionButtons) => { + setTimeout(async () => { number = cleanNumber(number) const { title = null, message = null, footer = null, buttons = [] } = actionButtons; let button = new Buttons(message,[...buttons], title, footer); client.sendMessage(number, button); - + await readChat(number, message, actionButtons) console.log(`⚡⚡⚡ Enviando mensajes....`); + }, DELAY_TIME) }