diff --git a/funtions.js b/funtions.js index 6aea858..5d25f45 100644 --- a/funtions.js +++ b/funtions.js @@ -1,7 +1,7 @@ const { error } = require('actions-on-google/dist/common'); const axios= require('axios'); -//const URLPC = 'http://mantaentusmanos.test/'; -const URLPC = 'https://portalciudadano.manta.gob.ec/'; +const URLPC = 'http://mantaentusmanos.test/'; +// const URLPC = 'https://portalciudadano.manta.gob.ec/'; const { WebhookClient } = require("dialogflow-fulfillment"); function conver_base64(data) { @@ -37,7 +37,6 @@ function conver_capitalice(data) { } - function AxiosPOST(url, params){ return new Promise((resolve, reject) => { axios.post(URLPC+url, params).then(function (response) { @@ -48,6 +47,7 @@ function AxiosPOST(url, params){ }); } function AxiosGET(url, params){ + console.log(URLPC+url); return new Promise((resolve, reject) => { axios.get(URLPC+url, params).then(function (response) { resolve(response.data); @@ -106,6 +106,30 @@ async function RegistrarSession(session_id, cedula){ } +async function ValidarComprobante(codigo){ + return new Promise((resolve, reject) => { + var heders = {'codigo': codigo}; + var array = {'ok': false, 'data':[], 'msg':null}; + AxiosPOST('ws_validar_cod_barras', heders).then(function (result) { + let claves=Object.keys(result); + claves.forEach(element => { + if(element == 'api'){ + if(result['api']['ok']){ + array['ok'] = true; array['data'] = result['api']; array['msg'] = 'Busquera exitosa'; + }else{ array['msg'] = result['api']['msg'] != undefined ? result['api']['msg'] : ['Documento no encontrado'];} + }else{ + array['msg'] = ['Documento no encontrado']; + } + }); + resolve(array); + }).catch(function (error) { + array['msg'] = error; + resolve(array); + }); + }); +} + + async function ConsultaClaves(cedula){ return new Promise((resolve, reject) => { var array = {'ok': false, 'data':[], 'msg':null}; @@ -122,6 +146,39 @@ async function ConsultaClaves(cedula){ } +async function ConsultaComprobantes(cedula, index){ + return new Promise((resolve, reject) => { + var array = {'ok': false, 'data':[], 'msg':null}; + AxiosGET('portalciudadano/serviciosdigitales/mis_pagos?index='+index+'&cedula='+cedula+'&keypass=U2lzdGVtYXNJQ1NlcnZpY2VfbXJj', {}).then(function (result) { + if(result['ok'] && result['data'].length > 0){ + array['ok'] = true; array['data'] = result['data']; array['msg'] = 'Consulta exitosa'; + }else{ array['msg'] = 'No se encontró comprobantes de pago a su nombre'; } + resolve(array); + }).catch(function (error) { + array['msg'] = error; + resolve(array); + }); + }); +} + + +async function OptInfoBot(key_inf){ + return new Promise((resolve, reject) => { + var heders = {'info_key': key_inf}; + var array = {'ok': false, 'data':[], 'msg':null}; + AxiosPOST('api/InfoBootService', heders).then(function (result) { + if(result['ok']){ + 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); + }); + }); +} + + @@ -138,5 +195,8 @@ module.exports = { "conver_name": conver_name, "CerrarSession": CerrarSession, "conver_capitalice": conver_capitalice, + "ValidarComprobante": ValidarComprobante, + "ConsultaComprobantes": ConsultaComprobantes, + "OptInfoBot": OptInfoBot, "ConsultaClaves": ConsultaClaves } \ No newline at end of file diff --git a/index.js b/index.js index 88f5ba3..9c6467d 100644 --- a/index.js +++ b/index.js @@ -11,8 +11,10 @@ app.get("/", function (req, res) { app.post("/webhook", express.json(), function (req, res) { const agent = new WebhookClient({ request: req, response: res }); + // // console.log("Dialogflow Request headers: " + JSON.stringify(req)); // console.log("Dialogflow Request headers: " + JSON.stringify(req.headers)); // console.log("Dialogflow Request body: " + JSON.stringify(req.body)); + // // console.log("Dialogflow Request body: " + JSON.stringify(agent)); //Inicio function DefauldAgent(){ @@ -59,6 +61,12 @@ app.post("/webhook", express.json(), function (req, res) { function ConsultarCCAtras(){ return metodos.Fun_ConsultarCCAtras(agent, req, res); } + + + //Prueba + function prueba(){ + return metodos.Fun_pruebas(agent, req, res); + } @@ -69,6 +77,34 @@ app.post("/webhook", express.json(), function (req, res) { function ValidarCodigobarras(){ return metodos.Fun_ValidarDocumentos(agent, req, res, 2); } + + + //Mis comprobantes + function MisComprobantesPago(){ + return metodos.Func_MisComprobantesPago(agent, req, res, 1); + } + function TodosMisComprobantesPago(){ + return metodos.Func_MisComprobantesPago(agent, req, res, 2); + } + function InicioMisComprobantesPago(){ + return metodos.Func_MisComprobantesPago(agent, req, res, 3); + } + function FallbackComprobantes(){ + return metodos.Func_FallbackComprobantes(agent, req, res); + } + + + //Info Tramites + let tramer = ['solvencia_key']; + function FallbackInfoTramites(){ + return metodos.Func_FallbackInfoTramites(agent, req, res); + } + function InformacionTramitesSolv(){ + return metodos.Func_InformacionTramites(agent, req, res, tramer[0]); + } + function AtrasInfoTramites(){ + return metodos.Func_InformacionTramites(agent, req, res, 0); + } let intentMap = new Map(); @@ -87,7 +123,7 @@ app.post("/webhook", express.json(), function (req, res) { intentMap.set('0 - Bienvenida - Consultar-Predios - Otros Predios - Cedula', ConsultarOtrasClavesCatastrales2); intentMap.set('0 - Bienvenida - Consultar-Predios - Atras', ConsultarCCAtras); intentMap.set('0 - Bienvenida - Consultar-Predios - fallback', ConfirmarConsultarClavesCatastrales); - + //Menu 1 - Cerrar sesion // intentMap.set('M0 - Cerrar sesion', ConfirmarCerrarSesionAgent); intentMap.set('0 - Bienvenida - Cerrar sesion', ConfirmarCerrarSesionAgent); @@ -99,8 +135,23 @@ app.post("/webhook", express.json(), function (req, res) { //Menu 1 - Validar Documentosany intentMap.set('0 - Bienvenida - Validar Documentos', ValidarDocumentos); intentMap.set('0 - Bienvenida - Validar Documentos - codigo', ValidarCodigobarras); + + // Menu 1 - Mis comprobantes + intentMap.set('0 - Bienvenida - Mis comprobantes de pago', MisComprobantesPago); + intentMap.set('0 - Bienvenida - Ver todos los comprobantes', TodosMisComprobantesPago); + intentMap.set('0 - Bienvenida - Mis comprobantes de pago - Menu Principal', InicioMisComprobantesPago); + intentMap.set('0 - Bienvenida - Mis comprobantes de pago - fallback', FallbackComprobantes); + + //Menu 1 - Informacion de tramites + intentMap.set('0 - Bienvenida - Inf Tram - fallback', FallbackInfoTramites); + intentMap.set('0 - Bienvenida - Inf Tram - Menu Principal', AtrasInfoTramites); + intentMap.set('0 - Bienvenida - Inf Tram', FallbackInfoTramites); + intentMap.set('0 - Bienvenida - Inf Tram - Solvencia', InformacionTramitesSolv); + + intentMap.set('prueba', prueba); + agent.handleRequest(intentMap); }); diff --git a/interacciones.js b/interacciones.js index 9e39ac1..cd542dd 100644 --- a/interacciones.js +++ b/interacciones.js @@ -57,7 +57,9 @@ function mensaje(name, username = null) { } break; case 'menu_1': - var menu = "\n1. Consultar predios \n2. Validar documentos digitales \n0. Cerrar sessión"; + // var menu = "\n1. Consultar predios \n2. Validar documentos digitales \n0. Cerrar sessión"; + var menu = "\n1. Consultar predios \n2. Validar documentos digitales \n3. Mis comprobantes de pago\n"+ + "4. Información sobre trámites\n0. Cerrar sessión\n"; jsom_interaciones = [ 'Recuerde que puedo ayudarle en cosas como:\n' + menu, 'Puedo ayudarle ahora con:\n' + menu, @@ -71,6 +73,12 @@ function mensaje(name, username = null) { '¿Que acción desea realizar?:\n' + menu, ]; break; + case 'info_tramites': + var menu = "1. Certificado de solvencia \n0. Ir al menu anterior"; + jsom_interaciones = [ + 'Envíe el número de la opción que desee:\n\n' + menu, + ]; + break; case 'defauld': var username = username != null ? username : ''; jsom_interaciones = [ diff --git a/metodos.js b/metodos.js index d380598..5e64803 100644 --- a/metodos.js +++ b/metodos.js @@ -1,5 +1,6 @@ var funcion = require("./funtions.js"); var dialog = require("./interacciones.js"); +const {Card, Image} = require('dialogflow-fulfillment'); async function Fun_DefauldAgent(agent, req, res){ let data_context = await ValidateDataUserContext(agent); @@ -53,6 +54,7 @@ async function Fun_WelcomeAgent(agent, req, res){ 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.context.set({name:'sol_datos_usuario', lifespan:1}); agent.add(dialog.mensaje('bienvenida')); return agent.add(dialog.mensaje('sol_cedula')); } @@ -134,6 +136,83 @@ async function Fun_ConfirmarCerrarSesionAgent(agent, req, res){ } } +async function Func_InformacionTramites(agent, req, res, key_example){ + console.log(key_example); + try { + let data_context = await ValidateDataUserContext(agent); + if(data_context){ + if(key_example == 0){ + return Fun_ConsultarCCAtras(agent, req, res); + } + + let legion = await funcion.OptInfoBot(key_example); + if(legion['ok'] == true){ + console.log(1) + console.log(1) + console.log(1) + var msger = '*'+legion['data']['data_key']+'*\n\n'; + var example = legion['data']['data'].split('|'); + if(example.length == 0){ + return Fun_RetornarAlinicio(agent, req, res, funcion.conver_name(data_context.name)); + } + example.forEach(element => { + msger = msger + element + '\n'; + }); + agent.add(msger); + return Fun_RetornarAlinicio(agent, req, res, funcion.conver_name(data_context.name)); + + }else{ + agent.add(funcion.conver_name(data_context.name) +', '+ legion['msg']); + return Fun_RetornarAlinicio(agent, req, res, funcion.conver_name(data_context.name)); + } + }else{ + return Fun_WelcomeAgent(agent, req, res); + } + } catch (error) { + console-log(error); + return Fun_RetornarAlinicio(agent, req, res, funcion.conver_name(data_context.name)); + } +} + + +async function Fun_pruebas(agent, req, res){ + try { + let data_context = await ValidateDataUserContext(agent); + if(data_context){ + let legion = await funcion.OptInfoBot('solvencia_key'); + console.log(legion); + if(legion['ok'] == true){ + console.log(1) + console.log(1) + console.log(1) + var msger = '*'+legion['data']['data_key']+'*\n\n'; + var example = legion['data']['data'].split('|'); + if(example.length == 0){ + return Fun_RetornarAlinicio(agent, req, res, funcion.conver_name(data_context.name)); + } + example.forEach(element => { + msger = msger + element + '\n'; + }); + + agent.add(msger); + return Fun_RetornarAlinicio(agent, req, res, funcion.conver_name(data_context.name)); + + }else{ + agent.add(funcion.conver_name(data_context.name) +', '+ legion['msg']); + return Fun_RetornarAlinicio(agent, req, res, funcion.conver_name(data_context.name)); + } + + }else{ + return Fun_WelcomeAgent(agent, req, res); + } + } catch (error) { + console-log(error); + return Fun_RetornarAlinicio(agent, req, res, funcion.conver_name(data_context.name)); + } +} + + + async function Fun_ConsultarCCAtras(agent, req, res){ let data_context = await ValidateDataUserContext(agent); if(data_context){ @@ -185,9 +264,7 @@ async function Fun_ConsultarOtrasClavesCatastrales(agent, req, res, tipo){ var Contx = agent.context.get('data_predios'); if (Contx == null || Contx == NaN || Contx == undefined){ Contx = ExistParamtContext(agent,'data_predios'); } if (Contx != null && Contx != NaN && Contx != undefined){ - console.log(Contx); if(Contx.parameters.cedula_otro != null && Contx.parameters.cedula_otro != "" ){ - console.log('esperando por la cedula '+Contx.parameters.cedula_otro); return Fun_ConsultarClavesCatastrales(agent, req, res, Contx.parameters.cedula_otro); } }else{ @@ -200,8 +277,6 @@ async function Fun_ConsultarOtrasClavesCatastrales(agent, req, res, tipo){ } - - async function Fun_ValidarDocumentos(agent, req, res, tipo){ let data_context = await ValidateDataUserContext(agent); if(data_context){ @@ -211,15 +286,37 @@ async function Fun_ValidarDocumentos(agent, req, res, tipo){ var Contx = agent.context.get('context_codigo_barras'); if (Contx == null || Contx == NaN || Contx == undefined){ Contx = ExistParamtContext(agent,'context_codigo_barras'); } if (Contx != null && Contx != NaN && Contx != undefined){ - console.log(Contx); if(Contx.parameters.codigo_barras != null && Contx.parameters.codigo_barras != "" ){ - console.log('esperando el codigo de barras '+Contx.parameters.codigo_barras); - return agent.add(Contx.parameters.codigo_barras); - //return Fun_ConsultarClavesCatastrales(agent, req, res, Contx.parameters.codigo_barras); + let legion = await funcion.ValidarComprobante(Contx.parameters.codigo_barras.toUpperCase()); + if(legion['ok'] == true){ + var send = ''; + legion['data']['msg'].forEach((element, index) => { + send = send + element + '\n'; + }); + if(send != ''){ + agent.add(send); + } + if(legion['data']['url2'][0] != undefined){ + agent.add(new Card({ + title: 'Ver documento', + // text: `This is the body text of a card. You can even use line\n breaks and emoji! 💁`, + buttonText: 'Clic aquí', + buttonUrl: legion['data']['url2'][0] + }) + ); + + agent.add('Ver documento:\n'+legion['data']['url2'][0]); + // agent.add('Ver documento: ' + ' https://mantaentusmanos.test/c/VP-035013.com'); + } + return Fun_RetornarAlinicio(agent, req, res, funcion.conver_name(data_context.name)); + }else{ + agent.add(legion['msg']); + return Fun_RetornarAlinicio(agent, req, res, funcion.conver_name(data_context.name)); + } + } }else{ return Fun_ListarMenu(agent, req, res); - // return Fun_ConfirmarConsultarClavesCatastrales(agent, req, res); } } }else{ @@ -228,17 +325,66 @@ async function Fun_ValidarDocumentos(agent, req, res, tipo){ } +function Func_FallbackComprobantes(agent, req, res){ + agent.context.set({name:'0-Bienvenida-Miscomprobantesdepago-followup', lifespan: 1 }); + return agent.add('Envíe el número de la opción que desee: \n\n1. Ver todos los comprobantes \n0. Volver al menu principal'); +} + +function Func_FallbackInfoTramites(agent, req, res){ + agent.context.set({name:'0-Bienvenida-InfTram-followup', lifespan: 1 }); + return agent.add(dialog.mensaje('info_tramites')); +} + + +async function Func_MisComprobantesPago(agent, req, res, lery){ + try { + let data_context = await ValidateDataUserContext(agent); + if(data_context){ + if(lery == 3){ + return Fun_ConsultarCCAtras(agent, req, res); + } + if(data_context != null && data_context != "" ){ + let legion = await funcion.ConsultaComprobantes(data_context.cedula, lery); + if(legion['ok'] == true){ + var msger = ''; + let coun = legion['data'].length; + if(lery == 1 && coun > 1){ + msger = coun == 1 ? '*ÚLTIMOS COMPROBANTES DE PAGO:*\n\n' : '*ÚLTIMOS '+coun+' COMPROBANTES DE PAGO:*\n\n'; + }else{ + msger = '*TODOS LOS COMPROBANTES DE PAGO:*\n\n'; + } + legion['data'].forEach((element, index) => { + msger = msger + '' + element['rubro'] + '\nFecha: ' + element['fecha'] + '\nValor págado: *' + element['valor_pagado'] + '*\nVer documento: ' + element['url'] + '\n\n'; + }); + agent.add(msger); + if(lery == 1){ + return Func_FallbackComprobantes(agent, req, res); + }else{ + return Fun_RetornarAlinicio(agent, req, res, funcion.conver_name(data_context.name)); + } + }else{ + agent.add(funcion.conver_name(data_context.name) +', '+ legion['msg']); + return Fun_RetornarAlinicio(agent, req, res, funcion.conver_name(data_context.name)); + } + } + }else{ + return Fun_WelcomeAgent(agent, req, res); + } + } catch (error) { + console-log(error); + return Fun_RetornarAlinicio(agent, req, res, funcion.conver_name(data_context.name)); + } +} + async function Fun_ConsultarClavesCatastrales(agent, req, res, _cedula = null){ try { let data_context = await ValidateDataUserContext(agent); if(data_context){ if(data_context != null && data_context != "" ){ - console.log(data_context+' ese'); if(_cedula == null){ _cedula = data_context.cedula; } - console.log(_cedula+' ese'); const regex = /^[0-9]*$/; if(regex.test(_cedula)){ let legion = await funcion.ConsultaClaves(_cedula); @@ -249,7 +395,6 @@ async function Fun_ConsultarClavesCatastrales(agent, req, res, _cedula = null){ if(element['valor']['boot']['anteriores'] != 'Recaudación al día'){ rec = rec + '\n' + element['valor']['boot']['actual'] + '\n' + element['valor']['boot']['total'] } - console.log(rec); if(index == (coun-1)){ agent.add(element['text'] + '\n' +element['direccion']+ '\n' + rec); return Fun_RetornarAlinicio(agent, req, res, funcion.conver_name(data_context.name)); @@ -287,6 +432,11 @@ module.exports = { "Fun_ConsultaPredios": Fun_ConsultaPredios, "Fun_ConsultarCCAtras": Fun_ConsultarCCAtras, "Fun_ListarMenu": Fun_ListarMenu, + "Fun_pruebas": Fun_pruebas, + "Func_InformacionTramites": Func_InformacionTramites, "Fun_ValidarDocumentos": Fun_ValidarDocumentos, + "Func_MisComprobantesPago": Func_MisComprobantesPago, + "Func_FallbackComprobantes": Func_FallbackComprobantes, + "Func_FallbackInfoTramites": Func_FallbackInfoTramites, "Fun_ConsultarClavesCatastrales": Fun_ConsultarClavesCatastrales } \ No newline at end of file