Skip to content

Commit

Permalink
feat(provider): new provider - venon:zap: configuracion inicial provi…
Browse files Browse the repository at this point in the history
feat(provider): new provider - venon:zap: configuracion inicial provi…
  • Loading branch information
leifermendez authored Dec 14, 2022
2 parents f799498 + 31c83f5 commit 66f75f8
Show file tree
Hide file tree
Showing 16 changed files with 774 additions and 466 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
/packages/*/node_modules
/packages/*/dist
/packages/*/docs/dist
/packages/provider/src/venom/tokens
session.json
chats/*
!chats/.gitkeep
Expand Down
3 changes: 2 additions & 1 deletion packages/provider/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
"exports": {
"./mock": "./lib/mock/index.cjs",
"./twilio": "./lib/twilio/index.cjs",
"./web-whatsapp": "./lib/web-whatsapp/index.cjs"
"./web-whatsapp": "./lib/web-whatsapp/index.cjs",
"./venom": "./lib/venom/index.cjs"
}
}
9 changes: 9 additions & 0 deletions packages/provider/rollup-provider.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,13 @@ module.exports = [
},
plugins: [commonjs()],
},
{
input: join(__dirname, 'src', 'venom', 'index.js'),
output: {
banner: banner['banner.output'].join(''),
file: join(__dirname, 'lib', 'venom', 'index.cjs'),
format: 'cjs',
},
plugins: [commonjs()],
},
]
54 changes: 54 additions & 0 deletions packages/provider/src/venom/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
const { ProviderClass } = require('@bot-whatsapp/bot')
const venom = require('venom-bot')
const { cleanNumber } = require('./utils/utils')

class VenomProvider extends ProviderClass {
constructor() {
super()
this.vendor
venom
.create(
{
session: 'session-1', //nombre de la sesion o id
multidevice: true,
},
(base64Qrimg) => this.generateQr(base64Qrimg)
)
.then((client) => {
this.vendor = client
this.start()
})
.catch((erro) => {
console.log(erro)
})
}

generateQr = () => {
this.emit('require_action', {
instructions: [
`Debes escanear el QR Code para iniciar session reivsa qr.svg`,
`Recuerda que el QR se actualiza cada minuto `,
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
],
})
//generateImage(qr)
}

start = () => {
this.vendor.onMessage((payload) => {
payload.from = cleanNumber(payload.from, true)
this.emit('message', payload)
})
}

sendMessage = async (userId, message, { options }) => {
console.log('entramos')
const number = cleanNumber(userId)
if (options?.buttons?.length)
return this.sendButtons(number, message, options.buttons)
if (options?.media) return this.sendMedia(number, options.media)
return this.vendor.sendText(number, message)
}
}

module.exports = VenomProvider
15 changes: 15 additions & 0 deletions packages/provider/src/venom/utils/utils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const qr = require('qr-image')
const { createWriteStream } = require('fs')

const cleanNumber = (number, full = false) => {
number = number.replace('@c.us', '')
number = !full ? `${number}@c.us` : `${number}`
return number
}

const generateImage = (base64) => {
let qr_svg = qr.image(base64, { type: 'svg', margin: 4 })
qr_svg.pipe(createWriteStream(`${process.cwd()}/qr.svg`))
}

module.exports = { cleanNumber, generateImage }
1 change: 1 addition & 0 deletions packages/provider/src/web-whatsapp/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class WebWhatsappProvider extends ProviderClass {
for (const { event, func } of listEvents) {
this.vendor.on(event, func)
}

this.vendor.emit('preinit')
this.vendor.initialize().catch((e) => {
logger.log(e)
Expand Down
12 changes: 12 additions & 0 deletions starters/apps/base-venom-memory/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
### BASE APP

Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
- Bienvenido a mi tienda
- Como puedo ayudarte?
- Tengo: Zapatos Bolsos etc..

------
- [Discord](https://link.codigoencasa.com/DISCORD)
- [Twitter](https://twitter.com/leifermendez)
- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
- [Telegram](https://t.me/leifermendez)
28 changes: 28 additions & 0 deletions starters/apps/base-venom-memory/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
const {
createBot,
createProvider,
createFlow,
addKeyword,
} = require('@bot-whatsapp/bot')

const WebWhatsappProvider = require('@bot-whatsapp/provider/venom')
const MockAdapter = require('@bot-whatsapp/database/mock')

const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
.addAnswer('Bienvenido a mi tienda')
.addAnswer('Como puedo ayudarte?')
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])

const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider)

createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
}

main()
20 changes: 20 additions & 0 deletions starters/apps/base-venom-memory/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "bot-whatsapp-base",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"pre-copy": "cd .. && yarn run copy.lib base-venom-mysql",
"start": "node app.js"
},
"keywords": [],
"dependencies": {
"venom-bot": "^4.3.7",
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest"
},
"author": "",
"license": "ISC"
}
12 changes: 12 additions & 0 deletions starters/apps/base-venom-mongo/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
### BASE APP

Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
- Bienvenido a mi tienda
- Como puedo ayudarte?
- Tengo: Zapatos Bolsos etc..

------
- [Discord](https://link.codigoencasa.com/DISCORD)
- [Twitter](https://twitter.com/leifermendez)
- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
- [Telegram](https://t.me/leifermendez)
28 changes: 28 additions & 0 deletions starters/apps/base-venom-mongo/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
const {
createBot,
createProvider,
createFlow,
addKeyword,
} = require('@bot-whatsapp/bot')

const WebWhatsappProvider = require('@bot-whatsapp/provider/venom')
const MockAdapter = require('@bot-whatsapp/database/mock')

const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
.addAnswer('Bienvenido a mi tienda')
.addAnswer('Como puedo ayudarte?')
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])

const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider)

createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
}

main()
20 changes: 20 additions & 0 deletions starters/apps/base-venom-mongo/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "bot-whatsapp-base",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"pre-copy": "cd .. && yarn run copy.lib base-venom-mysql",
"start": "node app.js"
},
"keywords": [],
"dependencies": {
"venom-bot": "^4.3.7",
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest"
},
"author": "",
"license": "ISC"
}
12 changes: 12 additions & 0 deletions starters/apps/base-venom-mysql/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
### BASE APP

Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
- Bienvenido a mi tienda
- Como puedo ayudarte?
- Tengo: Zapatos Bolsos etc..

------
- [Discord](https://link.codigoencasa.com/DISCORD)
- [Twitter](https://twitter.com/leifermendez)
- [Youtube](https://www.youtube.com/watch?v=5lEMCeWEJ8o&list=PL_WGMLcL4jzWPhdhcUyhbFU6bC0oJd2BR)
- [Telegram](https://t.me/leifermendez)
28 changes: 28 additions & 0 deletions starters/apps/base-venom-mysql/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
const {
createBot,
createProvider,
createFlow,
addKeyword,
} = require('@bot-whatsapp/bot')

const WebWhatsappProvider = require('@bot-whatsapp/provider/venom')
const MockAdapter = require('@bot-whatsapp/database/mock')

const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
.addAnswer('Bienvenido a mi tienda')
.addAnswer('Como puedo ayudarte?')
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])

const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider)

createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
}

main()
20 changes: 20 additions & 0 deletions starters/apps/base-venom-mysql/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "bot-whatsapp-base",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"pre-copy": "cd .. && yarn run copy.lib base-venom-mysql",
"start": "node app.js"
},
"keywords": [],
"dependencies": {
"venom-bot": "^4.3.7",
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest"
},
"author": "",
"license": "ISC"
}
Loading

0 comments on commit 66f75f8

Please # to comment.