0% encontró este documento útil (0 votos)
4 vistas4 páginas

Bot de WhatsApp con Node.js y Twilio

Esta guía proporciona un ejemplo de código para crear un bot de WhatsApp utilizando Node.js, Express y la API de Twilio, que permite mencionar a todos en un grupo y descargar archivos multimedia. Incluye requisitos previos, estructura de directorios, configuración de estado y lógica de menciones y descargas. También se ofrecen instrucciones para ejecutar y probar el bot localmente, así como para mantenerlo activo en producción con PM2.

Cargado por

Camila Vargas
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
4 vistas4 páginas

Bot de WhatsApp con Node.js y Twilio

Esta guía proporciona un ejemplo de código para crear un bot de WhatsApp utilizando Node.js, Express y la API de Twilio, que permite mencionar a todos en un grupo y descargar archivos multimedia. Incluye requisitos previos, estructura de directorios, configuración de estado y lógica de menciones y descargas. También se ofrecen instrucciones para ejecutar y probar el bot localmente, así como para mantenerlo activo en producción con PM2.

Cargado por

Camila Vargas
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Bot de WhatsApp Simple y Escalable con Node.

js
En esta guía encontrarás un ejemplo de código mínimo viable para crear un bot de WhatsApp que:

• Mencione a todos en un grupo con el comando +all .


• Descargue y reenvíe archivos multimedia (mp3, mp4, jpg, png) a partir de una URL.
• Este bot funciona en Zorin OS, usando [Link], Express y la API de Twilio.

1. Requisitos Previos

• [Link] >= 14 instalado.


• Cuenta de Twilio con acceso a la API de WhatsApp.
• Variables de entorno:
• TWILIO_ACCOUNT_SID
• TWILIO_AUTH_TOKEN
• TWILIO_WHATSAPP_NUMBER (número aprobado por Twilio, [Link]. whatsapp:+1415XXXXXXX )
• Ngrok instalado (solo para exponer tu servidor local a Internet).
• PM2 instalado globalmente (opcional, para producción local):

npm install -g pm2

2. Estructura de Directorios

whatsapp-bot/
├─ .env
├─ [Link]
├─ [Link] # Guarda los participantes del grupo
├─ [Link] # Punto de entrada del servidor
├─ modules/
│ ├─ [Link] # Lógica para @all
│ └─ [Link] # Lógica para descargar y reenviar medios
└─ Procfile # (Opcional) para Heroku/PM2

3. Archivo de Configuración de Estado ( [Link] )

{
"groupMembers": [
"+5491122233344",
"+5491166677788"
]
}

1
Nota: Añade manualmente los números de los participantes con el formato internacional
( +{código}{número} ).

4. Variables de Entorno ( .env )

TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_AUTH_TOKEN=your_auth_token
TWILIO_WHATSAPP_NUMBER=whatsapp:+1415XXXXXXX
PORT=3000

5. Lógica de Menciones ( modules/[Link] )

const fs = require('fs');
const path = require('path');

// Carga manual de participantes\ nconst statePath = [Link](__dirname,


'..', '[Link]');
function loadMembers() {
const raw = [Link](statePath);
return [Link](raw).groupMembers;
}

function handleMentionAll(client, from, to) {


const members = loadMembers();
const mentions = [Link](num => `@${num}`).join(' ');
return [Link]({
from: [Link].TWILIO_WHATSAPP_NUMBER,
to,
body: mentions
});
}

[Link] = { handleMentionAll };

6. Lógica de Descarga y Reenvío ( modules/[Link] )

const axios = require('axios');


const { writeFileSync } = require('fs');
const path = require('path');

async function downloadAndSend(client, mediaUrl, to) {


// Validar URL básica
if (!/^https?:\/\/.+\.(mp3|mp4|jpg|png)$/.test(mediaUrl)) {
throw new Error('URL inválida o formato no soportado');

2
}

const resp = await [Link](mediaUrl, { responseType: 'arraybuffer',


timeout: 15000 });
const ext = [Link](mediaUrl);
const tmpPath = [Link](__dirname, '..', `tmp${ext}`);
writeFileSync(tmpPath, [Link]);

// Enviar medio de vuelta


return [Link]({
from: [Link].TWILIO_WHATSAPP_NUMBER,
to,
mediaUrl: [mediaUrl]
});
}

[Link] = { downloadAndSend };

7. Servidor Principal ( [Link] )

require('dotenv').config();
const express = require('express');
const bodyParser = require('body-parser');
const { handleMentionAll } = require('./modules/mentions');
const { downloadAndSend } = require('./modules/downloads');
const twilio = require('twilio');

const app = express();


[Link]([Link]({ extended: false }));

const client = twilio([Link].TWILIO_ACCOUNT_SID,


[Link].TWILIO_AUTH_TOKEN);

[Link]('/webhook', async (req, res) => {


const from = [Link];
const to = [Link];
const body = [Link] || '';

try {
if ([Link]('+all')) {
await handleMentionAll(client, from, from);
} else if (/https?:\/\/.+/.test(body)) {
await downloadAndSend(client, [Link](), from);
}
[Link](200);
} catch (err) {
[Link]([Link]);
[Link](500).send([Link]);

3
}
});

const PORT = [Link] || 3000;


[Link](PORT, () => [Link](`Servidor escuchando en puerto ${PORT}`));

8. Ejecutar y Probar

1. Instala dependencias:

npm init -y
npm install express body-parser twilio axios dotenv

1. Inicia el servidor localmente:

node [Link]

1. Expón tu webhook con Ngrok:

ngrok http 3000

Copia la URL generada ([Link]. [Link] ) y configúrala en la consola de Twilio


como tu Webhook de mensajes entrantes.

1. Envía mensajes de prueba a tu número de WhatsApp de Twilio.

9. Producción Local con PM2 (Opcional)

pm install -g pm2
pm install
pm run start
pm2 start [Link] --name "whatsapp-bot"

Con esto tu bot se mantendrá activo aun cerrando la terminal.

Ahora tienes un ejemplo funcional, modular y comentado para continuar extendiendo funcionalidades
y escalar tu bot según tus necesidades. ¡Éxitos!

También podría gustarte