mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-17 19:26:23 +00:00
6
.github/workflows/releases.yml
vendored
6
.github/workflows/releases.yml
vendored
@@ -67,9 +67,13 @@ jobs:
|
||||
- name: Release Github
|
||||
run: yarn node ./scripts/github.js --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.OCTO_TOKEN }}"
|
||||
|
||||
- name: 'Run if changes have been detected'
|
||||
run: |
|
||||
git add .
|
||||
git commit -m "chore(version): pre release"
|
||||
|
||||
- name: Commit Versioning & Push changes
|
||||
if: github.event_name == 'push'
|
||||
uses: stefanzweifel/git-auto-commit-action@v4
|
||||
with:
|
||||
commit_message: 'chore(version): launch release 🚀 "${{ steps.package-version.outputs.current-version}}"'
|
||||
branch: dev
|
||||
|
||||
@@ -2,6 +2,12 @@
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
### [0.1.16](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.15...v0.1.16) (2023-01-11)
|
||||
|
||||
### [0.1.15](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.14...v0.1.15) (2023-01-11)
|
||||
|
||||
### [0.1.14](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.13...v0.1.14) (2023-01-11)
|
||||
|
||||
### [0.1.13](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.12...v0.1.13) (2023-01-11)
|
||||
|
||||
### [0.1.12](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.10...v0.1.12) (2023-01-11)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bot-whatsapp/root",
|
||||
"version": "0.1.13",
|
||||
"version": "0.1.16",
|
||||
"description": "Bot de wahtsapp open source para MVP o pequeños negocios",
|
||||
"main": "app.js",
|
||||
"private": true,
|
||||
|
||||
@@ -8,6 +8,9 @@ const { createWriteStream } = require('fs')
|
||||
const logger = new Console({
|
||||
stdout: createWriteStream(`${process.cwd()}/core.class.log`),
|
||||
})
|
||||
|
||||
const QueuePrincipal = new Queue()
|
||||
|
||||
/**
|
||||
* [ ] Escuchar eventos del provider asegurarte que los provider emitan eventos
|
||||
* [ ] Guardar historial en db
|
||||
@@ -84,20 +87,40 @@ class CoreClass {
|
||||
this.databaseClass.save(ctxByNumber)
|
||||
}
|
||||
|
||||
// 📄 Esta funcion se encarga de enviar un array de mensajes dentro de este ctx
|
||||
const sendFlow = async (messageToSend, numberOrId) => {
|
||||
const queue = []
|
||||
for (const ctxMessage of messageToSend) {
|
||||
const delayMs = ctxMessage?.options?.delay || 0
|
||||
if (delayMs) await delay(delayMs)
|
||||
QueuePrincipal.enqueue(() =>
|
||||
Promise.all([
|
||||
this.sendProviderAndSave(numberOrId, ctxMessage),
|
||||
resolveCbEveryCtx(ctxMessage),
|
||||
])
|
||||
)
|
||||
}
|
||||
return Promise.all(queue)
|
||||
}
|
||||
|
||||
// 📄 [options: fallBack]: esta funcion se encarga de repetir el ultimo mensaje
|
||||
const fallBack = () => {
|
||||
const fallBack = async () => {
|
||||
fallBackFlag = true
|
||||
msgToSend = this.flowClass.find(refToContinue?.keyword, true) || []
|
||||
this.sendFlow(msgToSend, from)
|
||||
await this.sendProviderAndSave(from, refToContinue)
|
||||
QueuePrincipal.queue = []
|
||||
return refToContinue
|
||||
}
|
||||
|
||||
// 📄 [options: flowDynamic]: esta funcion se encarga de responder un array de respuesta esta limitado a 5 mensajes
|
||||
// para evitar bloque de whatsapp
|
||||
const flowDynamic = (listMsg = [], optListMsg = { limit: 3 }) => {
|
||||
const flowDynamic = async (
|
||||
listMsg = [],
|
||||
optListMsg = { limit: 5, fallback: false }
|
||||
) => {
|
||||
if (!Array.isArray(listMsg))
|
||||
throw new Error('Esto debe ser un ARRAY')
|
||||
|
||||
fallBackFlag = optListMsg.fallback
|
||||
const parseListMsg = listMsg
|
||||
.map(({ body }, index) =>
|
||||
toCtx({
|
||||
@@ -108,26 +131,38 @@ class CoreClass {
|
||||
})
|
||||
)
|
||||
.slice(0, optListMsg.limit)
|
||||
msgToSend = parseListMsg
|
||||
this.sendFlow(msgToSend, from)
|
||||
for (const msg of parseListMsg) {
|
||||
await this.sendProviderAndSave(from, msg)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 📄 Se encarga de revisar si el contexto del mensaje tiene callback o fallback
|
||||
const resolveCbEveryCtx = async (ctxMessage) => {
|
||||
if (prevMsg?.options?.capture) return cbEveryCtx(prevMsg?.ref)
|
||||
if (!ctxMessage?.options?.capture)
|
||||
return await cbEveryCtx(ctxMessage?.ref)
|
||||
}
|
||||
|
||||
// 📄 Se encarga de revisar si el contexto del mensaje tiene callback y ejecutarlo
|
||||
const cbEveryCtx = (inRef) => {
|
||||
this.flowClass.allCallbacks[inRef](messageCtxInComming, {
|
||||
const cbEveryCtx = async (inRef) => {
|
||||
if (!this.flowClass.allCallbacks[inRef]) return Promise.resolve()
|
||||
return this.flowClass.allCallbacks[inRef](messageCtxInComming, {
|
||||
fallBack,
|
||||
flowDynamic,
|
||||
})
|
||||
}
|
||||
|
||||
if (prevMsg?.ref) resolveCbEveryCtx(prevMsg)
|
||||
|
||||
// 📄 [options: callback]: Si se tiene un callback se ejecuta
|
||||
if (!fallBackFlag) {
|
||||
if (prevMsg?.options?.capture) cbEveryCtx(prevMsg?.ref)
|
||||
for (const ite of this.flowClass.find(body)) {
|
||||
if (!ite?.options?.capture) cbEveryCtx(ite?.ref)
|
||||
}
|
||||
}
|
||||
//TODO AQUI
|
||||
// if (!fallBackFlag) {
|
||||
// if (prevMsg?.options?.capture) cbEveryCtx(prevMsg?.ref)
|
||||
// for (const ite of this.flowClass.find(body)) {
|
||||
// if (!ite?.options?.capture) cbEveryCtx(ite?.ref)
|
||||
// }
|
||||
// }
|
||||
|
||||
// 📄🤘(tiene return) [options: nested(array)]: Si se tiene flujos hijos los implementa
|
||||
if (!fallBackFlag && prevMsg?.options?.nested?.length) {
|
||||
@@ -138,11 +173,12 @@ class CoreClass {
|
||||
|
||||
msgToSend = this.flowClass.find(body, false, flowStandalone) || []
|
||||
|
||||
for (const ite of msgToSend) {
|
||||
cbEveryCtx(ite?.ref)
|
||||
}
|
||||
// //TODO AQUI
|
||||
// for (const ite of msgToSend) {
|
||||
// cbEveryCtx(ite?.ref)
|
||||
// }
|
||||
|
||||
this.sendFlow(msgToSend, from)
|
||||
sendFlow(msgToSend, from)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -153,13 +189,13 @@ class CoreClass {
|
||||
|
||||
if (['string', 'boolean'].includes(typeCapture) && valueCapture) {
|
||||
msgToSend = this.flowClass.find(refToContinue?.ref, true) || []
|
||||
this.sendFlow(msgToSend, from)
|
||||
sendFlow(msgToSend, from)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
msgToSend = this.flowClass.find(body) || []
|
||||
this.sendFlow(msgToSend, from)
|
||||
sendFlow(msgToSend, from)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -176,18 +212,6 @@ class CoreClass {
|
||||
])
|
||||
}
|
||||
|
||||
sendFlow = async (messageToSend, numberOrId) => {
|
||||
const queue = []
|
||||
for (const ctxMessage of messageToSend) {
|
||||
const delayMs = ctxMessage?.options?.delay || 0
|
||||
if (delayMs) await delay(delayMs)
|
||||
Queue.enqueue(() =>
|
||||
this.sendProviderAndSave(numberOrId, ctxMessage)
|
||||
)
|
||||
}
|
||||
return Promise.all(queue)
|
||||
}
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @param {*} message
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bot-whatsapp/bot",
|
||||
"version": "0.0.55-alpha.0",
|
||||
"version": "0.0.61-alpha.0",
|
||||
"description": "",
|
||||
"main": "./lib/bundle.bot.cjs",
|
||||
"scripts": {
|
||||
|
||||
@@ -10,6 +10,7 @@ module.exports = [
|
||||
banner: banner['banner.output'].join(''),
|
||||
file: join(__dirname, 'lib', 'bundle.bot.cjs'),
|
||||
format: 'cjs',
|
||||
sourcemap: true,
|
||||
},
|
||||
plugins: [commonjs(), nodeResolve()],
|
||||
},
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
class Queue {
|
||||
static queue = []
|
||||
static pendingPromise = false
|
||||
queue = []
|
||||
pendingPromise = false
|
||||
|
||||
static enqueue(promise) {
|
||||
enqueue(promise) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.queue.push({
|
||||
promise,
|
||||
@@ -13,7 +13,7 @@ class Queue {
|
||||
})
|
||||
}
|
||||
|
||||
static dequeue() {
|
||||
dequeue() {
|
||||
if (this.workingOnPromise) {
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bot-whatsapp/cli",
|
||||
"version": "0.0.61-alpha.0",
|
||||
"version": "0.0.67-alpha.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"devDependencies": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bot-whatsapp/contexts",
|
||||
"version": "0.0.5-alpha.0",
|
||||
"version": "0.0.11-alpha.0",
|
||||
"description": "",
|
||||
"main": "./lib/bundle.contexts.cjs",
|
||||
"files": [
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "create-bot-whatsapp",
|
||||
"version": "0.0.72-alpha.0",
|
||||
"version": "0.0.78-alpha.0",
|
||||
"description": "",
|
||||
"main": "./lib/bundle.create-bot-whatsapp.cjs",
|
||||
"files": [
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bot-whatsapp/database",
|
||||
"version": "0.0.53-alpha.0",
|
||||
"version": "0.0.59-alpha.0",
|
||||
"description": "Esto es el conector a mysql, pg, mongo",
|
||||
"main": "./lib/mock/index.cjs",
|
||||
"keywords": [],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import Navigation from '../../../components/widgets/Navigation'
|
||||
|
||||
# Flow (Flujos)
|
||||
# Flow
|
||||
|
||||
Los flujos hace referencia al hecho de construir un flujo de conversion. Esto es un flow podemos observar que estan presente dos metodos importantes **addKeyword** y el **addAnswer**.
|
||||
|
||||
@@ -23,6 +23,142 @@ const flowPrincipal = addKeyword(['hola', 'alo'])
|
||||
|
||||
---
|
||||
|
||||
## addKeyword()
|
||||
|
||||
Esta funcion se utliza para iniciar un flujo de conversion. <br /> Recibe un `string` o un `array`
|
||||
de string `['hola','buenas']`.
|
||||
|
||||
**Opciones**
|
||||
|
||||
- sensitive: Sensible a mayusculas y minusculas por defecto `false`
|
||||
|
||||
```js
|
||||
const { addKeyword } = require('@bot-whatsapp/bot')
|
||||
|
||||
const flowString = addKeyword('hola')
|
||||
|
||||
const flowArray = addKeyword(['hola', 'alo'])
|
||||
|
||||
const flowSensitive = addKeyword(['hola', 'alo'], {
|
||||
sensitive: true,
|
||||
})
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## addAnswer()
|
||||
|
||||
Esta funcion se utliza para responder un mensaje despues del `addKeyword()`
|
||||
|
||||
**Opciones**
|
||||
|
||||
- delay: 0 (milisegundos)
|
||||
- media: url de imagen
|
||||
- buttons: array `[{body:'Boton1'}, {body:'Boton2'}, {body:'Boton3'}]`
|
||||
- capture: false (para esperar respuesta)
|
||||
- child: Objecto tipo flujo o arra de flujos hijos
|
||||
|
||||
```js
|
||||
const { addKeyword } = require('@bot-whatsapp/bot')
|
||||
|
||||
const flowString = addKeyword('hola').addAnswer(
|
||||
'Este mensaje se enviara 1 segundo despues',
|
||||
{
|
||||
delay: 1000,
|
||||
}
|
||||
)
|
||||
|
||||
const flowString = addKeyword('hola').addAnswer(
|
||||
'Este mensaje envia una imagen',
|
||||
{
|
||||
media: 'https://i.imgur.com/0HpzsEm.png',
|
||||
}
|
||||
)
|
||||
|
||||
const flowString = addKeyword('hola').addAnswer(
|
||||
'Este mensaje envia tres botones',
|
||||
{
|
||||
buttons: [
|
||||
{ body: 'Boton 1' },
|
||||
{ body: 'Boton 2' },
|
||||
{ body: 'Boton 3' },
|
||||
],
|
||||
}
|
||||
)
|
||||
|
||||
const flowString = addKeyword('hola').addAnswer(
|
||||
'Este mensaje espera una respueta del usuario',
|
||||
{
|
||||
capture: true,
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ctx
|
||||
|
||||
Este argumento se utiliza para obtener el contexto de la conversación
|
||||
|
||||
```js
|
||||
const { addKeyword } = require('@bot-whatsapp/bot')
|
||||
|
||||
const flowString = addKeyword('hola').addAnswer(
|
||||
'Indica cual es tu email',
|
||||
null,
|
||||
(ctx) => {
|
||||
console.log('👉 Informacion del contexto: ', ctx)
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## fallBack()
|
||||
|
||||
Esta funcion se utliza para volver a enviar el ultimo mensaje abajo un ejemplo.
|
||||
En el ejemplo de abajo esperamos que el usuario ingrese un mensaje que contenga `@` sino contiene
|
||||
se repetira el mensaje `Indica cual es tu email`
|
||||
|
||||
```js
|
||||
const { addKeyword } = require('@bot-whatsapp/bot')
|
||||
|
||||
const flowString = addKeyword('hola').addAnswer(
|
||||
'Indica cual es tu email',
|
||||
null,
|
||||
(ctx, { fallBack }) => {
|
||||
if (!ctx.body.includes('@')) return fallBack()
|
||||
}
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## flowDynamic()
|
||||
|
||||
Esta funcion se utliza para devolver mensajes dinamicos que pueden venir de una API o Base de datos.
|
||||
La funcion recibe un array que debe contener la siguiente estrucutura:
|
||||
|
||||
`[{body:'Mensaje}, {body:'Mensaje2}]`
|
||||
|
||||
```js
|
||||
const { addKeyword } = require('@bot-whatsapp/bot')
|
||||
|
||||
const flowString = addKeyword('hola')
|
||||
.addAnswer('Indica cual es tu email', null, async (ctx, {flowDynamic}) => {
|
||||
const mensajesDB = () => {
|
||||
const categories = db.find(...)
|
||||
const mapDatos = categories.map((c) => ({body:c.name}))
|
||||
return mapDatos
|
||||
}
|
||||
await flowDynamic(mensajesDB())
|
||||
})
|
||||
|
||||
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
<Navigation
|
||||
pages={[
|
||||
{ name: 'Conceptos', link: '/docs/essential' },
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bot-whatsapp/portal",
|
||||
"version": "0.0.11-alpha.0",
|
||||
"version": "0.0.17-alpha.0",
|
||||
"description": "Portal WEB para escanear QR",
|
||||
"main": "./lib/portal.http.cjs",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bot-whatsapp/provider",
|
||||
"version": "0.0.59-alpha.0",
|
||||
"version": "0.0.65-alpha.0",
|
||||
"description": "Esto es el conector a Twilio, Meta, etc...",
|
||||
"main": "./lib/mock/index.cjs",
|
||||
"keywords": [],
|
||||
|
||||
@@ -9,31 +9,59 @@ const QRPortalWeb = require('@bot-whatsapp/portal')
|
||||
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
|
||||
const JsonFileAdapter = require('@bot-whatsapp/database/json')
|
||||
|
||||
const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer([
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
])
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer([
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
])
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer([
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
])
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer([
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
])
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
|
||||
@@ -9,31 +9,59 @@ const QRPortalWeb = require('@bot-whatsapp/portal')
|
||||
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
|
||||
const MockAdapter = require('@bot-whatsapp/database/mock')
|
||||
|
||||
const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer([
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
])
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer([
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
])
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer([
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
])
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer([
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
])
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
FROM node:lts-bullseye as bot
|
||||
FROM node:18-bullseye as bot
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm i
|
||||
COPY . .
|
||||
ARG RAILWAY_STATIC_URL
|
||||
ARG PUBLIC_URL
|
||||
ARG PORT
|
||||
CMD ["npm", "start"]
|
||||
|
||||
@@ -5,8 +5,7 @@ const {
|
||||
addKeyword,
|
||||
} = require('@bot-whatsapp/bot')
|
||||
|
||||
require('./server.http')
|
||||
|
||||
const QRPortalWeb = require('@bot-whatsapp/portal')
|
||||
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
|
||||
const MongoAdapter = require('@bot-whatsapp/database/mongo')
|
||||
|
||||
@@ -29,58 +28,72 @@ const MONGO_DB_NAME = 'db_bot'
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
@@ -95,6 +108,7 @@ const main = async () => {
|
||||
provider: adapterProvider,
|
||||
database: adapterDB,
|
||||
})
|
||||
QRPortalWeb()
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
FROM node:lts-bullseye as bot
|
||||
FROM node:18-bullseye as bot
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm i
|
||||
COPY . .
|
||||
ARG RAILWAY_STATIC_URL
|
||||
ARG PUBLIC_URL
|
||||
ARG PORT
|
||||
CMD ["npm", "start"]
|
||||
|
||||
@@ -5,8 +5,7 @@ const {
|
||||
addKeyword,
|
||||
} = require('@bot-whatsapp/bot')
|
||||
|
||||
require('./server.http')
|
||||
|
||||
const QRPortalWeb = require('@bot-whatsapp/portal')
|
||||
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
|
||||
const MySQLAdapter = require('@bot-whatsapp/database/mysql')
|
||||
|
||||
@@ -30,58 +29,72 @@ const MYSQL_DB_NAME = 'bot'
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
@@ -98,6 +111,7 @@ const main = async () => {
|
||||
provider: adapterProvider,
|
||||
database: adapterDB,
|
||||
})
|
||||
QRPortalWeb()
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="preconnect" href="https://rsms.me/" />
|
||||
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
|
||||
<title>🤖 Crear chatbot WhatsApp en minutos</title>
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
align-self: center;
|
||||
align-items: center;
|
||||
font-family: 'Inter', sans-serif;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div
|
||||
style="
|
||||
display: flex;
|
||||
gap: 2rem;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
"
|
||||
>
|
||||
<img
|
||||
style="
|
||||
box-shadow: rgba(50, 50, 93, 0.25) 0px 50px 100px -20px,
|
||||
rgba(0, 0, 0, 0.3) 0px 30px 60px -30px;
|
||||
border-radius: 15px;
|
||||
object-fit: contain;
|
||||
"
|
||||
width="400"
|
||||
height="400"
|
||||
src="qr.png"
|
||||
alt="Escanear QR"
|
||||
/>
|
||||
<div style="width: 400px; display: grid; gap: 1rem">
|
||||
<h1 style="margin: 0">Whatsapp QR</h1>
|
||||
<p>
|
||||
<strong
|
||||
>F5 para actualizar, el codigo se actualiza cada minuto. </strong
|
||||
><br />
|
||||
Con esta libreria, puedes 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,
|
||||
nuestro Chatbot se integra fácilmente con otros sistemas y
|
||||
herramientas que ya esté utilizando en su negocio.
|
||||
</p>
|
||||
<div>
|
||||
<a
|
||||
target="_blank"
|
||||
style="
|
||||
background: white;
|
||||
box-shadow: rgb(0 0 0 / 16%) 0px 10px 36px 0px,
|
||||
rgb(0 0 0 / 6%) 0px 0px 0px 1px;
|
||||
padding: 10px;
|
||||
border-radius: 5px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
color: #1a1a1a;
|
||||
border: solid 1px #afafaf;
|
||||
"
|
||||
href="https://bot-whatsapp.netlify.app/"
|
||||
>Ver documentación</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,34 +0,0 @@
|
||||
const http = require('http')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const PORT = process.env.PORT || 3000
|
||||
|
||||
/**
|
||||
* Levantar un HTTP Server
|
||||
*/
|
||||
http.createServer(function (req, res) {
|
||||
var cssPath = undefined
|
||||
var fileStream = undefined
|
||||
var imagePath = undefined
|
||||
|
||||
if (req.url === '/') {
|
||||
fs.readFile('./public/index.html', 'UTF-8', function (err, html) {
|
||||
res.writeHead(200, { 'Content-Type': 'text/html' })
|
||||
res.end(html)
|
||||
})
|
||||
} else if (req.url.match('.css$')) {
|
||||
cssPath = path.join(__dirname, 'public', req.url)
|
||||
fileStream = fs.createReadStream(cssPath, 'UTF-8')
|
||||
res.writeHead(200, { 'Content-Type': 'text/css' })
|
||||
fileStream.pipe(res)
|
||||
} else if (req.url.match('.png$')) {
|
||||
imagePath = path.join(__dirname, req.url)
|
||||
fileStream = fs.createReadStream(imagePath)
|
||||
res.writeHead(200, { 'Content-Type': 'image/png' })
|
||||
fileStream.pipe(res)
|
||||
} else {
|
||||
res.writeHead(404, { 'Content-Type': 'text/html' })
|
||||
res.end('No Page Found')
|
||||
}
|
||||
}).listen(PORT, () => console.log(`Escanear QR Code http://localhost:${PORT}`))
|
||||
9
starters/apps/base-meta-json/Dockerfile
Normal file
9
starters/apps/base-meta-json/Dockerfile
Normal file
@@ -0,0 +1,9 @@
|
||||
FROM node:18-bullseye as bot
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm i
|
||||
COPY . .
|
||||
ARG RAILWAY_STATIC_URL
|
||||
ARG PUBLIC_URL
|
||||
ARG PORT
|
||||
CMD ["npm", "start"]
|
||||
@@ -20,58 +20,72 @@ const JsonFileAdapter = require('@bot-whatsapp/database/json')
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
|
||||
9
starters/apps/base-meta-memory/Dockerfile
Normal file
9
starters/apps/base-meta-memory/Dockerfile
Normal file
@@ -0,0 +1,9 @@
|
||||
FROM node:18-bullseye as bot
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm i
|
||||
COPY . .
|
||||
ARG RAILWAY_STATIC_URL
|
||||
ARG PUBLIC_URL
|
||||
ARG PORT
|
||||
CMD ["npm", "start"]
|
||||
@@ -20,58 +20,72 @@ const MockAdapter = require('@bot-whatsapp/database/mock')
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
|
||||
9
starters/apps/base-meta-mongo/Dockerfile
Normal file
9
starters/apps/base-meta-mongo/Dockerfile
Normal file
@@ -0,0 +1,9 @@
|
||||
FROM node:18-bullseye as bot
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm i
|
||||
COPY . .
|
||||
ARG RAILWAY_STATIC_URL
|
||||
ARG PUBLIC_URL
|
||||
ARG PORT
|
||||
CMD ["npm", "start"]
|
||||
@@ -27,58 +27,72 @@ const MONGO_DB_NAME = 'db_bot'
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
|
||||
9
starters/apps/base-meta-mysql/Dockerfile
Normal file
9
starters/apps/base-meta-mysql/Dockerfile
Normal file
@@ -0,0 +1,9 @@
|
||||
FROM node:18-bullseye as bot
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm i
|
||||
COPY . .
|
||||
ARG RAILWAY_STATIC_URL
|
||||
ARG PUBLIC_URL
|
||||
ARG PORT
|
||||
CMD ["npm", "start"]
|
||||
@@ -28,58 +28,72 @@ const MYSQL_DB_NAME = 'bot'
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
|
||||
9
starters/apps/base-twilio-json/Dockerfile
Normal file
9
starters/apps/base-twilio-json/Dockerfile
Normal file
@@ -0,0 +1,9 @@
|
||||
FROM node:18-bullseye as bot
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm i
|
||||
COPY . .
|
||||
ARG RAILWAY_STATIC_URL
|
||||
ARG PUBLIC_URL
|
||||
ARG PORT
|
||||
CMD ["npm", "start"]
|
||||
@@ -20,58 +20,72 @@ const JsonFileAdapter = require('@bot-whatsapp/database/json')
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
|
||||
9
starters/apps/base-twilio-memory/Dockerfile
Normal file
9
starters/apps/base-twilio-memory/Dockerfile
Normal file
@@ -0,0 +1,9 @@
|
||||
FROM node:18-bullseye as bot
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm i
|
||||
COPY . .
|
||||
ARG RAILWAY_STATIC_URL
|
||||
ARG PUBLIC_URL
|
||||
ARG PORT
|
||||
CMD ["npm", "start"]
|
||||
@@ -20,58 +20,72 @@ const MockAdapter = require('@bot-whatsapp/database/mock')
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
|
||||
9
starters/apps/base-twilio-mongo/Dockerfile
Normal file
9
starters/apps/base-twilio-mongo/Dockerfile
Normal file
@@ -0,0 +1,9 @@
|
||||
FROM node:18-bullseye as bot
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm i
|
||||
COPY . .
|
||||
ARG RAILWAY_STATIC_URL
|
||||
ARG PUBLIC_URL
|
||||
ARG PORT
|
||||
CMD ["npm", "start"]
|
||||
@@ -27,58 +27,72 @@ const MONGO_DB_NAME = 'db_bot'
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
|
||||
9
starters/apps/base-twilio-mysql/Dockerfile
Normal file
9
starters/apps/base-twilio-mysql/Dockerfile
Normal file
@@ -0,0 +1,9 @@
|
||||
FROM node:18-bullseye as bot
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm i
|
||||
COPY . .
|
||||
ARG RAILWAY_STATIC_URL
|
||||
ARG PUBLIC_URL
|
||||
ARG PORT
|
||||
CMD ["npm", "start"]
|
||||
@@ -29,58 +29,72 @@ const MYSQL_DB_NAME = 'bot'
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
|
||||
@@ -5,8 +5,7 @@ const {
|
||||
addKeyword,
|
||||
} = require('@bot-whatsapp/bot')
|
||||
|
||||
require('./server.http')
|
||||
|
||||
const QRPortalWeb = require('@bot-whatsapp/portal')
|
||||
const VenomProvider = require('@bot-whatsapp/provider/venom')
|
||||
const JsonFileAdapter = require('@bot-whatsapp/database/json')
|
||||
|
||||
@@ -22,58 +21,72 @@ const JsonFileAdapter = require('@bot-whatsapp/database/json')
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
@@ -85,6 +98,7 @@ const main = async () => {
|
||||
provider: adapterProvider,
|
||||
database: adapterDB,
|
||||
})
|
||||
QRPortalWeb()
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="preconnect" href="https://rsms.me/" />
|
||||
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
|
||||
<title>🤖 Crear chatbot WhatsApp en minutos</title>
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
align-self: center;
|
||||
align-items: center;
|
||||
font-family: 'Inter', sans-serif;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div
|
||||
style="
|
||||
display: flex;
|
||||
gap: 2rem;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
"
|
||||
>
|
||||
<img
|
||||
style="
|
||||
box-shadow: rgba(50, 50, 93, 0.25) 0px 50px 100px -20px,
|
||||
rgba(0, 0, 0, 0.3) 0px 30px 60px -30px;
|
||||
border-radius: 15px;
|
||||
object-fit: contain;
|
||||
"
|
||||
width="400"
|
||||
height="400"
|
||||
src="qr.png"
|
||||
alt="Escanear QR"
|
||||
/>
|
||||
<div style="width: 400px; display: grid; gap: 1rem">
|
||||
<h1 style="margin: 0">Whatsapp QR</h1>
|
||||
<p>
|
||||
<strong
|
||||
>F5 para actualizar, el codigo se actualiza cada minuto. </strong
|
||||
><br />
|
||||
Con esta libreria, puedes 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,
|
||||
nuestro Chatbot se integra fácilmente con otros sistemas y
|
||||
herramientas que ya esté utilizando en su negocio.
|
||||
</p>
|
||||
<div>
|
||||
<a
|
||||
target="_blank"
|
||||
style="
|
||||
background: white;
|
||||
box-shadow: rgb(0 0 0 / 16%) 0px 10px 36px 0px,
|
||||
rgb(0 0 0 / 6%) 0px 0px 0px 1px;
|
||||
padding: 10px;
|
||||
border-radius: 5px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
color: #1a1a1a;
|
||||
border: solid 1px #afafaf;
|
||||
"
|
||||
href="https://bot-whatsapp.netlify.app/"
|
||||
>Ver documentación</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,34 +0,0 @@
|
||||
const http = require('http')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const PORT = process.env.PORT || 3000
|
||||
|
||||
/**
|
||||
* Levantar un HTTP Server
|
||||
*/
|
||||
http.createServer(function (req, res) {
|
||||
var cssPath = undefined
|
||||
var fileStream = undefined
|
||||
var imagePath = undefined
|
||||
|
||||
if (req.url === '/') {
|
||||
fs.readFile('./public/index.html', 'UTF-8', function (err, html) {
|
||||
res.writeHead(200, { 'Content-Type': 'text/html' })
|
||||
res.end(html)
|
||||
})
|
||||
} else if (req.url.match('.css$')) {
|
||||
cssPath = path.join(__dirname, 'public', req.url)
|
||||
fileStream = fs.createReadStream(cssPath, 'UTF-8')
|
||||
res.writeHead(200, { 'Content-Type': 'text/css' })
|
||||
fileStream.pipe(res)
|
||||
} else if (req.url.match('.png$')) {
|
||||
imagePath = path.join(__dirname, req.url)
|
||||
fileStream = fs.createReadStream(imagePath)
|
||||
res.writeHead(200, { 'Content-Type': 'image/png' })
|
||||
fileStream.pipe(res)
|
||||
} else {
|
||||
res.writeHead(404, { 'Content-Type': 'text/html' })
|
||||
res.end('No Page Found')
|
||||
}
|
||||
}).listen(PORT, () => console.log(`Escanear QR Code http://localhost:${PORT}`))
|
||||
@@ -5,8 +5,7 @@ const {
|
||||
addKeyword,
|
||||
} = require('@bot-whatsapp/bot')
|
||||
|
||||
require('./server.http')
|
||||
|
||||
const QRPortalWeb = require('@bot-whatsapp/portal')
|
||||
const VenomProvider = require('@bot-whatsapp/provider/venom')
|
||||
const MockAdapter = require('@bot-whatsapp/database/mock')
|
||||
|
||||
@@ -22,58 +21,72 @@ const MockAdapter = require('@bot-whatsapp/database/mock')
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
@@ -85,6 +98,7 @@ const main = async () => {
|
||||
provider: adapterProvider,
|
||||
database: adapterDB,
|
||||
})
|
||||
QRPortalWeb()
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="preconnect" href="https://rsms.me/" />
|
||||
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
|
||||
<title>🤖 Crear chatbot WhatsApp en minutos</title>
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
align-self: center;
|
||||
align-items: center;
|
||||
font-family: 'Inter', sans-serif;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div
|
||||
style="
|
||||
display: flex;
|
||||
gap: 2rem;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
"
|
||||
>
|
||||
<img
|
||||
style="
|
||||
box-shadow: rgba(50, 50, 93, 0.25) 0px 50px 100px -20px,
|
||||
rgba(0, 0, 0, 0.3) 0px 30px 60px -30px;
|
||||
border-radius: 15px;
|
||||
object-fit: contain;
|
||||
"
|
||||
width="400"
|
||||
height="400"
|
||||
src="qr.png"
|
||||
alt="Escanear QR"
|
||||
/>
|
||||
<div style="width: 400px; display: grid; gap: 1rem">
|
||||
<h1 style="margin: 0">Whatsapp QR</h1>
|
||||
<p>
|
||||
<strong
|
||||
>F5 para actualizar, el codigo se actualiza cada minuto. </strong
|
||||
><br />
|
||||
Con esta libreria, puedes 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,
|
||||
nuestro Chatbot se integra fácilmente con otros sistemas y
|
||||
herramientas que ya esté utilizando en su negocio.
|
||||
</p>
|
||||
<div>
|
||||
<a
|
||||
target="_blank"
|
||||
style="
|
||||
background: white;
|
||||
box-shadow: rgb(0 0 0 / 16%) 0px 10px 36px 0px,
|
||||
rgb(0 0 0 / 6%) 0px 0px 0px 1px;
|
||||
padding: 10px;
|
||||
border-radius: 5px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
color: #1a1a1a;
|
||||
border: solid 1px #afafaf;
|
||||
"
|
||||
href="https://bot-whatsapp.netlify.app/"
|
||||
>Ver documentación</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,34 +0,0 @@
|
||||
const http = require('http')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const PORT = process.env.PORT || 3000
|
||||
|
||||
/**
|
||||
* Levantar un HTTP Server
|
||||
*/
|
||||
http.createServer(function (req, res) {
|
||||
var cssPath = undefined
|
||||
var fileStream = undefined
|
||||
var imagePath = undefined
|
||||
|
||||
if (req.url === '/') {
|
||||
fs.readFile('./public/index.html', 'UTF-8', function (err, html) {
|
||||
res.writeHead(200, { 'Content-Type': 'text/html' })
|
||||
res.end(html)
|
||||
})
|
||||
} else if (req.url.match('.css$')) {
|
||||
cssPath = path.join(__dirname, 'public', req.url)
|
||||
fileStream = fs.createReadStream(cssPath, 'UTF-8')
|
||||
res.writeHead(200, { 'Content-Type': 'text/css' })
|
||||
fileStream.pipe(res)
|
||||
} else if (req.url.match('.png$')) {
|
||||
imagePath = path.join(__dirname, req.url)
|
||||
fileStream = fs.createReadStream(imagePath)
|
||||
res.writeHead(200, { 'Content-Type': 'image/png' })
|
||||
fileStream.pipe(res)
|
||||
} else {
|
||||
res.writeHead(404, { 'Content-Type': 'text/html' })
|
||||
res.end('No Page Found')
|
||||
}
|
||||
}).listen(PORT, () => console.log(`Escanear QR Code http://localhost:${PORT}`))
|
||||
@@ -5,8 +5,7 @@ const {
|
||||
addKeyword,
|
||||
} = require('@bot-whatsapp/bot')
|
||||
|
||||
require('./server.http')
|
||||
|
||||
const QRPortalWeb = require('@bot-whatsapp/portal')
|
||||
const VenomProvider = require('@bot-whatsapp/provider/venom')
|
||||
const MongoAdapter = require('@bot-whatsapp/database/mongo')
|
||||
|
||||
@@ -29,58 +28,72 @@ const MONGO_DB_NAME = 'db_bot'
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
@@ -95,6 +108,7 @@ const main = async () => {
|
||||
provider: adapterProvider,
|
||||
database: adapterDB,
|
||||
})
|
||||
QRPortalWeb()
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="preconnect" href="https://rsms.me/" />
|
||||
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
|
||||
<title>🤖 Crear chatbot WhatsApp en minutos</title>
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
align-self: center;
|
||||
align-items: center;
|
||||
font-family: 'Inter', sans-serif;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div
|
||||
style="
|
||||
display: flex;
|
||||
gap: 2rem;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
"
|
||||
>
|
||||
<img
|
||||
style="
|
||||
box-shadow: rgba(50, 50, 93, 0.25) 0px 50px 100px -20px,
|
||||
rgba(0, 0, 0, 0.3) 0px 30px 60px -30px;
|
||||
border-radius: 15px;
|
||||
object-fit: contain;
|
||||
"
|
||||
width="400"
|
||||
height="400"
|
||||
src="qr.png"
|
||||
alt="Escanear QR"
|
||||
/>
|
||||
<div style="width: 400px; display: grid; gap: 1rem">
|
||||
<h1 style="margin: 0">Whatsapp QR</h1>
|
||||
<p>
|
||||
<strong
|
||||
>F5 para actualizar, el codigo se actualiza cada minuto. </strong
|
||||
><br />
|
||||
Con esta libreria, puedes 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,
|
||||
nuestro Chatbot se integra fácilmente con otros sistemas y
|
||||
herramientas que ya esté utilizando en su negocio.
|
||||
</p>
|
||||
<div>
|
||||
<a
|
||||
target="_blank"
|
||||
style="
|
||||
background: white;
|
||||
box-shadow: rgb(0 0 0 / 16%) 0px 10px 36px 0px,
|
||||
rgb(0 0 0 / 6%) 0px 0px 0px 1px;
|
||||
padding: 10px;
|
||||
border-radius: 5px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
color: #1a1a1a;
|
||||
border: solid 1px #afafaf;
|
||||
"
|
||||
href="https://bot-whatsapp.netlify.app/"
|
||||
>Ver documentación</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,34 +0,0 @@
|
||||
const http = require('http')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const PORT = process.env.PORT || 3000
|
||||
|
||||
/**
|
||||
* Levantar un HTTP Server
|
||||
*/
|
||||
http.createServer(function (req, res) {
|
||||
var cssPath = undefined
|
||||
var fileStream = undefined
|
||||
var imagePath = undefined
|
||||
|
||||
if (req.url === '/') {
|
||||
fs.readFile('./public/index.html', 'UTF-8', function (err, html) {
|
||||
res.writeHead(200, { 'Content-Type': 'text/html' })
|
||||
res.end(html)
|
||||
})
|
||||
} else if (req.url.match('.css$')) {
|
||||
cssPath = path.join(__dirname, 'public', req.url)
|
||||
fileStream = fs.createReadStream(cssPath, 'UTF-8')
|
||||
res.writeHead(200, { 'Content-Type': 'text/css' })
|
||||
fileStream.pipe(res)
|
||||
} else if (req.url.match('.png$')) {
|
||||
imagePath = path.join(__dirname, req.url)
|
||||
fileStream = fs.createReadStream(imagePath)
|
||||
res.writeHead(200, { 'Content-Type': 'image/png' })
|
||||
fileStream.pipe(res)
|
||||
} else {
|
||||
res.writeHead(404, { 'Content-Type': 'text/html' })
|
||||
res.end('No Page Found')
|
||||
}
|
||||
}).listen(PORT, () => console.log(`Escanear QR Code http://localhost:${PORT}`))
|
||||
@@ -5,8 +5,7 @@ const {
|
||||
addKeyword,
|
||||
} = require('@bot-whatsapp/bot')
|
||||
|
||||
require('./server.http')
|
||||
|
||||
const QRPortalWeb = require('@bot-whatsapp/portal')
|
||||
const VenomProvider = require('@bot-whatsapp/provider/venom')
|
||||
const MySQLAdapter = require('@bot-whatsapp/database/mysql')
|
||||
|
||||
@@ -31,58 +30,72 @@ const MYSQL_DB_NAME = 'bot'
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
@@ -99,6 +112,7 @@ const main = async () => {
|
||||
provider: adapterProvider,
|
||||
database: adapterDB,
|
||||
})
|
||||
QRPortalWeb()
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="preconnect" href="https://rsms.me/" />
|
||||
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
|
||||
<title>🤖 Crear chatbot WhatsApp en minutos</title>
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
align-self: center;
|
||||
align-items: center;
|
||||
font-family: 'Inter', sans-serif;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div
|
||||
style="
|
||||
display: flex;
|
||||
gap: 2rem;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
"
|
||||
>
|
||||
<img
|
||||
style="
|
||||
box-shadow: rgba(50, 50, 93, 0.25) 0px 50px 100px -20px,
|
||||
rgba(0, 0, 0, 0.3) 0px 30px 60px -30px;
|
||||
border-radius: 15px;
|
||||
object-fit: contain;
|
||||
"
|
||||
width="400"
|
||||
height="400"
|
||||
src="qr.png"
|
||||
alt="Escanear QR"
|
||||
/>
|
||||
<div style="width: 400px; display: grid; gap: 1rem">
|
||||
<h1 style="margin: 0">Whatsapp QR</h1>
|
||||
<p>
|
||||
<strong
|
||||
>F5 para actualizar, el codigo se actualiza cada minuto. </strong
|
||||
><br />
|
||||
Con esta libreria, puedes 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,
|
||||
nuestro Chatbot se integra fácilmente con otros sistemas y
|
||||
herramientas que ya esté utilizando en su negocio.
|
||||
</p>
|
||||
<div>
|
||||
<a
|
||||
target="_blank"
|
||||
style="
|
||||
background: white;
|
||||
box-shadow: rgb(0 0 0 / 16%) 0px 10px 36px 0px,
|
||||
rgb(0 0 0 / 6%) 0px 0px 0px 1px;
|
||||
padding: 10px;
|
||||
border-radius: 5px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
color: #1a1a1a;
|
||||
border: solid 1px #afafaf;
|
||||
"
|
||||
href="https://bot-whatsapp.netlify.app/"
|
||||
>Ver documentación</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,34 +0,0 @@
|
||||
const http = require('http')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const PORT = process.env.PORT || 3000
|
||||
|
||||
/**
|
||||
* Levantar un HTTP Server
|
||||
*/
|
||||
http.createServer(function (req, res) {
|
||||
var cssPath = undefined
|
||||
var fileStream = undefined
|
||||
var imagePath = undefined
|
||||
|
||||
if (req.url === '/') {
|
||||
fs.readFile('./public/index.html', 'UTF-8', function (err, html) {
|
||||
res.writeHead(200, { 'Content-Type': 'text/html' })
|
||||
res.end(html)
|
||||
})
|
||||
} else if (req.url.match('.css$')) {
|
||||
cssPath = path.join(__dirname, 'public', req.url)
|
||||
fileStream = fs.createReadStream(cssPath, 'UTF-8')
|
||||
res.writeHead(200, { 'Content-Type': 'text/css' })
|
||||
fileStream.pipe(res)
|
||||
} else if (req.url.match('.png$')) {
|
||||
imagePath = path.join(__dirname, req.url)
|
||||
fileStream = fs.createReadStream(imagePath)
|
||||
res.writeHead(200, { 'Content-Type': 'image/png' })
|
||||
fileStream.pipe(res)
|
||||
} else {
|
||||
res.writeHead(404, { 'Content-Type': 'text/html' })
|
||||
res.end('No Page Found')
|
||||
}
|
||||
}).listen(PORT, () => console.log(`Escanear QR Code http://localhost:${PORT}`))
|
||||
@@ -5,8 +5,7 @@ const {
|
||||
addKeyword,
|
||||
} = require('@bot-whatsapp/bot')
|
||||
|
||||
require('./server.http')
|
||||
|
||||
const QRPortalWeb = require('@bot-whatsapp/portal')
|
||||
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
|
||||
const JsonFileAdapter = require('@bot-whatsapp/database/json')
|
||||
|
||||
@@ -22,58 +21,72 @@ const JsonFileAdapter = require('@bot-whatsapp/database/json')
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
@@ -85,6 +98,7 @@ const main = async () => {
|
||||
provider: adapterProvider,
|
||||
database: adapterDB,
|
||||
})
|
||||
QRPortalWeb()
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="preconnect" href="https://rsms.me/" />
|
||||
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
|
||||
<title>🤖 Crear chatbot WhatsApp en minutos</title>
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
align-self: center;
|
||||
align-items: center;
|
||||
font-family: 'Inter', sans-serif;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div
|
||||
style="
|
||||
display: flex;
|
||||
gap: 2rem;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
"
|
||||
>
|
||||
<img
|
||||
style="
|
||||
box-shadow: rgba(50, 50, 93, 0.25) 0px 50px 100px -20px,
|
||||
rgba(0, 0, 0, 0.3) 0px 30px 60px -30px;
|
||||
border-radius: 15px;
|
||||
object-fit: contain;
|
||||
"
|
||||
width="400"
|
||||
height="400"
|
||||
src="qr.png"
|
||||
alt="Escanear QR"
|
||||
/>
|
||||
<div style="width: 400px; display: grid; gap: 1rem">
|
||||
<h1 style="margin: 0">Whatsapp QR</h1>
|
||||
<p>
|
||||
<strong
|
||||
>F5 para actualizar, el codigo se actualiza cada minuto. </strong
|
||||
><br />
|
||||
Con esta libreria, puedes 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,
|
||||
nuestro Chatbot se integra fácilmente con otros sistemas y
|
||||
herramientas que ya esté utilizando en su negocio.
|
||||
</p>
|
||||
<div>
|
||||
<a
|
||||
target="_blank"
|
||||
style="
|
||||
background: white;
|
||||
box-shadow: rgb(0 0 0 / 16%) 0px 10px 36px 0px,
|
||||
rgb(0 0 0 / 6%) 0px 0px 0px 1px;
|
||||
padding: 10px;
|
||||
border-radius: 5px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
color: #1a1a1a;
|
||||
border: solid 1px #afafaf;
|
||||
"
|
||||
href="https://bot-whatsapp.netlify.app/"
|
||||
>Ver documentación</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,34 +0,0 @@
|
||||
const http = require('http')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const PORT = process.env.PORT || 3000
|
||||
|
||||
/**
|
||||
* Levantar un HTTP Server
|
||||
*/
|
||||
http.createServer(function (req, res) {
|
||||
var cssPath = undefined
|
||||
var fileStream = undefined
|
||||
var imagePath = undefined
|
||||
|
||||
if (req.url === '/') {
|
||||
fs.readFile('./public/index.html', 'UTF-8', function (err, html) {
|
||||
res.writeHead(200, { 'Content-Type': 'text/html' })
|
||||
res.end(html)
|
||||
})
|
||||
} else if (req.url.match('.css$')) {
|
||||
cssPath = path.join(__dirname, 'public', req.url)
|
||||
fileStream = fs.createReadStream(cssPath, 'UTF-8')
|
||||
res.writeHead(200, { 'Content-Type': 'text/css' })
|
||||
fileStream.pipe(res)
|
||||
} else if (req.url.match('.png$')) {
|
||||
imagePath = path.join(__dirname, req.url)
|
||||
fileStream = fs.createReadStream(imagePath)
|
||||
res.writeHead(200, { 'Content-Type': 'image/png' })
|
||||
fileStream.pipe(res)
|
||||
} else {
|
||||
res.writeHead(404, { 'Content-Type': 'text/html' })
|
||||
res.end('No Page Found')
|
||||
}
|
||||
}).listen(PORT, () => console.log(`Escanear QR Code http://localhost:${PORT}`))
|
||||
@@ -5,8 +5,7 @@ const {
|
||||
addKeyword,
|
||||
} = require('@bot-whatsapp/bot')
|
||||
|
||||
require('./server.http')
|
||||
|
||||
const QRPortalWeb = require('@bot-whatsapp/portal')
|
||||
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
|
||||
const MockAdapter = require('@bot-whatsapp/database/mock')
|
||||
|
||||
@@ -22,58 +21,72 @@ const MockAdapter = require('@bot-whatsapp/database/mock')
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
@@ -85,6 +98,7 @@ const main = async () => {
|
||||
provider: adapterProvider,
|
||||
database: adapterDB,
|
||||
})
|
||||
QRPortalWeb()
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="preconnect" href="https://rsms.me/" />
|
||||
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
|
||||
<title>🤖 Crear chatbot WhatsApp en minutos</title>
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
align-self: center;
|
||||
align-items: center;
|
||||
font-family: 'Inter', sans-serif;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div
|
||||
style="
|
||||
display: flex;
|
||||
gap: 2rem;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
"
|
||||
>
|
||||
<img
|
||||
style="
|
||||
box-shadow: rgba(50, 50, 93, 0.25) 0px 50px 100px -20px,
|
||||
rgba(0, 0, 0, 0.3) 0px 30px 60px -30px;
|
||||
border-radius: 15px;
|
||||
object-fit: contain;
|
||||
"
|
||||
width="400"
|
||||
height="400"
|
||||
src="qr.png"
|
||||
alt="Escanear QR"
|
||||
/>
|
||||
<div style="width: 400px; display: grid; gap: 1rem">
|
||||
<h1 style="margin: 0">Whatsapp QR</h1>
|
||||
<p>
|
||||
<strong
|
||||
>F5 para actualizar, el codigo se actualiza cada minuto. </strong
|
||||
><br />
|
||||
Con esta libreria, puedes 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,
|
||||
nuestro Chatbot se integra fácilmente con otros sistemas y
|
||||
herramientas que ya esté utilizando en su negocio.
|
||||
</p>
|
||||
<div>
|
||||
<a
|
||||
target="_blank"
|
||||
style="
|
||||
background: white;
|
||||
box-shadow: rgb(0 0 0 / 16%) 0px 10px 36px 0px,
|
||||
rgb(0 0 0 / 6%) 0px 0px 0px 1px;
|
||||
padding: 10px;
|
||||
border-radius: 5px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
color: #1a1a1a;
|
||||
border: solid 1px #afafaf;
|
||||
"
|
||||
href="https://bot-whatsapp.netlify.app/"
|
||||
>Ver documentación</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,34 +0,0 @@
|
||||
const http = require('http')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const PORT = process.env.PORT || 3000
|
||||
|
||||
/**
|
||||
* Levantar un HTTP Server
|
||||
*/
|
||||
http.createServer(function (req, res) {
|
||||
var cssPath = undefined
|
||||
var fileStream = undefined
|
||||
var imagePath = undefined
|
||||
|
||||
if (req.url === '/') {
|
||||
fs.readFile('./public/index.html', 'UTF-8', function (err, html) {
|
||||
res.writeHead(200, { 'Content-Type': 'text/html' })
|
||||
res.end(html)
|
||||
})
|
||||
} else if (req.url.match('.css$')) {
|
||||
cssPath = path.join(__dirname, 'public', req.url)
|
||||
fileStream = fs.createReadStream(cssPath, 'UTF-8')
|
||||
res.writeHead(200, { 'Content-Type': 'text/css' })
|
||||
fileStream.pipe(res)
|
||||
} else if (req.url.match('.png$')) {
|
||||
imagePath = path.join(__dirname, req.url)
|
||||
fileStream = fs.createReadStream(imagePath)
|
||||
res.writeHead(200, { 'Content-Type': 'image/png' })
|
||||
fileStream.pipe(res)
|
||||
} else {
|
||||
res.writeHead(404, { 'Content-Type': 'text/html' })
|
||||
res.end('No Page Found')
|
||||
}
|
||||
}).listen(PORT, () => console.log(`Escanear QR Code http://localhost:${PORT}`))
|
||||
@@ -5,11 +5,10 @@ const {
|
||||
addKeyword,
|
||||
} = require('@bot-whatsapp/bot')
|
||||
|
||||
const QRPortalWeb = require('@bot-whatsapp/portal')
|
||||
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
|
||||
const MongoAdapter = require('@bot-whatsapp/database/mongo')
|
||||
|
||||
require('./server.http')
|
||||
|
||||
/**
|
||||
* Declaramos las conexiones de Mongo
|
||||
*/
|
||||
@@ -29,58 +28,72 @@ const MONGO_DB_NAME = 'db_bot'
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
@@ -95,6 +108,7 @@ const main = async () => {
|
||||
provider: adapterProvider,
|
||||
database: adapterDB,
|
||||
})
|
||||
QRPortalWeb()
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="preconnect" href="https://rsms.me/" />
|
||||
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
|
||||
<title>🤖 Crear chatbot WhatsApp en minutos</title>
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
align-self: center;
|
||||
align-items: center;
|
||||
font-family: 'Inter', sans-serif;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div
|
||||
style="
|
||||
display: flex;
|
||||
gap: 2rem;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
"
|
||||
>
|
||||
<img
|
||||
style="
|
||||
box-shadow: rgba(50, 50, 93, 0.25) 0px 50px 100px -20px,
|
||||
rgba(0, 0, 0, 0.3) 0px 30px 60px -30px;
|
||||
border-radius: 15px;
|
||||
object-fit: contain;
|
||||
"
|
||||
width="400"
|
||||
height="400"
|
||||
src="qr.png"
|
||||
alt="Escanear QR"
|
||||
/>
|
||||
<div style="width: 400px; display: grid; gap: 1rem">
|
||||
<h1 style="margin: 0">Whatsapp QR</h1>
|
||||
<p>
|
||||
<strong
|
||||
>F5 para actualizar, el codigo se actualiza cada minuto. </strong
|
||||
><br />
|
||||
Con esta libreria, puedes 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,
|
||||
nuestro Chatbot se integra fácilmente con otros sistemas y
|
||||
herramientas que ya esté utilizando en su negocio.
|
||||
</p>
|
||||
<div>
|
||||
<a
|
||||
target="_blank"
|
||||
style="
|
||||
background: white;
|
||||
box-shadow: rgb(0 0 0 / 16%) 0px 10px 36px 0px,
|
||||
rgb(0 0 0 / 6%) 0px 0px 0px 1px;
|
||||
padding: 10px;
|
||||
border-radius: 5px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
color: #1a1a1a;
|
||||
border: solid 1px #afafaf;
|
||||
"
|
||||
href="https://bot-whatsapp.netlify.app/"
|
||||
>Ver documentación</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,34 +0,0 @@
|
||||
const http = require('http')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const PORT = process.env.PORT || 3000
|
||||
|
||||
/**
|
||||
* Levantar un HTTP Server
|
||||
*/
|
||||
http.createServer(function (req, res) {
|
||||
var cssPath = undefined
|
||||
var fileStream = undefined
|
||||
var imagePath = undefined
|
||||
|
||||
if (req.url === '/') {
|
||||
fs.readFile('./public/index.html', 'UTF-8', function (err, html) {
|
||||
res.writeHead(200, { 'Content-Type': 'text/html' })
|
||||
res.end(html)
|
||||
})
|
||||
} else if (req.url.match('.css$')) {
|
||||
cssPath = path.join(__dirname, 'public', req.url)
|
||||
fileStream = fs.createReadStream(cssPath, 'UTF-8')
|
||||
res.writeHead(200, { 'Content-Type': 'text/css' })
|
||||
fileStream.pipe(res)
|
||||
} else if (req.url.match('.png$')) {
|
||||
imagePath = path.join(__dirname, req.url)
|
||||
fileStream = fs.createReadStream(imagePath)
|
||||
res.writeHead(200, { 'Content-Type': 'image/png' })
|
||||
fileStream.pipe(res)
|
||||
} else {
|
||||
res.writeHead(404, { 'Content-Type': 'text/html' })
|
||||
res.end('No Page Found')
|
||||
}
|
||||
}).listen(PORT, () => console.log(`Escanear QR Code http://localhost:${PORT}`))
|
||||
@@ -5,8 +5,7 @@ const {
|
||||
addKeyword,
|
||||
} = require('@bot-whatsapp/bot')
|
||||
|
||||
require('./server.http')
|
||||
|
||||
const QRPortalWeb = require('@bot-whatsapp/portal')
|
||||
const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
|
||||
const MySQLAdapter = require('@bot-whatsapp/database/mysql')
|
||||
|
||||
@@ -31,58 +30,72 @@ const MYSQL_DB_NAME = 'bot'
|
||||
* 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 flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([
|
||||
'📄 Aquí tenemos el flujo secundario',
|
||||
])
|
||||
|
||||
const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
const flowDocs = addKeyword([
|
||||
'doc',
|
||||
'documentacion',
|
||||
'documentación',
|
||||
]).addAnswer(
|
||||
[
|
||||
'📄 Aquí encontras las documentación recuerda que puedes mejorarla',
|
||||
'https://bot-whatsapp.netlify.app/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowZapatos2]
|
||||
)
|
||||
const flowTuto = addKeyword(['tutorial', 'tuto']).addAnswer(
|
||||
[
|
||||
'🙌 Aquí encontras un ejemplo rapido',
|
||||
'https://bot-whatsapp.netlify.app/docs/example/',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
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)
|
||||
},
|
||||
[flowBolsos2]
|
||||
)
|
||||
const flowGracias = addKeyword(['gracias', 'grac']).addAnswer(
|
||||
[
|
||||
'🚀 Puedes aportar tu granito de arena a este proyecto',
|
||||
'[*opencollective*] https://opencollective.com/bot-whatsapp',
|
||||
'[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez',
|
||||
'[*patreon*] https://www.patreon.com/leifermendez',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
const flowDiscord = addKeyword(['discord']).addAnswer(
|
||||
[
|
||||
'🤪 Únete al discord',
|
||||
'https://link.codigoencasa.com/DISCORD',
|
||||
'\n*2* Para siguiente paso.',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowSecundario]
|
||||
)
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer('🙌 Hola bienvenido a este *Chatbot*')
|
||||
.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)
|
||||
},
|
||||
[flowBolsos, flowZapatos]
|
||||
[
|
||||
'te comparto los siguientes links de interes sobre el proyecto',
|
||||
'👉 *doc* para ver la documentación',
|
||||
'👉 *gracias* para ver la lista de videos',
|
||||
'👉 *discord* unirte al discord',
|
||||
],
|
||||
null,
|
||||
null,
|
||||
[flowDocs, flowGracias, flowTuto, flowDiscord]
|
||||
)
|
||||
|
||||
const main = async () => {
|
||||
@@ -99,6 +112,7 @@ const main = async () => {
|
||||
provider: adapterProvider,
|
||||
database: adapterDB,
|
||||
})
|
||||
QRPortalWeb()
|
||||
}
|
||||
|
||||
main()
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="es">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="preconnect" href="https://rsms.me/" />
|
||||
<link rel="stylesheet" href="https://rsms.me/inter/inter.css" />
|
||||
<title>🤖 Crear chatbot WhatsApp en minutos</title>
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
display: flex;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
align-self: center;
|
||||
align-items: center;
|
||||
font-family: 'Inter', sans-serif;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div
|
||||
style="
|
||||
display: flex;
|
||||
gap: 2rem;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
"
|
||||
>
|
||||
<img
|
||||
style="
|
||||
box-shadow: rgba(50, 50, 93, 0.25) 0px 50px 100px -20px,
|
||||
rgba(0, 0, 0, 0.3) 0px 30px 60px -30px;
|
||||
border-radius: 15px;
|
||||
object-fit: contain;
|
||||
"
|
||||
width="400"
|
||||
height="400"
|
||||
src="qr.png"
|
||||
alt="Escanear QR"
|
||||
/>
|
||||
<div style="width: 400px; display: grid; gap: 1rem">
|
||||
<h1 style="margin: 0">Whatsapp QR</h1>
|
||||
<p>
|
||||
<strong
|
||||
>F5 para actualizar, el codigo se actualiza cada minuto. </strong
|
||||
><br />
|
||||
Con esta libreria, puedes 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,
|
||||
nuestro Chatbot se integra fácilmente con otros sistemas y
|
||||
herramientas que ya esté utilizando en su negocio.
|
||||
</p>
|
||||
<div>
|
||||
<a
|
||||
target="_blank"
|
||||
style="
|
||||
background: white;
|
||||
box-shadow: rgb(0 0 0 / 16%) 0px 10px 36px 0px,
|
||||
rgb(0 0 0 / 6%) 0px 0px 0px 1px;
|
||||
padding: 10px;
|
||||
border-radius: 5px;
|
||||
font-weight: 600;
|
||||
text-decoration: none;
|
||||
color: #1a1a1a;
|
||||
border: solid 1px #afafaf;
|
||||
"
|
||||
href="https://bot-whatsapp.netlify.app/"
|
||||
>Ver documentación</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,34 +0,0 @@
|
||||
const http = require('http')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
|
||||
const PORT = process.env.PORT || 3000
|
||||
|
||||
/**
|
||||
* Levantar un HTTP Server
|
||||
*/
|
||||
http.createServer(function (req, res) {
|
||||
var cssPath = undefined
|
||||
var fileStream = undefined
|
||||
var imagePath = undefined
|
||||
|
||||
if (req.url === '/') {
|
||||
fs.readFile('./public/index.html', 'UTF-8', function (err, html) {
|
||||
res.writeHead(200, { 'Content-Type': 'text/html' })
|
||||
res.end(html)
|
||||
})
|
||||
} else if (req.url.match('.css$')) {
|
||||
cssPath = path.join(__dirname, 'public', req.url)
|
||||
fileStream = fs.createReadStream(cssPath, 'UTF-8')
|
||||
res.writeHead(200, { 'Content-Type': 'text/css' })
|
||||
fileStream.pipe(res)
|
||||
} else if (req.url.match('.png$')) {
|
||||
imagePath = path.join(__dirname, req.url)
|
||||
fileStream = fs.createReadStream(imagePath)
|
||||
res.writeHead(200, { 'Content-Type': 'image/png' })
|
||||
fileStream.pipe(res)
|
||||
} else {
|
||||
res.writeHead(404, { 'Content-Type': 'text/html' })
|
||||
res.end('No Page Found')
|
||||
}
|
||||
}).listen(PORT, () => console.log(`Escanear QR Code http://localhost:${PORT}`))
|
||||
Reference in New Issue
Block a user