Merge remote-tracking branch 'origin/dev' into fix/docs-nex

This commit is contained in:
Leifer Mendez
2022-12-25 17:11:05 +01:00
8 changed files with 153 additions and 18 deletions

View File

@@ -8,6 +8,7 @@
"adapter",
"ci",
"starters",
"conflict"
"conflict",
"contexts"
]
}

View File

@@ -8,7 +8,8 @@
],
"exports": {
"./mock": "./lib/mock/index.cjs",
"./dialogflow": "./lib/dialogflow/index.cjs"
"./dialogflow": "./lib/dialogflow/index.cjs",
"./dialogflowcx": "./lib/dialogflow-cx/index.cjs"
},
"dependencies": {
"@bot-whatsapp/bot": "*"

View File

@@ -21,4 +21,13 @@ module.exports = [
},
plugins: [commonjs()],
},
{
input: join(__dirname, 'src', 'dialogflow-cx', 'index.js'),
output: {
banner: banner['banner.output'].join(''),
file: join(__dirname, 'lib', 'dialogflow-cx', 'index.cjs'),
format: 'cjs',
},
plugins: [commonjs()],
},
]

View File

@@ -0,0 +1,112 @@
const { CoreClass } = require('@bot-whatsapp/bot')
const { SessionsClient } = require('@google-cloud/dialogflow-cx').v3beta1
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 DialogFlowCXContext extends CoreClass {
// Opciones del usuario
optionsDX = {
language: 'es',
location: '',
agentId: '',
}
projectId = null
configuration = null
sessionClient = null
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
* */
}
if (!this.optionsDX.location.length)
throw new Error('LOCATION_NO_ENCONTRADO')
if (!this.optionsDX.agentId.length)
throw new Error('AGENTID_NO_ENCONTRADO')
const rawJson = readFileSync(GOOGLE_ACCOUNT_PATH, 'utf-8')
const { project_id, private_key, client_email } = JSON.parse(rawJson)
this.projectId = project_id
this.sessionClient = new SessionsClient({
credentials: { private_key, client_email },
apiEndpoint: `${this.optionsDX.location}-dialogflow.googleapis.com`,
})
}
/**
* GLOSSARY.md
* @param {*} messageCtxInComming
* @returns
*/
handleMsg = async (messageCtxInComming) => {
const languageCode = this.optionsDX.language
const { from, body } = messageCtxInComming
/**
* 📄 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.projectLocationAgentSessionPath(
this.projectId,
this.optionsDX.location,
this.optionsDX.agentId,
from
)
const reqDialog = {
session,
queryInput: {
text: {
text: body,
},
languageCode,
},
}
const [single] = (await this.sessionClient.detectIntent(reqDialog)) || [
null,
]
const listMessages = single.queryResult.responseMessages.map((res) => {
if (res.message == 'text') {
return { answer: res.text.text[0] }
}
if (res.message == 'payload') {
const { values } = res.payload.fields.buttons.listValue
const buttonsArray = values.map((values) => {
const { stringValue } = values.structValue.fields.body
return { body: stringValue }
})
return { buttons: buttonsArray }
}
})
this.sendFlow(listMessages, from)
}
}
module.exports = DialogFlowCXContext

View File

@@ -0,0 +1,14 @@
const DialogCXFlowClass = require('./dialogflow-cx.class')
/**
* Crear instancia de clase Bot
* @param {*} args
* @returns
*/
const createBotDialog = async ({ database, provider }, _options) =>
new DialogCXFlowClass(database, provider, _options)
module.exports = {
createBotDialog,
DialogCXFlowClass,
}

View File

@@ -17,24 +17,25 @@ export default component$(() => {
<div class="pb-12 md:pb-0 md:py-0 max-w-5xl mx-auto md:pr-16 flex items-center basis-[56%]">
<div>
<h1 class="text-5xl md:text-[3.48rem] font-bold leading-tighter tracking-tighter mb-4 font-heading px-4 md:px-0">
Chatbot +
Construye tu
<span class="sm:whitespace-nowrap text-[#25b637]">
WhatsApp
Chatbot
</span>{' '}
<br class="hidden lg:block" />{' '}
<span class="hidden lg:inline">
prueba nuestro servicio{' '}
<span class="text-[#25b637]">gratis</span>{' '}
para{' '}
<span class="text-[#25b637]">Whatsapp</span>{' '}
</span>
</h1>
<div class="max-w-3xl mx-auto">
<p class="text-xl text-gray-600 mb-8 dark:text-slate-400">
<span class="font-semibold underline decoration-wavy decoration-1 decoration-secondary-600 underline-offset-2">
Con nuestro{' '}
Con esta libreria,{' '}
</span>
<span class="font-semibold underline decoration-wavy decoration-1 decoration-secondary-600 underline-offset-2">
Chatbot , puede configurar respuestas
puedes configurar respuestas
automatizadas para preguntas frecuentes
</span>{' '}
, recibir y responder mensajes de manera
automatizada, y hacer un seguimiento de las

View File

@@ -1,11 +1,8 @@
import Collaborators from '../../components/widgets/Collaborators'
# Vista rápida
Si eres una persona con **poco tiempo y gran capacidad** de comprensión con conocimientos ejecutando proyectos en Node.js y manejo de terminal.
Si eres una persona con **poco tiempo y gran capacidad** de comprensión con conocimientos, ejecutando proyectos en Node.js y manejo de terminal.
Está documentación te ayudará a instalar tu bot de whatsapp en simples pasos con el proposito de
que tengas un chatbot funcional en **solo minutos.**
Esta documentación te ayudará a instalar tu bot de WhatsApp en simples pasos con el propósito de que tengas un chatbot funcional **en solo minutos.**
## Ejecutar

View File

@@ -1,6 +1,6 @@
# Instalación
A continuacion se describen los puntos técnicos que debes de tener en cuenta antes de trabajar con esta herramienta.
A continuación se describen los puntos técnicos que debes de tener en cuenta antes de trabajar con esta herramienta
## Requerimientos
@@ -8,7 +8,7 @@ A continuacion se describen los puntos técnicos que debes de tener en cuenta an
## ¿Como saber que tengo el Node?
Solo debes ejecutar el siguiente comando y esperar que la version que te arroja sea superior a v16
Solo debes ejecutar el siguiente comando y esperar que la versión que te arroja sea superior a v16
```shell
$ node -v
@@ -17,11 +17,11 @@ v18.12.1
## Opcionales
Dependiendo de las opciones de configuraciones que haz marcado al momento de crear el bot **Command Line Interface (CLI)** puede que necesites instalar más cosas.
Dependiendo de las opciones de configuraciones que has marcado al momento de crear el bot **Command Line Interface (CLI)** puede que necesites instalar más cosas.
**Ejemplo**: Si elegiste _(MySQL)_ como proveedor de base de datos logicamente necesitaras tener un entorno de MySQL.
**Ejemplo**: Si elegiste _(MySQL)_ como proveedor de base de datos, lógicamente necesitaras tener un entorno de MySQL.
📄 Pronto se agregara más informacion y videos explicando esto a fondo.
📄 Pronto se agregará más información y videos explicando esto a fondo.
<div class="my-4 w-full ">
<video