Compare commits

...

12 Commits

Author SHA1 Message Date
Leifer Mendez
06acec2bf2 feat(cli): added bailey
feat(cli):  added bailey
2022-12-14 19:17:44 +01:00
Leifer Mendez
c868f73462 feat(cli): added bailey 2022-12-14 18:59:03 +01:00
Leifer Mendez
93a990e229 Merge remote-tracking branch 'origin/dev' into dev 2022-12-14 18:50:58 +01:00
Leifer Mendez
00c587fbf2 Merge branch 'fix/starters' into dev 2022-12-14 18:47:30 +01:00
Leifer Mendez
e6fefb4049 fix(adapter): 🔥 improvement baileys
fix(adapter): 🔥 improvement baileys
2022-12-14 18:46:16 +01:00
Leifer Mendez
2d5ac2664b fix(adapter): 🔥 improvement baileys 2022-12-14 18:44:50 +01:00
Leifer Mendez
4d4f15ce73 fix(starters): 🔥 updated staters 2022-12-14 16:42:14 +01:00
Leifer Mendez
a30eaac775 fix(starters): 🔥 updated staters 2022-12-14 16:41:47 +01:00
Leifer Mendez
5da4b7a4d1 fix: updated starters 2022-12-14 14:27:40 +01:00
Leifer Mendez
4e0fcbd834 feat(provider): new added baileys
Baileys Provider
2022-12-14 14:15:09 +01:00
Leifer Mendez
e37fd0da36 fix(adapter): 🚀 venom update - cli - qr iamge
fix(adapter): 🚀 venom update - cli - qr iamge
2022-12-14 13:39:00 +01:00
Joseph VTX
23b2e8e439 feat(provider): baileysProvider
Baileys WebSocket - Fast
2022-12-12 20:25:53 -05:00
35 changed files with 614 additions and 47 deletions

View File

@@ -6,6 +6,7 @@
"bot", "bot",
"provider", "provider",
"adapter", "adapter",
"ci" "ci",
"starters"
] ]
} }

View File

@@ -1,3 +0,0 @@
[handleMsg]: { from: 'XXXXXX', body: 'hola', hasMedia: false }
[handleMsg]: { from: 'XXXXXX', body: 'hola', hasMedia: false }
[handleMsg]: { from: 'XXXXXX', body: 'hola', hasMedia: false }

View File

@@ -35,7 +35,7 @@ const startInteractive = async () => {
{ title: 'whatsapp-web.js (gratis)', value: 'wweb' }, { title: 'whatsapp-web.js (gratis)', value: 'wweb' },
{ title: 'Twilio', value: 'twilio' }, { title: 'Twilio', value: 'twilio' },
{ title: 'Venom (gratis)', value: 'venom' }, { title: 'Venom (gratis)', value: 'venom' },
{ title: 'Baileys (gratis)', value: 'bailey', disabled: true }, { title: 'Baileys (gratis)', value: 'bailey' },
{ title: 'API Oficial (Meta)', value: 'meta', disabled: true }, { title: 'API Oficial (Meta)', value: 'meta', disabled: true },
], ],
max: 1, max: 1,

View File

@@ -17,6 +17,7 @@
"./mock": "./lib/mock/index.cjs", "./mock": "./lib/mock/index.cjs",
"./twilio": "./lib/twilio/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" "./venom": "./lib/venom/index.cjs",
"./baileys": "./lib/baileys/index.cjs"
} }
} }

View File

@@ -39,4 +39,13 @@ module.exports = [
}, },
plugins: [commonjs()], plugins: [commonjs()],
}, },
{
input: join(__dirname, 'src', 'baileys', 'index.js'),
output: {
banner: banner['banner.output'].join(''),
file: join(__dirname, 'lib', 'baileys', 'index.cjs'),
format: 'cjs',
},
plugins: [commonjs()],
},
] ]

View File

@@ -0,0 +1,171 @@
const { ProviderClass } = require('@bot-whatsapp/bot')
const pino = require('pino')
const {
default: makeWASocket,
useMultiFileAuthState,
} = require('@adiwajshing/baileys')
const {
baileyGenerateImage,
baileyCleanNumber,
baileyIsValidNumber,
} = require('./utils')
/**
* ⚙️ BaileysProvider: Es una clase tipo adaptor
* que extiende clases de ProviderClass (la cual es como interfaz para sber que funciones rqueridas)
* https://github.com/adiwajshing/Baileys
*/
class BaileysProvider extends ProviderClass {
vendor
constructor() {
super()
this.initBailey().then(() => this.initBusEvents())
}
/**
* Iniciar todo Bailey
*/
async initBailey() {
const { state, saveCreds } = await useMultiFileAuthState('sessions')
try {
this.vendor = makeWASocket({
printQRInTerminal: false,
auth: state,
logger: pino({ level: 'error' }),
})
this.vendor.ev.on(
'connection.update',
async ({ qr, connection, lastDisconnect }) => {
if (qr) baileyGenerateImage(qr)
if (connection === 'open') this.emit('ready', true)
if (lastDisconnect?.error) {
saveCreds()
this.initBailey()
}
}
)
} catch (e) {
this.emit('error', e)
}
}
/**
* Mapeamos los eventos nativos a los que la clase Provider espera
* para tener un standar de eventos
* @returns
*/
busEvents = () => [
{
event: 'connection.update',
func: async ({ qr, connection, lastDisconnect }) => {
if (qr) {
this.emit('require_action', {
instructions: [
`Debes escanear el QR Code para iniciar session reivsa qr.png`,
`Recuerda que el QR se actualiza cada minuto `,
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
],
})
baileyGenerateImage(qr)
}
if (lastDisconnect?.error) {
this.emit('require_action', {
instructions: [
`Algo sucedio reinicia el bot o revisa tu whatsapp`,
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
],
})
}
if (connection === 'open') this.emit('ready', true)
},
},
{
event: 'messages.upsert',
func: ({ messages }) => {
const [messageCtx] = messages
let payload = {
...messageCtx,
body: messageCtx?.message?.conversation,
from: messageCtx?.key?.remoteJid,
}
if (payload.from === 'status@broadcast') {
return
}
if (!baileyIsValidNumber(payload.from)) {
return
}
payload.from = baileyCleanNumber(payload.from, true)
this.emit('message', payload)
},
},
]
initBusEvents = () => {
const listEvents = this.busEvents()
for (const { event, func } of listEvents) {
this.vendor.ev.on(event, func)
}
}
/**
* @alpha
* @param {string} number
* @param {string} message
* @example await sendMessage('+XXXXXXXXXXX', 'https://dominio.com/imagen.jpg' | 'img/imagen.jpg')
*/
sendMedia = async (number, imageUrl) => {
await this.vendor.sendMessage(number, {
image: { url: imageUrl },
})
}
/**
* @alpha
* @param {string} number
* @param {string} message
* @param {boolean} voiceNote optional
* @example await sendMessage('+XXXXXXXXXXX', 'audio.mp3')
*/
sendAudio = async (number, audioUrl, voiceNote = false) => {
const numberClean = number.replace('+', '')
await this.vendor.sendMessage(`${numberClean}@c.us`, {
audio: { url: audioUrl },
ptt: voiceNote,
})
}
/**
*
* @param {string} number
* @param {string} message
* @returns
*/
sendText = async (number, message) => {
return this.vendor.sendMessage(number, { text: message })
}
/**
* TODO: Necesita terminar de implementar el sendMedia y sendButton guiarse:
* https://github.com/leifermendez/bot-whatsapp/blob/4e0fcbd8347f8a430adb43351b5415098a5d10df/packages/provider/src/web-whatsapp/index.js#L165
* @param {string} number
* @param {string} message
* @example await sendMessage('+XXXXXXXXXXX', 'Hello World')
*/
sendMessage = async (numberIn, message, { options }) => {
const number = baileyCleanNumber(numberIn)
// if (options?.buttons?.length)
// return this.sendButtons(number, message, options.buttons)
if (options?.media) return this.sendMedia(number, options.media)
return this.sendText(number, message)
}
}
module.exports = BaileysProvider

View File

@@ -0,0 +1,21 @@
const { createWriteStream } = require('fs')
const qr = require('qr-image')
const baileyCleanNumber = (number, full = false) => {
number = number.replace('@s.whatsapp.net', '')
number = !full ? `${number}@s.whatsapp.net` : `${number}`
return number
}
const baileyGenerateImage = (base64) => {
let qr_svg = qr.image(base64, { type: 'png', margin: 4 })
qr_svg.pipe(createWriteStream(`${process.cwd()}/qr.png`))
}
const baileyIsValidNumber = (rawNumber) => {
const regexGroup = /\@g.us\b/gm
const exist = rawNumber.match(regexGroup)
return !exist
}
module.exports = { baileyCleanNumber, baileyGenerateImage, baileyIsValidNumber }

View File

@@ -4,7 +4,7 @@ const {
venomCleanNumber, venomCleanNumber,
venomGenerateImage, venomGenerateImage,
venomisValidNumber, venomisValidNumber,
} = require('./utils/utils') } = require('./utils')
/** /**
* ⚙️ VenomProvider: Es una clase tipo adaptor * ⚙️ VenomProvider: Es una clase tipo adaptor
@@ -13,7 +13,6 @@ const {
*/ */
class VenomProvider extends ProviderClass { class VenomProvider extends ProviderClass {
vendor vendor
constructor() { constructor() {
super() super()
this.init().then(() => this.initBusEvents()) this.init().then(() => this.initBusEvents())

View File

@@ -3,10 +3,10 @@ const { ProviderClass } = require('@bot-whatsapp/bot')
const { Console } = require('console') const { Console } = require('console')
const { createWriteStream } = require('fs') const { createWriteStream } = require('fs')
const { const {
cleanNumber, wwebCleanNumber,
generateImage, wwebDownloadMedia,
isValidNumber, wwebGenerateImage,
downloadMedia, wwebIsValidNumber,
} = require('./utils') } = require('./utils')
const logger = new Console({ const logger = new Console({
@@ -65,7 +65,7 @@ class WebWhatsappProvider extends ProviderClass {
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`, `Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
], ],
}) })
generateImage(qr) wwebGenerateImage(qr)
}, },
}, },
{ {
@@ -79,10 +79,10 @@ class WebWhatsappProvider extends ProviderClass {
return return
} }
if (!isValidNumber(payload.from)) { if (!wwebIsValidNumber(payload.from)) {
return return
} }
payload.from = cleanNumber(payload.from, true) payload.from = wwebCleanNumber(payload.from, true)
this.emit('message', payload) this.emit('message', payload)
}, },
}, },
@@ -98,7 +98,7 @@ class WebWhatsappProvider extends ProviderClass {
*/ */
sendMedia = async (number, mediaInput = null) => { sendMedia = async (number, mediaInput = null) => {
if (!mediaInput) throw new Error(`NO_SE_ENCONTRO: ${mediaInput}`) if (!mediaInput) throw new Error(`NO_SE_ENCONTRO: ${mediaInput}`)
const fileDownloaded = await downloadMedia(mediaInput) const fileDownloaded = await wwebDownloadMedia(mediaInput)
const media = MessageMedia.fromFilePath(fileDownloaded) const media = MessageMedia.fromFilePath(fileDownloaded)
return this.vendor.sendMessage(number, media, { return this.vendor.sendMessage(number, media, {
sendAudioAsVoice: true, sendAudioAsVoice: true,
@@ -163,7 +163,7 @@ class WebWhatsappProvider extends ProviderClass {
* @returns * @returns
*/ */
sendMessage = async (userId, message, { options }) => { sendMessage = async (userId, message, { options }) => {
const number = cleanNumber(userId) const number = wwebCleanNumber(userId)
if (options?.buttons?.length) if (options?.buttons?.length)
return this.sendButtons(number, message, options.buttons) return this.sendButtons(number, message, options.buttons)
if (options?.media) return this.sendMedia(number, options.media) if (options?.media) return this.sendMedia(number, options.media)

View File

@@ -4,18 +4,18 @@ const { tmpdir } = require('os')
const http = require('http') const http = require('http')
const https = require('https') const https = require('https')
const cleanNumber = (number, full = false) => { const wwebCleanNumber = (number, full = false) => {
number = number.replace('@c.us', '') number = number.replace('@c.us', '')
number = !full ? `${number}@c.us` : `${number}` number = !full ? `${number}@c.us` : `${number}`
return number return number
} }
const generateImage = (base64) => { const wwebGenerateImage = (base64) => {
let qr_svg = qr.image(base64, { type: 'png', margin: 4 }) let qr_svg = qr.image(base64, { type: 'png', margin: 4 })
qr_svg.pipe(createWriteStream(`${process.cwd()}/qr.svg`)) qr_svg.pipe(createWriteStream(`${process.cwd()}/qr.png`))
} }
const isValidNumber = (rawNumber) => { const wwebIsValidNumber = (rawNumber) => {
const regexGroup = /\@g.us\b/gm const regexGroup = /\@g.us\b/gm
const exist = rawNumber.match(regexGroup) const exist = rawNumber.match(regexGroup)
return !exist return !exist
@@ -27,7 +27,7 @@ const isValidNumber = (rawNumber) => {
* @param {*} url * @param {*} url
* @returns * @returns
*/ */
const downloadMedia = (url) => { const wwebDownloadMedia = (url) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const ext = url.split('.').pop() const ext = url.split('.').pop()
const checkProtocol = url.includes('https:') const checkProtocol = url.includes('https:')
@@ -50,4 +50,9 @@ const downloadMedia = (url) => {
}) })
} }
module.exports = { cleanNumber, generateImage, isValidNumber, downloadMedia } module.exports = {
wwebCleanNumber,
wwebGenerateImage,
wwebIsValidNumber,
wwebDownloadMedia,
}

View File

@@ -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)

View File

@@ -0,0 +1,82 @@
const {
createBot,
createProvider,
createFlow,
addKeyword,
addChild,
} = require('@bot-whatsapp/bot')
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
const MockAdapter = require('@bot-whatsapp/database/mock')
/**
* Declarando flujo hijo
*/
const flowBolsos2 = addKeyword(['bolsos2', '2'])
.addAnswer('🤯 *MUCHOS* bolsos ...')
.addAnswer('y mas bolsos... bla bla')
const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[...addChild(flowZapatos2)]
)
const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[...addChild(flowBolsos2)]
)
/**
* Declarando flujo principal
*/
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
.addAnswer('Hola, bienvenido a mi tienda')
.addAnswer('Como puedo ayudarte?')
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
.addAnswer(
['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
console.log(ctx['_data']['notifyName'])
},
[...addChild(flowBolsos), ...addChild(flowZapatos)]
)
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(BaileysProvider)
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
}
main()

View File

@@ -0,0 +1,20 @@
{
"name": "bot-whatsapp-base-bailey-memory",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"pre-copy": "cd .. && yarn run copy.lib base-bailey-memory",
"start": "node app.js"
},
"keywords": [],
"dependencies": {
"@adiwajshing/baileys": "^4.4.0",
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest"
},
"author": "",
"license": "ISC"
}

View File

@@ -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)

View File

@@ -0,0 +1,82 @@
const {
createBot,
createProvider,
createFlow,
addKeyword,
addChild,
} = require('@bot-whatsapp/bot')
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
const MockAdapter = require('@bot-whatsapp/database/mock')
/**
* Declarando flujo hijo
*/
const flowBolsos2 = addKeyword(['bolsos2', '2'])
.addAnswer('🤯 *MUCHOS* bolsos ...')
.addAnswer('y mas bolsos... bla bla')
const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[...addChild(flowZapatos2)]
)
const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[...addChild(flowBolsos2)]
)
/**
* Declarando flujo principal
*/
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
.addAnswer('Hola, bienvenido a mi tienda')
.addAnswer('Como puedo ayudarte?')
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
.addAnswer(
['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
console.log(ctx['_data']['notifyName'])
},
[...addChild(flowBolsos), ...addChild(flowZapatos)]
)
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(BaileysProvider)
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
}
main()

View File

@@ -0,0 +1,20 @@
{
"name": "bot-whatsapp-base-bailey-mongo",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"pre-copy": "cd .. && yarn run copy.lib base-bailey-mongo",
"start": "node app.js"
},
"keywords": [],
"dependencies": {
"@adiwajshing/baileys": "^4.4.0",
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest"
},
"author": "",
"license": "ISC"
}

View File

@@ -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)

View File

@@ -0,0 +1,82 @@
const {
createBot,
createProvider,
createFlow,
addKeyword,
addChild,
} = require('@bot-whatsapp/bot')
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
const MockAdapter = require('@bot-whatsapp/database/mock')
/**
* Declarando flujo hijo
*/
const flowBolsos2 = addKeyword(['bolsos2', '2'])
.addAnswer('🤯 *MUCHOS* bolsos ...')
.addAnswer('y mas bolsos... bla bla')
const flowZapatos2 = addKeyword(['zapatos2', '2'])
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
.addAnswer('y algunas otras cosas.')
const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
.addAnswer('🤯 Veo que elegiste zapatos')
.addAnswer('Tengo muchos zapatos...bla bla')
.addAnswer(
['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[...addChild(flowZapatos2)]
)
const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
.addAnswer('🙌 Veo que elegiste bolsos')
.addAnswer('Tengo muchos bolsos...bla bla')
.addAnswer(
['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
},
[...addChild(flowBolsos2)]
)
/**
* Declarando flujo principal
*/
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
.addAnswer('Hola, bienvenido a mi tienda')
.addAnswer('Como puedo ayudarte?')
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
.addAnswer(
['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
{ capture: true },
(ctx) => {
console.log('Aqui puedes ver más info del usuario...')
console.log('Puedes enviar un mail, hook, etc..')
console.log(ctx)
console.log(ctx['_data']['notifyName'])
},
[...addChild(flowBolsos), ...addChild(flowZapatos)]
)
const main = async () => {
const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(BaileysProvider)
createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
}
main()

View File

@@ -0,0 +1,20 @@
{
"name": "bot-whatsapp-base-bailey-mysql",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"pre-copy": "cd .. && yarn run copy.lib base-bailey-mysql",
"start": "node app.js"
},
"keywords": [],
"dependencies": {
"@adiwajshing/baileys": "^4.4.0",
"@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest",
"@bot-whatsapp/provider": "latest"
},
"author": "",
"license": "ISC"
}

View File

@@ -6,7 +6,7 @@ const {
addChild, addChild,
} = require('@bot-whatsapp/bot') } = require('@bot-whatsapp/bot')
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp') const TwilioProvider = require('@bot-whatsapp/provider/twilio')
const MockAdapter = require('@bot-whatsapp/database/mock') const MockAdapter = require('@bot-whatsapp/database/mock')
/** /**
@@ -71,7 +71,13 @@ const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
const main = async () => { const main = async () => {
const adapterDB = new MockAdapter() const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal]) const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider)
const adapterProvider = createProvider(TwilioProvider, {
accountSid: 'YOUR_ACCOUNT_SID',
authToken: 'YOUR_ACCOUNT_TOKEN',
vendorNumber: '+14155238886',
})
createBot({ createBot({
flow: adapterFlow, flow: adapterFlow,
provider: adapterProvider, provider: adapterProvider,

View File

@@ -1,5 +1,5 @@
{ {
"name": "bot-whatsapp-base", "name": "bot-whatsapp-base-twilio-memory",
"version": "1.0.0", "version": "1.0.0",
"description": "", "description": "",
"main": "app.js", "main": "app.js",
@@ -9,7 +9,9 @@
}, },
"keywords": [], "keywords": [],
"dependencies": { "dependencies": {
"whatsapp-web.js": "^1.18.3", "body-parser": "^1.20.1",
"polka": "^0.5.2",
"twilio": "^3.83.4",
"@bot-whatsapp/bot": "latest", "@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest", "@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest", "@bot-whatsapp/database": "latest",

View File

@@ -6,7 +6,7 @@ const {
addChild, addChild,
} = require('@bot-whatsapp/bot') } = require('@bot-whatsapp/bot')
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp') const TwilioProvider = require('@bot-whatsapp/provider/twilio')
const MockAdapter = require('@bot-whatsapp/database/mock') const MockAdapter = require('@bot-whatsapp/database/mock')
/** /**
@@ -71,7 +71,12 @@ const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
const main = async () => { const main = async () => {
const adapterDB = new MockAdapter() const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal]) const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider) const adapterProvider = createProvider(TwilioProvider, {
accountSid: 'YOUR_ACCOUNT_SID',
authToken: 'YOUR_ACCOUNT_TOKEN',
vendorNumber: '+14155238886',
})
createBot({ createBot({
flow: adapterFlow, flow: adapterFlow,
provider: adapterProvider, provider: adapterProvider,

View File

@@ -1,5 +1,5 @@
{ {
"name": "bot-whatsapp-base", "name": "bot-whatsapp-base-twilio-mongo",
"version": "1.0.0", "version": "1.0.0",
"description": "", "description": "",
"main": "app.js", "main": "app.js",
@@ -9,7 +9,9 @@
}, },
"keywords": [], "keywords": [],
"dependencies": { "dependencies": {
"whatsapp-web.js": "^1.18.3", "body-parser": "^1.20.1",
"polka": "^0.5.2",
"twilio": "^3.83.4",
"@bot-whatsapp/bot": "latest", "@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest", "@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest", "@bot-whatsapp/database": "latest",

View File

@@ -6,7 +6,7 @@ const {
addChild, addChild,
} = require('@bot-whatsapp/bot') } = require('@bot-whatsapp/bot')
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp') const TwilioProvider = require('@bot-whatsapp/provider/twilio')
const MockAdapter = require('@bot-whatsapp/database/mock') const MockAdapter = require('@bot-whatsapp/database/mock')
/** /**
@@ -71,7 +71,11 @@ const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
const main = async () => { const main = async () => {
const adapterDB = new MockAdapter() const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal]) const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider) const adapterProvider = createProvider(TwilioProvider, {
accountSid: 'YOUR_ACCOUNT_SID',
authToken: 'YOUR_ACCOUNT_TOKEN',
vendorNumber: '+14155238886',
})
createBot({ createBot({
flow: adapterFlow, flow: adapterFlow,
provider: adapterProvider, provider: adapterProvider,

View File

@@ -1,5 +1,5 @@
{ {
"name": "bot-whatsapp-base", "name": "bot-whatsapp-base-twilio-mysql",
"version": "1.0.0", "version": "1.0.0",
"description": "", "description": "",
"main": "app.js", "main": "app.js",
@@ -9,7 +9,9 @@
}, },
"keywords": [], "keywords": [],
"dependencies": { "dependencies": {
"whatsapp-web.js": "^1.18.3", "body-parser": "^1.20.1",
"polka": "^0.5.2",
"twilio": "^3.83.4",
"@bot-whatsapp/bot": "latest", "@bot-whatsapp/bot": "latest",
"@bot-whatsapp/cli": "latest", "@bot-whatsapp/cli": "latest",
"@bot-whatsapp/database": "latest", "@bot-whatsapp/database": "latest",

View File

@@ -5,7 +5,7 @@ const {
addKeyword, addKeyword,
} = require('@bot-whatsapp/bot') } = require('@bot-whatsapp/bot')
const WebWhatsappProvider = require('@bot-whatsapp/provider/venom') const VenomProvider = require('@bot-whatsapp/provider/venom')
const MockAdapter = require('@bot-whatsapp/database/mock') const MockAdapter = require('@bot-whatsapp/database/mock')
const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA']) const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
@@ -16,7 +16,7 @@ const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
const main = async () => { const main = async () => {
const adapterDB = new MockAdapter() const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal]) const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider) const adapterProvider = createProvider(VenomProvider)
createBot({ createBot({
flow: adapterFlow, flow: adapterFlow,

View File

@@ -1,5 +1,5 @@
{ {
"name": "bot-whatsapp-base", "name": "bot-whatsapp-base-venom-memory",
"version": "1.0.0", "version": "1.0.0",
"description": "", "description": "",
"main": "app.js", "main": "app.js",

View File

@@ -5,7 +5,7 @@ const {
addKeyword, addKeyword,
} = require('@bot-whatsapp/bot') } = require('@bot-whatsapp/bot')
const WebWhatsappProvider = require('@bot-whatsapp/provider/venom') const VenomProvider = require('@bot-whatsapp/provider/venom')
const MockAdapter = require('@bot-whatsapp/database/mock') const MockAdapter = require('@bot-whatsapp/database/mock')
const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA']) const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
@@ -16,7 +16,7 @@ const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
const main = async () => { const main = async () => {
const adapterDB = new MockAdapter() const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal]) const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider) const adapterProvider = createProvider(VenomProvider)
createBot({ createBot({
flow: adapterFlow, flow: adapterFlow,

View File

@@ -1,5 +1,5 @@
{ {
"name": "bot-whatsapp-base", "name": "bot-whatsapp-base-venom-mongo",
"version": "1.0.0", "version": "1.0.0",
"description": "", "description": "",
"main": "app.js", "main": "app.js",

View File

@@ -5,7 +5,7 @@ const {
addKeyword, addKeyword,
} = require('@bot-whatsapp/bot') } = require('@bot-whatsapp/bot')
const WebWhatsappProvider = require('@bot-whatsapp/provider/venom') const VenomProvider = require('@bot-whatsapp/provider/venom')
const MockAdapter = require('@bot-whatsapp/database/mock') const MockAdapter = require('@bot-whatsapp/database/mock')
const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA']) const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
@@ -16,7 +16,7 @@ const flowPrincipal = addKeyword(['hola', 'ole', 'HOLA'])
const main = async () => { const main = async () => {
const adapterDB = new MockAdapter() const adapterDB = new MockAdapter()
const adapterFlow = createFlow([flowPrincipal]) const adapterFlow = createFlow([flowPrincipal])
const adapterProvider = createProvider(WebWhatsappProvider) const adapterProvider = createProvider(VenomProvider)
createBot({ createBot({
flow: adapterFlow, flow: adapterFlow,

View File

@@ -1,5 +1,5 @@
{ {
"name": "bot-whatsapp-base", "name": "bot-whatsapp-base-venom-mysql",
"version": "1.0.0", "version": "1.0.0",
"description": "", "description": "",
"main": "app.js", "main": "app.js",

View File

@@ -1,5 +1,5 @@
{ {
"name": "bot-whatsapp-base", "name": "bot-whatsapp-base-wweb-memory",
"version": "1.0.0", "version": "1.0.0",
"description": "", "description": "",
"main": "app.js", "main": "app.js",

View File

@@ -1,5 +1,5 @@
{ {
"name": "bot-whatsapp-base", "name": "bot-whatsapp-base-wweb-mongo",
"version": "1.0.0", "version": "1.0.0",
"description": "", "description": "",
"main": "app.js", "main": "app.js",

View File

@@ -1,5 +1,5 @@
{ {
"name": "bot-whatsapp-base", "name": "bot-whatsapp-base-wweb-mysql",
"version": "1.0.0", "version": "1.0.0",
"description": "", "description": "",
"main": "app.js", "main": "app.js",