This commit is contained in:
Victor Sanchez Sosa 2021-05-14 17:58:59 -05:00
parent 6107aec004
commit fd7abe68a5
6 changed files with 2161 additions and 0 deletions

104
funtions.js Normal file
View File

@ -0,0 +1,104 @@
const { error } = require('actions-on-google/dist/common');
const axios= require('axios');
const URLPC = 'http://mantaentusmanos.test/';
const { WebhookClient } = require("dialogflow-fulfillment");
function conver_base64(data) {
return Buffer.from(data).toString('base64')
}
function conver_utf8(data) {
return Buffer.from(data, 'base64').toString('ascii');
}
function conver_name(data) {
var porciones = data.split(' ');
if(porciones.length >= 2 && porciones.length <= 4){
var cadena = new String(data);
cadena = porciones[(porciones.length -2)]+ ' ' +porciones[(porciones.length -1)];
cadena = cadena.toLowerCase();
return cadena.replace(/\w\S*/g, (w) => (w.replace(/^\w/, (c) => c.toUpperCase())));
}else{
var cadena = new String(data);
cadena = cadena.toLowerCase();
return cadena.replace(/\w\S*/g, (w) => (w.replace(/^\w/, (c) => c.toUpperCase())));
}
}
function AxiosPOST(url, params){
return new Promise((resolve, reject) => {
axios.post(URLPC+url, params).then(function (response) {
resolve(response.data);
}).catch(function (error) {
resolve({'estado':false, 'data':[], 'msg':error});
});
});
}
async function ValidarSession(session){
return new Promise((resolve, reject) => {
var array = {'ok': false, 'data':[], 'msg':null};
AxiosPOST('apidf_ValidarSessionDialog', {'session_id':session}).then(function (result) {
if(result['estado']){
if(result['data']['session_id'] != undefined && result['data']['session_id'] != null){
array['ok'] = true; array['data'] = result['data']; array['msg'] = result['msg'];
}else{ array['msg'] = result['msg'] }
}else{ array['msg'] = result['msg'] }
resolve(array);
}).catch(function (error) {
array['msg'] = error;
resolve(array);
});
});
}
async function CerrarSession(session){
return new Promise((resolve, reject) => {
var array = {'ok': false, 'data':[], 'msg':null};
AxiosPOST('apidf_CerrarSessionDialog', {'session_id':session}).then(function (result) {
if(result['estado']){
array['ok'] = true; array['msg'] = result['msg'];
}else{ array['msg'] = result['msg'] }
resolve(array);
}).catch(function (error) {
array['msg'] = error;
resolve(array);
});
});
}
async function RegistrarSession(session_id, cedula){
return new Promise((resolve, reject) => {
var heders = {'cedula': cedula, 'name':cedula, 'session_id':session_id};
var array = {'ok': false, 'data':[], 'msg':null};
AxiosPOST('apidf_RegistrarSessionDialog', heders).then(function (result) {
if(result['estado']){
array['ok'] = true; array['data'] = result['data']; array['msg'] = result['msg'];
}else{ array['msg'] = result['msg'] }
resolve(array);
}).catch(function (error) {
array['msg'] = error;
resolve(array);
});
});
}
module.exports = {
"conver_base64": conver_base64,
"conver_utf8": conver_utf8,
"AxiosPOST": AxiosPOST,
"RegistrarSession": RegistrarSession,
"ValidarSession": ValidarSession,
"conver_name": conver_name,
"CerrarSession": CerrarSession
}

58
index.js Normal file
View File

@ -0,0 +1,58 @@
var funcion = require("./funtions.js");
var metodos = require("./metodos.js");
const express = require("express");
const app = express();
const { WebhookClient } = require("dialogflow-fulfillment");
app.get("/", function (req, res) {
res.send("Servicio de <b>DialogFlow MANTABOT</b> activo...... ❤️🧡💛💚💜🖤🙈 ");
});
app.post("/webhook", express.json(), function (req, res) {
const agent = new WebhookClient({ request: req, response: res });
// console.log("Dialogflow Request headers: " + JSON.stringify(req.headers));
// console.log("Dialogflow Request body: " + JSON.stringify(req.body));
function DefauldAgent(){
return metodos.Fun_DefauldAgent(agent, req, res);
}
function WelcomeAgent(){
return metodos.Fun_WelcomeAgent(agent, req, res);
}
function SolicitarDatosAgent(){
return metodos.Fun_SolicitarDatosAgent(agent, req, res);
}
function SiCerrarSesionAgent(){
return metodos.Fun_CerrarSesionAgent(agent, req, res, 1);
}
function NoCerrarSesionAgent(){
return metodos.Fun_CerrarSesionAgent(agent, req, res, 0);
}
function ConfirmarCerrarSesionAgent(){
return metodos.Fun_ConfirmarCerrarSesionAgent(agent, req, res);
}
let intentMap = new Map();
intentMap.set('Default Fallback Intent', DefauldAgent);
intentMap.set('0 - Solicitar datos', SolicitarDatosAgent);
intentMap.set('0 - Bienvenida', WelcomeAgent);
//Menu 1
intentMap.set('M0 - Cerrar sesion', ConfirmarCerrarSesionAgent);
intentMap.set('M0.1 - Cerrar sesion - SI', SiCerrarSesionAgent);
intentMap.set('M0.2 - Cerrar sesion - NO', NoCerrarSesionAgent);
agent.handleRequest(intentMap);
});
let port = 3000;
app.listen(port, () => {
console.log("Estamos ejecutando el servidor en el puerto " + port);
});

77
interacciones.js Normal file
View File

@ -0,0 +1,77 @@
function mensaje(name, username = null) {
var jsom_interaciones = ['Es un placer poder ayudarle.....'];
switch (name) {
case 'sol_cedula':
jsom_interaciones = [
'Antes de continuar es necesario que nos ayúde con su número de cédula o RUC 🙏',
'Ayude con su número de cédula o RUC para poder continuar 🙏',
'Estoy para ayudarle pero primero necesito su número de cédula o RUC 🙏'
];
break;
case 'recuerde':
jsom_interaciones = [
'Recuerde que puedo ayudarle en cosas como:',
'En que puedo ayudarle ahora:',
'Que tal si empezamos con:',
'Puedo ofrecerle lo siguiente:'
];
break;
case 'bienvenida':
if(username){
jsom_interaciones = [
'Hola, '+username+' 👋',
'Hola, '+username+' soy MantaBot su asistente virtual 👋🥰',
'Qué tal '+username+' 🙂',
'Hola '+username+' soy MantaBot 😎',
'¿Qué tal? '+username+' 😎'
];
}else{
jsom_interaciones = [
'Soy MantaBot su asistente virtual 🤖',
'Hola, soy MantaBot su asistente virtual 🤖',
'Qué tal, soy MantaBot su asistente virtual 🤖',
'Hola soy MantaBot, su asistente virtual 🤖',
'¿Qué tal? soy MantaBot su asistente virtual 🤖'
];
}
break;
case 'menu_1':
var menu = "\n1. Consultar predios \n0. Cerrar sessión";
jsom_interaciones = [
'Recuerde que puedo ayudarle en cosas como:\n' + menu,
'En que puedo ayudarle ahora:\n' + menu,
'Que tal si empezamos con:\n' + menu,
'Puedo ofrecerle lo siguiente:\n' + menu
];
break;
case 'defauld':
var username = username != null ? username : '';
jsom_interaciones = [
'Disculpa '+username+' no logré entenderte 😔 Aún estoy aprendiendo. 🤓 ',
'Lo siento '+username+' 💔 no comprendí su pregunta. Aún estoy aprendiendo. 🤓',
'Mil disculpas '+username+', 😓 no logre entender su pregunta. Aún estoy aprendiendo. 🤓',
'Aprendo cada día, pero no logre entender su pregunta '+username+' 🤓'
];
break;
case 'afirmacion':
jsom_interaciones = [
'De acuerdo...👍',
'Excelente...💪',
'Muy bien...🙂',
'Perfecto...👌',
];
break;
}
return jsom_interaciones[Math.floor(Math.random() * jsom_interaciones.length)]
}
module.exports = {
"mensaje": mensaje
}

132
metodos.js Normal file
View File

@ -0,0 +1,132 @@
var funcion = require("./funtions.js");
var dialog = require("./interacciones.js");
async function Fun_DefauldAgent(agent, req, res){
let data_context = await ValidateDataUserContext(agent);
if(data_context){
console.log('defaulde')
agent.add(dialog.mensaje('defauld', funcion.conver_name(data_context.name) ));
agent.context.set({name:'menu_1', lifespan:1});
return agent.add(dialog.mensaje('menu_1'));
}else{
return Fun_WelcomeAgent(agent, req, res);
}
}
async function Fun_SolicitarDatosAgent(agent, req, res){
const sessionId = req.body.session.split("/").reverse()[0];
let data_context = await ValidateDataUserContext(agent);
if(data_context){
if(data_context.cedula != null && data_context.cedula != "" ){
let sesion = await funcion.RegistrarSession(sessionId, data_context.cedula);
if(sesion['ok'] == true && sesion['data']['name'] != null){
console.log('sesion registrada en la bd')
agent.context.set({name:'data_user_context', lifespan: 5, parameters:{ cedula: sesion['data']['cedula'], name: sesion['data']['name'] } });
}else{
agent.context.set({name:'data_user_context', lifespan: 0 });
agent.context.set({name:'Bienvenida', lifespan: 1 });
sesion['msg'] != null ? agent.add(sesion['msg'] ) : null;
return agent.add(dialog.mensaje('sol_cedula'));
}
}
Fun_WelcomeAgent(agent, req, res, true);
}else{
Fun_WelcomeAgent(agent, req, res);
}
}
async function Fun_WelcomeAgent(agent, req, res, hola = false){
let data_context = await ValidateDataUserContext(agent);
if(data_context){
console.log('contexto existe........');
agent.add(dialog.mensaje('bienvenida', data_context.name != null ? funcion.conver_name(data_context.name) : data_context.cedula));
agent.context.set({name:'menu_1', lifespan:1});
return agent.add(dialog.mensaje('menu_1'));
}else{
console.log('NO existe contexto.......');
const sessionId = req.body.session.split("/").reverse()[0];
let legion = await funcion.ValidarSession(sessionId);
if(legion['ok'] == true && legion['data']['name'] != null){
console.log('sesion existe en la bd')
agent.context.set({name:'menu_1', lifespan:1});
agent.context.set({name:'Bienvenida', lifespan:0});
agent.context.set({name:'data_user_context', lifespan: 5, parameters:{ cedula: legion['data']['cedula'], name: legion['data']['name'] } });
agent.add(dialog.mensaje('bienvenida', legion['data']['name'] != null ? funcion.conver_name(legion['data']['name']) : d_text.cedula));
return agent.add(dialog.mensaje('menu_1'));
}else{
agent.add(dialog.mensaje('bienvenida'));
return agent.add(dialog.mensaje('sol_cedula'));
}
}
}
function ValidateDataUserContext(agent){
return new Promise((resolve, reject) => {
try{
var ContextIn = agent.context.get('data_user_context');
if (ContextIn != null && ContextIn != NaN && ContextIn != undefined){
if(ContextIn.parameters.cedula != null && ContextIn.parameters.cedula != "" ){
agent.context.set({name:'Bienvenida', lifespan:0});
let _cedu = ContextIn.parameters.cedula; let _nam = ContextIn.parameters.name;
agent.context.set({name:'data_user_context', lifespan: 5, parameters:{ cedula:_cedu, name:_nam } });
resolve({ cedula:_cedu, name:_nam });
}else{
agent.context.set({name:'Bienvenida', lifespan:1}); agent.context.set({name:'data_user_context', lifespan:0});
resolve(false);
}
}else{
agent.context.set({name:'Bienvenida', lifespan:1}); agent.context.set({name:'data_user_context', lifespan:0});
resolve(false);
}
}catch (error) {
agent.context.set({name:'Bienvenida', lifespan:1}); agent.context.set({name:'data_user_context', lifespan:0});
resolve(false);
}
});
}
async function Fun_CerrarSesionAgent(agent, req, res, accion){
if(accion == 1){
console.log('cerrando sesion...');
const sessionId = req.body.session.split("/").reverse()[0];
let legion = await funcion.CerrarSession(sessionId);
if(legion['ok'] == true){
agent.add(legion['msg']);
agent.context.set({name:'Bienvenida', lifespan:1});
agent.context.set({name:'data_user_context', lifespan: 0, parameters:{}});
agent.add(dialog.mensaje('bienvenida'));
return agent.add(dialog.mensaje('sol_cedula'));
}else{
return agent.add(legion['msg']);
}
}
if(accion == 0){
agent.context.set({name:'menu_1', lifespan:1});
agent.add(dialog.mensaje('afirmacion'));
return agent.add(dialog.mensaje('menu_1'));
}
}
async function Fun_ConfirmarCerrarSesionAgent(agent, req, res){
let data_context = await ValidateDataUserContext(agent);
if(data_context){
agent.context.set({name:'cerrar_sesion', lifespan:1});
agent.add('¿Esta de acuerdo en cerrar la sesión? \n1. SI \n2. NO');
}else{
Fun_WelcomeAgent(agent, req, res);
}
}
module.exports = {
"Fun_DefauldAgent": Fun_DefauldAgent,
"Fun_SolicitarDatosAgent": Fun_SolicitarDatosAgent,
"Fun_WelcomeAgent": Fun_WelcomeAgent,
"Fun_CerrarSesionAgent": Fun_CerrarSesionAgent,
"Fun_ConfirmarCerrarSesionAgent": Fun_ConfirmarCerrarSesionAgent
}

1772
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

18
package.json Normal file
View File

@ -0,0 +1,18 @@
{
"name": "dialogflow",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"actions-on-google": "^2.14.0",
"axios": "^0.21.1",
"dialogflow-fulfillment": "^0.6.1",
"express": "^4.17.1",
"nodemon": "^2.0.7"
}
}