add voice note

This commit is contained in:
Leifer Mendez
2022-02-23 09:29:16 +01:00
parent 9b548d9418
commit e23540593a
5 changed files with 62 additions and 10 deletions

1
.gitignore vendored
View File

@@ -7,4 +7,5 @@ media/*
!media/.gitkeep !media/.gitkeep
mediaSend/* mediaSend/*
!mediaSend/.gitkeep !mediaSend/.gitkeep
!mediaSend/PTT-20220223-WA0000.opus
.env .env

View File

@@ -27,18 +27,52 @@ El siguiente proyecto se realizó con fines educativos para el canal de [Youtube
| QR Scan (route) | ✅ | | QR Scan (route) | ✅ |
| Easy deploy heroku | ✅ | | Easy deploy heroku | ✅ |
| Buttons | ✅ | | Buttons | ✅ |
| Send Voice Note | ✅ |
| Add support ubuntu/linux | ✅ | | Add support ubuntu/linux | ✅ |
### (Nuevo) Botones
[![btn](https://i.imgur.com/W7oYlSu.png)](https://youtu.be/5lEMCeWEJ8o)
## Requisitos ## Requisitos
- node v14 o superior - node v14 o superior
- VSCode (Editor de codigo) [Descargar](https://code.visualstudio.com/download) - VSCode (Editor de codigo) [Descargar](https://code.visualstudio.com/download)
- MySql (opcional) solo aplica si vas a usar el modo 'mysql' [sql-bot.sql migración](https://github.com/leifermendez/bot-whatsapp/blob/main/sql-bot.sql) - MySql (opcional) solo aplica si vas a usar el modo 'mysql' [sql-bot.sql migración](https://github.com/leifermendez/bot-whatsapp/blob/main/sql-bot.sql)
- Dialogflow (opcional) solo aplica si vas a usar el modo 'dialogflow' - Dialogflow (opcional) solo aplica si vas a usar el modo 'dialogflow'
### (Nuevo) Botones
[![btn](https://i.imgur.com/W7oYlSu.png)](https://youtu.be/5lEMCeWEJ8o)
> Implementar los botones solo necesitas hacer uso del metodo __sendMessageButton__ que se encuentra dentro `./controllers/send` dejo un ejemplo de como usarlo.
[Ver implementación](https://github.com/leifermendez/bot-whatsapp/blob/main/app.js#L123)
``` javascript
const { sendMessageButton } = require('./controllers/send')
await sendMessageButton(
{
"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"}
]
}
)
```
## Notas de Voz
[![voice note](https://i.imgur.com/zq6xYDp.png)](https://i.imgur.com/zq6xYDp.png)
> Se pueden enviar notas de voz con formato nativo para que no se vea como reenviado. En este ejemplo enviare el archivo __PTT-20220223-WA0000.opus__ que se encuentra dentro de la carpeta de __/mediaSend__
``` javascript
const { sendMediaVoiceNote } = require('./controllers/send')
await sendMediaVoiceNote(client, from, 'PTT-20220223-WA0000.opus')
```
## Instruciones ## Instruciones
__Descargar o Clonar repositorio__ __Descargar o Clonar repositorio__
![](https://i.imgur.com/dSpUbFz.png) ![](https://i.imgur.com/dSpUbFz.png)

4
app.js
View File

@@ -13,7 +13,7 @@ const { generateImage, cleanNumber } = require('./controllers/handle')
const { connectionReady, connectionLost } = require('./controllers/connection') const { connectionReady, connectionLost } = require('./controllers/connection')
const { saveMedia } = require('./controllers/save') const { saveMedia } = require('./controllers/save')
const { getMessages, responseMessages, bothResponse } = require('./controllers/flows') const { getMessages, responseMessages, bothResponse } = require('./controllers/flows')
const { sendMedia, sendMessage, lastTrigger, sendMessageButton, readChat } = require('./controllers/send') const { sendMedia, sendMessage, lastTrigger, sendMessageButton, readChat, sendMediaVoiceNote } = require('./controllers/send')
const app = express(); const app = express();
app.use(cors()) app.use(cors())
app.use(express.json()) app.use(express.json())
@@ -54,6 +54,8 @@ const listenMessage = () => client.on('message', async msg => {
console.log('BODY',message) console.log('BODY',message)
const number = cleanNumber(from) const number = cleanNumber(from)
await readChat(number, message) await readChat(number, message)
await sendMediaVoiceNote(client, from, 'PTT-20220223-WA0000.opus')
/** /**
* Guardamos el archivo multimedia que envia * Guardamos el archivo multimedia que envia
*/ */

View File

@@ -4,8 +4,8 @@ const moment = require('moment');
const fs = require('fs'); const fs = require('fs');
const { MessageMedia, Buttons } = require('whatsapp-web.js'); const { MessageMedia, Buttons } = require('whatsapp-web.js');
const { cleanNumber } = require('./handle') const { cleanNumber } = require('./handle')
const { saveMedia } = require('../controllers/save')
const DELAY_TIME = 170; //ms const DELAY_TIME = 170; //ms
const DIR_MEDIA = `${__dirname}/../mediaSend`;
/** /**
* Enviamos archivos multimedia a nuestro cliente * Enviamos archivos multimedia a nuestro cliente
@@ -14,14 +14,29 @@ const DELAY_TIME = 170; //ms
*/ */
const sendMedia = (client, number, fileName) => { const sendMedia = (client, number, fileName) => {
const dirMedia = `${__dirname}/../mediaSend/${fileName}`;
number = cleanNumber(number) number = cleanNumber(number)
if (fs.existsSync(dirMedia)) { const file = `${DIR_MEDIA}/${fileName}`;
const media = MessageMedia.fromFilePath(dirMedia); if (fs.existsSync(file)) {
const media = MessageMedia.fromFilePath(file);
client.sendMessage(number, media); client.sendMessage(number, media);
} }
} }
/**
* Enviamos archivos como notas de voz
* @param {*} number
* @param {*} fileName
*/
const sendMediaVoiceNote = (client, number, fileName) => {
number = cleanNumber(number)
const file = `${DIR_MEDIA}/${fileName}`;
if (fs.existsSync(file)) {
const media = MessageMedia.fromFilePath(file);
client.sendMessage(number, media ,{ sendAudioAsVoice: true });
}
}
/** /**
* Enviamos un mensaje simple (texto) a nuestro cliente * Enviamos un mensaje simple (texto) a nuestro cliente
* @param {*} number * @param {*} number
@@ -123,4 +138,4 @@ const readChat = async (number, message, trigger = null) => {
}, 150) }, 150)
} }
module.exports = { sendMessage, sendMedia, lastTrigger, sendMessageButton, readChat } module.exports = { sendMessage, sendMedia, lastTrigger, sendMessageButton, readChat, sendMediaVoiceNote }

Binary file not shown.