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
mediaSend/*
!mediaSend/.gitkeep
!mediaSend/PTT-20220223-WA0000.opus
.env

View File

@@ -27,18 +27,52 @@ El siguiente proyecto se realizó con fines educativos para el canal de [Youtube
| QR Scan (route) | ✅ |
| Easy deploy heroku | ✅ |
| Buttons | ✅ |
| Send Voice Note | ✅ |
| Add support ubuntu/linux | ✅ |
### (Nuevo) Botones
[![btn](https://i.imgur.com/W7oYlSu.png)](https://youtu.be/5lEMCeWEJ8o)
## Requisitos
- node v14 o superior
- 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)
- 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
__Descargar o Clonar repositorio__
![](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 { saveMedia } = require('./controllers/save')
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();
app.use(cors())
app.use(express.json())
@@ -54,6 +54,8 @@ const listenMessage = () => client.on('message', async msg => {
console.log('BODY',message)
const number = cleanNumber(from)
await readChat(number, message)
await sendMediaVoiceNote(client, from, 'PTT-20220223-WA0000.opus')
/**
* Guardamos el archivo multimedia que envia
*/

View File

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

Binary file not shown.