diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index aab4756..d587c64 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -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 diff --git a/CHANGELOG.md b/CHANGELOG.md index 023883a..48381f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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) diff --git a/package.json b/package.json index 07bc07d..a6e64e7 100644 --- a/package.json +++ b/package.json @@ -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, diff --git a/packages/bot/core/core.class.js b/packages/bot/core/core.class.js index 4243713..79d996b 100644 --- a/packages/bot/core/core.class.js +++ b/packages/bot/core/core.class.js @@ -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 diff --git a/packages/bot/package.json b/packages/bot/package.json index 44ebca0..b205714 100644 --- a/packages/bot/package.json +++ b/packages/bot/package.json @@ -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": { diff --git a/packages/bot/rollup-bot.config.js b/packages/bot/rollup-bot.config.js index f8ffa2a..36bbb87 100644 --- a/packages/bot/rollup-bot.config.js +++ b/packages/bot/rollup-bot.config.js @@ -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()], }, diff --git a/packages/bot/utils/queue.js b/packages/bot/utils/queue.js index 1f610e9..873024a 100644 --- a/packages/bot/utils/queue.js +++ b/packages/bot/utils/queue.js @@ -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 } diff --git a/packages/cli/package.json b/packages/cli/package.json index 6f04765..18b8619 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -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": { diff --git a/packages/contexts/package.json b/packages/contexts/package.json index 7f0f0a8..7381d6a 100644 --- a/packages/contexts/package.json +++ b/packages/contexts/package.json @@ -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": [ diff --git a/packages/create-bot-whatsapp/package.json b/packages/create-bot-whatsapp/package.json index b6cf5b4..49503df 100644 --- a/packages/create-bot-whatsapp/package.json +++ b/packages/create-bot-whatsapp/package.json @@ -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": [ diff --git a/packages/database/package.json b/packages/database/package.json index 3d745a8..80bbcd1 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -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": [], diff --git a/packages/docs/src/routes/docs/flows/index.mdx b/packages/docs/src/routes/docs/flows/index.mdx index 027c793..7a2171c 100644 --- a/packages/docs/src/routes/docs/flows/index.mdx +++ b/packages/docs/src/routes/docs/flows/index.mdx @@ -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.
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()) + }) + + +``` + +--- + { - 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() diff --git a/starters/apps/base-baileys-mysql/Dockerfile b/starters/apps/base-baileys-mysql/Dockerfile index 14b07b2..7fb6d5d 100644 --- a/starters/apps/base-baileys-mysql/Dockerfile +++ b/starters/apps/base-baileys-mysql/Dockerfile @@ -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"] diff --git a/starters/apps/base-baileys-mysql/app.js b/starters/apps/base-baileys-mysql/app.js index 02a13c0..d3dbbe5 100644 --- a/starters/apps/base-baileys-mysql/app.js +++ b/starters/apps/base-baileys-mysql/app.js @@ -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() diff --git a/starters/apps/base-baileys-mysql/public/index.html b/starters/apps/base-baileys-mysql/public/index.html deleted file mode 100644 index 202b50c..0000000 --- a/starters/apps/base-baileys-mysql/public/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - 馃 Crear chatbot WhatsApp en minutos - - - -
- Escanear QR -
-

Whatsapp QR

-

- F5 para actualizar, el codigo se actualiza cada minuto.
- 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. -

-
- Ver documentaci贸n -
-
-
- - diff --git a/starters/apps/base-baileys-mysql/server.http.js b/starters/apps/base-baileys-mysql/server.http.js deleted file mode 100644 index 217bd71..0000000 --- a/starters/apps/base-baileys-mysql/server.http.js +++ /dev/null @@ -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}`)) diff --git a/starters/apps/base-meta-json/Dockerfile b/starters/apps/base-meta-json/Dockerfile new file mode 100644 index 0000000..7fb6d5d --- /dev/null +++ b/starters/apps/base-meta-json/Dockerfile @@ -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"] diff --git a/starters/apps/base-meta-json/app.js b/starters/apps/base-meta-json/app.js index 49dd430..cc4c7ac 100644 --- a/starters/apps/base-meta-json/app.js +++ b/starters/apps/base-meta-json/app.js @@ -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 () => { diff --git a/starters/apps/base-meta-memory/Dockerfile b/starters/apps/base-meta-memory/Dockerfile new file mode 100644 index 0000000..7fb6d5d --- /dev/null +++ b/starters/apps/base-meta-memory/Dockerfile @@ -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"] diff --git a/starters/apps/base-meta-memory/app.js b/starters/apps/base-meta-memory/app.js index 288929c..c8201e8 100644 --- a/starters/apps/base-meta-memory/app.js +++ b/starters/apps/base-meta-memory/app.js @@ -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 () => { diff --git a/starters/apps/base-meta-mongo/Dockerfile b/starters/apps/base-meta-mongo/Dockerfile new file mode 100644 index 0000000..7fb6d5d --- /dev/null +++ b/starters/apps/base-meta-mongo/Dockerfile @@ -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"] diff --git a/starters/apps/base-meta-mongo/app.js b/starters/apps/base-meta-mongo/app.js index f40a6a2..18cd9ac 100644 --- a/starters/apps/base-meta-mongo/app.js +++ b/starters/apps/base-meta-mongo/app.js @@ -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 () => { diff --git a/starters/apps/base-meta-mysql/Dockerfile b/starters/apps/base-meta-mysql/Dockerfile new file mode 100644 index 0000000..7fb6d5d --- /dev/null +++ b/starters/apps/base-meta-mysql/Dockerfile @@ -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"] diff --git a/starters/apps/base-meta-mysql/app.js b/starters/apps/base-meta-mysql/app.js index 25b171c..102f977 100644 --- a/starters/apps/base-meta-mysql/app.js +++ b/starters/apps/base-meta-mysql/app.js @@ -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 () => { diff --git a/starters/apps/base-twilio-json/Dockerfile b/starters/apps/base-twilio-json/Dockerfile new file mode 100644 index 0000000..7fb6d5d --- /dev/null +++ b/starters/apps/base-twilio-json/Dockerfile @@ -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"] diff --git a/starters/apps/base-twilio-json/app.js b/starters/apps/base-twilio-json/app.js index 190e842..047a126 100644 --- a/starters/apps/base-twilio-json/app.js +++ b/starters/apps/base-twilio-json/app.js @@ -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 () => { diff --git a/starters/apps/base-twilio-memory/Dockerfile b/starters/apps/base-twilio-memory/Dockerfile new file mode 100644 index 0000000..7fb6d5d --- /dev/null +++ b/starters/apps/base-twilio-memory/Dockerfile @@ -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"] diff --git a/starters/apps/base-twilio-memory/app.js b/starters/apps/base-twilio-memory/app.js index 9730709..cc1d16b 100644 --- a/starters/apps/base-twilio-memory/app.js +++ b/starters/apps/base-twilio-memory/app.js @@ -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 () => { diff --git a/starters/apps/base-twilio-mongo/Dockerfile b/starters/apps/base-twilio-mongo/Dockerfile new file mode 100644 index 0000000..7fb6d5d --- /dev/null +++ b/starters/apps/base-twilio-mongo/Dockerfile @@ -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"] diff --git a/starters/apps/base-twilio-mongo/app.js b/starters/apps/base-twilio-mongo/app.js index 9e5e3f7..dcabb99 100644 --- a/starters/apps/base-twilio-mongo/app.js +++ b/starters/apps/base-twilio-mongo/app.js @@ -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 () => { diff --git a/starters/apps/base-twilio-mysql/Dockerfile b/starters/apps/base-twilio-mysql/Dockerfile new file mode 100644 index 0000000..7fb6d5d --- /dev/null +++ b/starters/apps/base-twilio-mysql/Dockerfile @@ -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"] diff --git a/starters/apps/base-twilio-mysql/app.js b/starters/apps/base-twilio-mysql/app.js index 7100f9c..4725cd3 100644 --- a/starters/apps/base-twilio-mysql/app.js +++ b/starters/apps/base-twilio-mysql/app.js @@ -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 () => { diff --git a/starters/apps/base-venom-json/app.js b/starters/apps/base-venom-json/app.js index c742f78..120deee 100644 --- a/starters/apps/base-venom-json/app.js +++ b/starters/apps/base-venom-json/app.js @@ -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() diff --git a/starters/apps/base-venom-json/public/index.html b/starters/apps/base-venom-json/public/index.html deleted file mode 100644 index 202b50c..0000000 --- a/starters/apps/base-venom-json/public/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - 馃 Crear chatbot WhatsApp en minutos - - - -
- Escanear QR -
-

Whatsapp QR

-

- F5 para actualizar, el codigo se actualiza cada minuto.
- 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. -

-
- Ver documentaci贸n -
-
-
- - diff --git a/starters/apps/base-venom-json/server.http.js b/starters/apps/base-venom-json/server.http.js deleted file mode 100644 index 217bd71..0000000 --- a/starters/apps/base-venom-json/server.http.js +++ /dev/null @@ -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}`)) diff --git a/starters/apps/base-venom-memory/app.js b/starters/apps/base-venom-memory/app.js index 6f89ef2..8402cf9 100644 --- a/starters/apps/base-venom-memory/app.js +++ b/starters/apps/base-venom-memory/app.js @@ -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() diff --git a/starters/apps/base-venom-memory/public/index.html b/starters/apps/base-venom-memory/public/index.html deleted file mode 100644 index 202b50c..0000000 --- a/starters/apps/base-venom-memory/public/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - 馃 Crear chatbot WhatsApp en minutos - - - -
- Escanear QR -
-

Whatsapp QR

-

- F5 para actualizar, el codigo se actualiza cada minuto.
- 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. -

-
- Ver documentaci贸n -
-
-
- - diff --git a/starters/apps/base-venom-memory/server.http.js b/starters/apps/base-venom-memory/server.http.js deleted file mode 100644 index 217bd71..0000000 --- a/starters/apps/base-venom-memory/server.http.js +++ /dev/null @@ -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}`)) diff --git a/starters/apps/base-venom-mongo/app.js b/starters/apps/base-venom-mongo/app.js index d8de982..2f4f16a 100644 --- a/starters/apps/base-venom-mongo/app.js +++ b/starters/apps/base-venom-mongo/app.js @@ -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() diff --git a/starters/apps/base-venom-mongo/public/index.html b/starters/apps/base-venom-mongo/public/index.html deleted file mode 100644 index 202b50c..0000000 --- a/starters/apps/base-venom-mongo/public/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - 馃 Crear chatbot WhatsApp en minutos - - - -
- Escanear QR -
-

Whatsapp QR

-

- F5 para actualizar, el codigo se actualiza cada minuto.
- 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. -

-
- Ver documentaci贸n -
-
-
- - diff --git a/starters/apps/base-venom-mongo/server.http.js b/starters/apps/base-venom-mongo/server.http.js deleted file mode 100644 index 217bd71..0000000 --- a/starters/apps/base-venom-mongo/server.http.js +++ /dev/null @@ -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}`)) diff --git a/starters/apps/base-venom-mysql/app.js b/starters/apps/base-venom-mysql/app.js index 24da8ee..8c5c2db 100644 --- a/starters/apps/base-venom-mysql/app.js +++ b/starters/apps/base-venom-mysql/app.js @@ -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() diff --git a/starters/apps/base-venom-mysql/public/index.html b/starters/apps/base-venom-mysql/public/index.html deleted file mode 100644 index 202b50c..0000000 --- a/starters/apps/base-venom-mysql/public/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - 馃 Crear chatbot WhatsApp en minutos - - - -
- Escanear QR -
-

Whatsapp QR

-

- F5 para actualizar, el codigo se actualiza cada minuto.
- 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. -

-
- Ver documentaci贸n -
-
-
- - diff --git a/starters/apps/base-venom-mysql/server.http.js b/starters/apps/base-venom-mysql/server.http.js deleted file mode 100644 index 217bd71..0000000 --- a/starters/apps/base-venom-mysql/server.http.js +++ /dev/null @@ -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}`)) diff --git a/starters/apps/base-wweb-json/app.js b/starters/apps/base-wweb-json/app.js index 31f03dd..729ac2a 100644 --- a/starters/apps/base-wweb-json/app.js +++ b/starters/apps/base-wweb-json/app.js @@ -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() diff --git a/starters/apps/base-wweb-json/public/index.html b/starters/apps/base-wweb-json/public/index.html deleted file mode 100644 index 202b50c..0000000 --- a/starters/apps/base-wweb-json/public/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - 馃 Crear chatbot WhatsApp en minutos - - - -
- Escanear QR -
-

Whatsapp QR

-

- F5 para actualizar, el codigo se actualiza cada minuto.
- 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. -

-
- Ver documentaci贸n -
-
-
- - diff --git a/starters/apps/base-wweb-json/server.http.js b/starters/apps/base-wweb-json/server.http.js deleted file mode 100644 index 217bd71..0000000 --- a/starters/apps/base-wweb-json/server.http.js +++ /dev/null @@ -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}`)) diff --git a/starters/apps/base-wweb-memory/app.js b/starters/apps/base-wweb-memory/app.js index 5318283..d6a567a 100644 --- a/starters/apps/base-wweb-memory/app.js +++ b/starters/apps/base-wweb-memory/app.js @@ -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() diff --git a/starters/apps/base-wweb-memory/public/index.html b/starters/apps/base-wweb-memory/public/index.html deleted file mode 100644 index 202b50c..0000000 --- a/starters/apps/base-wweb-memory/public/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - 馃 Crear chatbot WhatsApp en minutos - - - -
- Escanear QR -
-

Whatsapp QR

-

- F5 para actualizar, el codigo se actualiza cada minuto.
- 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. -

-
- Ver documentaci贸n -
-
-
- - diff --git a/starters/apps/base-wweb-memory/server.http.js b/starters/apps/base-wweb-memory/server.http.js deleted file mode 100644 index 217bd71..0000000 --- a/starters/apps/base-wweb-memory/server.http.js +++ /dev/null @@ -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}`)) diff --git a/starters/apps/base-wweb-mongo/app.js b/starters/apps/base-wweb-mongo/app.js index 34f3887..a8e8aad 100644 --- a/starters/apps/base-wweb-mongo/app.js +++ b/starters/apps/base-wweb-mongo/app.js @@ -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() diff --git a/starters/apps/base-wweb-mongo/public/index.html b/starters/apps/base-wweb-mongo/public/index.html deleted file mode 100644 index 202b50c..0000000 --- a/starters/apps/base-wweb-mongo/public/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - 馃 Crear chatbot WhatsApp en minutos - - - -
- Escanear QR -
-

Whatsapp QR

-

- F5 para actualizar, el codigo se actualiza cada minuto.
- 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. -

-
- Ver documentaci贸n -
-
-
- - diff --git a/starters/apps/base-wweb-mongo/server.http.js b/starters/apps/base-wweb-mongo/server.http.js deleted file mode 100644 index 217bd71..0000000 --- a/starters/apps/base-wweb-mongo/server.http.js +++ /dev/null @@ -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}`)) diff --git a/starters/apps/base-wweb-mysql/app.js b/starters/apps/base-wweb-mysql/app.js index 2095842..68f7f37 100644 --- a/starters/apps/base-wweb-mysql/app.js +++ b/starters/apps/base-wweb-mysql/app.js @@ -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() diff --git a/starters/apps/base-wweb-mysql/public/index.html b/starters/apps/base-wweb-mysql/public/index.html deleted file mode 100644 index 202b50c..0000000 --- a/starters/apps/base-wweb-mysql/public/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - 馃 Crear chatbot WhatsApp en minutos - - - -
- Escanear QR -
-

Whatsapp QR

-

- F5 para actualizar, el codigo se actualiza cada minuto.
- 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. -

-
- Ver documentaci贸n -
-
-
- - diff --git a/starters/apps/base-wweb-mysql/server.http.js b/starters/apps/base-wweb-mysql/server.http.js deleted file mode 100644 index 217bd71..0000000 --- a/starters/apps/base-wweb-mysql/server.http.js +++ /dev/null @@ -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}`))