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