mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-21 04:59:15 +00:00
Merge remote-tracking branch 'origin/dev' into feat/docs-video
This commit is contained in:
43
README.md
43
README.md
@@ -1,21 +1,36 @@
|
||||
[](https://github.com/leifermendez/bot-whatsapp/actions/workflows/ci.yml)
|
||||
# Chatbot Library
|
||||

|
||||
[](http://commitizen.github.io/cz-cli/)
|
||||
--------
|
||||
## Documentacion
|
||||
[https://bot-whatsapp.netlify.app/](https://bot-whatsapp.netlify.app/)
|
||||
|
||||
🐤 Tablero de tareas : [https://github.com/users/leifermendez/projects/4/views/1](https://github.com/users/leifermendez/projects/4/views/1)
|
||||
|
||||
🚀 __Roadmap:__ [https://github.com/users/leifermendez/projects/4/views/1](https://github.com/users/leifermendez/projects/4/views/1)
|
||||
[](https://github.com/codigoencasa/bot-whatsapp/actions/workflows/releases.yml)
|
||||
|
||||
|
||||
**Comunidad**
|
||||
|
||||
<div style="width:100%;text-align:center"><img src="https://i.imgur.com/Oauef6t.png" width="300" /></div>
|
||||
|
||||
|
||||
**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.
|
||||
|
||||
## Comenzar
|
||||
|
||||
```
|
||||
npm create bot-whatsapp@latest
|
||||
```
|
||||
|
||||
Entiende más a fondo sus funcionalidades explicadas en nuestra documentación.
|
||||
|
||||
- Instalacion
|
||||
- Base de datos
|
||||
- Proveedores
|
||||
|
||||
## 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)
|
||||
|
||||
## Comunidad
|
||||
<!-- readme: collaborators,contributors -start -->
|
||||
<!-- readme: collaborators,contributors -end -->
|
||||
|
||||
> Forma parte de este proyecto.
|
||||
|
||||
- [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)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bot-whatsapp/bot",
|
||||
"version": "0.0.26-alpha.0",
|
||||
"version": "0.0.29-alpha.0",
|
||||
"description": "",
|
||||
"main": "./lib/bundle.bot.cjs",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bot-whatsapp/cli",
|
||||
"version": "0.0.33-alpha.0",
|
||||
"version": "0.0.36-alpha.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"devDependencies": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "create-bot-whatsapp",
|
||||
"version": "0.0.44-alpha.0",
|
||||
"version": "0.0.47-alpha.0",
|
||||
"description": "",
|
||||
"main": "./lib/bundle.create-bot-whatsapp.cjs",
|
||||
"files": [
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bot-whatsapp/database",
|
||||
"version": "0.0.25-alpha.0",
|
||||
"version": "0.0.28-alpha.0",
|
||||
"description": "Esto es el conector a mysql, pg, mongo",
|
||||
"main": "./lib/mock/index.cjs",
|
||||
"keywords": [],
|
||||
|
||||
@@ -9,12 +9,12 @@ import Alert from '../../components/widgets/Alert'
|
||||
disfrutar de las nuevas características.
|
||||
</Alert>
|
||||
|
||||
## ¿Que es esto?
|
||||
## ¿Què es esto?
|
||||
|
||||
**@bot-whatsapp** es una librería que te permitirá **crear chatbot para WhatsApp** en tan solo minutos de una manera ágil y rápida. A lo largo de esta documentación encontrarás ejemplos y material de ayuda.
|
||||
|
||||
Si eres una persona con **poco tiempo y gran capacidad** de comprensión con conocimientos, ejecutando proyectos en Node.js y manejo de terminal.
|
||||
Esta documentación te ayudará a instalar tu bot de WhatsApp en simples pasos con el propósito de que tengas un chatbot funcional **en solo minutos.**
|
||||
Si eres una persona con **poco tiempo y gran capacidad** de comprensión, con conocimientos ejecutando proyectos en Node.js y manejo de terminal.
|
||||
Esta documentación te ayudará a instalar tu bot de WhatsApp en simples pasos; con el propósito de que tengas un chatbot funcional **en solo minutos.**
|
||||
|
||||
---
|
||||
|
||||
@@ -40,5 +40,5 @@ npm create bot-whatsapp@latest
|
||||
</video>
|
||||
</div>
|
||||
|
||||
**¿Algun error?**
|
||||
**¿Algún error?**
|
||||
Recuerda que debes de cumplir con los [requisitos minimos](/docs/install) del sistema
|
||||
|
||||
@@ -6,6 +6,11 @@ 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,3 +1,25 @@
|
||||
# Unirme
|
||||
|
||||
Bienvenido al proyecto! Estamos emocionados de tenerte a bordo y esperamos trabajar contigo.
|
||||
|
||||
Deseamos que te sientas cómodo y que puedas aportar tu valioso conocimiento y habilidades.
|
||||
|
||||
Recuerda que si tienes alguna inquietud, o simplemente deseas interactuar con los otros colaboradores puedes unirte a la comunidad.
|
||||
|
||||
## Ventajas al unirme
|
||||
|
||||
Participar en un proyecto de código abierto te permite aprender de manera práctica sobre tecnologías y metodologías de desarrollo de software. También puedes aprender de otros desarrolladores y contribuir a la comunidad de código abierto.
|
||||
|
||||
Al unirte te estará brindando la oportunidad de **adquirir experiencia en el desarrollo de software** y en el trabajo en equipo. Esto puede ser muy valioso para tu currículum y para tu carrera profesional.
|
||||
|
||||
La visibilidad es uno de los puntos que más se requieren hoy en día, al unirte se te brinda la oportunidad de **mayor visibilidad en la comunidad de desarrolladores y de demostrar tus habilidades**. Esto puede ayudarte a encontrar oportunidades de trabajo o a colaborar con otros proyectos.
|
||||
|
||||
Colaboración con otros desarrolladores de todo el mundo y **trabajar juntos para mejorar el proyecto** Al trabajar en equipo y colaborar con otros, podrás mejorar tu comunicación, resolución de problemas y liderazgo, habilidades que cada vez son más demandadas en el entorno laboral.
|
||||
|
||||
Contribución al bien común Participar en un proyecto de código abierto te permite contribuir a la comunidad y a la sociedad en general, ya que el código abierto es accesible y utilizable por cualquier persona. **Esto puede ser muy gratificante y sentirte parte de algo más grande**.
|
||||
|
||||
Es una excelente manera de incrementar tus habilidades tecnológicas y **estar al tanto de las últimas tendencias y desarrollos en el mundo del software**. Al trabajar con otros desarrolladores y contribuir a proyectos de código abierto, tendrás la oportunidad de \*\*aprender y practicar nuevas tecnologías y metodologías, lo que te ayudará a mejorar tus habilidades y a mantenerte actualizado en el mundo en constante cambio de la tecnología.
|
||||
|
||||
Esperamos que estés listo para **unirte a nosotros en esta emocionante aventura**
|
||||
|
||||
...
|
||||
|
||||
@@ -1,3 +1,24 @@
|
||||
# MasterClass
|
||||
[](https://hackmd.io/79xQyVSgRD6RsTpqtMPPdw)
|
||||
### Preguntas Frecuentes para Master Class BOT v2
|
||||
> Anota aqui las preguntas o dudas que tengas
|
||||
> Pronto estare publicando fecha y hora para la masterclass
|
||||
|
||||
...
|
||||
1.- Si necesito correr dos bots al mismo tiempo ¿donde puedo cambiar el puerto?
|
||||
|
||||
2.- Si necesito agregar o modificar funciones del bot, ¿como puedo hacerlo?
|
||||
|
||||
3.- Si quiero mi bot con otra base de datos diferente a MySQL ¿como lo puedo hacer?
|
||||
|
||||
4.- Quiero conectarme a tal o cual API con JSON/XML/etc, ¿se puede hacer?
|
||||
|
||||
5.- ¿Como integrar listas?
|
||||
|
||||
6.- Preguntas y respuestas con el Bot
|
||||
|
||||
7.- Guardar conversaciones en Excel.
|
||||
|
||||
8.- ¿Puedo usar 2 o mas sesiones (códigos QR) al mismo tiempo?
|
||||
|
||||
9.- ¿Puede ser que al usar el provider bailey, al leer el qr.png, que sea desde una url en el navegador, y no desde visual studio? Gracias
|
||||
|
||||
10.- ¿Cómo tomo los datos que me envían en un mensaje para utilizarlo internamente en la búsqueda de datos propios y devolver la respuesta?
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bot-whatsapp/provider",
|
||||
"version": "0.0.31-alpha.0",
|
||||
"version": "0.0.34-alpha.0",
|
||||
"description": "Esto es el conector a Twilio, Meta, etc...",
|
||||
"main": "./lib/mock/index.cjs",
|
||||
"keywords": [],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
const { EventEmitter } = require('node:events')
|
||||
const polka = require('polka')
|
||||
const { urlencoded } = require('body-parser')
|
||||
const { urlencoded, json } = require('body-parser')
|
||||
|
||||
class MetaWebHookServer extends EventEmitter {
|
||||
metaServer
|
||||
@@ -8,9 +8,11 @@ class MetaWebHookServer extends EventEmitter {
|
||||
token
|
||||
constructor(_token, _metaPort) {
|
||||
super()
|
||||
this.metaServer = this.buildHTTPServer()
|
||||
this.metaServer = polka()
|
||||
this.metaPort = _metaPort
|
||||
this.token = _token
|
||||
|
||||
this.buildHTTPServer()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -21,12 +23,18 @@ class MetaWebHookServer extends EventEmitter {
|
||||
*/
|
||||
incomingMsg = (req, res) => {
|
||||
const { body } = req
|
||||
const message = body.entry[0].changes[0].value.messages[0]
|
||||
|
||||
const messages = body.entry[0].changes[0].value?.messages
|
||||
|
||||
if (!messages) return
|
||||
|
||||
const [message] = messages
|
||||
const to = body.entry[0].changes[0].value.metadata.display_phone_number
|
||||
|
||||
this.emit('message', {
|
||||
from: message.from,
|
||||
to,
|
||||
body: message.text.body,
|
||||
body: message.text?.body,
|
||||
})
|
||||
const json = JSON.stringify({ body })
|
||||
res.end(json)
|
||||
@@ -55,16 +63,16 @@ class MetaWebHookServer extends EventEmitter {
|
||||
const challenge = query['hub.challenge']
|
||||
|
||||
if (!mode || !token) {
|
||||
return res.sendStatus(403)
|
||||
return (res.statusCode = 403), res.end('No token!')
|
||||
}
|
||||
|
||||
if (this.tokenIsValid(mode, token)) {
|
||||
console.log('Webhook verified--->😎😎😎😎')
|
||||
res.status(200).send(challenge)
|
||||
return (res.statusCode = 200), res.end(challenge)
|
||||
}
|
||||
|
||||
if (!this.tokenIsValid(mode, token)) {
|
||||
res.sendStatus(403)
|
||||
return (res.statusCode = 403), res.end('No token!')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,12 +81,13 @@ class MetaWebHookServer extends EventEmitter {
|
||||
* @returns
|
||||
*/
|
||||
buildHTTPServer = () => {
|
||||
polka()
|
||||
this.metaServer
|
||||
.use(urlencoded({ extended: true }))
|
||||
.get('/webhook', this.verifyToken)
|
||||
|
||||
return polka()
|
||||
this.metaServer
|
||||
.use(urlencoded({ extended: true }))
|
||||
.use(json())
|
||||
.post('/webhook', this.incomingMsg)
|
||||
}
|
||||
|
||||
@@ -91,7 +100,7 @@ class MetaWebHookServer extends EventEmitter {
|
||||
console.log(``)
|
||||
console.log(`[meta]: Agregar esta url "WHEN A MESSAGE COMES IN"`)
|
||||
console.log(
|
||||
`[meta]: POST http://localhost:${this.metaPort}/meta-hook`
|
||||
`[meta]: POST http://localhost:${this.metaPort}/webhook`
|
||||
)
|
||||
console.log(`[meta]: Más información en la documentacion`)
|
||||
console.log(``)
|
||||
|
||||
34
starters/apps/base-meta-json/README.md
Normal file
34
starters/apps/base-meta-json/README.md
Normal file
@@ -0,0 +1,34 @@
|
||||
### CHATBOT Whatsapp
|
||||
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
|
||||
|
||||
Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
|
||||
- Bienvenido a mi tienda
|
||||
- ¿Como puedo ayudarte?
|
||||
- Tengo: Zapatos, Bolsos etc..
|
||||
|
||||
__Iniciar__
|
||||
|
||||
Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
|
||||
|
||||
Menu Principal
|
||||
- SubMenu 1
|
||||
- Submenu 1.1
|
||||
- Submenu 2
|
||||
- Submenu 2.1
|
||||
|
||||
Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
|
||||
```
|
||||
npm install
|
||||
npm start
|
||||
```
|
||||
|
||||
__¿Tienes problemas?:__ [Abrir Issue](https://github.com/codigoencasa/bot-whatsapp/issues/new/choose)
|
||||
|
||||
------
|
||||
> ¿Quieres se parte de este proyecto?
|
||||
> - [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)
|
||||
95
starters/apps/base-meta-json/app.js
Normal file
95
starters/apps/base-meta-json/app.js
Normal file
@@ -0,0 +1,95 @@
|
||||
const {
|
||||
createBot,
|
||||
createProvider,
|
||||
createFlow,
|
||||
addKeyword,
|
||||
addChild,
|
||||
} = require('@bot-whatsapp/bot')
|
||||
|
||||
const MetaProvider = require('@bot-whatsapp/provider/meta')
|
||||
const JsonFileAdapter = require('@bot-whatsapp/database/json')
|
||||
|
||||
/**
|
||||
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||
*
|
||||
* Menu Principal
|
||||
* - SubMenu 1
|
||||
* - Submenu 1.1
|
||||
* - Submenu 2
|
||||
* - Submenu 2.1
|
||||
*
|
||||
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
*/
|
||||
|
||||
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(['1', 'zapatos', 'ZAPATOS'])
|
||||
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*(2) 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(['2', 'bolsos', 'BOLSOS'])
|
||||
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*(2) 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', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer(
|
||||
['Para continuar escribe:', '*(1) Zapatos*', '*(2) 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)
|
||||
},
|
||||
[...addChild(flowBolsos), ...addChild(flowZapatos)]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
const adapterDB = new JsonFileAdapter()
|
||||
const adapterFlow = createFlow([flowPrincipal])
|
||||
|
||||
const adapterProvider = createProvider(MetaProvider, {
|
||||
jwtToken: 'jwtToken',
|
||||
numberId: 'numberId',
|
||||
verifyToken: 'verifyToken',
|
||||
})
|
||||
|
||||
createBot({
|
||||
flow: adapterFlow,
|
||||
provider: adapterProvider,
|
||||
database: adapterDB,
|
||||
})
|
||||
}
|
||||
|
||||
main()
|
||||
22
starters/apps/base-meta-json/package.json
Normal file
22
starters/apps/base-meta-json/package.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"name": "bot-whatsapp-base-meta-json",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"pre-copy": "cd .. && yarn run copy.lib base-meta-json",
|
||||
"start": "node app.js"
|
||||
},
|
||||
"keywords": [],
|
||||
"dependencies": {
|
||||
"body-parser": "^1.20.1",
|
||||
"polka": "^0.5.2",
|
||||
"@bot-whatsapp/bot": "latest",
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
"@bot-whatsapp/provider": "latest",
|
||||
"axios": "^1.2.1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
}
|
||||
@@ -6,7 +6,7 @@ const {
|
||||
addChild,
|
||||
} = require('@bot-whatsapp/bot')
|
||||
|
||||
const TwilioProvider = require('@bot-whatsapp/provider/twilio')
|
||||
const MetaProvider = require('@bot-whatsapp/provider/meta')
|
||||
const MockAdapter = require('@bot-whatsapp/database/mock')
|
||||
|
||||
/**
|
||||
@@ -79,10 +79,10 @@ const main = async () => {
|
||||
const adapterDB = new MockAdapter()
|
||||
const adapterFlow = createFlow([flowPrincipal])
|
||||
|
||||
const adapterProvider = createProvider(TwilioProvider, {
|
||||
accountSid: 'YOUR_ACCOUNT_SID',
|
||||
authToken: 'YOUR_ACCOUNT_TOKEN',
|
||||
vendorNumber: '+14155238886',
|
||||
const adapterProvider = createProvider(MetaProvider, {
|
||||
jwtToken: 'jwtToken',
|
||||
numberId: 'numberId',
|
||||
verifyToken: 'verifyToken',
|
||||
})
|
||||
|
||||
createBot({
|
||||
|
||||
@@ -14,7 +14,8 @@
|
||||
"@bot-whatsapp/bot": "latest",
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
"@bot-whatsapp/provider": "latest"
|
||||
"@bot-whatsapp/provider": "latest",
|
||||
"axios": "^1.2.1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
|
||||
34
starters/apps/base-meta-mongo/README.md
Normal file
34
starters/apps/base-meta-mongo/README.md
Normal file
@@ -0,0 +1,34 @@
|
||||
### CHATBOT Whatsapp
|
||||
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
|
||||
|
||||
Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
|
||||
- Bienvenido a mi tienda
|
||||
- ¿Como puedo ayudarte?
|
||||
- Tengo: Zapatos, Bolsos etc..
|
||||
|
||||
__Iniciar__
|
||||
|
||||
Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
|
||||
|
||||
Menu Principal
|
||||
- SubMenu 1
|
||||
- Submenu 1.1
|
||||
- Submenu 2
|
||||
- Submenu 2.1
|
||||
|
||||
Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
|
||||
```
|
||||
npm install
|
||||
npm start
|
||||
```
|
||||
|
||||
__¿Tienes problemas?:__ [Abrir Issue](https://github.com/codigoencasa/bot-whatsapp/issues/new/choose)
|
||||
|
||||
------
|
||||
> ¿Quieres se parte de este proyecto?
|
||||
> - [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)
|
||||
106
starters/apps/base-meta-mongo/app.js
Normal file
106
starters/apps/base-meta-mongo/app.js
Normal file
@@ -0,0 +1,106 @@
|
||||
const {
|
||||
createBot,
|
||||
createProvider,
|
||||
createFlow,
|
||||
addKeyword,
|
||||
addChild,
|
||||
} = require('@bot-whatsapp/bot')
|
||||
|
||||
const MetaProvider = require('@bot-whatsapp/provider/meta')
|
||||
const MongoAdapter = require('@bot-whatsapp/database/mongo')
|
||||
|
||||
/**
|
||||
* Declaramos las conexiones de Mongo
|
||||
*/
|
||||
|
||||
const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
|
||||
const MONGO_DB_NAME = 'db_bot'
|
||||
|
||||
/**
|
||||
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||
*
|
||||
* Menu Principal
|
||||
* - SubMenu 1
|
||||
* - Submenu 1.1
|
||||
* - Submenu 2
|
||||
* - Submenu 2.1
|
||||
*
|
||||
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
*/
|
||||
|
||||
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(['1', 'zapatos', 'ZAPATOS'])
|
||||
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*(2) 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(['2', 'bolsos', 'BOLSOS'])
|
||||
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*(2) 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', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer(
|
||||
['Para continuar escribe:', '*(1) Zapatos*', '*(2) 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)
|
||||
},
|
||||
[...addChild(flowBolsos), ...addChild(flowZapatos)]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
const adapterDB = new MongoAdapter({
|
||||
dbUri: MONGO_DB_URI,
|
||||
dbName: MONGO_DB_NAME,
|
||||
})
|
||||
|
||||
const adapterFlow = createFlow([flowPrincipal])
|
||||
|
||||
const adapterProvider = createProvider(MetaProvider, {
|
||||
jwtToken: 'jwtToken',
|
||||
numberId: 'numberId',
|
||||
verifyToken: 'verifyToken',
|
||||
})
|
||||
|
||||
createBot({
|
||||
flow: adapterFlow,
|
||||
provider: adapterProvider,
|
||||
database: adapterDB,
|
||||
})
|
||||
}
|
||||
|
||||
main()
|
||||
23
starters/apps/base-meta-mongo/package.json
Normal file
23
starters/apps/base-meta-mongo/package.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"name": "bot-whatsapp-base-meta-mongo",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"pre-copy": "cd .. && yarn run copy.lib base-meta-mongo",
|
||||
"start": "node app.js"
|
||||
},
|
||||
"keywords": [],
|
||||
"dependencies": {
|
||||
"body-parser": "^1.20.1",
|
||||
"polka": "^0.5.2",
|
||||
"@bot-whatsapp/bot": "latest",
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
"@bot-whatsapp/provider": "latest",
|
||||
"axios": "^1.2.1",
|
||||
"mongodb": "^4.12.1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
}
|
||||
34
starters/apps/base-meta-mysql/README.md
Normal file
34
starters/apps/base-meta-mysql/README.md
Normal file
@@ -0,0 +1,34 @@
|
||||
### CHATBOT Whatsapp
|
||||
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
|
||||
|
||||
Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
|
||||
- Bienvenido a mi tienda
|
||||
- ¿Como puedo ayudarte?
|
||||
- Tengo: Zapatos, Bolsos etc..
|
||||
|
||||
__Iniciar__
|
||||
|
||||
Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
|
||||
|
||||
Menu Principal
|
||||
- SubMenu 1
|
||||
- Submenu 1.1
|
||||
- Submenu 2
|
||||
- Submenu 2.1
|
||||
|
||||
Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
|
||||
```
|
||||
npm install
|
||||
npm start
|
||||
```
|
||||
|
||||
__¿Tienes problemas?:__ [Abrir Issue](https://github.com/codigoencasa/bot-whatsapp/issues/new/choose)
|
||||
|
||||
------
|
||||
> ¿Quieres se parte de este proyecto?
|
||||
> - [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)
|
||||
108
starters/apps/base-meta-mysql/app.js
Normal file
108
starters/apps/base-meta-mysql/app.js
Normal file
@@ -0,0 +1,108 @@
|
||||
const {
|
||||
createBot,
|
||||
createProvider,
|
||||
createFlow,
|
||||
addKeyword,
|
||||
addChild,
|
||||
} = require('@bot-whatsapp/bot')
|
||||
|
||||
const MetaProvider = require('@bot-whatsapp/provider/meta')
|
||||
const MySQLAdapter = require('@bot-whatsapp/database/mysql')
|
||||
|
||||
/**
|
||||
* Declaramos las conexiones de MySQL
|
||||
*/
|
||||
const MYSQL_DB_HOST = 'localhost'
|
||||
const MYSQL_DB_USER = 'usr'
|
||||
const MYSQL_DB_PASSWORD = 'pass'
|
||||
const MYSQL_DB_NAME = 'bot'
|
||||
|
||||
/**
|
||||
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||
*
|
||||
* Menu Principal
|
||||
* - SubMenu 1
|
||||
* - Submenu 1.1
|
||||
* - Submenu 2
|
||||
* - Submenu 2.1
|
||||
*
|
||||
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
*/
|
||||
|
||||
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(['1', 'zapatos', 'ZAPATOS'])
|
||||
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*(2) 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(['2', 'bolsos', 'BOLSOS'])
|
||||
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*(2) 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', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer(
|
||||
['Para continuar escribe:', '*(1) Zapatos*', '*(2) 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)
|
||||
},
|
||||
[...addChild(flowBolsos), ...addChild(flowZapatos)]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
const adapterDB = new MySQLAdapter({
|
||||
host: MYSQL_DB_HOST,
|
||||
user: MYSQL_DB_USER,
|
||||
database: MYSQL_DB_NAME,
|
||||
password: MYSQL_DB_PASSWORD,
|
||||
})
|
||||
const adapterFlow = createFlow([flowPrincipal])
|
||||
|
||||
const adapterProvider = createProvider(MetaProvider, {
|
||||
jwtToken: 'jwtToken',
|
||||
numberId: 'numberId',
|
||||
verifyToken: 'verifyToken',
|
||||
})
|
||||
|
||||
createBot({
|
||||
flow: adapterFlow,
|
||||
provider: adapterProvider,
|
||||
database: adapterDB,
|
||||
})
|
||||
}
|
||||
|
||||
main()
|
||||
23
starters/apps/base-meta-mysql/package.json
Normal file
23
starters/apps/base-meta-mysql/package.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"name": "bot-whatsapp-base-meta-mysql",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"pre-copy": "cd .. && yarn run copy.lib base-meta-mysql",
|
||||
"start": "node app.js"
|
||||
},
|
||||
"keywords": [],
|
||||
"dependencies": {
|
||||
"body-parser": "^1.20.1",
|
||||
"polka": "^0.5.2",
|
||||
"@bot-whatsapp/bot": "latest",
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
"@bot-whatsapp/provider": "latest",
|
||||
"axios": "^1.2.1",
|
||||
"mysql2": "^2.3.3"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
}
|
||||
Reference in New Issue
Block a user