diff --git a/.github/workflows/check-providers.yml b/.github/workflows/check-providers.yml deleted file mode 100644 index 9965606..0000000 --- a/.github/workflows/check-providers.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: Rev Providers - -on: - pull_request: - branches: - - dev - -jobs: - check-npm: - name: Install Dependencies - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: 16.x - cache: 'yarn' - registry-url: https://registry.npmjs.org/ - - - run: corepack enable - - - name: Install NPM Dependencies - run: yarn install --immutable --network-timeout 300000 - - - name: Check Baileys - run: yarn node ./scripts/checker.js --name=baileys --stable=true - - - name: Check Venom - run: yarn node ./scripts/checker.js --name=venom --stable=true - - - name: Check web-whatsapp - run: yarn node ./scripts/checker.js --name=web-whatsapp --stable=true - - - name: Check Meta - run: yarn node ./scripts/checker.js --name=meta --stable=true - - - name: Check Twilio - run: yarn node ./scripts/checker.js --name=twilio --stable=true - - - uses: stefanzweifel/git-auto-commit-action@v4 - with: - commit_message: 'ci(providers): 👍 updated versions stable providers' diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 86178fd..a1fed1b 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -13,7 +13,7 @@ name: 'CodeQL' on: push: - branches: ['main', dev, next-release] + branches: [release/next] pull_request: # The branches below must be a subset of the branches above branches: ['main'] @@ -22,6 +22,7 @@ on: jobs: analyze: + if: ${{ !github.event.act }} name: Analyze runs-on: ubuntu-latest permissions: diff --git a/.github/workflows/contributors.yml b/.github/workflows/contributors.yml index 4f3d94e..b126e98 100644 --- a/.github/workflows/contributors.yml +++ b/.github/workflows/contributors.yml @@ -1,8 +1,8 @@ name: Revisando Colaboradores + on: - push: - branches: - - main + schedule: + - cron: '0 9 * * *' jobs: contrib-readme-job: diff --git a/.github/workflows/netlify-dev.yml b/.github/workflows/netlify-dev.yml index e3e8200..1820da5 100644 --- a/.github/workflows/netlify-dev.yml +++ b/.github/workflows/netlify-dev.yml @@ -13,6 +13,7 @@ on: jobs: ############ DOCUMENTATION BUILD ############ build-documentation: + if: ${{ !github.event.act }} name: Build Package runs-on: ubuntu-latest diff --git a/.github/workflows/netlify.yml b/.github/workflows/netlify.yml index bdb51ab..2dac101 100644 --- a/.github/workflows/netlify.yml +++ b/.github/workflows/netlify.yml @@ -3,12 +3,11 @@ name: 📄 (PROD) Desplegando documentacion on: push: branches: - - main - - next-release + - release/next jobs: ############ DOCUMENTATION BUILD ############ - build-documentation: + build-documentation-prod: name: Build Package runs-on: ubuntu-latest diff --git a/.github/workflows/releases-dev.yml b/.github/workflows/releases-dev.yml index 6f380a2..4e5c169 100644 --- a/.github/workflows/releases-dev.yml +++ b/.github/workflows/releases-dev.yml @@ -3,7 +3,7 @@ name: 🚀 (DEV) Liberando versiones on: push: branches: - - next-release + - release/next jobs: ############ RELEASE ############ @@ -44,6 +44,9 @@ jobs: - name: Release @bot-whatsapp/provider run: yarn node ./scripts/release.js --name=provider --version= --token="${{ secrets.NPM_TOKEN }}" + - name: Release @bot-whatsapp/contexts + run: yarn node ./scripts/release.js --name=contexts --version= --token="${{ secrets.NPM_TOKEN }}" + - name: Release @bot-whatsapp/portal run: yarn node ./scripts/release.js --name=portal --version= --token="${{ secrets.NPM_TOKEN }}" diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index d692ee3..d587c64 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -1,11 +1,13 @@ name: 🚀⚡ Liberando versiones on: - release: - types: [created] + push: + branches: + - release/production jobs: ############ RELEASE ############ - release: + release-prod: + if: ${{ !github.event.act }} name: Release runs-on: ubuntu-latest steps: @@ -56,11 +58,22 @@ jobs: - name: Release @bot-whatsapp/provider run: yarn node ./scripts/release.js --name=provider --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}" + - name: Release @bot-whatsapp/contexts + run: yarn node ./scripts/release.js --name=contexts --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}" + - name: Release @bot-whatsapp/portal run: yarn node ./scripts/release.js --name=portal --version="${{ steps.package-version.outputs.current-version}}" --token="${{ secrets.NPM_TOKEN }}" - - name: Commit and push changes - uses: devops-infra/action-commit-push@master + - 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: - github_token: ${{ secrets.GITHUB_TOKEN }} - commit_message: 'release(version): 🚀 - "${{ steps.package-version.outputs.current-version}}" release' + commit_message: 'chore(version): launch release 🚀 "${{ steps.package-version.outputs.current-version}}"' diff --git a/.gitignore b/.gitignore index 721d12c..1cc3038 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,4 @@ yarn-error.log .npmrc # Local Netlify folder .netlify +.secrets \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index eae6a68..48381f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,37 @@ 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) + +### [0.1.9-pre](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.9...v0.1.9-pre) (2023-01-10) + +### [0.1.7-pre-1](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-alpha...v0.1.7-pre-1) (2023-01-10) + +### [0.1.7-alpha](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-pre...v0.1.7-alpha) (2023-01-10) + +### [0.1.11](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.10...v0.1.11) (2023-01-11) + +### [0.1.9-pre](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.9...v0.1.9-pre) (2023-01-10) + +### [0.1.7-pre-1](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-alpha...v0.1.7-pre-1) (2023-01-10) + +### [0.1.7-alpha](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-pre...v0.1.7-alpha) (2023-01-10) + +### [0.1.10](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.8...v0.1.10) (2023-01-11) + + +### Bug Fixes + +* :fire: update qr package ([ecde23f](https://github.com/leifermendez/bot-whatsapp/commit/ecde23fdea65def209aa874af35a3f293e6b1a91)) + ### [0.1.8](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-pre...v0.1.8) (2023-01-10) ### [0.1.7](https://github.com/leifermendez/bot-whatsapp/compare/v0.1.7-pre...v0.1.7) (2023-01-10) diff --git a/package.json b/package.json index b15b835..a6e64e7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@bot-whatsapp/root", - "version": "0.1.8", + "version": "0.1.16", "description": "Bot de wahtsapp open source para MVP o pequeños negocios", "main": "app.js", "private": true, @@ -67,6 +67,7 @@ "devDependencies": { "@commitlint/cli": "^17.3.0", "@commitlint/config-conventional": "^17.3.0", + "@octokit/core": "^4.1.0", "@rollup/plugin-commonjs": "^23.0.2", "@rollup/plugin-json": "^5.0.1", "@rollup/plugin-node-resolve": "^15.0.1", 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 9528958..b205714 100644 --- a/packages/bot/package.json +++ b/packages/bot/package.json @@ -1,6 +1,6 @@ { "name": "@bot-whatsapp/bot", - "version": "0.0.52-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 fb918ee..18b8619 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@bot-whatsapp/cli", - "version": "0.0.59-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 2301645..7381d6a 100644 --- a/packages/contexts/package.json +++ b/packages/contexts/package.json @@ -1,6 +1,6 @@ { "name": "@bot-whatsapp/contexts", - "version": "0.0.1", + "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 26fac41..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.70-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 37349ba..80bbcd1 100644 --- a/packages/database/package.json +++ b/packages/database/package.json @@ -1,6 +1,6 @@ { "name": "@bot-whatsapp/database", - "version": "0.0.51-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/components/widgets/Hero.tsx b/packages/docs/src/components/widgets/Hero.tsx index 4700421..0e7cc5e 100644 --- a/packages/docs/src/components/widgets/Hero.tsx +++ b/packages/docs/src/components/widgets/Hero.tsx @@ -47,13 +47,20 @@ export default component$(() => { npm create bot-whatsapp@latest -
+
Ver documentación + + Ver video +
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()) + }) + + +``` + +--- + + En el ejemplo de abajo puedes ver como una sugerencia de como puede ser + utilizando variables de entorno + + +```js +const main = async () => { + const adapterDB = new MockAdapter() + const adapterFlow = createFlow([flowPrincipal]) + + const adapterProvider = createProvider(MetaProvider, { + jwtToken: process.env.JWTOKEN, //EAARBW3ZBGU0UBAACDjtQIzI8JuEa............. + numberId: process.env.NUMBER_ID, //103975305758520 + verifyToken: process.env.VERIFY_TOKEN, //LO_QUE_SEA + }) + + createBot({ + flow: adapterFlow, + provider: adapterProvider, + database: adapterDB, + }) +} + +main() +``` + +--- + +Luego de ejecutar el bot encontraras un mensaje en la consola similar al siguiente. +Donde podrás encontrar la URL para tu **webhook** + +```shell +$ npm start + +> bot-whatsapp-base-meta-memory@1.0.0 start +> node app.js + + +[meta]: Agregar esta url "WHEN A MESSAGE COMES IN" +[meta]: POST http://localhost:3000/webhook +[meta]: Más información en la documentacion +``` + +--- + +## ¿Ahora que hago? + +Podrás observar que el bot inicia un servicio HTTP (endpoint) que debe estar en un servidor en linea para que puedas conectarlo con Meta. + +--- + +### Opción 1: + +Puedes hacer pruebas en local atrevés de un servidor proxy tunnel.  +Descarga **[ngork](https://ngrok.com/download)** es una herramienta gratuita que nos ayudara con esto. + +![](https://i.imgur.com/TjjBtRh.png) + +--- + +Esto genera una URL en línea que podemos usar en la parte de **WebHook** de Meta + +![](https://i.imgur.com/NXHMDsf.png) + +--- + +![](https://i.imgur.com/tpov3D1.png) + +--- + +![](https://i.imgur.com/haRGylR.png) + +--- + +![](https://i.imgur.com/cMaIzeC.png) + +--- + +### Opción 2: + +Si ya tienes desplegado tu bot en un servidor tienes que obtener la IP publica o subdominio que te proporcionaron. **Ejemplo** si estas usando +[Railway](https://railway.app/) puedes ir a la seccion de ajustes y generar un subdominio. Ya tendriamos el **WebHook** +`https://base-twilio-memory-production.up.railway.app/twilio-hook` + +![](https://i.imgur.com/Yg2BYqB.png) + +--- + +![](https://i.imgur.com/dIbyEwp.png) + +--- + + diff --git a/packages/portal/package.json b/packages/portal/package.json index f32cf85..9fd3307 100644 --- a/packages/portal/package.json +++ b/packages/portal/package.json @@ -1,6 +1,6 @@ { "name": "@bot-whatsapp/portal", - "version": "0.0.9-alpha.0", + "version": "0.0.17-alpha.0", "description": "Portal WEB para escanear QR", "main": "./lib/portal.http.cjs", "scripts": { diff --git a/packages/provider/package.json b/packages/provider/package.json index ffd19f5..683ca66 100644 --- a/packages/provider/package.json +++ b/packages/provider/package.json @@ -1,6 +1,6 @@ { "name": "@bot-whatsapp/provider", - "version": "0.0.57-alpha.0", + "version": "0.0.65-alpha.0", "description": "Esto es el conector a Twilio, Meta, etc...", "main": "./lib/mock/index.cjs", "keywords": [], diff --git a/packages/provider/src/twilio/package.json b/packages/provider/src/twilio/package.json index dd0a9bf..e4bb7d4 100644 --- a/packages/provider/src/twilio/package.json +++ b/packages/provider/src/twilio/package.json @@ -1,5 +1,5 @@ { "dependencies": { - "twilio": "3.84.0" + "twilio": "3.84.1" } } diff --git a/scripts/github.js b/scripts/github.js new file mode 100644 index 0000000..9277d83 --- /dev/null +++ b/scripts/github.js @@ -0,0 +1,47 @@ +const process = require('node:process') +const { Octokit } = require('@octokit/core') + +const [PKG_ARG, GITHUB_TOKEN] = process.argv.slice(2) || [null] + +/** + * Publicar Release en Github + * @param {*} name + * @param {*} tag_name + * @param {*} auth + * @param {*} owner + * @param {*} repo + */ +const githubGithubRelease = async ( + name = '', + tag_name = '', + auth = '', + owner = 'codigoencasa', + repo = 'bot-whatsapp' +) => { + const octokit = new Octokit({ + auth, + }) + + await octokit.request(`POST /repos/${owner}/${repo}/releases`, { + owner, + repo, + tag_name, + name, + body: 'Description of the release', + draft: false, + prerelease: false, + generate_release_notes: true, + }) +} + +const main = async () => { + if (PKG_ARG) { + const githubToken = GITHUB_TOKEN ? GITHUB_TOKEN.split('=').at(1) : null + const pkgNumber = PKG_ARG ? PKG_ARG.split('=').at(1) : null + + if (pkgNumber) + await githubGithubRelease(`v${pkgNumber}`, pkgNumber, githubToken) + } +} + +main() diff --git a/starters/apps/base-baileys-json/Dockerfile b/starters/apps/base-baileys-json/Dockerfile index 14b07b2..7fb6d5d 100644 --- a/starters/apps/base-baileys-json/Dockerfile +++ b/starters/apps/base-baileys-json/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-json/README.md b/starters/apps/base-baileys-json/README.md index a31dc9f..13d73f2 100644 --- a/starters/apps/base-baileys-json/README.md +++ b/starters/apps/base-baileys-json/README.md @@ -5,26 +5,8 @@

-**Con esta librería, puedes construir flujos automatizados de conversación de manera agnóstica al proveedor de WhatsApp,** configurar respuestas automatizadas para preguntas frecuentes, recibir y responder mensajes de manera automatizada, y hacer un seguimiento de las interacciones con los clientes.  Además, puedes configurar fácilmente disparadores que te ayudaran a expandir las funcionalidades sin límites. **[Ver más informacion](https://bot-whatsapp.netlify.app/)** +**Con esta librería, puedes construir flujos automatizados de conversación de manera agnóstica al proveedor de WhatsApp,** configurar respuestas automatizadas para preguntas frecuentes, recibir y responder mensajes de manera automatizada, y hacer un seguimiento de las interacciones con los clientes.  Además, puedes configurar fácilmente disparadores que te ayudaran a expandir las funcionalidades sin límites. **[Ver documentación](https://bot-whatsapp.netlify.app/)** -```js -const main = async () => { - const adapterDB = new MockAdapter() - const adapterFlow = createFlow([flowPrincipal]) - - const adapterProvider = createProvider(BaileysProvider, { - accountSid: process.env.ACC_SID, - authToken: process.env.ACC_TOKEN, - vendorNumber: process.env.ACC_VENDOR, - }) - - createBot({ - flow: adapterFlow, - provider: adapterProvider, - database: adapterDB, - }) -} -``` ``` npm install diff --git a/starters/apps/base-baileys-json/app.js b/starters/apps/base-baileys-json/app.js index 99ecf65..b06887c 100644 --- a/starters/apps/base-baileys-json/app.js +++ b/starters/apps/base-baileys-json/app.js @@ -5,86 +5,90 @@ const { addKeyword, } = require('@bot-whatsapp/bot') -require('./server.http') - +const QRPortalWeb = require('@bot-whatsapp/portal') const BaileysProvider = require('@bot-whatsapp/provider/baileys') const JsonFileAdapter = require('@bot-whatsapp/database/json') -/** - * Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo: - * - * Menu Principal - * - SubMenu 1 - * - Submenu 1.1 - * - Submenu 2 - * - Submenu 2.1 - * - * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. - */ +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ + '📄 Aquí tenemos el flujo secundario', +]) -const flowBolsos2 = addKeyword(['bolsos2', '2']) - .addAnswer('🤯 *MUCHOS* bolsos ...') - .addAnswer('y mas bolsos... bla bla') +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 flowZapatos2 = addKeyword(['zapatos2', '2']) - .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.') - .addAnswer('y algunas otras cosas.') +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 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 flowGracias = addKeyword(['gracias', 'grac']).addAnswer( + [ + '🚀 Puedes aportar tu granito de arena a este proyecto', + '[*opencollective*] https://opencollective.com/bot-whatsapp', + '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez', + '[*patreon*] https://www.patreon.com/leifermendez', + '\n*2* Para siguiente paso.', + ], + null, + null, + [flowSecundario] +) -const 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] - ) - -/** - * 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 () => { const adapterDB = new JsonFileAdapter() const adapterFlow = createFlow([flowPrincipal]) const adapterProvider = createProvider(BaileysProvider) + createBot({ flow: adapterFlow, provider: adapterProvider, database: adapterDB, }) + + QRPortalWeb() } main() diff --git a/starters/apps/base-baileys-json/package.json b/starters/apps/base-baileys-json/package.json index 7693630..1ecbe56 100644 --- a/starters/apps/base-baileys-json/package.json +++ b/starters/apps/base-baileys-json/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-bailey-json", + "name": "base-bailey-json", "version": "1.0.0", "description": "", "main": "app.js", @@ -13,6 +13,7 @@ "@bot-whatsapp/cli": "latest", "@bot-whatsapp/database": "latest", "@bot-whatsapp/provider": "latest", + "@bot-whatsapp/portal": "latest", "@adiwajshing/baileys": "4.4.0", "mime-types": "2.1.35", "wa-sticker-formatter": "4.3.2" diff --git a/starters/apps/base-baileys-json/public/index.html b/starters/apps/base-baileys-json/public/index.html deleted file mode 100644 index 202b50c..0000000 --- a/starters/apps/base-baileys-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-baileys-json/server.http.js b/starters/apps/base-baileys-json/server.http.js deleted file mode 100644 index 217bd71..0000000 --- a/starters/apps/base-baileys-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-baileys-memory/Dockerfile b/starters/apps/base-baileys-memory/Dockerfile index 14b07b2..7fb6d5d 100644 --- a/starters/apps/base-baileys-memory/Dockerfile +++ b/starters/apps/base-baileys-memory/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-memory/README.md b/starters/apps/base-baileys-memory/README.md index a31dc9f..13d73f2 100644 --- a/starters/apps/base-baileys-memory/README.md +++ b/starters/apps/base-baileys-memory/README.md @@ -5,26 +5,8 @@

-**Con esta librería, puedes construir flujos automatizados de conversación de manera agnóstica al proveedor de WhatsApp,** configurar respuestas automatizadas para preguntas frecuentes, recibir y responder mensajes de manera automatizada, y hacer un seguimiento de las interacciones con los clientes.  Además, puedes configurar fácilmente disparadores que te ayudaran a expandir las funcionalidades sin límites. **[Ver más informacion](https://bot-whatsapp.netlify.app/)** +**Con esta librería, puedes construir flujos automatizados de conversación de manera agnóstica al proveedor de WhatsApp,** configurar respuestas automatizadas para preguntas frecuentes, recibir y responder mensajes de manera automatizada, y hacer un seguimiento de las interacciones con los clientes.  Además, puedes configurar fácilmente disparadores que te ayudaran a expandir las funcionalidades sin límites. **[Ver documentación](https://bot-whatsapp.netlify.app/)** -```js -const main = async () => { - const adapterDB = new MockAdapter() - const adapterFlow = createFlow([flowPrincipal]) - - const adapterProvider = createProvider(BaileysProvider, { - accountSid: process.env.ACC_SID, - authToken: process.env.ACC_TOKEN, - vendorNumber: process.env.ACC_VENDOR, - }) - - createBot({ - flow: adapterFlow, - provider: adapterProvider, - database: adapterDB, - }) -} -``` ``` npm install diff --git a/starters/apps/base-baileys-memory/app.js b/starters/apps/base-baileys-memory/app.js index 522bb6c..3d05e79 100644 --- a/starters/apps/base-baileys-memory/app.js +++ b/starters/apps/base-baileys-memory/app.js @@ -5,86 +5,90 @@ const { addKeyword, } = require('@bot-whatsapp/bot') -require('./server.http') - +const QRPortalWeb = require('@bot-whatsapp/portal') const BaileysProvider = require('@bot-whatsapp/provider/baileys') const MockAdapter = require('@bot-whatsapp/database/mock') -/** - * Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo: - * - * Menu Principal - * - SubMenu 1 - * - Submenu 1.1 - * - Submenu 2 - * - Submenu 2.1 - * - * Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal. - */ +const flowSecundario = addKeyword(['2', 'siguiente']).addAnswer([ + '📄 Aquí tenemos el flujo secundario', +]) -const flowBolsos2 = addKeyword(['bolsos2', '2']) - .addAnswer('🤯 *MUCHOS* bolsos ...') - .addAnswer('y mas bolsos... bla bla') +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 flowZapatos2 = addKeyword(['zapatos2', '2']) - .addAnswer('🤯 repito que tengo *MUCHOS* zapatos.') - .addAnswer('y algunas otras cosas.') +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 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 flowGracias = addKeyword(['gracias', 'grac']).addAnswer( + [ + '🚀 Puedes aportar tu granito de arena a este proyecto', + '[*opencollective*] https://opencollective.com/bot-whatsapp', + '[*buymeacoffee*] https://www.buymeacoffee.com/leifermendez', + '[*patreon*] https://www.patreon.com/leifermendez', + '\n*2* Para siguiente paso.', + ], + null, + null, + [flowSecundario] +) -const 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] - ) - -/** - * 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 () => { const adapterDB = new MockAdapter() const adapterFlow = createFlow([flowPrincipal]) const adapterProvider = createProvider(BaileysProvider) + createBot({ flow: adapterFlow, provider: adapterProvider, database: adapterDB, }) + + QRPortalWeb() } main() diff --git a/starters/apps/base-baileys-memory/package.json b/starters/apps/base-baileys-memory/package.json index 481e00a..2d01103 100644 --- a/starters/apps/base-baileys-memory/package.json +++ b/starters/apps/base-baileys-memory/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-bailey-memory", + "name": "base-bailey-memory", "version": "1.0.0", "description": "", "main": "app.js", @@ -13,6 +13,7 @@ "@bot-whatsapp/cli": "latest", "@bot-whatsapp/database": "latest", "@bot-whatsapp/provider": "latest", + "@bot-whatsapp/portal": "latest", "@adiwajshing/baileys": "4.4.0", "mime-types": "2.1.35", "wa-sticker-formatter": "4.3.2" diff --git a/starters/apps/base-baileys-memory/public/index.html b/starters/apps/base-baileys-memory/public/index.html deleted file mode 100644 index 202b50c..0000000 --- a/starters/apps/base-baileys-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-baileys-memory/server.http.js b/starters/apps/base-baileys-memory/server.http.js deleted file mode 100644 index 217bd71..0000000 --- a/starters/apps/base-baileys-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-baileys-mongo/Dockerfile b/starters/apps/base-baileys-mongo/Dockerfile index 14b07b2..7fb6d5d 100644 --- a/starters/apps/base-baileys-mongo/Dockerfile +++ b/starters/apps/base-baileys-mongo/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-mongo/app.js b/starters/apps/base-baileys-mongo/app.js index 277115d..2de3ad6 100644 --- a/starters/apps/base-baileys-mongo/app.js +++ b/starters/apps/base-baileys-mongo/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 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-baileys-mongo/package.json b/starters/apps/base-baileys-mongo/package.json index d828a88..c2f8624 100644 --- a/starters/apps/base-baileys-mongo/package.json +++ b/starters/apps/base-baileys-mongo/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-bailey-mongo", + "name": "base-bailey-mongo", "version": "1.0.0", "description": "", "main": "app.js", diff --git a/starters/apps/base-baileys-mongo/public/index.html b/starters/apps/base-baileys-mongo/public/index.html deleted file mode 100644 index 202b50c..0000000 --- a/starters/apps/base-baileys-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-baileys-mongo/server.http.js b/starters/apps/base-baileys-mongo/server.http.js deleted file mode 100644 index 217bd71..0000000 --- a/starters/apps/base-baileys-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-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/package.json b/starters/apps/base-baileys-mysql/package.json index 4a7b07a..7ecb417 100644 --- a/starters/apps/base-baileys-mysql/package.json +++ b/starters/apps/base-baileys-mysql/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-bailey-mysql", + "name": "base-bailey-mysql", "version": "1.0.0", "description": "", "main": "app.js", 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-json/package.json b/starters/apps/base-meta-json/package.json index 3243406..e034a53 100644 --- a/starters/apps/base-meta-json/package.json +++ b/starters/apps/base-meta-json/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-meta-json", + "name": "base-meta-json", "version": "1.0.0", "description": "", "main": "app.js", 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-memory/package.json b/starters/apps/base-meta-memory/package.json index f86e916..51da345 100644 --- a/starters/apps/base-meta-memory/package.json +++ b/starters/apps/base-meta-memory/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-meta-memory", + "name": "base-meta-memory", "version": "1.0.0", "description": "", "main": "app.js", 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-mongo/package.json b/starters/apps/base-meta-mongo/package.json index 94055f8..686ac63 100644 --- a/starters/apps/base-meta-mongo/package.json +++ b/starters/apps/base-meta-mongo/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-meta-mongo", + "name": "base-meta-mongo", "version": "1.0.0", "description": "", "main": "app.js", 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-meta-mysql/package.json b/starters/apps/base-meta-mysql/package.json index a9a71b0..45fe39e 100644 --- a/starters/apps/base-meta-mysql/package.json +++ b/starters/apps/base-meta-mysql/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-meta-mysql", + "name": "base-meta-mysql", "version": "1.0.0", "description": "", "main": "app.js", 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-json/package.json b/starters/apps/base-twilio-json/package.json index 4f5fdf4..15367a6 100644 --- a/starters/apps/base-twilio-json/package.json +++ b/starters/apps/base-twilio-json/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-twilio-json", + "name": "base-twilio-json", "version": "1.0.0", "description": "", "main": "app.js", @@ -11,7 +11,7 @@ "dependencies": { "body-parser": "^1.20.1", "polka": "^0.5.2", - "twilio": "3.84.0", + "twilio": "3.84.1", "@bot-whatsapp/bot": "latest", "@bot-whatsapp/cli": "latest", "@bot-whatsapp/database": "latest", 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-memory/package.json b/starters/apps/base-twilio-memory/package.json index e71ca5a..bf1501c 100644 --- a/starters/apps/base-twilio-memory/package.json +++ b/starters/apps/base-twilio-memory/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-twilio-memory", + "name": "base-twilio-memory", "version": "1.0.0", "description": "", "main": "app.js", @@ -11,7 +11,7 @@ "dependencies": { "body-parser": "^1.20.1", "polka": "^0.5.2", - "twilio": "3.84.0", + "twilio": "3.84.1", "@bot-whatsapp/bot": "latest", "@bot-whatsapp/cli": "latest", "@bot-whatsapp/database": "latest", 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-mongo/package.json b/starters/apps/base-twilio-mongo/package.json index 4a8c063..06bdef2 100644 --- a/starters/apps/base-twilio-mongo/package.json +++ b/starters/apps/base-twilio-mongo/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-twilio-mongo", + "name": "base-twilio-mongo", "version": "1.0.0", "description": "", "main": "app.js", @@ -11,7 +11,7 @@ "dependencies": { "body-parser": "^1.20.1", "polka": "^0.5.2", - "twilio": "3.84.0", + "twilio": "3.84.1", "@bot-whatsapp/bot": "latest", "@bot-whatsapp/cli": "latest", "@bot-whatsapp/database": "latest", 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-twilio-mysql/package.json b/starters/apps/base-twilio-mysql/package.json index d4c4d37..90149e2 100644 --- a/starters/apps/base-twilio-mysql/package.json +++ b/starters/apps/base-twilio-mysql/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-twilio-mysql", + "name": "base-twilio-mysql", "version": "1.0.0", "description": "", "main": "app.js", @@ -11,7 +11,7 @@ "dependencies": { "body-parser": "^1.20.1", "polka": "^0.5.2", - "twilio": "3.84.0", + "twilio": "3.84.1", "@bot-whatsapp/bot": "latest", "@bot-whatsapp/cli": "latest", "@bot-whatsapp/database": "latest", 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/package.json b/starters/apps/base-venom-json/package.json index 88d7f6f..4d10427 100644 --- a/starters/apps/base-venom-json/package.json +++ b/starters/apps/base-venom-json/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-venom-json", + "name": "base-venom-json", "version": "1.0.0", "description": "", "main": "app.js", 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/package.json b/starters/apps/base-venom-memory/package.json index dfe5408..57af4e1 100644 --- a/starters/apps/base-venom-memory/package.json +++ b/starters/apps/base-venom-memory/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-venom-memory", + "name": "base-venom-memory", "version": "1.0.0", "description": "", "main": "app.js", 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/package.json b/starters/apps/base-venom-mongo/package.json index 3b46613..0d84d2b 100644 --- a/starters/apps/base-venom-mongo/package.json +++ b/starters/apps/base-venom-mongo/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-venom-mongo", + "name": "base-venom-mongo", "version": "1.0.0", "description": "", "main": "app.js", 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/package.json b/starters/apps/base-venom-mysql/package.json index 670fd00..a029a70 100644 --- a/starters/apps/base-venom-mysql/package.json +++ b/starters/apps/base-venom-mysql/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-venom-mysql", + "name": "base-venom-mysql", "version": "1.0.0", "description": "", "main": "app.js", 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/package.json b/starters/apps/base-wweb-json/package.json index 9abc893..d55dfeb 100644 --- a/starters/apps/base-wweb-json/package.json +++ b/starters/apps/base-wweb-json/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-wweb-json", + "name": "base-wweb-json", "version": "1.0.0", "description": "", "main": "app.js", 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/package.json b/starters/apps/base-wweb-memory/package.json index fbf9400..d9c3ee0 100644 --- a/starters/apps/base-wweb-memory/package.json +++ b/starters/apps/base-wweb-memory/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-wweb-memory", + "name": "base-wweb-memory", "version": "1.0.0", "description": "", "main": "app.js", 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/package.json b/starters/apps/base-wweb-mongo/package.json index c58767a..e7ecebb 100644 --- a/starters/apps/base-wweb-mongo/package.json +++ b/starters/apps/base-wweb-mongo/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-wweb-mongo", + "name": "base-wweb-mongo", "version": "1.0.0", "description": "", "main": "app.js", 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/package.json b/starters/apps/base-wweb-mysql/package.json index b1c44ff..3ab34d5 100644 --- a/starters/apps/base-wweb-mysql/package.json +++ b/starters/apps/base-wweb-mysql/package.json @@ -1,5 +1,5 @@ { - "name": "bot-whatsapp-base-wweb-mysql", + "name": "base-wweb-mysql", "version": "1.0.0", "description": "", "main": "app.js", 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}`)) diff --git a/yarn.lock b/yarn.lock index 05e6737..cf802d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1100,6 +1100,7 @@ __metadata: dependencies: "@commitlint/cli": ^17.3.0 "@commitlint/config-conventional": ^17.3.0 + "@octokit/core": ^4.1.0 "@rollup/plugin-commonjs": ^23.0.2 "@rollup/plugin-json": ^5.0.1 "@rollup/plugin-node-resolve": ^15.0.1