mirror of
https://github.com/cheveguerra/bot-whatsapp.git
synced 2026-04-17 19:26:23 +00:00
Merge branch 'dev' into dev
This commit is contained in:
@@ -34,20 +34,45 @@ Se ejecuta el CLI (Command Line Interface) para ayudarte a crear un app-bot de e
|
||||
yarn run cli
|
||||
```
|
||||
|
||||
__Seguir instrucciones__
|
||||
En la consola encontraras los pasos a seguir
|
||||
Selecionas (mediante las flechas arriba y abajo) el proveedor que quieras usar y cuando estes sobre el presiona la barra de espacio, igualmente selecciona la base de datos que quieras usar.
|
||||
|
||||

|
||||
Se creó un subdirecorio con el nombre del proveedor y base de datos que seleccionaste, ejemplo: `base-bailey-mysql`
|
||||
|
||||
__Observaciones__
|
||||
Se debe tener en cuenta que si queremos utilizar una base de datos de MySQL, como muestra el ejemplo, será necesario actualizar las credenciales o crear previamente un usuario y una BBDD para que la conexión se realice correctamente.
|
||||
Las credenciales que usará la aplicación por defecto se encuentran en el fichero app.js y serán las siguientes:
|
||||
Dentro de ese directorio necesitas editar el archivo package.json y borrar las siguientes lineas:
|
||||
```
|
||||
"@bot-whatsapp/bot": "latest",
|
||||
"@bot-whatsapp/cli": "latest",
|
||||
"@bot-whatsapp/database": "latest",
|
||||
"@bot-whatsapp/provider": "latest",
|
||||
```
|
||||
|
||||
Cambiate al directorio creado ejemplo: `base-bailey-mysql`
|
||||
```
|
||||
cd base-baileys-mysql
|
||||
```
|
||||
Ejecuta los comandos:
|
||||
```
|
||||
npm install
|
||||
npm run pre-copy
|
||||
npm start
|
||||
```
|
||||
En el caso de MySql y Mongo es necesario especificar en app.js los datos de la conexión, ejemplo de MySql:
|
||||
```
|
||||
const BaileysProvider = require('@bot-whatsapp/provider/baileys')
|
||||
const MySQLAdapter = require('@bot-whatsapp/database/mysql')
|
||||
|
||||
/**
|
||||
* Declaramos las conexiones de MySQL
|
||||
*/
|
||||
const MYSQL_DB_HOST = 'localhost'
|
||||
const MYSQL_DB_USER = 'user'
|
||||
const MYSQL_DB_USER = 'usr'
|
||||
const MYSQL_DB_PASSWORD = 'pass'
|
||||
const MYSQL_DB_NAME = 'bot'
|
||||
```
|
||||
<!-- __Seguir instrucciones__
|
||||
En la consola encontraras los pasos a seguir -->
|
||||
|
||||

|
||||
|
||||
### 🤔 Preguntas frecuentes
|
||||
- ¿Como puedo hacer aportaciones de código en el proyecto?: [Ver Video](https://youtu.be/Lxt8Acob6aU)
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
CTX: Es el objeto que representa un mensaje, con opciones, id, ref
|
||||
messageInComming: Objeto entrante del provider {body, from,...}
|
||||
messageInComming: Objeto entrante del provider {body, from,to,...}
|
||||
73
MIGRATION.md
Normal file
73
MIGRATION.md
Normal file
@@ -0,0 +1,73 @@
|
||||
## MIGRANDO DE LA VERSIÓN 1 A LAS VERSIÓN 2
|
||||
|
||||
Pasar los flujos del bot de la versión 1 a la 2 es muy fácil, supongamos que en tu initial.json y response.json tienes un flujo como el siguiente:
|
||||
|
||||
```js
|
||||
//initial.json
|
||||
[
|
||||
{
|
||||
"keywords": [
|
||||
"hola",
|
||||
"ola",
|
||||
"alo"
|
||||
],
|
||||
"key": "hola"
|
||||
},
|
||||
{
|
||||
"keywords": ["adios", "bye"],
|
||||
"key": "adios"
|
||||
}
|
||||
]
|
||||
```
|
||||
y
|
||||
|
||||
```js
|
||||
//response.json
|
||||
{
|
||||
"hola":{
|
||||
"replyMessage":[
|
||||
"Gracias a ti! \n"
|
||||
],
|
||||
"media":null,
|
||||
"trigger":null
|
||||
},
|
||||
"adios":{
|
||||
"replyMessage":[
|
||||
"Que te vaya bien!!"
|
||||
],
|
||||
"media":null
|
||||
}
|
||||
}
|
||||
```
|
||||
En la versión 2, no es necesario tener esos 2 archivos, los flujos se ponen directamente en app.js de la siguiente manera:
|
||||
|
||||
```js
|
||||
//app.js
|
||||
/**
|
||||
* Declarando flujos principales.
|
||||
*/
|
||||
const flowHola = addKeyword(['hola', 'ola', 'alo']) //Aqui van los "keywords" de initial.json
|
||||
.addAnswer('Gracias a ti!') // Aquí va la respuesta del response.json, no es necesario especificar nuevamente los "keywords"
|
||||
.addAnswer('Siempre un placer!!!') // Y se pueden agregar varias respuestas encadenadas ... TANTAS com sean necesarias.
|
||||
|
||||
const flowAdios = addKeyword(['adios', 'bye']) //Aqui van los "keywords" de initial.json
|
||||
.addAnswer('Que te vaya bien!!') // Aquí va la respuesta del response.json, no es necesario especificar nuevamente los "keywords"
|
||||
.addAnswer('Hasta luego!', // Y se pueden agregar varias respuestas encadenadas ... TANTAS com sean necesarias.
|
||||
null, null,[...addChild(flowHijo1)] // Y se pueden agregar flujos HIJOS (Sub Menus). Los flujos hijos se tienen que definir ANTES que los principales.
|
||||
)
|
||||
|
||||
|
||||
##FALTAN EJEMPLOS DE ENVIOS DE IMAGENES!
|
||||
|
||||
|
||||
const main = async () => {
|
||||
const adapterDB = new MockAdapter()
|
||||
const adapterFlow = createFlow([flowHola, flowAdios]) // Aqui se crean los flujos.
|
||||
const adapterProvider = createProvider(BaileysProvider)
|
||||
createBot({
|
||||
flow: adapterFlow,
|
||||
provider: adapterProvider,
|
||||
database: adapterDB,
|
||||
})
|
||||
}
|
||||
```
|
||||
@@ -10,6 +10,7 @@
|
||||
"create-bot:rollup": "rollup --config ./packages/create-bot-whatsapp/rollup-create.config.js ",
|
||||
"bot:rollup": "rollup --config ./packages/bot/rollup-bot.config.js",
|
||||
"provider:rollup": "rollup --config ./packages/provider/rollup-provider.config.js ",
|
||||
"contexts:rollup": "rollup --config ./packages/contexts/rollup-contexts.config.js",
|
||||
"database:rollup": "rollup --config ./packages/database/rollup-database.config.js",
|
||||
"create-bot-whatsapp:rollup": "rollup --config ./packages/create-bot-whatsapp/rollup-create.config.js",
|
||||
"format:check": "prettier --check ./packages",
|
||||
@@ -17,7 +18,7 @@
|
||||
"fmt.staged": "pretty-quick --staged",
|
||||
"lint:check": "eslint ./packages",
|
||||
"lint:fix": "eslint --fix ./packages",
|
||||
"build": "yarn run cli:rollup && yarn run bot:rollup && yarn run provider:rollup && yarn run database:rollup && yarn run create-bot-whatsapp:rollup",
|
||||
"build": "yarn run cli:rollup && yarn run bot:rollup && yarn run provider:rollup && yarn run database:rollup && yarn run contexts:rollup && yarn run create-bot-whatsapp:rollup",
|
||||
"copy.lib": "node ./scripts/move.js",
|
||||
"test.unit": "node ./node_modules/uvu/bin.js packages test",
|
||||
"test.coverage": "node ./node_modules/c8/bin/c8.js npm run test.unit",
|
||||
@@ -37,6 +38,7 @@
|
||||
"packages/cli",
|
||||
"packages/database",
|
||||
"packages/provider",
|
||||
"packages/contexts",
|
||||
"packages/docs"
|
||||
],
|
||||
"keywords": [
|
||||
|
||||
@@ -58,13 +58,13 @@ class CoreClass {
|
||||
]
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {*} messageInComming
|
||||
* GLOSSARY.md
|
||||
* @param {*} messageCtxInComming
|
||||
* @returns
|
||||
*/
|
||||
handleMsg = async (messageInComming) => {
|
||||
logger.log(`[handleMsg]: `, messageInComming)
|
||||
const { body, from } = messageInComming
|
||||
handleMsg = async (messageCtxInComming) => {
|
||||
logger.log(`[handleMsg]: `, messageCtxInComming)
|
||||
const { body, from } = messageCtxInComming
|
||||
let msgToSend = []
|
||||
let fallBackFlag = false
|
||||
|
||||
@@ -92,12 +92,26 @@ class CoreClass {
|
||||
return refToContinue
|
||||
}
|
||||
|
||||
// 📄 Se encarga de revisar si el contexto del mensaje tiene callback y ejecutarlo
|
||||
const cbEveryCtx = (inRef) => {
|
||||
const indexFlow = this.flowClass.findIndexByRef(inRef)
|
||||
this.flowClass.allCallbacks[indexFlow].callback(
|
||||
messageCtxInComming,
|
||||
{
|
||||
fallBack,
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
// 📄 [options: callback]: Si se tiene un callback se ejecuta
|
||||
if (!fallBackFlag && refToContinue && prevMsg?.options?.callback) {
|
||||
const indexFlow = this.flowClass.findIndexByRef(refToContinue?.ref)
|
||||
this.flowClass.allCallbacks[indexFlow].callback(messageInComming, {
|
||||
fallBack,
|
||||
})
|
||||
if (!fallBackFlag) {
|
||||
if (refToContinue && prevMsg?.options?.callback) {
|
||||
cbEveryCtx(refToContinue?.ref)
|
||||
} else {
|
||||
for (const ite of this.flowClass.find(body)) {
|
||||
cbEveryCtx(ite?.ref)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 📄🤘(tiene return) [options: nested(array)]: Si se tiene flujos hijos los implementa
|
||||
|
||||
@@ -31,10 +31,7 @@ const addAnswer =
|
||||
nested: Array.isArray(nested) ? nested : [],
|
||||
})
|
||||
|
||||
const callback =
|
||||
typeof cb === 'function'
|
||||
? cb
|
||||
: () => console.log('Callback no definida')
|
||||
const callback = typeof cb === 'function' ? cb : () => null
|
||||
|
||||
const lastCtx = inCtx.hasOwnProperty('ctx') ? inCtx.ctx : inCtx
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bot-whatsapp/bot",
|
||||
"version": "0.0.24-alpha.0",
|
||||
"version": "0.0.25-alpha.0",
|
||||
"description": "",
|
||||
"main": "./lib/bundle.bot.cjs",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bot-whatsapp/cli",
|
||||
"version": "0.0.31-alpha.0",
|
||||
"version": "0.0.32-alpha.0",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"devDependencies": {
|
||||
|
||||
16
packages/contexts/package.json
Normal file
16
packages/contexts/package.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "@bot-whatsapp/contexts",
|
||||
"version": "0.0.1",
|
||||
"description": "",
|
||||
"main": "./lib/bundle.contexts.cjs",
|
||||
"files": [
|
||||
"./lib/"
|
||||
],
|
||||
"exports": {
|
||||
"./mock": "./lib/mock/index.cjs",
|
||||
"./dialogflow": "./lib/dialogflow/index.cjs"
|
||||
},
|
||||
"dependencies": {
|
||||
"@bot-whatsapp/bot": "*"
|
||||
}
|
||||
}
|
||||
24
packages/contexts/rollup-contexts.config.js
Normal file
24
packages/contexts/rollup-contexts.config.js
Normal file
@@ -0,0 +1,24 @@
|
||||
const banner = require('../../config/banner.rollup.json')
|
||||
const commonjs = require('@rollup/plugin-commonjs')
|
||||
const { join } = require('path')
|
||||
|
||||
module.exports = [
|
||||
{
|
||||
input: join(__dirname, 'src', 'mock', 'index.js'),
|
||||
output: {
|
||||
banner: banner['banner.output'].join(''),
|
||||
file: join(__dirname, 'lib', 'mock', 'index.cjs'),
|
||||
format: 'cjs',
|
||||
},
|
||||
plugins: [commonjs()],
|
||||
},
|
||||
{
|
||||
input: join(__dirname, 'src', 'dialogflow', 'index.js'),
|
||||
output: {
|
||||
banner: banner['banner.output'].join(''),
|
||||
file: join(__dirname, 'lib', 'dialogflow', 'index.cjs'),
|
||||
format: 'cjs',
|
||||
},
|
||||
plugins: [commonjs()],
|
||||
},
|
||||
]
|
||||
113
packages/contexts/src/dialogflow/dialogflow.class.js
Normal file
113
packages/contexts/src/dialogflow/dialogflow.class.js
Normal file
@@ -0,0 +1,113 @@
|
||||
const { CoreClass } = require('@bot-whatsapp/bot')
|
||||
const dialogflow = require('@google-cloud/dialogflow')
|
||||
const { existsSync, readFileSync } = require('fs')
|
||||
const { join } = require('path')
|
||||
|
||||
/**
|
||||
* Necesita extender de core.class
|
||||
* handleMsg(messageInComming) // const { body, from } = messageInComming
|
||||
*/
|
||||
|
||||
const GOOGLE_ACCOUNT_PATH = join(process.cwd(), 'google-key.json')
|
||||
|
||||
class DialogFlowContext extends CoreClass {
|
||||
projectId = null
|
||||
configuration = null
|
||||
sessionClient = null
|
||||
optionsDX = {
|
||||
language: 'es',
|
||||
}
|
||||
|
||||
constructor(_database, _provider, _optionsDX = {}) {
|
||||
super(null, _database, _provider)
|
||||
this.optionsDX = { ...this.optionsDX, ..._optionsDX }
|
||||
this.init()
|
||||
}
|
||||
|
||||
/**
|
||||
* Verificar conexión con servicio de DialogFlow
|
||||
*/
|
||||
init = () => {
|
||||
if (!existsSync(GOOGLE_ACCOUNT_PATH)) {
|
||||
console.log(`[ERROR]: No se encontro ${GOOGLE_ACCOUNT_PATH}`)
|
||||
/**
|
||||
* Emitir evento de error para que se mueste por consola dicinedo que no tiene el json
|
||||
* */
|
||||
}
|
||||
|
||||
const rawJson = readFileSync(GOOGLE_ACCOUNT_PATH, 'utf-8')
|
||||
const { project_id, private_key, client_email } = JSON.parse(rawJson)
|
||||
|
||||
this.projectId = project_id
|
||||
this.configuration = {
|
||||
credentials: {
|
||||
private_key,
|
||||
client_email,
|
||||
},
|
||||
}
|
||||
|
||||
this.sessionClient = new dialogflow.SessionsClient(this.configuration)
|
||||
}
|
||||
|
||||
/**
|
||||
* GLOSSARY.md
|
||||
* @param {*} messageCtxInComming
|
||||
* @returns
|
||||
*/
|
||||
handleMsg = async (messageCtxInComming) => {
|
||||
const languageCode = this.optionsDX.language
|
||||
const { from, body } = messageCtxInComming
|
||||
|
||||
let customPayload = {}
|
||||
|
||||
/**
|
||||
* 📄 Creamos session de contexto basado en el numero de la persona
|
||||
* para evitar este problema.
|
||||
* https://github.com/codigoencasa/bot-whatsapp/pull/140
|
||||
*/
|
||||
const session = this.sessionClient.projectAgentSessionPath(
|
||||
this.projectId,
|
||||
from
|
||||
)
|
||||
const reqDialog = {
|
||||
session,
|
||||
queryInput: {
|
||||
text: {
|
||||
text: body,
|
||||
languageCode,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
const [single] = (await this.sessionClient.detectIntent(reqDialog)) || [
|
||||
null,
|
||||
]
|
||||
|
||||
const { queryResult } = single
|
||||
|
||||
const msgPayload = queryResult?.fulfillmentMessages?.find(
|
||||
(a) => a.message === 'payload'
|
||||
)
|
||||
|
||||
// Revisamos si el dialogFlow tiene multimedia
|
||||
if (msgPayload && msgPayload?.payload) {
|
||||
const { fields } = msgPayload.payload
|
||||
const mapButtons = fields?.buttons?.listValue?.values.map((m) => {
|
||||
return m?.structValue?.fields?.body?.stringValue
|
||||
})
|
||||
customPayload = {
|
||||
media: fields?.media?.stringValue,
|
||||
buttons: mapButtons,
|
||||
}
|
||||
}
|
||||
|
||||
const ctxFromDX = {
|
||||
...customPayload,
|
||||
answer: queryResult?.fulfillmentText,
|
||||
}
|
||||
|
||||
this.sendFlow([ctxFromDX], from)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = DialogFlowContext
|
||||
14
packages/contexts/src/dialogflow/index.js
Normal file
14
packages/contexts/src/dialogflow/index.js
Normal file
@@ -0,0 +1,14 @@
|
||||
const DialogFlowClass = require('./dialogflow.class')
|
||||
|
||||
/**
|
||||
* Crear instancia de clase Bot
|
||||
* @param {*} args
|
||||
* @returns
|
||||
*/
|
||||
const createBotDialog = async ({ database, provider }) =>
|
||||
new DialogFlowClass(database, provider)
|
||||
|
||||
module.exports = {
|
||||
createBotDialog,
|
||||
DialogFlowClass,
|
||||
}
|
||||
14
packages/contexts/src/mock/index.js
Normal file
14
packages/contexts/src/mock/index.js
Normal file
@@ -0,0 +1,14 @@
|
||||
const MockClass = require('./mock.class')
|
||||
|
||||
/**
|
||||
* Crear instancia de clase Bot
|
||||
* @param {*} args
|
||||
* @returns
|
||||
*/
|
||||
const createBotMock = async ({ database, provider }) =>
|
||||
new MockClass(database, provider)
|
||||
|
||||
module.exports = {
|
||||
createBotMock,
|
||||
MockClass,
|
||||
}
|
||||
24
packages/contexts/src/mock/mock.class.js
Normal file
24
packages/contexts/src/mock/mock.class.js
Normal file
@@ -0,0 +1,24 @@
|
||||
const { CoreClass } = require('@bot-whatsapp/bot')
|
||||
/**
|
||||
* Necesita extender de core.class
|
||||
* handleMsg(messageInComming) // const { body, from } = messageInComming
|
||||
*/
|
||||
|
||||
class MockContext extends CoreClass {
|
||||
constructor(_database, _provider) {
|
||||
super(null, _database, _provider)
|
||||
}
|
||||
|
||||
init = () => {}
|
||||
|
||||
/**
|
||||
* GLOSSARY.md
|
||||
* @param {*} messageCtxInComming
|
||||
* @returns
|
||||
*/
|
||||
handleMsg = async () => {
|
||||
console.log('DEBUG:')
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = MockContext
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "create-bot-whatsapp",
|
||||
"version": "0.0.42-alpha.0",
|
||||
"version": "0.0.43-alpha.0",
|
||||
"description": "",
|
||||
"main": "./lib/bundle.create-bot-whatsapp.cjs",
|
||||
"files": [
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bot-whatsapp/database",
|
||||
"version": "0.0.23-alpha.0",
|
||||
"version": "0.0.24-alpha.0",
|
||||
"description": "Esto es el conector a mysql, pg, mongo",
|
||||
"main": "./lib/mock/index.cjs",
|
||||
"keywords": [],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@bot-whatsapp/provider",
|
||||
"version": "0.0.29-alpha.0",
|
||||
"version": "0.0.30-alpha.0",
|
||||
"description": "Esto es el conector a Twilio, Meta, etc...",
|
||||
"main": "./lib/mock/index.cjs",
|
||||
"keywords": [],
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
const { ProviderClass } = require('@bot-whatsapp/bot')
|
||||
const pino = require('pino')
|
||||
const mime = require('mime-types')
|
||||
const fs = require('fs')
|
||||
const { existsSync, createWriteStream } = require('fs')
|
||||
const { Console } = require('console')
|
||||
|
||||
const {
|
||||
default: makeWASocket,
|
||||
useMultiFileAuthState,
|
||||
@@ -12,6 +14,10 @@ const {
|
||||
baileyIsValidNumber,
|
||||
} = require('./utils')
|
||||
|
||||
const logger = new Console({
|
||||
stdout: createWriteStream(`${process.cwd()}/baileys.log`),
|
||||
})
|
||||
|
||||
/**
|
||||
* ⚙️ BaileysProvider: Es una clase tipo adaptor
|
||||
* que extiende clases de ProviderClass (la cual es como interfaz para sber que funciones rqueridas)
|
||||
@@ -27,7 +33,7 @@ class BaileysProvider extends ProviderClass {
|
||||
/**
|
||||
* Iniciar todo Bailey
|
||||
*/
|
||||
async initBailey() {
|
||||
initBailey = async () => {
|
||||
const { state, saveCreds } = await useMultiFileAuthState('sessions')
|
||||
|
||||
try {
|
||||
@@ -49,7 +55,14 @@ class BaileysProvider extends ProviderClass {
|
||||
}
|
||||
)
|
||||
} catch (e) {
|
||||
this.emit('error', e)
|
||||
logger.log(e)
|
||||
this.emit('auth_failure', [
|
||||
`Algo inesperado ha ocurrido NO entres en pánico`,
|
||||
`Reinicia el BOT`,
|
||||
`Tambien puedes mirar un log que se ha creado baileys.log`,
|
||||
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
|
||||
`(Puedes abrir un ISSUE) https://github.com/codigoencasa/bot-whatsapp/issues/new/choose`,
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,7 +100,8 @@ class BaileysProvider extends ProviderClass {
|
||||
},
|
||||
{
|
||||
event: 'messages.upsert',
|
||||
func: ({ messages }) => {
|
||||
func: ({ messages, type }) => {
|
||||
if (type !== 'notify') return
|
||||
const [messageCtx] = messages
|
||||
let payload = {
|
||||
...messageCtx,
|
||||
@@ -122,9 +136,10 @@ class BaileysProvider extends ProviderClass {
|
||||
* @example await sendMessage('+XXXXXXXXXXX', 'https://dominio.com/imagen.jpg' | 'img/imagen.jpg')
|
||||
*/
|
||||
|
||||
sendMedia = async (number, imageUrl) => {
|
||||
sendMedia = async (number, imageUrl, text) => {
|
||||
await this.vendor.sendMessage(number, {
|
||||
image: { url: imageUrl },
|
||||
text,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -153,21 +168,6 @@ class BaileysProvider extends ProviderClass {
|
||||
sendText = async (number, message) => {
|
||||
return this.vendor.sendMessage(number, { text: message })
|
||||
}
|
||||
/**
|
||||
* TODO: Necesita terminar de implementar el sendMedia y sendButton guiarse:
|
||||
* https://github.com/leifermendez/bot-whatsapp/blob/4e0fcbd8347f8a430adb43351b5415098a5d10df/packages/provider/src/web-whatsapp/index.js#L165
|
||||
* @param {string} number
|
||||
* @param {string} message
|
||||
* @example await sendMessage('+XXXXXXXXXXX', 'Hello World')
|
||||
*/
|
||||
sendMessage = async (numberIn, message, { options }) => {
|
||||
const number = baileyCleanNumber(numberIn)
|
||||
|
||||
// if (options?.buttons?.length)
|
||||
// return this.sendButtons(number, message, options.buttons)
|
||||
if (options?.media) return this.sendMedia(number, options.media)
|
||||
return this.sendText(number, message)
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -177,7 +177,7 @@ class BaileysProvider extends ProviderClass {
|
||||
*/
|
||||
|
||||
sendFile = async (number, filePath) => {
|
||||
if (fs.existsSync(filePath)) {
|
||||
if (existsSync(filePath)) {
|
||||
const mimeType = mime.lookup(filePath)
|
||||
const numberClean = number.replace('+', '')
|
||||
const fileName = filePath.split('/').pop()
|
||||
@@ -211,6 +211,23 @@ class BaileysProvider extends ProviderClass {
|
||||
|
||||
await this.vendor.sendMessage(`${numberClean}@c.us`, buttonMessage)
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: Necesita terminar de implementar el sendMedia y sendButton guiarse:
|
||||
* https://github.com/leifermendez/bot-whatsapp/blob/4e0fcbd8347f8a430adb43351b5415098a5d10df/packages/provider/src/web-whatsapp/index.js#L165
|
||||
* @param {string} number
|
||||
* @param {string} message
|
||||
* @example await sendMessage('+XXXXXXXXXXX', 'Hello World')
|
||||
*/
|
||||
sendMessage = async (numberIn, message, { options }) => {
|
||||
const number = baileyCleanNumber(numberIn)
|
||||
|
||||
// if (options?.buttons?.length)
|
||||
// return this.sendButtons(number, message, options.buttons)
|
||||
if (options?.media)
|
||||
return this.sendMedia(number, options.media, message)
|
||||
return this.sendText(number, message)
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = BaileysProvider
|
||||
|
||||
@@ -1,11 +1,19 @@
|
||||
const { ProviderClass } = require('@bot-whatsapp/bot')
|
||||
const venom = require('venom-bot')
|
||||
const { createWriteStream } = require('fs')
|
||||
const { Console } = require('console')
|
||||
|
||||
const {
|
||||
venomCleanNumber,
|
||||
venomGenerateImage,
|
||||
venomisValidNumber,
|
||||
venomDownloadMedia,
|
||||
} = require('./utils')
|
||||
|
||||
const logger = new Console({
|
||||
stdout: createWriteStream(`${process.cwd()}/venom.log`),
|
||||
})
|
||||
|
||||
/**
|
||||
* ⚙️ VenomProvider: Es una clase tipo adaptor
|
||||
* que extiende clases de ProviderClass (la cual es como interfaz para sber que funciones rqueridas)
|
||||
@@ -34,13 +42,13 @@ class VenomProvider extends ProviderClass {
|
||||
)
|
||||
this.vendor = client
|
||||
} catch (e) {
|
||||
logger.log(e)
|
||||
this.emit('auth_failure', {
|
||||
instructions: [
|
||||
`Ocurrio un error con la inicializacion de venom`,
|
||||
`Necesitas ayuda: https://link.codigoencasa.com/DISCORD`,
|
||||
`(Puedes abrir un ISSUE) https://github.com/leifermendez/bot-whatsapp/issues/new/choose`,
|
||||
``,
|
||||
`${e?.message}`,
|
||||
`Reinicia el BOT`,
|
||||
`Tambien puedes mirar un log que se ha creado venom.log`,
|
||||
`(Puedes abrir un ISSUE) https://github.com/codigoencasa/bot-whatsapp/issues/new/choose`,
|
||||
],
|
||||
})
|
||||
}
|
||||
@@ -97,6 +105,19 @@ class VenomProvider extends ProviderClass {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Enviar imagen o multimedia
|
||||
* @param {*} number
|
||||
* @param {*} mediaInput
|
||||
* @param {*} message
|
||||
* @returns
|
||||
*/
|
||||
sendMedia = async (number, mediaInput, message) => {
|
||||
if (!mediaInput) throw new Error(`NO_SE_ENCONTRO: ${mediaInput}`)
|
||||
const fileDownloaded = await venomDownloadMedia(mediaInput)
|
||||
return this.vendor.sendImage(number, fileDownloaded, '.', message)
|
||||
}
|
||||
|
||||
/**
|
||||
* Enviar mensaje al usuario
|
||||
* @param {*} userId
|
||||
@@ -108,7 +129,8 @@ class VenomProvider extends ProviderClass {
|
||||
const number = venomCleanNumber(userId)
|
||||
if (options?.buttons?.length)
|
||||
return this.sendButtons(number, message, options.buttons)
|
||||
if (options?.media) return this.sendMedia(number, options.media)
|
||||
if (options?.media)
|
||||
return this.sendMedia(number, options.media, message)
|
||||
return this.vendor.sendText(number, message)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
const { writeFile } = require('fs')
|
||||
const { writeFile, createWriteStream } = require('fs')
|
||||
const { tmpdir } = require('os')
|
||||
const http = require('http')
|
||||
const https = require('https')
|
||||
const combineImage = require('combine-image')
|
||||
|
||||
const venomCleanNumber = (number, full = false) => {
|
||||
@@ -35,9 +38,43 @@ const venomGenerateImage = async (base) => {
|
||||
cleanImage.write(PATH_QR)
|
||||
}
|
||||
|
||||
/**
|
||||
* Incompleta
|
||||
* Descargar archivo multimedia para enviar
|
||||
* @param {*} url
|
||||
* @returns
|
||||
*/
|
||||
const venomDownloadMedia = (url) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const ext = url.split('.').pop()
|
||||
const checkProtocol = url.includes('https:')
|
||||
const handleHttp = checkProtocol ? https : http
|
||||
const name = `tmp-${Date.now()}.${ext}`
|
||||
const fullPath = `${tmpdir()}/${name}`
|
||||
const file = createWriteStream(fullPath)
|
||||
handleHttp.get(url, function (response) {
|
||||
response.pipe(file)
|
||||
file.on('finish', function () {
|
||||
file.close()
|
||||
resolve(fullPath)
|
||||
})
|
||||
file.on('error', function () {
|
||||
console.log('errro')
|
||||
file.close()
|
||||
reject(null)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
const venomisValidNumber = (rawNumber) => {
|
||||
const regexGroup = /\@g.us\b/gm
|
||||
const exist = rawNumber.match(regexGroup)
|
||||
return !exist
|
||||
}
|
||||
module.exports = { venomCleanNumber, venomGenerateImage, venomisValidNumber }
|
||||
module.exports = {
|
||||
venomCleanNumber,
|
||||
venomGenerateImage,
|
||||
venomisValidNumber,
|
||||
venomDownloadMedia,
|
||||
}
|
||||
|
||||
@@ -15,4 +15,5 @@ Promise.all([
|
||||
copyLibPkg('bot', appDir),
|
||||
copyLibPkg('database', appDir),
|
||||
copyLibPkg('provider', appDir),
|
||||
copyLibPkg('contexts', appDir),
|
||||
]).then(() => console.log('Todas las librerías copiadas'))
|
||||
|
||||
@@ -1,14 +1,24 @@
|
||||
### CHATBOT Whatsapp
|
||||
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp crear flujos para automatizar tareas en tu negocio o procesos repetitivos
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
|
||||
|
||||
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
|
||||
Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
|
||||
- Bienvenido a mi tienda
|
||||
- Como puedo ayudarte?
|
||||
- Tengo: Zapatos Bolsos etc..
|
||||
- ¿Como puedo ayudarte?
|
||||
- Tengo: Zapatos, Bolsos etc..
|
||||
|
||||
__Iniciar__
|
||||
|
||||
Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
|
||||
|
||||
Menu Principal
|
||||
- SubMenu 1
|
||||
- Submenu 1.1
|
||||
- Submenu 2
|
||||
- Submenu 2.1
|
||||
|
||||
Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
|
||||
```
|
||||
npm install
|
||||
npm start
|
||||
|
||||
@@ -10,7 +10,15 @@ const BaileysProvider = require('@bot-whatsapp/provider/baileys')
|
||||
const MockAdapter = require('@bot-whatsapp/database/mock')
|
||||
|
||||
/**
|
||||
* Declarando flujo hijo
|
||||
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||
*
|
||||
* Menu Principal
|
||||
* - SubMenu 1
|
||||
* - Submenu 1.1
|
||||
* - Submenu 2
|
||||
* - Submenu 2.1
|
||||
*
|
||||
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
*/
|
||||
|
||||
const flowBolsos2 = addKeyword(['bolsos2', '2'])
|
||||
@@ -21,11 +29,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
|
||||
const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
|
||||
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
|
||||
['Manda:', '*(2) Zapatos2*', 'para mas información'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -35,11 +43,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
[...addChild(flowZapatos2)]
|
||||
)
|
||||
|
||||
const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
|
||||
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
|
||||
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -52,12 +60,12 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer('Hola, bienvenido a mi tienda')
|
||||
.addAnswer('Como puedo ayudarte?')
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer(
|
||||
['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
|
||||
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
### CHATBOT Whatsapp
|
||||
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp crear flujos para automatizar tareas en tu negocio o procesos repetitivos
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
|
||||
|
||||
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
|
||||
Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
|
||||
- Bienvenido a mi tienda
|
||||
- Como puedo ayudarte?
|
||||
- Tengo: Zapatos Bolsos etc..
|
||||
- ¿Como puedo ayudarte?
|
||||
- Tengo: Zapatos, Bolsos etc..
|
||||
|
||||
__Iniciar__
|
||||
Recuerda configurar los parametros de conexion de la base de datos
|
||||
|
||||
Recuerda configurar los parametros de conexión de la base de datos:
|
||||
```js
|
||||
// app.js
|
||||
|
||||
@@ -16,6 +17,16 @@ const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
|
||||
const MONGO_DB_NAME = 'db_bot'
|
||||
```
|
||||
|
||||
Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
|
||||
|
||||
Menu Principal
|
||||
- SubMenu 1
|
||||
- Submenu 1.1
|
||||
- Submenu 2
|
||||
- Submenu 2.1
|
||||
|
||||
Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
|
||||
```
|
||||
npm install
|
||||
npm start
|
||||
|
||||
@@ -12,12 +12,22 @@ const MongoAdapter = require('@bot-whatsapp/database/mongo')
|
||||
/**
|
||||
* Declaramos las conexiones de Mongo
|
||||
*/
|
||||
|
||||
const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
|
||||
const MONGO_DB_NAME = 'db_bot'
|
||||
|
||||
/**
|
||||
* Declarando flujo hijo
|
||||
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||
*
|
||||
* Menu Principal
|
||||
* - SubMenu 1
|
||||
* - Submenu 1.1
|
||||
* - Submenu 2
|
||||
* - Submenu 2.1
|
||||
*
|
||||
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
*/
|
||||
|
||||
const flowBolsos2 = addKeyword(['bolsos2', '2'])
|
||||
.addAnswer('🤯 *MUCHOS* bolsos ...')
|
||||
.addAnswer('y mas bolsos... bla bla')
|
||||
@@ -26,11 +36,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
|
||||
const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
|
||||
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
|
||||
['Manda:', '*(2) Zapatos2*', 'para mas información'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -40,11 +50,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
[...addChild(flowZapatos2)]
|
||||
)
|
||||
|
||||
const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
|
||||
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
|
||||
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -57,12 +67,12 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer('Hola, bienvenido a mi tienda')
|
||||
.addAnswer('Como puedo ayudarte?')
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer(
|
||||
['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
|
||||
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
### CHATBOT Whatsapp
|
||||
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp crear flujos para automatizar tareas en tu negocio o procesos repetitivos
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
|
||||
|
||||
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
|
||||
Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
|
||||
- Bienvenido a mi tienda
|
||||
- Como puedo ayudarte?
|
||||
- Tengo: Zapatos Bolsos etc..
|
||||
- ¿Como puedo ayudarte?
|
||||
- Tengo: Zapatos, Bolsos etc..
|
||||
|
||||
__Iniciar__
|
||||
Recuerda configurar los parametros de conexion de la base de datos
|
||||
|
||||
Recuerda configurar los parametros de conexión de la base de datos
|
||||
```js
|
||||
// app.js
|
||||
|
||||
@@ -17,6 +18,16 @@ const MYSQL_DB_USER = 'user'
|
||||
const MYSQL_DB_PASSWORD = 'pass'
|
||||
const MYSQL_DB_NAME = 'bot'
|
||||
```
|
||||
Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
|
||||
|
||||
Menu Principal
|
||||
- SubMenu 1
|
||||
- Submenu 1.1
|
||||
- Submenu 2
|
||||
- Submenu 2.1
|
||||
|
||||
Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
|
||||
|
||||
```
|
||||
npm install
|
||||
|
||||
@@ -13,12 +13,20 @@ const MySQLAdapter = require('@bot-whatsapp/database/mysql')
|
||||
* Declaramos las conexiones de MySQL
|
||||
*/
|
||||
const MYSQL_DB_HOST = 'localhost'
|
||||
const MYSQL_DB_USER = 'user'
|
||||
const MYSQL_DB_USER = 'usr'
|
||||
const MYSQL_DB_PASSWORD = 'pass'
|
||||
const MYSQL_DB_NAME = 'bot'
|
||||
|
||||
/**
|
||||
* Declarando flujo hijo
|
||||
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||
*
|
||||
* Menu Principal
|
||||
* - SubMenu 1
|
||||
* - Submenu 1.1
|
||||
* - Submenu 2
|
||||
* - Submenu 2.1
|
||||
*
|
||||
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
*/
|
||||
|
||||
const flowBolsos2 = addKeyword(['bolsos2', '2'])
|
||||
@@ -29,11 +37,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
|
||||
const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
|
||||
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
|
||||
['Manda:', '*(2) Zapatos2*', 'para mas información'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -43,11 +51,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
[...addChild(flowZapatos2)]
|
||||
)
|
||||
|
||||
const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
|
||||
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
|
||||
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -60,12 +68,12 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer('Hola, bienvenido a mi tienda')
|
||||
.addAnswer('Como puedo ayudarte?')
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer(
|
||||
['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
|
||||
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
|
||||
@@ -1,14 +1,24 @@
|
||||
### CHATBOT Whatsapp
|
||||
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp crear flujos para automatizar tareas en tu negocio o procesos repetitivos
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
|
||||
|
||||
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
|
||||
Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
|
||||
- Bienvenido a mi tienda
|
||||
- Como puedo ayudarte?
|
||||
- Tengo: Zapatos Bolsos etc..
|
||||
- ¿Como puedo ayudarte?
|
||||
- Tengo: Zapatos, Bolsos etc..
|
||||
|
||||
__Iniciar__
|
||||
|
||||
Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
|
||||
|
||||
Menu Principal
|
||||
- SubMenu 1
|
||||
- Submenu 1.1
|
||||
- Submenu 2
|
||||
- Submenu 2.1
|
||||
|
||||
Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
|
||||
```
|
||||
npm install
|
||||
npm start
|
||||
|
||||
@@ -10,7 +10,15 @@ const TwilioProvider = require('@bot-whatsapp/provider/twilio')
|
||||
const MockAdapter = require('@bot-whatsapp/database/mock')
|
||||
|
||||
/**
|
||||
* Declarando flujo hijo
|
||||
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||
*
|
||||
* Menu Principal
|
||||
* - SubMenu 1
|
||||
* - Submenu 1.1
|
||||
* - Submenu 2
|
||||
* - Submenu 2.1
|
||||
*
|
||||
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
*/
|
||||
|
||||
const flowBolsos2 = addKeyword(['bolsos2', '2'])
|
||||
@@ -21,11 +29,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
|
||||
const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
|
||||
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
|
||||
['Manda:', '*(2) Zapatos2*', 'para mas información'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -35,11 +43,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
[...addChild(flowZapatos2)]
|
||||
)
|
||||
|
||||
const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
|
||||
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
|
||||
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -52,18 +60,17 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer('Hola, bienvenido a mi tienda')
|
||||
.addAnswer('Como puedo ayudarte?')
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer(
|
||||
['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
|
||||
['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)
|
||||
console.log(ctx['_data']['notifyName'])
|
||||
},
|
||||
[...addChild(flowBolsos), ...addChild(flowZapatos)]
|
||||
)
|
||||
|
||||
@@ -1,14 +1,24 @@
|
||||
### CHATBOT Whatsapp
|
||||
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp crear flujos para automatizar tareas en tu negocio o procesos repetitivos
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
|
||||
|
||||
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
|
||||
Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
|
||||
- Bienvenido a mi tienda
|
||||
- Como puedo ayudarte?
|
||||
- Tengo: Zapatos Bolsos etc..
|
||||
- ¿Como puedo ayudarte?
|
||||
- Tengo: Zapatos, Bolsos etc..
|
||||
|
||||
__Iniciar__
|
||||
|
||||
Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
|
||||
|
||||
Menu Principal
|
||||
- SubMenu 1
|
||||
- Submenu 1.1
|
||||
- Submenu 2
|
||||
- Submenu 2.1
|
||||
|
||||
Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
|
||||
```
|
||||
npm install
|
||||
npm start
|
||||
|
||||
@@ -10,7 +10,15 @@ const TwilioProvider = require('@bot-whatsapp/provider/twilio')
|
||||
const MockAdapter = require('@bot-whatsapp/database/mock')
|
||||
|
||||
/**
|
||||
* Declarando flujo hijo
|
||||
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||
*
|
||||
* Menu Principal
|
||||
* - SubMenu 1
|
||||
* - Submenu 1.1
|
||||
* - Submenu 2
|
||||
* - Submenu 2.1
|
||||
*
|
||||
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
*/
|
||||
|
||||
const flowBolsos2 = addKeyword(['bolsos2', '2'])
|
||||
@@ -21,11 +29,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
|
||||
const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
|
||||
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
|
||||
['Manda:', '*(2) Zapatos2*', 'para mas información'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -35,11 +43,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
[...addChild(flowZapatos2)]
|
||||
)
|
||||
|
||||
const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
|
||||
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
|
||||
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -52,12 +60,12 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer('Hola, bienvenido a mi tienda')
|
||||
.addAnswer('Como puedo ayudarte?')
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer(
|
||||
['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
|
||||
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
### CHATBOT Whatsapp
|
||||
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp crear flujos para automatizar tareas en tu negocio o procesos repetitivos
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
|
||||
|
||||
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
|
||||
Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
|
||||
- Bienvenido a mi tienda
|
||||
- Como puedo ayudarte?
|
||||
- Tengo: Zapatos Bolsos etc..
|
||||
- ¿Como puedo ayudarte?
|
||||
- Tengo: Zapatos, Bolsos etc..
|
||||
|
||||
__Iniciar__
|
||||
|
||||
Recuerda configurar los parametros de conexion de la base de datos
|
||||
```js
|
||||
// app.js
|
||||
@@ -16,6 +17,16 @@ const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
|
||||
const MONGO_DB_NAME = 'db_bot'
|
||||
```
|
||||
|
||||
Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
|
||||
|
||||
Menu Principal
|
||||
- SubMenu 1
|
||||
- Submenu 1.1
|
||||
- Submenu 2
|
||||
- Submenu 2.1
|
||||
|
||||
Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
|
||||
```
|
||||
npm install
|
||||
npm start
|
||||
|
||||
@@ -12,11 +12,20 @@ const MongoAdapter = require('@bot-whatsapp/database/mongo')
|
||||
/**
|
||||
* Declaramos las conexiones de Mongo
|
||||
*/
|
||||
|
||||
const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
|
||||
const MONGO_DB_NAME = 'db_bot'
|
||||
|
||||
/**
|
||||
* Declarando flujo hijo
|
||||
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||
*
|
||||
* Menu Principal
|
||||
* - SubMenu 1
|
||||
* - Submenu 1.1
|
||||
* - Submenu 2
|
||||
* - Submenu 2.1
|
||||
*
|
||||
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
*/
|
||||
|
||||
const flowBolsos2 = addKeyword(['bolsos2', '2'])
|
||||
@@ -27,11 +36,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
|
||||
const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
|
||||
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
|
||||
['Manda:', '*(2) Zapatos2*', 'para mas información'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -41,11 +50,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
[...addChild(flowZapatos2)]
|
||||
)
|
||||
|
||||
const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
|
||||
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
|
||||
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -58,12 +67,12 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer('Hola, bienvenido a mi tienda')
|
||||
.addAnswer('Como puedo ayudarte?')
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer(
|
||||
['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
|
||||
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
### CHATBOT Whatsapp
|
||||
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp crear flujos para automatizar tareas en tu negocio o procesos repetitivos
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
|
||||
|
||||
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
|
||||
Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
|
||||
- Bienvenido a mi tienda
|
||||
- Como puedo ayudarte?
|
||||
- Tengo: Zapatos Bolsos etc..
|
||||
- ¿Como puedo ayudarte?
|
||||
- Tengo: Zapatos, Bolsos etc..
|
||||
|
||||
__Iniciar__
|
||||
Recuerda configurar los parametros de conexion de la base de datos
|
||||
|
||||
Recuerda configurar los parametros de conexión de la base de datos
|
||||
```js
|
||||
// app.js
|
||||
|
||||
@@ -17,6 +18,15 @@ const MYSQL_DB_USER = 'user'
|
||||
const MYSQL_DB_PASSWORD = 'pass'
|
||||
const MYSQL_DB_NAME = 'bot'
|
||||
```
|
||||
Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
|
||||
|
||||
Menu Principal
|
||||
- SubMenu 1
|
||||
- Submenu 1.1
|
||||
- Submenu 2
|
||||
- Submenu 2.1
|
||||
|
||||
Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
|
||||
```
|
||||
npm install
|
||||
|
||||
@@ -12,13 +12,22 @@ const MySQLAdapter = require('@bot-whatsapp/database/mysql')
|
||||
/**
|
||||
* Declaramos las conexiones de MySQL
|
||||
*/
|
||||
|
||||
const MYSQL_DB_HOST = 'localhost'
|
||||
const MYSQL_DB_USER = 'user'
|
||||
const MYSQL_DB_PASSWORD = 'pass'
|
||||
const MYSQL_DB_NAME = 'bot'
|
||||
|
||||
/**
|
||||
* Declarando flujo hijo
|
||||
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||
*
|
||||
* Menu Principal
|
||||
* - SubMenu 1
|
||||
* - Submenu 1.1
|
||||
* - Submenu 2
|
||||
* - Submenu 2.1
|
||||
*
|
||||
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
*/
|
||||
|
||||
const flowBolsos2 = addKeyword(['bolsos2', '2'])
|
||||
@@ -29,11 +38,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
|
||||
const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
|
||||
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
|
||||
['Manda:', '*(2) Zapatos2*', 'para mas información'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -43,11 +52,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
[...addChild(flowZapatos2)]
|
||||
)
|
||||
|
||||
const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
|
||||
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
|
||||
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -60,12 +69,12 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer('Hola, bienvenido a mi tienda')
|
||||
.addAnswer('Como puedo ayudarte?')
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer(
|
||||
['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
|
||||
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
|
||||
@@ -1,14 +1,24 @@
|
||||
### CHATBOT Whatsapp
|
||||
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp crear flujos para automatizar tareas en tu negocio o procesos repetitivos
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
|
||||
|
||||
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
|
||||
Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
|
||||
- Bienvenido a mi tienda
|
||||
- Como puedo ayudarte?
|
||||
- Tengo: Zapatos Bolsos etc..
|
||||
- ¿Como puedo ayudarte?
|
||||
- Tengo: Zapatos, Bolsos etc..
|
||||
|
||||
__Iniciar__
|
||||
|
||||
Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
|
||||
|
||||
Menu Principal
|
||||
- SubMenu 1
|
||||
- Submenu 1.1
|
||||
- Submenu 2
|
||||
- Submenu 2.1
|
||||
|
||||
Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
|
||||
```
|
||||
npm install
|
||||
npm start
|
||||
|
||||
@@ -10,7 +10,15 @@ const VenomProvider = require('@bot-whatsapp/provider/venom')
|
||||
const MockAdapter = require('@bot-whatsapp/database/mock')
|
||||
|
||||
/**
|
||||
* Declarando flujo hijo
|
||||
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||
*
|
||||
* Menu Principal
|
||||
* - SubMenu 1
|
||||
* - Submenu 1.1
|
||||
* - Submenu 2
|
||||
* - Submenu 2.1
|
||||
*
|
||||
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
*/
|
||||
|
||||
const flowBolsos2 = addKeyword(['bolsos2', '2'])
|
||||
@@ -21,11 +29,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
|
||||
const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
|
||||
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
|
||||
['Manda:', '*(2) Zapatos2*', 'para mas información'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -35,11 +43,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
[...addChild(flowZapatos2)]
|
||||
)
|
||||
|
||||
const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
|
||||
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
|
||||
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -52,12 +60,12 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer('Hola, bienvenido a mi tienda')
|
||||
.addAnswer('Como puedo ayudarte?')
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer(
|
||||
['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
|
||||
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
### CHATBOT Whatsapp
|
||||
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp crear flujos para automatizar tareas en tu negocio o procesos repetitivos
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
|
||||
|
||||
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
|
||||
Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
|
||||
- Bienvenido a mi tienda
|
||||
- Como puedo ayudarte?
|
||||
- Tengo: Zapatos Bolsos etc..
|
||||
- ¿Como puedo ayudarte?
|
||||
- Tengo: Zapatos, Bolsos etc..
|
||||
|
||||
__Iniciar__
|
||||
Recuerda configurar los parametros de conexion de la base de datos
|
||||
|
||||
Recuerda configurar los parametros de conexión de la base de datos.
|
||||
```js
|
||||
// app.js
|
||||
|
||||
@@ -16,6 +17,16 @@ const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
|
||||
const MONGO_DB_NAME = 'db_bot'
|
||||
```
|
||||
|
||||
Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
|
||||
|
||||
Menu Principal
|
||||
- SubMenu 1
|
||||
- Submenu 1.1
|
||||
- Submenu 2
|
||||
- Submenu 2.1
|
||||
|
||||
Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
|
||||
```
|
||||
npm install
|
||||
npm start
|
||||
|
||||
@@ -12,11 +12,20 @@ const MongoAdapter = require('@bot-whatsapp/database/mongo')
|
||||
/**
|
||||
* Declaramos las conexiones de Mongo
|
||||
*/
|
||||
|
||||
const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
|
||||
const MONGO_DB_NAME = 'db_bot'
|
||||
|
||||
/**
|
||||
* Declarando flujo hijo
|
||||
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||
*
|
||||
* Menu Principal
|
||||
* - SubMenu 1
|
||||
* - Submenu 1.1
|
||||
* - Submenu 2
|
||||
* - Submenu 2.1
|
||||
*
|
||||
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
*/
|
||||
|
||||
const flowBolsos2 = addKeyword(['bolsos2', '2'])
|
||||
@@ -27,11 +36,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
|
||||
const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
|
||||
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
|
||||
['Manda:', '*(2) Zapatos2*', 'para mas información'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -41,11 +50,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
[...addChild(flowZapatos2)]
|
||||
)
|
||||
|
||||
const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
|
||||
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
|
||||
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -58,12 +67,12 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer('Hola, bienvenido a mi tienda')
|
||||
.addAnswer('Como puedo ayudarte?')
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer(
|
||||
['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
|
||||
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
### CHATBOT Whatsapp
|
||||
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp crear flujos para automatizar tareas en tu negocio o procesos repetitivos
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
|
||||
|
||||
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
|
||||
Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
|
||||
- Bienvenido a mi tienda
|
||||
- Como puedo ayudarte?
|
||||
- Tengo: Zapatos Bolsos etc..
|
||||
- ¿Como puedo ayudarte?
|
||||
- Tengo: Zapatos, Bolsos etc..
|
||||
|
||||
__Iniciar__
|
||||
Recuerda configurar los parametros de conexion de la base de datos
|
||||
|
||||
Recuerda configurar los parametros de conexión de la base de datos
|
||||
```js
|
||||
// app.js
|
||||
|
||||
@@ -17,6 +18,15 @@ const MYSQL_DB_USER = 'user'
|
||||
const MYSQL_DB_PASSWORD = 'pass'
|
||||
const MYSQL_DB_NAME = 'bot'
|
||||
```
|
||||
Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
|
||||
|
||||
Menu Principal
|
||||
- SubMenu 1
|
||||
- Submenu 1.1
|
||||
- Submenu 2
|
||||
- Submenu 2.1
|
||||
|
||||
Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
|
||||
```
|
||||
npm install
|
||||
|
||||
@@ -12,13 +12,22 @@ const MySQLAdapter = require('@bot-whatsapp/database/mysql')
|
||||
/**
|
||||
* Declaramos las conexiones de MySQL
|
||||
*/
|
||||
|
||||
const MYSQL_DB_HOST = 'localhost'
|
||||
const MYSQL_DB_USER = 'user'
|
||||
const MYSQL_DB_PASSWORD = 'pass'
|
||||
const MYSQL_DB_NAME = 'bot'
|
||||
|
||||
/**
|
||||
* Declarando flujo hijo
|
||||
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||
*
|
||||
* Menu Principal
|
||||
* - SubMenu 1
|
||||
* - Submenu 1.1
|
||||
* - Submenu 2
|
||||
* - Submenu 2.1
|
||||
*
|
||||
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
*/
|
||||
|
||||
const flowBolsos2 = addKeyword(['bolsos2', '2'])
|
||||
@@ -29,11 +38,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
|
||||
const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
|
||||
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
|
||||
['Manda:', '*(2) Zapatos2*', 'para mas información'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -43,11 +52,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
[...addChild(flowZapatos2)]
|
||||
)
|
||||
|
||||
const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
|
||||
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
|
||||
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -60,12 +69,12 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer('Hola, bienvenido a mi tienda')
|
||||
.addAnswer('Como puedo ayudarte?')
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer(
|
||||
['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
|
||||
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
|
||||
@@ -1,14 +1,24 @@
|
||||
### CHATBOT Whatsapp
|
||||
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp crear flujos para automatizar tareas en tu negocio o procesos repetitivos
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
|
||||
|
||||
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
|
||||
Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
|
||||
- Bienvenido a mi tienda
|
||||
- Como puedo ayudarte?
|
||||
- Tengo: Zapatos Bolsos etc..
|
||||
- ¿Como puedo ayudarte?
|
||||
- Tengo: Zapatos, Bolsos etc..
|
||||
|
||||
__Iniciar__
|
||||
|
||||
Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
|
||||
|
||||
Menu Principal
|
||||
- SubMenu 1
|
||||
- Submenu 1.1
|
||||
- Submenu 2
|
||||
- Submenu 2.1
|
||||
|
||||
Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
|
||||
```
|
||||
npm install
|
||||
npm start
|
||||
|
||||
@@ -10,7 +10,15 @@ const WebWhatsappProvider = require('@bot-whatsapp/provider/web-whatsapp')
|
||||
const MockAdapter = require('@bot-whatsapp/database/mock')
|
||||
|
||||
/**
|
||||
* Declarando flujo hijo
|
||||
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||
*
|
||||
* Menu Principal
|
||||
* - SubMenu 1
|
||||
* - Submenu 1.1
|
||||
* - Submenu 2
|
||||
* - Submenu 2.1
|
||||
*
|
||||
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
*/
|
||||
|
||||
const flowBolsos2 = addKeyword(['bolsos2', '2'])
|
||||
@@ -21,11 +29,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
|
||||
const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
|
||||
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
|
||||
['Manda:', '*(2) Zapatos2*', 'para mas información'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -35,11 +43,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
[...addChild(flowZapatos2)]
|
||||
)
|
||||
|
||||
const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
|
||||
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
|
||||
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -52,12 +60,12 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer('Hola, bienvenido a mi tienda')
|
||||
.addAnswer('Como puedo ayudarte?')
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer(
|
||||
['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
|
||||
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
### CHATBOT Whatsapp
|
||||
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp crear flujos para automatizar tareas en tu negocio o procesos repetitivos
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
|
||||
|
||||
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
|
||||
Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
|
||||
- Bienvenido a mi tienda
|
||||
- Como puedo ayudarte?
|
||||
- Tengo: Zapatos Bolsos etc..
|
||||
- ¿Como puedo ayudarte?
|
||||
- Tengo: Zapatos, Bolsos etc..
|
||||
|
||||
__Iniciar__
|
||||
Recuerda configurar los parametros de conexion de la base de datos
|
||||
|
||||
Recuerda configurar los parametros de conexión de la base de datos:
|
||||
```js
|
||||
// app.js
|
||||
|
||||
@@ -16,6 +17,16 @@ const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
|
||||
const MONGO_DB_NAME = 'db_bot'
|
||||
```
|
||||
|
||||
Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
|
||||
|
||||
Menu Principal
|
||||
- SubMenu 1
|
||||
- Submenu 1.1
|
||||
- Submenu 2
|
||||
- Submenu 2.1
|
||||
|
||||
Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
|
||||
```
|
||||
npm install
|
||||
npm start
|
||||
|
||||
@@ -12,11 +12,20 @@ const MongoAdapter = require('@bot-whatsapp/database/mongo')
|
||||
/**
|
||||
* Declaramos las conexiones de Mongo
|
||||
*/
|
||||
|
||||
const MONGO_DB_URI = 'mongodb://0.0.0.0:27017'
|
||||
const MONGO_DB_NAME = 'db_bot'
|
||||
|
||||
/**
|
||||
* Declarando flujo hijo
|
||||
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||
*
|
||||
* Menu Principal
|
||||
* - SubMenu 1
|
||||
* - Submenu 1.1
|
||||
* - Submenu 2
|
||||
* - Submenu 2.1
|
||||
*
|
||||
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
*/
|
||||
|
||||
const flowBolsos2 = addKeyword(['bolsos2', '2'])
|
||||
@@ -27,11 +36,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
|
||||
const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
|
||||
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
|
||||
['Manda:', '*(2) Zapatos2*', 'para mas información'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -41,11 +50,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
[...addChild(flowZapatos2)]
|
||||
)
|
||||
|
||||
const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
|
||||
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
|
||||
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -58,12 +67,12 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer('Hola, bienvenido a mi tienda')
|
||||
.addAnswer('Como puedo ayudarte?')
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer(
|
||||
['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
|
||||
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
### CHATBOT Whatsapp
|
||||
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp crear flujos para automatizar tareas en tu negocio o procesos repetitivos
|
||||
Este bot es una aplicación que puedes vincular con tu whatsapp y crear flujos para automatizar tareas en tu negocio o procesos repetitivos.
|
||||
|
||||
Este bot contiene un flujo basico en el cual una persona (cliente) escribe **"hola"** y el bot responde.
|
||||
Este bot contiene un flujo básico en el cual una persona (cliente) escribe **"hola"** y el bot responde:
|
||||
- Bienvenido a mi tienda
|
||||
- Como puedo ayudarte?
|
||||
- Tengo: Zapatos Bolsos etc..
|
||||
- ¿Como puedo ayudarte?
|
||||
- Tengo: Zapatos, Bolsos etc..
|
||||
|
||||
__Iniciar__
|
||||
Recuerda configurar los parametros de conexion de la base de datos
|
||||
|
||||
Recuerda configurar los parametros de conexión de la base de datos
|
||||
```js
|
||||
// app.js
|
||||
|
||||
@@ -17,6 +18,15 @@ const MYSQL_DB_USER = 'user'
|
||||
const MYSQL_DB_PASSWORD = 'pass'
|
||||
const MYSQL_DB_NAME = 'bot'
|
||||
```
|
||||
Los flujos se declaran de atrás para adelante, es decir que si tienes un flujo de este tipo:
|
||||
|
||||
Menu Principal
|
||||
- SubMenu 1
|
||||
- Submenu 1.1
|
||||
- Submenu 2
|
||||
- Submenu 2.1
|
||||
|
||||
Primero se declaran los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
|
||||
```
|
||||
npm install
|
||||
|
||||
@@ -12,13 +12,22 @@ const MySQLAdapter = require('@bot-whatsapp/database/mysql')
|
||||
/**
|
||||
* Declaramos las conexiones de MySQL
|
||||
*/
|
||||
|
||||
const MYSQL_DB_HOST = 'localhost'
|
||||
const MYSQL_DB_USER = 'user'
|
||||
const MYSQL_DB_PASSWORD = 'pass'
|
||||
const MYSQL_DB_NAME = 'bot'
|
||||
|
||||
/**
|
||||
* Declarando flujo hijo
|
||||
* Aqui declaramos los flujos hijos, los flujos se declaran de atras para adelante, es decir que si tienes un flujo de este tipo:
|
||||
*
|
||||
* Menu Principal
|
||||
* - SubMenu 1
|
||||
* - Submenu 1.1
|
||||
* - Submenu 2
|
||||
* - Submenu 2.1
|
||||
*
|
||||
* Primero declaras los submenus 1.1 y 2.1, luego el 1 y 2 y al final el principal.
|
||||
*/
|
||||
|
||||
const flowBolsos2 = addKeyword(['bolsos2', '2'])
|
||||
@@ -29,11 +38,11 @@ const flowZapatos2 = addKeyword(['zapatos2', '2'])
|
||||
.addAnswer('🤯 repito que tengo *MUCHOS* zapatos.')
|
||||
.addAnswer('y algunas otras cosas.')
|
||||
|
||||
const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
const flowZapatos = addKeyword(['1', 'zapatos', 'ZAPATOS'])
|
||||
.addAnswer('🤯 Veo que elegiste zapatos')
|
||||
.addAnswer('Tengo muchos zapatos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*zapatos2*', 'para mas información'],
|
||||
['Manda:', '*(2) Zapatos2*', 'para mas información'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -43,11 +52,11 @@ const flowZapatos = addKeyword(['zapatos', 'ZAPATOS'])
|
||||
[...addChild(flowZapatos2)]
|
||||
)
|
||||
|
||||
const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
const flowBolsos = addKeyword(['2', 'bolsos', 'BOLSOS'])
|
||||
.addAnswer('🙌 Veo que elegiste bolsos')
|
||||
.addAnswer('Tengo muchos bolsos...bla bla')
|
||||
.addAnswer(
|
||||
['Manda:', '*2*', 'o', '*bolsos2*', 'para mas información.'],
|
||||
['Manda:', '*(2) Bolsos2*', 'para mas información.'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
@@ -60,12 +69,12 @@ const flowBolsos = addKeyword(['bolsos', 'BOLSOS'])
|
||||
/**
|
||||
* Declarando flujo principal
|
||||
*/
|
||||
|
||||
const flowPrincipal = addKeyword(['hola', 'ole', 'alo'])
|
||||
.addAnswer('Hola, bienvenido a mi tienda')
|
||||
.addAnswer('Como puedo ayudarte?')
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc..'])
|
||||
.addAnswer(['Hola, bienvenido a mi tienda', '¿Como puedo ayudarte?'])
|
||||
.addAnswer(['Tengo:', 'Zapatos', 'Bolsos', 'etc ...'])
|
||||
.addAnswer(
|
||||
['Para continuar escribe:', '*Zapatos*', 'o', '*Bolsos*'],
|
||||
['Para continuar escribe:', '*(1) Zapatos*', '*(2) Bolsos*'],
|
||||
{ capture: true },
|
||||
(ctx) => {
|
||||
console.log('Aqui puedes ver más info del usuario...')
|
||||
|
||||
250
yarn.lock
250
yarn.lock
@@ -82,15 +82,15 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@aws-sdk/client-cognito-identity@npm:3.229.0":
|
||||
version: 3.229.0
|
||||
resolution: "@aws-sdk/client-cognito-identity@npm:3.229.0"
|
||||
"@aws-sdk/client-cognito-identity@npm:3.231.0":
|
||||
version: 3.231.0
|
||||
resolution: "@aws-sdk/client-cognito-identity@npm:3.231.0"
|
||||
dependencies:
|
||||
"@aws-crypto/sha256-browser": 2.0.0
|
||||
"@aws-crypto/sha256-js": 2.0.0
|
||||
"@aws-sdk/client-sts": 3.229.0
|
||||
"@aws-sdk/config-resolver": 3.226.0
|
||||
"@aws-sdk/credential-provider-node": 3.229.0
|
||||
"@aws-sdk/client-sts": 3.231.0
|
||||
"@aws-sdk/config-resolver": 3.231.0
|
||||
"@aws-sdk/credential-provider-node": 3.231.0
|
||||
"@aws-sdk/fetch-http-handler": 3.226.0
|
||||
"@aws-sdk/hash-node": 3.226.0
|
||||
"@aws-sdk/invalid-dependency": 3.226.0
|
||||
@@ -114,7 +114,7 @@ __metadata:
|
||||
"@aws-sdk/util-body-length-browser": 3.188.0
|
||||
"@aws-sdk/util-body-length-node": 3.208.0
|
||||
"@aws-sdk/util-defaults-mode-browser": 3.226.0
|
||||
"@aws-sdk/util-defaults-mode-node": 3.226.0
|
||||
"@aws-sdk/util-defaults-mode-node": 3.231.0
|
||||
"@aws-sdk/util-endpoints": 3.226.0
|
||||
"@aws-sdk/util-retry": 3.229.0
|
||||
"@aws-sdk/util-user-agent-browser": 3.226.0
|
||||
@@ -122,17 +122,17 @@ __metadata:
|
||||
"@aws-sdk/util-utf8-browser": 3.188.0
|
||||
"@aws-sdk/util-utf8-node": 3.208.0
|
||||
tslib: ^2.3.1
|
||||
checksum: 742e26278a61685b276e4dbaa15e3e3fc5702606ec2be72f59a210eedba99b8b66fabfd2d00927e76f7941dbe63701176f5e8c6cad82224f30dfeca2b125c186
|
||||
checksum: 309c433d0005c072db5298d75df4f37826350ffc2bdab940c1147f719f5285207e9761ee8f87884b23ea2cf5f8bf7157fcf992008f0a838491954cbe6925a47a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@aws-sdk/client-sso-oidc@npm:3.229.0":
|
||||
version: 3.229.0
|
||||
resolution: "@aws-sdk/client-sso-oidc@npm:3.229.0"
|
||||
"@aws-sdk/client-sso-oidc@npm:3.231.0":
|
||||
version: 3.231.0
|
||||
resolution: "@aws-sdk/client-sso-oidc@npm:3.231.0"
|
||||
dependencies:
|
||||
"@aws-crypto/sha256-browser": 2.0.0
|
||||
"@aws-crypto/sha256-js": 2.0.0
|
||||
"@aws-sdk/config-resolver": 3.226.0
|
||||
"@aws-sdk/config-resolver": 3.231.0
|
||||
"@aws-sdk/fetch-http-handler": 3.226.0
|
||||
"@aws-sdk/hash-node": 3.226.0
|
||||
"@aws-sdk/invalid-dependency": 3.226.0
|
||||
@@ -155,7 +155,7 @@ __metadata:
|
||||
"@aws-sdk/util-body-length-browser": 3.188.0
|
||||
"@aws-sdk/util-body-length-node": 3.208.0
|
||||
"@aws-sdk/util-defaults-mode-browser": 3.226.0
|
||||
"@aws-sdk/util-defaults-mode-node": 3.226.0
|
||||
"@aws-sdk/util-defaults-mode-node": 3.231.0
|
||||
"@aws-sdk/util-endpoints": 3.226.0
|
||||
"@aws-sdk/util-retry": 3.229.0
|
||||
"@aws-sdk/util-user-agent-browser": 3.226.0
|
||||
@@ -163,17 +163,17 @@ __metadata:
|
||||
"@aws-sdk/util-utf8-browser": 3.188.0
|
||||
"@aws-sdk/util-utf8-node": 3.208.0
|
||||
tslib: ^2.3.1
|
||||
checksum: 031bedebd213f7f2522321abb55bb50a2271e4d63ad38e3596eab6daeddb39044a4d72f554fc3e716ea4108317b3169ffb681b6e75f45ec83f730619b588eac6
|
||||
checksum: 4ec5e5f0f25969df5d5341cd1f291a763ed2edaeb317228a7873f18f16471f2cbd83bd575f766a4f0f22c3ebfcf69ecd75891fd0518a205c69eb20ded8734c98
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@aws-sdk/client-sso@npm:3.229.0":
|
||||
version: 3.229.0
|
||||
resolution: "@aws-sdk/client-sso@npm:3.229.0"
|
||||
"@aws-sdk/client-sso@npm:3.231.0":
|
||||
version: 3.231.0
|
||||
resolution: "@aws-sdk/client-sso@npm:3.231.0"
|
||||
dependencies:
|
||||
"@aws-crypto/sha256-browser": 2.0.0
|
||||
"@aws-crypto/sha256-js": 2.0.0
|
||||
"@aws-sdk/config-resolver": 3.226.0
|
||||
"@aws-sdk/config-resolver": 3.231.0
|
||||
"@aws-sdk/fetch-http-handler": 3.226.0
|
||||
"@aws-sdk/hash-node": 3.226.0
|
||||
"@aws-sdk/invalid-dependency": 3.226.0
|
||||
@@ -196,7 +196,7 @@ __metadata:
|
||||
"@aws-sdk/util-body-length-browser": 3.188.0
|
||||
"@aws-sdk/util-body-length-node": 3.208.0
|
||||
"@aws-sdk/util-defaults-mode-browser": 3.226.0
|
||||
"@aws-sdk/util-defaults-mode-node": 3.226.0
|
||||
"@aws-sdk/util-defaults-mode-node": 3.231.0
|
||||
"@aws-sdk/util-endpoints": 3.226.0
|
||||
"@aws-sdk/util-retry": 3.229.0
|
||||
"@aws-sdk/util-user-agent-browser": 3.226.0
|
||||
@@ -204,18 +204,18 @@ __metadata:
|
||||
"@aws-sdk/util-utf8-browser": 3.188.0
|
||||
"@aws-sdk/util-utf8-node": 3.208.0
|
||||
tslib: ^2.3.1
|
||||
checksum: 970e6ea9666a6e976f0b4e7f693e286ade8c090aca1ae780835050623f5d8bd3ecbc0336d1b3f4037e92d50c48b5d18d5ad6d595ddb62db7efe38b90ab928129
|
||||
checksum: 3551984b8c14f611daa93c7082f2a361caa0c8e985fbfc6d66674ec7f3624364aa7d3c8011aa334729022e3866e5323c6ac18a4ba3e840023128000994d99165
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@aws-sdk/client-sts@npm:3.229.0":
|
||||
version: 3.229.0
|
||||
resolution: "@aws-sdk/client-sts@npm:3.229.0"
|
||||
"@aws-sdk/client-sts@npm:3.231.0":
|
||||
version: 3.231.0
|
||||
resolution: "@aws-sdk/client-sts@npm:3.231.0"
|
||||
dependencies:
|
||||
"@aws-crypto/sha256-browser": 2.0.0
|
||||
"@aws-crypto/sha256-js": 2.0.0
|
||||
"@aws-sdk/config-resolver": 3.226.0
|
||||
"@aws-sdk/credential-provider-node": 3.229.0
|
||||
"@aws-sdk/config-resolver": 3.231.0
|
||||
"@aws-sdk/credential-provider-node": 3.231.0
|
||||
"@aws-sdk/fetch-http-handler": 3.226.0
|
||||
"@aws-sdk/hash-node": 3.226.0
|
||||
"@aws-sdk/invalid-dependency": 3.226.0
|
||||
@@ -240,7 +240,7 @@ __metadata:
|
||||
"@aws-sdk/util-body-length-browser": 3.188.0
|
||||
"@aws-sdk/util-body-length-node": 3.208.0
|
||||
"@aws-sdk/util-defaults-mode-browser": 3.226.0
|
||||
"@aws-sdk/util-defaults-mode-node": 3.226.0
|
||||
"@aws-sdk/util-defaults-mode-node": 3.231.0
|
||||
"@aws-sdk/util-endpoints": 3.226.0
|
||||
"@aws-sdk/util-retry": 3.229.0
|
||||
"@aws-sdk/util-user-agent-browser": 3.226.0
|
||||
@@ -249,32 +249,32 @@ __metadata:
|
||||
"@aws-sdk/util-utf8-node": 3.208.0
|
||||
fast-xml-parser: 4.0.11
|
||||
tslib: ^2.3.1
|
||||
checksum: 18d357f2433ef832948f867c0e22ba34ac57c096e8b5209e0203d892acab9de60d9114a513f8ec9354ec83a89652a8285a49f89ee3203cededc514a25eea67f5
|
||||
checksum: 377eabf0ff0523b7847fe1677084293c322d5525443a859f522b83363eb647a87721245f7b48f7232e2f2f3b49dfdaefdf274e9578915c24617c5d7540624aca
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@aws-sdk/config-resolver@npm:3.226.0":
|
||||
version: 3.226.0
|
||||
resolution: "@aws-sdk/config-resolver@npm:3.226.0"
|
||||
"@aws-sdk/config-resolver@npm:3.231.0":
|
||||
version: 3.231.0
|
||||
resolution: "@aws-sdk/config-resolver@npm:3.231.0"
|
||||
dependencies:
|
||||
"@aws-sdk/signature-v4": 3.226.0
|
||||
"@aws-sdk/types": 3.226.0
|
||||
"@aws-sdk/util-config-provider": 3.208.0
|
||||
"@aws-sdk/util-middleware": 3.226.0
|
||||
tslib: ^2.3.1
|
||||
checksum: 08bfbc0528da98cba2b46bda05cd9af46f6eced3dbe5e415b11465501fe672d99b869adc9f08cfd2f138c9b61ac119b43eb9a90a490395aec705e1b795022d4d
|
||||
checksum: 67ec8d1f547cdde45f9c0daec21864225cfc04fba732e5e157b59d23f987d588fdc1738e1ce43012f885bdb6e65da8105511f5816e5844a5b839192b5feecc64
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@aws-sdk/credential-provider-cognito-identity@npm:3.229.0":
|
||||
version: 3.229.0
|
||||
resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.229.0"
|
||||
"@aws-sdk/credential-provider-cognito-identity@npm:3.231.0":
|
||||
version: 3.231.0
|
||||
resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.231.0"
|
||||
dependencies:
|
||||
"@aws-sdk/client-cognito-identity": 3.229.0
|
||||
"@aws-sdk/client-cognito-identity": 3.231.0
|
||||
"@aws-sdk/property-provider": 3.226.0
|
||||
"@aws-sdk/types": 3.226.0
|
||||
tslib: ^2.3.1
|
||||
checksum: 37cc46249390dc5bc6cb39b014a2c9710fcbe53d22b8cf90452473712f7464dffcf286c3c7cb72ae268988c136710a1dbcb52006d93d2de8973c40953ef79058
|
||||
checksum: f0c2059379f703e72538b00e52d2f5ce01c69a8adf3af370af2e72cc971ffe44963e6611917032326c0207b11fe34133780540e4ab0412e36e6c34b589f3dec3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -302,37 +302,37 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@aws-sdk/credential-provider-ini@npm:3.229.0":
|
||||
version: 3.229.0
|
||||
resolution: "@aws-sdk/credential-provider-ini@npm:3.229.0"
|
||||
"@aws-sdk/credential-provider-ini@npm:3.231.0":
|
||||
version: 3.231.0
|
||||
resolution: "@aws-sdk/credential-provider-ini@npm:3.231.0"
|
||||
dependencies:
|
||||
"@aws-sdk/credential-provider-env": 3.226.0
|
||||
"@aws-sdk/credential-provider-imds": 3.226.0
|
||||
"@aws-sdk/credential-provider-sso": 3.229.0
|
||||
"@aws-sdk/credential-provider-sso": 3.231.0
|
||||
"@aws-sdk/credential-provider-web-identity": 3.226.0
|
||||
"@aws-sdk/property-provider": 3.226.0
|
||||
"@aws-sdk/shared-ini-file-loader": 3.226.0
|
||||
"@aws-sdk/types": 3.226.0
|
||||
tslib: ^2.3.1
|
||||
checksum: fb573675c0c34c7fa0e207c78190bce73e42fc1713d93a25868b50002352a70f3584e2ab0a0b249103bcf25c3a60c26261ad3dcfc1d6280b4f5dc8ad4e4b3f49
|
||||
checksum: f6b11d4876602e65464bc25804781b78a6e0c66b39c293178d7e97f2f11c151bd6e23e1e31158c0442dfbc3076f417aeecf44c315d4e509b48e7cfc3be2e7472
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@aws-sdk/credential-provider-node@npm:3.229.0":
|
||||
version: 3.229.0
|
||||
resolution: "@aws-sdk/credential-provider-node@npm:3.229.0"
|
||||
"@aws-sdk/credential-provider-node@npm:3.231.0":
|
||||
version: 3.231.0
|
||||
resolution: "@aws-sdk/credential-provider-node@npm:3.231.0"
|
||||
dependencies:
|
||||
"@aws-sdk/credential-provider-env": 3.226.0
|
||||
"@aws-sdk/credential-provider-imds": 3.226.0
|
||||
"@aws-sdk/credential-provider-ini": 3.229.0
|
||||
"@aws-sdk/credential-provider-ini": 3.231.0
|
||||
"@aws-sdk/credential-provider-process": 3.226.0
|
||||
"@aws-sdk/credential-provider-sso": 3.229.0
|
||||
"@aws-sdk/credential-provider-sso": 3.231.0
|
||||
"@aws-sdk/credential-provider-web-identity": 3.226.0
|
||||
"@aws-sdk/property-provider": 3.226.0
|
||||
"@aws-sdk/shared-ini-file-loader": 3.226.0
|
||||
"@aws-sdk/types": 3.226.0
|
||||
tslib: ^2.3.1
|
||||
checksum: a8ad0f6aeb3c7ee03937e7389dbcabeb81f2a6e23c3bfeb84f518b063fb156a2d2f2e4a7267655c6bdfa178ba51e9e0ea74c98397dd6dd58b9a315d9e5a4a6de
|
||||
checksum: e28266dce53130c6e28eb7e82028e29cb2db2f06e1f40c98ae7875bcf2e17553976899f02b93576070c7fd77c131046ec752f543f9aa7e32078e1f3a44c3acf5
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -348,17 +348,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@aws-sdk/credential-provider-sso@npm:3.229.0":
|
||||
version: 3.229.0
|
||||
resolution: "@aws-sdk/credential-provider-sso@npm:3.229.0"
|
||||
"@aws-sdk/credential-provider-sso@npm:3.231.0":
|
||||
version: 3.231.0
|
||||
resolution: "@aws-sdk/credential-provider-sso@npm:3.231.0"
|
||||
dependencies:
|
||||
"@aws-sdk/client-sso": 3.229.0
|
||||
"@aws-sdk/client-sso": 3.231.0
|
||||
"@aws-sdk/property-provider": 3.226.0
|
||||
"@aws-sdk/shared-ini-file-loader": 3.226.0
|
||||
"@aws-sdk/token-providers": 3.229.0
|
||||
"@aws-sdk/token-providers": 3.231.0
|
||||
"@aws-sdk/types": 3.226.0
|
||||
tslib: ^2.3.1
|
||||
checksum: 9497a8c5dfddf70a4740e9e485cea757070a6e9c5c94469cc51599918f2689f6ca794fcaba98320b20aa7b81e7e56c3b91f11d3cf8111335e445638825d0ee58
|
||||
checksum: 0aa69ec7ea5b0115c53972c6ae0419687e0bebc7500fbefa77c1108ecb81e735227982b586180b2fe111427cba17fad75f6db61f69a8b5cf5ad079f7ee09107c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -374,25 +374,25 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@aws-sdk/credential-providers@npm:^3.186.0":
|
||||
version: 3.229.0
|
||||
resolution: "@aws-sdk/credential-providers@npm:3.229.0"
|
||||
version: 3.231.0
|
||||
resolution: "@aws-sdk/credential-providers@npm:3.231.0"
|
||||
dependencies:
|
||||
"@aws-sdk/client-cognito-identity": 3.229.0
|
||||
"@aws-sdk/client-sso": 3.229.0
|
||||
"@aws-sdk/client-sts": 3.229.0
|
||||
"@aws-sdk/credential-provider-cognito-identity": 3.229.0
|
||||
"@aws-sdk/client-cognito-identity": 3.231.0
|
||||
"@aws-sdk/client-sso": 3.231.0
|
||||
"@aws-sdk/client-sts": 3.231.0
|
||||
"@aws-sdk/credential-provider-cognito-identity": 3.231.0
|
||||
"@aws-sdk/credential-provider-env": 3.226.0
|
||||
"@aws-sdk/credential-provider-imds": 3.226.0
|
||||
"@aws-sdk/credential-provider-ini": 3.229.0
|
||||
"@aws-sdk/credential-provider-node": 3.229.0
|
||||
"@aws-sdk/credential-provider-ini": 3.231.0
|
||||
"@aws-sdk/credential-provider-node": 3.231.0
|
||||
"@aws-sdk/credential-provider-process": 3.226.0
|
||||
"@aws-sdk/credential-provider-sso": 3.229.0
|
||||
"@aws-sdk/credential-provider-sso": 3.231.0
|
||||
"@aws-sdk/credential-provider-web-identity": 3.226.0
|
||||
"@aws-sdk/property-provider": 3.226.0
|
||||
"@aws-sdk/shared-ini-file-loader": 3.226.0
|
||||
"@aws-sdk/types": 3.226.0
|
||||
tslib: ^2.3.1
|
||||
checksum: 9acd1bfb97d5c45a3b02ed74540317791eb00a058bbe4ab2852099f59dff62ab6a7f834dcfdb1f75e80956b86d80a3b44c0574361a12473f8a3e493437a1b36a
|
||||
checksum: edbf6a2821c5bf38d40a83f8d7c8ab967fff85d2c10af79f6f5df40cd52ef185f988c6499552a0294ca98cb7db34cb77e046a78e779e5ff5d362d104c29acc83
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -678,16 +678,16 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@aws-sdk/token-providers@npm:3.229.0":
|
||||
version: 3.229.0
|
||||
resolution: "@aws-sdk/token-providers@npm:3.229.0"
|
||||
"@aws-sdk/token-providers@npm:3.231.0":
|
||||
version: 3.231.0
|
||||
resolution: "@aws-sdk/token-providers@npm:3.231.0"
|
||||
dependencies:
|
||||
"@aws-sdk/client-sso-oidc": 3.229.0
|
||||
"@aws-sdk/client-sso-oidc": 3.231.0
|
||||
"@aws-sdk/property-provider": 3.226.0
|
||||
"@aws-sdk/shared-ini-file-loader": 3.226.0
|
||||
"@aws-sdk/types": 3.226.0
|
||||
tslib: ^2.3.1
|
||||
checksum: b099537ba47f3c2520f8081590ef97d22279aea39fcb1f3883f611273c8f15f4190d7b44f3f2debfdb36900f124e5f188193b039ce95c45c6e20d3b48ef9a3da
|
||||
checksum: 3fe2b2776232f2aad499d74ec540431db013520a1c4e3cee6ed4ab4d5cb2a402b1b50dd60f64d1c95e9ebb2bcc44c2244462d62453b9f6226b73082930dcc119
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -770,17 +770,17 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@aws-sdk/util-defaults-mode-node@npm:3.226.0":
|
||||
version: 3.226.0
|
||||
resolution: "@aws-sdk/util-defaults-mode-node@npm:3.226.0"
|
||||
"@aws-sdk/util-defaults-mode-node@npm:3.231.0":
|
||||
version: 3.231.0
|
||||
resolution: "@aws-sdk/util-defaults-mode-node@npm:3.231.0"
|
||||
dependencies:
|
||||
"@aws-sdk/config-resolver": 3.226.0
|
||||
"@aws-sdk/config-resolver": 3.231.0
|
||||
"@aws-sdk/credential-provider-imds": 3.226.0
|
||||
"@aws-sdk/node-config-provider": 3.226.0
|
||||
"@aws-sdk/property-provider": 3.226.0
|
||||
"@aws-sdk/types": 3.226.0
|
||||
tslib: ^2.3.1
|
||||
checksum: cb34426f745aa3965fe25d5c8e38eb4d1c3f85f6f071995b15ecad48afcd0ca01a01b7f572c26dacd917134d9c676625492df8f6fb01d702ad6becb65bd34105
|
||||
checksum: 6dca6704798145569f25002605c4918890ebd2b7bf56d20909192993eea5bcf8fdceff7f51484c9ab7e009a77c3d371e0935666d204c819e703128e857859e73
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -963,6 +963,14 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@bot-whatsapp/contexts@workspace:packages/contexts":
|
||||
version: 0.0.0-use.local
|
||||
resolution: "@bot-whatsapp/contexts@workspace:packages/contexts"
|
||||
dependencies:
|
||||
"@bot-whatsapp/bot": "*"
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"@bot-whatsapp/database@npm:*":
|
||||
version: 0.1.2
|
||||
resolution: "@bot-whatsapp/database@npm:0.1.2"
|
||||
@@ -1316,20 +1324,20 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@eslint/eslintrc@npm:^1.3.3":
|
||||
version: 1.3.3
|
||||
resolution: "@eslint/eslintrc@npm:1.3.3"
|
||||
"@eslint/eslintrc@npm:^1.3.3, @eslint/eslintrc@npm:^1.4.0":
|
||||
version: 1.4.0
|
||||
resolution: "@eslint/eslintrc@npm:1.4.0"
|
||||
dependencies:
|
||||
ajv: ^6.12.4
|
||||
debug: ^4.3.2
|
||||
espree: ^9.4.0
|
||||
globals: ^13.15.0
|
||||
globals: ^13.19.0
|
||||
ignore: ^5.2.0
|
||||
import-fresh: ^3.2.1
|
||||
js-yaml: ^4.1.0
|
||||
minimatch: ^3.1.2
|
||||
strip-json-comments: ^3.1.1
|
||||
checksum: f03e9d6727efd3e0719da2051ea80c0c73d20e28c171121527dbb868cd34232ca9c1d0525a66e517a404afea26624b1e47895b6a92474678418c2f50c9566694
|
||||
checksum: 73e39c833deafde8d8706e6fa9b52b6d99927c094ead8e405ea4174e8197ec24aac9ba88ae38cc8ad32eaccf07b9c7fc5dc70761d1fba6da41a928691447305f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1340,14 +1348,14 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@humanwhocodes/config-array@npm:^0.11.6":
|
||||
version: 0.11.7
|
||||
resolution: "@humanwhocodes/config-array@npm:0.11.7"
|
||||
"@humanwhocodes/config-array@npm:^0.11.6, @humanwhocodes/config-array@npm:^0.11.8":
|
||||
version: 0.11.8
|
||||
resolution: "@humanwhocodes/config-array@npm:0.11.8"
|
||||
dependencies:
|
||||
"@humanwhocodes/object-schema": ^1.2.1
|
||||
debug: ^4.1.1
|
||||
minimatch: ^3.0.5
|
||||
checksum: cf506dc45d9488af7fbf108ea6ac2151ba1a25e6d2b94b9b4fc36d2c1e4099b89ff560296dbfa13947e44604d4ca4a90d97a4fb167370bf8dd01a6ca2b6d83ac
|
||||
checksum: 0fd6b3c54f1674ce0a224df09b9c2f9846d20b9e54fabae1281ecfc04f2e6ad69bf19e1d6af6a28f88e8aa3990168b6cb9e1ef755868c3256a630605ec2cb1d3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1393,7 +1401,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10":
|
||||
"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13":
|
||||
version: 1.4.14
|
||||
resolution: "@jridgewell/sourcemap-codec@npm:1.4.14"
|
||||
checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97
|
||||
@@ -1694,21 +1702,21 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@rollup/plugin-commonjs@npm:^23.0.2":
|
||||
version: 23.0.4
|
||||
resolution: "@rollup/plugin-commonjs@npm:23.0.4"
|
||||
version: 23.0.7
|
||||
resolution: "@rollup/plugin-commonjs@npm:23.0.7"
|
||||
dependencies:
|
||||
"@rollup/pluginutils": ^5.0.1
|
||||
commondir: ^1.0.1
|
||||
estree-walker: ^2.0.2
|
||||
glob: ^8.0.3
|
||||
is-reference: 1.2.1
|
||||
magic-string: ^0.26.4
|
||||
magic-string: ^0.27.0
|
||||
peerDependencies:
|
||||
rollup: ^2.68.0||^3.0.0
|
||||
peerDependenciesMeta:
|
||||
rollup:
|
||||
optional: true
|
||||
checksum: 32d84de06140d4d050c0b402c6a6d858a6f970c3d6f50ea1fba40495b0cd0f977486513639875058287885cfbddc6f8b1ab5ebbe0d28f0364506b372fd4b0bd6
|
||||
checksum: 01d90947bd4aa664c568cec172399825921f29afc035a6d8aec153868ab151ce7901ad56a101c76655e31b21567ddc70313c4bca476685b872218f041757a8c9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1746,17 +1754,17 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@rollup/plugin-replace@npm:^5.0.1":
|
||||
version: 5.0.1
|
||||
resolution: "@rollup/plugin-replace@npm:5.0.1"
|
||||
version: 5.0.2
|
||||
resolution: "@rollup/plugin-replace@npm:5.0.2"
|
||||
dependencies:
|
||||
"@rollup/pluginutils": ^5.0.1
|
||||
magic-string: ^0.26.4
|
||||
magic-string: ^0.27.0
|
||||
peerDependencies:
|
||||
rollup: ^1.20.0||^2.0.0||^3.0.0
|
||||
peerDependenciesMeta:
|
||||
rollup:
|
||||
optional: true
|
||||
checksum: d5f98a93dd24086ed1bf70e9299230d1fddae9b132280e2daaca855dba2307eccd5490553e2a03b701b7411593d2921d2d675e5d906b4754c57152f8c50adb07
|
||||
checksum: 3a91b5fa2ce5acfe67c1faf8d479585da30f398f29499cf8a2d2153c899af0b2ef0363012db0e6edc2ebbb3d9fad6dd7ad591c9d977c1ae2ca3256b52e86d950
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -1951,16 +1959,16 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"@types/node@npm:*, @types/node@npm:latest":
|
||||
version: 18.11.15
|
||||
resolution: "@types/node@npm:18.11.15"
|
||||
checksum: cae8692a5cee0316f93ee0342237eb921f70c51afb37c661c711a925a4642654ae7e404c5a80899d481c0cfaff3a6891ef04bacd330a2e72734192bfc91dc2d8
|
||||
version: 18.11.17
|
||||
resolution: "@types/node@npm:18.11.17"
|
||||
checksum: 1933afd068d5c75c068c6c4df6d10edb3b0b2bb6503d544e2f0496ac007c90596e6a5e284a8ef032451bc16f871b7e46719d7d2bea60e9b25d13a77d52161cac
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/node@npm:^14.0.0":
|
||||
version: 14.18.34
|
||||
resolution: "@types/node@npm:14.18.34"
|
||||
checksum: 25ac3b456a0b7b82c76b37276ec86845849e8276fc81d1470a87227c105c619e299aa7165b6148aa11a4ea156b1452f6d3327935f3e7dc0067ff54dde0e3d4e0
|
||||
version: 14.18.35
|
||||
resolution: "@types/node@npm:14.18.35"
|
||||
checksum: edaeea2735aa62a12b9f67311ef6efdb960560e055dc127a658b3571e0bbd52e020bd570227362bf255cd156ddfae18c18205515f1fb3599e34c06a914f167a1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -4219,11 +4227,11 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"eslint@npm:^8.26.0":
|
||||
version: 8.29.0
|
||||
resolution: "eslint@npm:8.29.0"
|
||||
version: 8.30.0
|
||||
resolution: "eslint@npm:8.30.0"
|
||||
dependencies:
|
||||
"@eslint/eslintrc": ^1.3.3
|
||||
"@humanwhocodes/config-array": ^0.11.6
|
||||
"@eslint/eslintrc": ^1.4.0
|
||||
"@humanwhocodes/config-array": ^0.11.8
|
||||
"@humanwhocodes/module-importer": ^1.0.1
|
||||
"@nodelib/fs.walk": ^1.2.8
|
||||
ajv: ^6.10.0
|
||||
@@ -4242,7 +4250,7 @@ __metadata:
|
||||
file-entry-cache: ^6.0.1
|
||||
find-up: ^5.0.0
|
||||
glob-parent: ^6.0.2
|
||||
globals: ^13.15.0
|
||||
globals: ^13.19.0
|
||||
grapheme-splitter: ^1.0.4
|
||||
ignore: ^5.2.0
|
||||
import-fresh: ^3.0.0
|
||||
@@ -4263,7 +4271,7 @@ __metadata:
|
||||
text-table: ^0.2.0
|
||||
bin:
|
||||
eslint: bin/eslint.js
|
||||
checksum: e05204b05907b82d910983995cb946e0ba62ca514eb2b6791c43f623333b143564a2eee0139909d31c10935c21877d815b1f76dd674a59cb91c471064325c4ab
|
||||
checksum: b7525bb465b342665c3b8bab7e114d514ef1bc4e79f211c919863f9c71767e7412ec82383a22614a92d159783f91101018817000f7c61ce69a5e7015280cafaf
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -4949,7 +4957,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"globals@npm:^13.15.0":
|
||||
"globals@npm:^13.15.0, globals@npm:^13.19.0":
|
||||
version: 13.19.0
|
||||
resolution: "globals@npm:13.19.0"
|
||||
dependencies:
|
||||
@@ -5236,9 +5244,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"ignore@npm:^5.1.1, ignore@npm:^5.1.4, ignore@npm:^5.2.0":
|
||||
version: 5.2.1
|
||||
resolution: "ignore@npm:5.2.1"
|
||||
checksum: 7251d00cba49fe88c4f3565fadeb4aa726ba38294a9a79ffed542edc47bafd989d4b2ccf65700c5b1b26a1e91dfc7218fb23017937c79216025d5caeec0ee9d5
|
||||
version: 5.2.2
|
||||
resolution: "ignore@npm:5.2.2"
|
||||
checksum: 2086f12e8dca6978001b3861562272888fcf231f464696938049e0aa576d0562a8f31926630a973e302944c20c64639c14cfdd725bacd208dcda973021377420
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -5703,11 +5711,11 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"json5@npm:^2.2.1":
|
||||
version: 2.2.1
|
||||
resolution: "json5@npm:2.2.1"
|
||||
version: 2.2.2
|
||||
resolution: "json5@npm:2.2.2"
|
||||
bin:
|
||||
json5: lib/cli.js
|
||||
checksum: 74b8a23b102a6f2bf2d224797ae553a75488b5adbaee9c9b6e5ab8b510a2fc6e38f876d4c77dea672d4014a44b2399e15f2051ac2b37b87f74c0c7602003543b
|
||||
checksum: 9a878d66b72157b073cf0017f3e5d93ec209fa5943abcb38d37a54b208917c166bd473c26a24695e67a016ce65759aeb89946592991f8f9174fb96c8e2492683
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -5999,12 +6007,12 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"magic-string@npm:^0.26.4":
|
||||
version: 0.26.7
|
||||
resolution: "magic-string@npm:0.26.7"
|
||||
"magic-string@npm:^0.27.0":
|
||||
version: 0.27.0
|
||||
resolution: "magic-string@npm:0.27.0"
|
||||
dependencies:
|
||||
sourcemap-codec: ^1.4.8
|
||||
checksum: 89b0d60cbb32bbf3d1e23c46ea93db082d18a8230b972027aecb10a40bba51be519ecce0674f995571e3affe917b76b09f59d8dbc9a1b2c9c4102a2b6e8a2b01
|
||||
"@jridgewell/sourcemap-codec": ^1.4.13
|
||||
checksum: 273faaa50baadb7a2df6e442eac34ad611304fc08fe16e24fe2e472fd944bfcb73ffb50d2dc972dc04e92784222002af46868cb9698b1be181c81830fd95a13e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -7012,9 +7020,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"node-releases@npm:^2.0.6":
|
||||
version: 2.0.7
|
||||
resolution: "node-releases@npm:2.0.7"
|
||||
checksum: d1c5af091d788b7f9dfce5aa77cbf76c28e8e326b891fe64a05b96943a90cd6ba19eae94ef32777c23f5898a7b00d9cf8266adba33d61ebe6611cca74ccfc0b1
|
||||
version: 2.0.8
|
||||
resolution: "node-releases@npm:2.0.8"
|
||||
checksum: b1ab02c0d5d8e081bf9537232777a7a787dc8fef07f70feabe70a344599b220fe16462f746ac30f3eed5a58549445ad69368964d12a1f8b3b764f6caab7ba34a
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
@@ -8091,8 +8099,8 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"rollup@npm:^3.2.3":
|
||||
version: 3.7.4
|
||||
resolution: "rollup@npm:3.7.4"
|
||||
version: 3.7.5
|
||||
resolution: "rollup@npm:3.7.5"
|
||||
dependencies:
|
||||
fsevents: ~2.3.2
|
||||
dependenciesMeta:
|
||||
@@ -8100,7 +8108,7 @@ __metadata:
|
||||
optional: true
|
||||
bin:
|
||||
rollup: dist/bin/rollup
|
||||
checksum: 0f2478d740527cdc8f4d81a5676221b0ec9495147cae0e6643627f6ac3ac63bf92385e26936ed8ef9ed06678a2ff7d8398489a235581c590f149149a003870d8
|
||||
checksum: 772f85e9f12c83091cbe8ef31dc563198566cfe536dc8099dd6d4e372daa370f9d455cc42c7993d22b02521e25d53733df7e98d2a993e5a22bf11b2591de4e2d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
Reference in New Issue
Block a user