inicia
This commit is contained in:
parent
6107aec004
commit
fd7abe68a5
104
funtions.js
Normal file
104
funtions.js
Normal 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
58
index.js
Normal 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
77
interacciones.js
Normal 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
132
metodos.js
Normal 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
1772
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
18
package.json
Normal file
18
package.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user