mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-18 03:29:15 +00:00
Merge pull request #326 from codigoencasa/feat/ci-providers-check
ci(provider): ✨ automatic updated versions
This commit is contained in:
48
.github/workflows/check-providers.yml
vendored
Normal file
48
.github/workflows/check-providers.yml
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
name: Rev Providers
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
pull_request:
|
||||
branches:
|
||||
- dev
|
||||
|
||||
jobs:
|
||||
check-npm:
|
||||
name: Install Dependencies
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16.x
|
||||
cache: 'yarn'
|
||||
registry-url: https://registry.npmjs.org/
|
||||
|
||||
- run: corepack enable
|
||||
|
||||
- name: Install NPM Dependencies
|
||||
run: yarn install --immutable --network-timeout 300000
|
||||
|
||||
- name: Check Baileys
|
||||
run: yarn node ./scripts/checker.js baileys
|
||||
|
||||
- name: Check Venom
|
||||
run: yarn node ./scripts/checker.js venom
|
||||
|
||||
- name: Check web-whatsapp
|
||||
run: yarn node ./scripts/checker.js web-whatsapp
|
||||
|
||||
- name: Check Meta
|
||||
run: yarn node ./scripts/checker.js meta
|
||||
|
||||
- name: Check Twilio
|
||||
run: yarn node ./scripts/checker.js twilio
|
||||
|
||||
- uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
commit_message: 'ci(providers): updated versions providers'
|
||||
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: 🤪 Build and Test
|
||||
name: Build and Test
|
||||
|
||||
on:
|
||||
push:
|
||||
|
||||
2
.github/workflows/contributors.yml
vendored
2
.github/workflows/contributors.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: 🙌 Revisando Colaboradores
|
||||
name: Revisando Colaboradores
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
|
||||
14
README.md
14
README.md
@@ -4,11 +4,12 @@
|
||||
[](https://github.com/codigoencasa/bot-whatsapp/actions/workflows/releases.yml)
|
||||
|
||||
|
||||
|
||||
<div style="width:100%;text-align:center"><img src="https://i.imgur.com/Oauef6t.png" width="300" /></div>
|
||||
<p align="center">
|
||||
<img width="300" src="https://i.imgur.com/Oauef6t.png">
|
||||
</p>
|
||||
|
||||
|
||||
**Con esta librería, puedes construir flujos automatizados de conversación de manera agnóstica al proveedor de WhatsApp,** configurar respuestas automatizadas para preguntas frecuentes, recibir y responder mensajes de manera automatizada, y hacer un seguimiento de las interacciones con los clientes. Además, puedes configurar fácilmente disparadores que te ayudaran a expandir las funcionalidades sin límites.
|
||||
**Con esta librería, puedes construir flujos automatizados de conversación de manera agnóstica al proveedor de WhatsApp,** configurar respuestas automatizadas para preguntas frecuentes, recibir y responder mensajes de manera automatizada, y hacer un seguimiento de las interacciones con los clientes. Además, puedes configurar fácilmente disparadores que te ayudaran a expandir las funcionalidades sin límites. **[Ver más informacion](https://bot-whatsapp.netlify.app/)**
|
||||
|
||||
## Comenzar
|
||||
|
||||
@@ -25,12 +26,13 @@ Entiende más a fondo sus funcionalidades explicadas en nuestra documentación.
|
||||
## Recursos
|
||||
- [📄 Documentación](https://bot-whatsapp.netlify.app/)
|
||||
- [🚀 Roadmap](https://github.com/orgs/codigoencasa/projects/1)
|
||||
- [💻 Discord](https://link.codigoencasa.com/DISCORD)
|
||||
- [👌 Twitter](https://twitter.com/leifermendez)
|
||||
- [🎥 Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
|
||||
- [💻 Discord](https://link.codigoencasa.com/DISCORD)
|
||||
- [👌 Twitter](https://twitter.com/leifermendez)
|
||||
- [🎥 Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
|
||||
|
||||
## Comunidad
|
||||
<!-- readme: collaborators,contributors -start -->
|
||||
|
||||
<!-- readme: collaborators,contributors -end -->
|
||||
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ const startInteractive = async () => {
|
||||
choices: [
|
||||
{ title: 'whatsapp-web.js (gratis)', value: 'wweb' },
|
||||
{ title: 'Venom (gratis)', value: 'venom' },
|
||||
{ title: 'Baileys (gratis)', value: 'bailey' },
|
||||
{ title: 'Baileys (gratis)', value: 'baileys' },
|
||||
{ title: 'Twilio', value: 'twilio' },
|
||||
{ title: 'API Oficial (Meta)', value: 'meta' },
|
||||
],
|
||||
|
||||
@@ -7,10 +7,13 @@ A continuación se describen los puntos técnicos que debes de tener en cuenta a
|
||||
- Node v16 o superior **[descargar node](https://nodejs.org/es/download/)**
|
||||
|
||||
## ¿Como instalar Node en Windows?
|
||||
|
||||
https://youtu.be/xRXHQlqA3Ak?t=376
|
||||
|
||||
## ¿Como instalar Node en Ubuntu?
|
||||
|
||||
Te comparto un recurso de **[Digital Ocean](https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-20-04-es)** donde explica como instalar node en Ubuntu.
|
||||
|
||||
## ¿Como saber que tengo el Node?
|
||||
|
||||
Solo debes ejecutar el siguiente comando y esperar que la versión que te arroja sea superior a v16
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
const { ProviderClass } = require('@bot-whatsapp/bot')
|
||||
const { Sticker } = require('wa-sticker-formatter')
|
||||
const pino = require('pino')
|
||||
const rimraf = require('rimraf')
|
||||
const mime = require('mime-types')
|
||||
const { join } = require('path')
|
||||
const { existsSync, createWriteStream } = require('fs')
|
||||
const { Console } = require('console')
|
||||
|
||||
const {
|
||||
default: makeWASocket,
|
||||
useMultiFileAuthState,
|
||||
Browsers,
|
||||
DisconnectReason,
|
||||
} = require('@adiwajshing/baileys')
|
||||
const {
|
||||
@@ -21,6 +24,9 @@ const logger = new Console({
|
||||
stdout: createWriteStream(`${process.cwd()}/baileys.log`),
|
||||
})
|
||||
|
||||
const NAME_DIR_SESSION = `sessions`
|
||||
const PATH_BASE = join(process.cwd(), NAME_DIR_SESSION)
|
||||
|
||||
/**
|
||||
* ⚙️ BaileysProvider: Es una clase tipo adaptor
|
||||
* que extiende clases de ProviderClass (la cual es como interfaz para sber que funciones rqueridas)
|
||||
@@ -38,28 +44,35 @@ class BaileysProvider extends ProviderClass {
|
||||
* Iniciar todo Bailey
|
||||
*/
|
||||
initBailey = async () => {
|
||||
const { state, saveCreds } = await useMultiFileAuthState('sessions')
|
||||
const { state, saveCreds } = await useMultiFileAuthState(
|
||||
NAME_DIR_SESSION
|
||||
)
|
||||
this.saveCredsGlobal = saveCreds
|
||||
|
||||
try {
|
||||
const sock = makeWASocket({
|
||||
printQRInTerminal: false,
|
||||
auth: state,
|
||||
browser: Browsers.macOS('Desktop'),
|
||||
syncFullHistory: false,
|
||||
logger: pino({ level: 'error' }),
|
||||
})
|
||||
|
||||
sock.ev.on('connection.update', async (update) => {
|
||||
const { connection, lastDisconnect, qr } = update
|
||||
|
||||
if (connection === 'close') {
|
||||
const shouldReconnect =
|
||||
lastDisconnect?.error?.output?.statusCode !==
|
||||
DisconnectReason.loggedOut
|
||||
const statusCode = lastDisconnect?.error?.output?.statusCode
|
||||
|
||||
if (shouldReconnect) {
|
||||
await saveCreds()
|
||||
this.initBailey()
|
||||
}
|
||||
if (statusCode === DisconnectReason.loggedOut) {
|
||||
rimraf(PATH_BASE, (err) => {
|
||||
if (err) return
|
||||
})
|
||||
|
||||
this.initBailey()
|
||||
}
|
||||
|
||||
if (statusCode && statusCode !== DisconnectReason.loggedOut) {
|
||||
this.initBailey()
|
||||
}
|
||||
|
||||
if (qr) {
|
||||
|
||||
7
packages/provider/src/baileys/package.json
Normal file
7
packages/provider/src/baileys/package.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"@adiwajshing/baileys": "5.0.0",
|
||||
"mime-types": "2.1.35",
|
||||
"wa-sticker-formatter": "4.3.2"
|
||||
}
|
||||
}
|
||||
3
packages/provider/src/meta/package.json
Normal file
3
packages/provider/src/meta/package.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"dependencies": {}
|
||||
}
|
||||
5
packages/provider/src/twilio/package.json
Normal file
5
packages/provider/src/twilio/package.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"twilio": "3.84.0"
|
||||
}
|
||||
}
|
||||
6
packages/provider/src/venom/package.json
Normal file
6
packages/provider/src/venom/package.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"venom-bot": "4.3.7",
|
||||
"mime-types": "2.1.35"
|
||||
}
|
||||
}
|
||||
5
packages/provider/src/web-whatsapp/package.json
Normal file
5
packages/provider/src/web-whatsapp/package.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"whatsapp-web.js": "1.18.4"
|
||||
}
|
||||
}
|
||||
131
scripts/checker.js
Normal file
131
scripts/checker.js
Normal file
@@ -0,0 +1,131 @@
|
||||
const { execFile } = require('node:child_process')
|
||||
const { readFileSync, writeFileSync, readdirSync } = require('node:fs')
|
||||
const { join } = require('path')
|
||||
const process = require('node:process')
|
||||
const util = require('node:util')
|
||||
const semver = require('semver')
|
||||
|
||||
const cmd = util.promisify(execFile)
|
||||
const OS_ENVIROMENT_WIN = process.platform.includes('win32')
|
||||
|
||||
const PATH_PACKAGES = join(__dirname, '..', `packages`)
|
||||
const PATH_STARTERS = join(__dirname, '..', `starters`, `apps`)
|
||||
const NPM_COMMAND = OS_ENVIROMENT_WIN ? 'npm.cmd' : 'npm'
|
||||
const [PKG_NAME] = process.argv.slice(2) || [null]
|
||||
|
||||
/**
|
||||
* Revisar ultima version de una paquetes
|
||||
* @param {*} pkgName
|
||||
*/
|
||||
const checkPkg = async (pkgName = '') => {
|
||||
const { stdout } = await cmd(
|
||||
NPM_COMMAND,
|
||||
['show', `${pkgName}`, 'version'],
|
||||
{
|
||||
stdio: 'inherit',
|
||||
}
|
||||
)
|
||||
|
||||
return stdout.trim().replace('\n', '')
|
||||
}
|
||||
|
||||
/**
|
||||
* Revisar todas las dependencias del provider
|
||||
* @param {*} provider
|
||||
* @returns
|
||||
*/
|
||||
const checkEveryProvider = async (provider = '') => {
|
||||
const pkgDependencies = readFileSync(
|
||||
join(PATH_PACKAGES, 'provider', 'src', provider, 'package.json')
|
||||
)
|
||||
try {
|
||||
const { dependencies } = JSON.parse(pkgDependencies)
|
||||
const devParse = Object.entries(dependencies)
|
||||
const newDevParse = {}
|
||||
for (const [pkgName] of devParse) {
|
||||
const lastVersion = await checkPkg(pkgName)
|
||||
newDevParse[pkgName] = lastVersion
|
||||
}
|
||||
return newDevParse
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
return {}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Actualizar depedencias con nuevas versiones
|
||||
* @param {*} provider
|
||||
* @param {*} list
|
||||
* @returns
|
||||
*/
|
||||
const updateDependencies = async (provider = '', list = {}) => {
|
||||
const pathProvider = join(
|
||||
PATH_PACKAGES,
|
||||
'provider',
|
||||
'src',
|
||||
provider,
|
||||
'package.json'
|
||||
)
|
||||
|
||||
try {
|
||||
const pkgDependencies = readFileSync(pathProvider)
|
||||
const { dependencies } = JSON.parse(pkgDependencies)
|
||||
writeFileSync(
|
||||
pathProvider,
|
||||
JSON.stringify(
|
||||
{ dependencies: { ...dependencies, ...list } },
|
||||
null,
|
||||
2
|
||||
)
|
||||
)
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
return {}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Actualizar starters
|
||||
* @param {*} provider
|
||||
* @returns
|
||||
*/
|
||||
const updateStarters = async (provider = '', updateDev = {}) => {
|
||||
provider = provider === 'web-whatsapp' ? 'wweb' : provider
|
||||
const allStarters = readdirSync(PATH_STARTERS).filter((n) =>
|
||||
n.includes(provider)
|
||||
)
|
||||
|
||||
try {
|
||||
for (const base of allStarters) {
|
||||
const pkgDependenciesBase = readFileSync(
|
||||
join(PATH_STARTERS, base, 'package.json')
|
||||
)
|
||||
const pkgBase = JSON.parse(pkgDependenciesBase)
|
||||
writeFileSync(
|
||||
join(PATH_STARTERS, base, 'package.json'),
|
||||
JSON.stringify(
|
||||
{
|
||||
...pkgBase,
|
||||
dependencies: { ...pkgBase.dependencies, ...updateDev },
|
||||
},
|
||||
null,
|
||||
2
|
||||
)
|
||||
)
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
const main = async () => {
|
||||
if (PKG_NAME) {
|
||||
const list = await checkEveryProvider(PKG_NAME)
|
||||
await updateDependencies(PKG_NAME, list)
|
||||
await updateStarters(PKG_NAME, list)
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
@@ -4,7 +4,7 @@
|
||||
"description": "",
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"pre-copy": "cd .. && yarn run copy.lib base-bailey-memory",
|
||||
"pre-copy": "cd .. && yarn run copy.lib base-baileys-memory",
|
||||
"start": "node app.js"
|
||||
},
|
||||
"keywords": [],
|
||||
@@ -13,9 +13,9 @@
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
"@bot-whatsapp/provider": "latest",
|
||||
"@adiwajshing/baileys": "^4.4.0",
|
||||
"mime-types": "^2.1.35",
|
||||
"wa-sticker-formatter": "^4.3.2"
|
||||
"@adiwajshing/baileys": "5.0.0",
|
||||
"mime-types": "2.1.35",
|
||||
"wa-sticker-formatter": "4.3.2"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
@@ -4,7 +4,7 @@
|
||||
"description": "",
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"pre-copy": "cd .. && yarn run copy.lib base-bailey-mongo",
|
||||
"pre-copy": "cd .. && yarn run copy.lib base-baileys-mongo",
|
||||
"start": "node app.js"
|
||||
},
|
||||
"keywords": [],
|
||||
@@ -13,10 +13,10 @@
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
"@bot-whatsapp/provider": "latest",
|
||||
"@adiwajshing/baileys": "^4.4.0",
|
||||
"mime-types": "^2.1.35",
|
||||
"@adiwajshing/baileys": "5.0.0",
|
||||
"mime-types": "2.1.35",
|
||||
"mongodb": "^4.12.1",
|
||||
"wa-sticker-formatter": "^4.3.2"
|
||||
"wa-sticker-formatter": "4.3.2"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
@@ -4,7 +4,7 @@
|
||||
"description": "",
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"pre-copy": "cd .. && yarn run copy.lib base-bailey-mysql",
|
||||
"pre-copy": "cd .. && yarn run copy.lib base-baileys-mysql",
|
||||
"start": "node app.js"
|
||||
},
|
||||
"keywords": [],
|
||||
@@ -13,10 +13,10 @@
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
"@bot-whatsapp/provider": "latest",
|
||||
"@adiwajshing/baileys": "^4.4.0",
|
||||
"mime-types": "^2.1.35",
|
||||
"@adiwajshing/baileys": "5.0.0",
|
||||
"mime-types": "2.1.35",
|
||||
"mysql2": "^2.3.3",
|
||||
"wa-sticker-formatter": "^4.3.2"
|
||||
"wa-sticker-formatter": "4.3.2"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
@@ -11,7 +11,7 @@
|
||||
"dependencies": {
|
||||
"body-parser": "^1.20.1",
|
||||
"polka": "^0.5.2",
|
||||
"twilio": "^3.83.4",
|
||||
"twilio": "3.84.0",
|
||||
"@bot-whatsapp/bot": "latest",
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"dependencies": {
|
||||
"body-parser": "^1.20.1",
|
||||
"polka": "^0.5.2",
|
||||
"twilio": "^3.83.4",
|
||||
"twilio": "3.84.0",
|
||||
"@bot-whatsapp/bot": "latest",
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"dependencies": {
|
||||
"body-parser": "^1.20.1",
|
||||
"polka": "^0.5.2",
|
||||
"twilio": "^3.83.4",
|
||||
"twilio": "3.84.0",
|
||||
"@bot-whatsapp/bot": "latest",
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
|
||||
@@ -9,11 +9,12 @@
|
||||
},
|
||||
"keywords": [],
|
||||
"dependencies": {
|
||||
"venom-bot": "^4.3.7",
|
||||
"venom-bot": "4.3.7",
|
||||
"@bot-whatsapp/bot": "latest",
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
"@bot-whatsapp/provider": "latest"
|
||||
"@bot-whatsapp/provider": "latest",
|
||||
"mime-types": "2.1.35"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
|
||||
@@ -9,12 +9,12 @@
|
||||
},
|
||||
"keywords": [],
|
||||
"dependencies": {
|
||||
"venom-bot": "^4.3.7",
|
||||
"venom-bot": "4.3.7",
|
||||
"@bot-whatsapp/bot": "latest",
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
"@bot-whatsapp/provider": "latest",
|
||||
"mime-types": "^2.1.35",
|
||||
"mime-types": "2.1.35",
|
||||
"mongodb": "^4.12.1"
|
||||
},
|
||||
"author": "",
|
||||
|
||||
@@ -9,12 +9,13 @@
|
||||
},
|
||||
"keywords": [],
|
||||
"dependencies": {
|
||||
"venom-bot": "^4.3.7",
|
||||
"venom-bot": "4.3.7",
|
||||
"@bot-whatsapp/bot": "latest",
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
"@bot-whatsapp/provider": "latest",
|
||||
"mysql2": "^2.3.3"
|
||||
"mysql2": "^2.3.3",
|
||||
"mime-types": "2.1.35"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
},
|
||||
"keywords": [],
|
||||
"dependencies": {
|
||||
"whatsapp-web.js": "^1.18.4",
|
||||
"@bot-whatsapp/bot": "latest",
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
"@bot-whatsapp/provider": "latest"
|
||||
"@bot-whatsapp/provider": "latest",
|
||||
"whatsapp-web.js": "1.18.4"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
},
|
||||
"keywords": [],
|
||||
"dependencies": {
|
||||
"whatsapp-web.js": "^1.18.4",
|
||||
"whatsapp-web.js": "1.18.4",
|
||||
"@bot-whatsapp/bot": "latest",
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
},
|
||||
"keywords": [],
|
||||
"dependencies": {
|
||||
"whatsapp-web.js": "^1.18.4",
|
||||
"whatsapp-web.js": "1.18.4",
|
||||
"@bot-whatsapp/bot": "latest",
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
|
||||
Reference in New Issue
Block a user