Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
node_crisp
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
web
node_crisp
Commits
0c2b831f
Commit
0c2b831f
authored
Sep 13, 2021
by
Sebastián Long
Browse files
Options
Browse Files
Download
Plain Diff
Finish CHATBOTS-10
parents
979c4243
6911a16d
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
288 additions
and
30 deletions
+288
-30
default.json
config/default.json
+5
-1
crisp.js
crisp.js
+24
-0
is.js
endpoints/is.js
+38
-10
ips_turnos_bajo_demanda.js
handlers/ips_turnos_bajo_demanda.js
+165
-0
is_turnos_programados.js
handlers/is_turnos_programados.js
+9
-8
pasos_ips_turnos_bajo_demanda.js
handlers/pasos_ips_turnos_bajo_demanda.js
+17
-0
pasos_is_turnos_programados.js
handlers/pasos_is_turnos_programados.js
+0
-0
index.js
index.js
+29
-10
package.json
package.json
+1
-1
No files found.
config/default.json
View file @
0c2b831f
...
@@ -11,5 +11,9 @@
...
@@ -11,5 +11,9 @@
},
},
"isBaseUrl"
:
""
,
"isBaseUrl"
:
""
,
"sendingbluBaseUrl"
:
""
,
"sendingbluBaseUrl"
:
""
,
"sendingblueListId"
:
54
"sendingblueListId"
:
54
,
"crispWebsiteIdIpsTurnosBajoDemanda"
:
""
,
"crispWebsiteIdIsTurnosProgramados"
:
""
,
"idAgendaIPS"
:
""
,
"idDominioIPS"
:
""
}
}
\ No newline at end of file
crisp.js
View file @
0c2b831f
...
@@ -5,12 +5,14 @@ const config = require('config');
...
@@ -5,12 +5,14 @@ const config = require('config');
var
identifier
=
config
.
get
(
'credenciales.crisp.identifier'
);
var
identifier
=
config
.
get
(
'credenciales.crisp.identifier'
);
var
key
=
config
.
get
(
'credenciales.crisp.key'
);
var
key
=
config
.
get
(
'credenciales.crisp.key'
);
let
SIGUIENTE_PASO
=
'siguiente_paso'
;
let
SIGUIENTE_PASO
=
'siguiente_paso'
;
const
DELAY_MS
=
1000
;
let
localData
=
{};
let
localData
=
{};
CrispClient
.
authenticate
(
identifier
,
key
);
CrispClient
.
authenticate
(
identifier
,
key
);
async
function
sendTextMessage
(
website_id
,
session_id
,
message
)
{
async
function
sendTextMessage
(
website_id
,
session_id
,
message
)
{
await
composeMessage
(
website_id
,
session_id
,
DELAY_MS
);
await
CrispClient
.
websiteConversations
.
sendMessage
(
await
CrispClient
.
websiteConversations
.
sendMessage
(
website_id
,
website_id
,
session_id
,
{
session_id
,
{
...
@@ -22,7 +24,28 @@ async function sendTextMessage(website_id, session_id, message) {
...
@@ -22,7 +24,28 @@ async function sendTextMessage(website_id, session_id, message) {
);
);
}
}
async
function
composeMessage
(
website_id
,
session_id
,
ms
){
await
CrispClient
.
websiteConversations
.
composeMessage
(
website_id
,
session_id
,
{
"type"
:
"start"
,
"from"
:
"operator"
}
);
await
new
Promise
(
resolve
=>
setTimeout
(
resolve
,
ms
));
await
CrispClient
.
websiteConversations
.
composeMessage
(
website_id
,
session_id
,
{
"type"
:
"stop"
,
"from"
:
"operator"
}
);
}
async
function
showWritingIcon
(
website_id
,
session_id
){
await
composeMessage
(
website_id
,
session_id
,
DELAY_MS
);
}
async
function
sendPickerMessage
(
website_id
,
session_id
,
id
,
title
,
choices
)
{
async
function
sendPickerMessage
(
website_id
,
session_id
,
id
,
title
,
choices
)
{
await
composeMessage
(
website_id
,
session_id
,
DELAY_MS
);
await
CrispClient
.
websiteConversations
.
sendMessage
(
await
CrispClient
.
websiteConversations
.
sendMessage
(
website_id
,
website_id
,
session_id
,
{
session_id
,
{
...
@@ -83,6 +106,7 @@ async function updateUserData(website_id, session_id, data) {
...
@@ -83,6 +106,7 @@ async function updateUserData(website_id, session_id, data) {
module
.
exports
=
module
.
exports
=
{
{
CrispClient
:
CrispClient
,
CrispClient
:
CrispClient
,
showWritingIcon
:
showWritingIcon
,
sendTextMessage
:
sendTextMessage
,
sendTextMessage
:
sendTextMessage
,
sendPickerMessage
:
sendPickerMessage
,
sendPickerMessage
:
sendPickerMessage
,
getSiguientePaso
:
getSiguientePaso
,
getSiguientePaso
:
getSiguientePaso
,
...
...
endpoints/is.js
View file @
0c2b831f
...
@@ -43,7 +43,7 @@ module.exports =
...
@@ -43,7 +43,7 @@ module.exports =
});
});
},
},
getMedicosByName
:
async
function
(
nombreMedico
,
idProvincia
)
{
getMedicosByName
:
async
function
(
nombreMedico
,
idProvincia
)
{
return
await
isClient
.
get
(
`/medicos/atencion?id_provincia=
${
idProvincia
}
&nombre=
${
nombreMedico
}
`
)
return
await
isClient
.
get
(
`/medicos/atencion?id_provincia=
${
idProvincia
}
&nombre=
${
nombreMedico
}
&todos=1
`
)
.
then
(
async
function
(
response
)
{
.
then
(
async
function
(
response
)
{
return
response
.
data
.
data
;
return
response
.
data
.
data
;
})
})
...
@@ -52,7 +52,7 @@ module.exports =
...
@@ -52,7 +52,7 @@ module.exports =
});
});
},
},
getEspecialidadesMedico
:
async
function
(
idPersonaInstitucional
,
idProvincia
)
{
getEspecialidadesMedico
:
async
function
(
idPersonaInstitucional
,
idProvincia
)
{
return
await
isClient
.
get
(
`/atenciones?id_provincia=
${
idProvincia
}
&id_persona_institucional=
${
idPersonaInstitucional
}
`
)
return
await
isClient
.
get
(
`/atenciones?id_provincia=
${
idProvincia
}
&id_persona_institucional=
${
idPersonaInstitucional
}
&todos=1
`
)
.
then
(
async
function
(
response
)
{
.
then
(
async
function
(
response
)
{
return
response
.
data
.
data
;
return
response
.
data
.
data
;
})
})
...
@@ -81,20 +81,15 @@ module.exports =
...
@@ -81,20 +81,15 @@ module.exports =
existeUsuario
:
async
function
(
tipo_documento
,
numero_documento
,
fecha_nacimiento
,
sexo
){
existeUsuario
:
async
function
(
tipo_documento
,
numero_documento
,
fecha_nacimiento
,
sexo
){
return
await
isClient
.
get
(
`/watson/existe_persona?tipo_documento=
${
tipo_documento
}
&numero_documento=
${
numero_documento
}
&fecha_nacimiento=
${
fecha_nacimiento
}
&sexo=
${
sexo
}
`
)
return
await
isClient
.
get
(
`/watson/existe_persona?tipo_documento=
${
tipo_documento
}
&numero_documento=
${
numero_documento
}
&fecha_nacimiento=
${
fecha_nacimiento
}
&sexo=
${
sexo
}
`
)
.
then
(
async
function
(
response
)
{
.
then
(
async
function
(
response
)
{
return
response
.
data
.
existe
;
return
response
.
data
;
})
})
.
catch
(
function
(
error
)
{
.
catch
(
function
(
error
)
{
console
.
log
(
error
);
console
.
log
(
error
);
});
});
},
},
crearTurno
:
async
function
(
tipoDocumento
,
numeroDocumento
,
fechaNacimiento
,
sexo
,
mail
,
telefono
,
idHorario
,
fechaHora
)
{
crearTurno
:
async
function
(
idPersonaFederada
,
idHorario
,
fechaHora
)
{
return
await
isClient
.
post
(
'/watson/confirmar_reserva'
,
{
return
await
isClient
.
post
(
'/watson/confirmar_reserva'
,
{
"tipo_documento"
:
tipoDocumento
,
"id_persona_federada"
:
idPersonaFederada
,
"numero_documento"
:
numeroDocumento
,
"fecha_nacimiento"
:
fechaNacimiento
,
"sexo"
:
sexo
,
"mail"
:
mail
,
"telefono_celular"
:
telefono
,
"id_horario"
:
idHorario
,
"id_horario"
:
idHorario
,
"fecha_hora"
:
fechaHora
"fecha_hora"
:
fechaHora
})
})
...
@@ -104,5 +99,38 @@ module.exports =
...
@@ -104,5 +99,38 @@ module.exports =
.
catch
(
function
(
error
)
{
.
catch
(
function
(
error
)
{
console
.
log
(
error
);
console
.
log
(
error
);
});
});
},
federarUsuario
:
async
function
(
tipoDocumento
,
numeroDocumento
,
fechaNacimiento
,
sexo
,
mail
,
telefonoCelular
,
idDominio
)
{
let
data
=
{
tipo_documento
:
tipoDocumento
,
numero_documento
:
numeroDocumento
,
fecha_nacimiento
:
fechaNacimiento
,
sexo
:
sexo
,
mail
:
mail
,
telefono_celular
:
telefonoCelular
};
if
(
idDominio
!==
null
){
data
.
id_dominio
=
idDominio
;
}
return
await
isClient
.
post
(
`/watson/federar_persona`
,
data
)
.
then
(
async
function
(
response
)
{
return
response
.
data
;
})
.
catch
(
function
(
error
)
{
console
.
log
(
error
);
return
{
success
:
false
};
});
},
crearTurnoBajoDemanda
:
async
function
(
idAgenda
,
idPersonaFederada
)
{
return
await
isClient
.
post
(
`/watson/confirmar_reserva_espontanea?id_agenda=
${
idAgenda
}
&id_persona_federada=
${
idPersonaFederada
}
`
)
.
then
(
async
function
(
response
)
{
return
response
.
data
;
})
.
catch
(
function
(
error
)
{
console
.
log
(
error
);
return
{
success
:
false
};
});
}
}
}
}
\ No newline at end of file
handlers/ips_turnos_bajo_demanda.js
0 → 100644
View file @
0c2b831f
const
crisp
=
require
(
'../crisp.js'
);
const
utils
=
require
(
'../utils.js'
);
const
pasos
=
require
(
'./pasos_ips_turnos_bajo_demanda.js'
);
const
is
=
require
(
'../endpoints/is.js'
)
const
config
=
require
(
'config'
);
const
LINK_CONDICIONES_DE_USO
=
'https://www.integrandosalud.com/es-ar/ip-condiciones-de-uso/'
;
const
ID_AGENDA_IPS
=
config
.
get
(
'idAgendaIPS'
);
const
ID_DOMINIO_IPS
=
config
.
get
(
'idDominioIPS'
);
const
SI
=
'SI'
;
const
NO
=
'NO'
;
const
TIPO_DOCUMENTO
=
'tipo_documento'
;
const
NUMERO_DOCUMENTO
=
'numero_documento'
;
const
FECHA_NACIMIENTO
=
'fecha_nacimiento'
;
const
SEXO
=
'sexo'
;
const
TELEFONO
=
'telefono'
;
const
CORREO
=
'correo'
;
function
getChoiceElegida
(
message
){
for
(
let
i
=
0
;
i
<
message
.
content
.
choices
.
length
;
i
++
)
{
if
(
message
.
content
.
choices
[
i
].
selected
===
true
)
{
return
message
.
content
.
choices
[
i
];
}
}
}
function
fechaArgToFechaUsa
(
fechaArg
){
let
year
=
fechaArg
.
split
(
'/'
)[
2
];
let
month
=
fechaArg
.
split
(
'/'
)[
1
];
let
day
=
fechaArg
.
split
(
'/'
)[
0
];
let
fechaUSA
=
year
+
"-"
+
month
+
"-"
+
day
;
return
fechaUSA
;
}
async
function
limpiarDatos
(
message
,
userData
,
website_id
,
session_id
){
await
crisp
.
updateUserData
(
website_id
,
session_id
,
{});
}
module
.
exports
=
{
bienvenida
:
async
function
(
message
,
userData
,
website_id
,
session_id
)
{
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
'Hola! Soy Emilia, tu asistente virtual'
);
await
this
.
ask_acepta_condiciones
(
message
,
userData
,
website_id
,
session_id
);
},
ask_acepta_condiciones
:
async
function
(
message
,
userData
,
website_id
,
session_id
)
{
await
crisp
.
setSiguientePaso
(
website_id
,
session_id
,
pasos
.
RESP_ACEPTA_CONDICIONES
,
userData
);
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
`Para continuar, debes aceptar las\n condiciones del servicio:
${
LINK_CONDICIONES_DE_USO
}
`
);
let
choices
=
[];
choices
.
push
(
utils
.
armarChoice
(
SI
,
SI
));
choices
.
push
(
utils
.
armarChoice
(
NO
,
NO
));
await
crisp
.
sendPickerMessage
(
website_id
,
session_id
,
pasos
.
RESP_ACEPTA_CONDICIONES
,
'¿Aceptas las condiciones de uso del servicio?'
,
choices
);
},
resp_acepta_condiciones
:
async
function
(
message
,
userData
,
website_id
,
session_id
)
{
const
aceptaCondiciones
=
getChoiceElegida
(
message
).
value
;
if
(
aceptaCondiciones
===
SI
){
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
'Para que puedas atenderte con un
\
n profesional necesito algunos datos'
);
await
crisp
.
setSiguientePaso
(
website_id
,
session_id
,
pasos
.
ASK_TIPO_DOCUMENTO
,
userData
);
await
this
.
ask_tipo_documento
(
message
,
userData
,
website_id
,
session_id
);
}
else
{
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
'Gracias por contactarnos!'
);
await
limpiarDatos
(
message
,
userData
,
website_id
,
session_id
);
}
},
ask_tipo_documento
:
async
function
(
message
,
userData
,
website_id
,
session_id
){
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
'Seleccioná tu tipo de documento'
);
let
choices
=
[];
choices
.
push
(
utils
.
armarChoice
(
"DNI"
,
"DNI"
));
choices
.
push
(
utils
.
armarChoice
(
"CDM"
,
"CDM"
));
choices
.
push
(
utils
.
armarChoice
(
"CED"
,
"CED"
));
choices
.
push
(
utils
.
armarChoice
(
"CIE"
,
"CIE"
));
choices
.
push
(
utils
.
armarChoice
(
"CM"
,
"CM"
));
await
crisp
.
sendPickerMessage
(
website_id
,
session_id
,
pasos
.
RESP_TIPO_DOCUMENTO
,
"Tipo de documento"
,
choices
);
await
crisp
.
setSiguientePaso
(
website_id
,
session_id
,
pasos
.
RESP_TIPO_DOCUMENTO
,
userData
);
},
resp_tipo_documento
:
async
function
(
message
,
userData
,
website_id
,
session_id
){
let
tipoDocumentoElegido
=
getChoiceElegida
(
message
);
userData
[
TIPO_DOCUMENTO
]
=
tipoDocumentoElegido
.
value
;
await
this
.
ask_numero_documento
(
message
,
userData
,
website_id
,
session_id
);
},
ask_numero_documento
:
async
function
(
message
,
userData
,
website_id
,
session_id
){
await
crisp
.
setSiguientePaso
(
website_id
,
session_id
,
pasos
.
RESP_NUMERO_DOCUMENTO
,
userData
);
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
'Ingresá tu número de documento'
);
},
resp_numero_documento
:
async
function
(
message
,
userData
,
website_id
,
session_id
){
userData
[
NUMERO_DOCUMENTO
]
=
message
.
content
;
await
this
.
ask_fecha_nacimiento
(
message
,
userData
,
website_id
,
session_id
);
},
ask_fecha_nacimiento
:
async
function
(
message
,
userData
,
website_id
,
session_id
){
await
crisp
.
setSiguientePaso
(
website_id
,
session_id
,
pasos
.
RESP_FECHA_NACIMIENTO
,
userData
);
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
'Ingresá tu fecha de nacimiento (DD/MM/AAAA)'
);
},
resp_fecha_nacimiento
:
async
function
(
message
,
userData
,
website_id
,
session_id
){
userData
[
FECHA_NACIMIENTO
]
=
message
.
content
;
await
this
.
ask_sexo
(
message
,
userData
,
website_id
,
session_id
);
},
ask_sexo
:
async
function
(
message
,
userData
,
website_id
,
session_id
){
let
choices
=
[];
choices
.
push
(
utils
.
armarChoice
(
"M"
,
"Masculino"
));
choices
.
push
(
utils
.
armarChoice
(
"F"
,
"Femenino"
));
await
crisp
.
setSiguientePaso
(
website_id
,
session_id
,
pasos
.
RESP_SEXO
,
userData
);
await
crisp
.
sendPickerMessage
(
website_id
,
session_id
,
pasos
.
RESP_SEXO
,
'Seleccioná tu sexo'
,
choices
);
},
resp_sexo
:
async
function
(
message
,
userData
,
website_id
,
session_id
){
userData
[
SEXO
]
=
getChoiceElegida
(
message
).
value
;
await
this
.
ask_telefono
(
message
,
userData
,
website_id
,
session_id
);
},
ask_telefono
:
async
function
(
message
,
userData
,
website_id
,
session_id
){
await
crisp
.
setSiguientePaso
(
website_id
,
session_id
,
pasos
.
RESP_TELEFONO
,
userData
);
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
'Ingresá tu teléfono'
);
},
resp_telefono
:
async
function
(
message
,
userData
,
website_id
,
session_id
){
userData
[
TELEFONO
]
=
message
.
content
;
await
this
.
ask_correo
(
message
,
userData
,
website_id
,
session_id
);
},
ask_correo
:
async
function
(
message
,
userData
,
website_id
,
session_id
){
await
crisp
.
setSiguientePaso
(
website_id
,
session_id
,
pasos
.
RESP_CORREO
,
userData
);
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
'Ingresá tu correo electrónico'
);
},
resp_correo
:
async
function
(
message
,
userData
,
website_id
,
session_id
){
await
crisp
.
showWritingIcon
(
website_id
,
session_id
);
userData
[
CORREO
]
=
message
.
content
;
let
existeUsuario
=
await
is
.
existeUsuario
(
userData
[
TIPO_DOCUMENTO
],
userData
[
NUMERO_DOCUMENTO
],
fechaArgToFechaUsa
(
userData
[
FECHA_NACIMIENTO
]),
userData
[
SEXO
]);
if
(
existeUsuario
.
existe
){
if
(
existeUsuario
.
id_persona_federada
!==
null
){
await
this
.
crearTurnoBajoDemanda
(
ID_AGENDA_IPS
,
existeUsuario
.
id_persona_federada
,
message
,
userData
,
website_id
,
session_id
);
}
else
{
let
federarUsuario
=
await
is
.
federarUsuario
(
userData
[
TIPO_DOCUMENTO
],
userData
[
NUMERO_DOCUMENTO
],
fechaArgToFechaUsa
(
userData
[
FECHA_NACIMIENTO
]),
userData
[
SEXO
],
userData
[
CORREO
],
userData
[
TELEFONO
],
ID_DOMINIO_IPS
);
if
(
federarUsuario
.
id_persona_federada
!==
null
){
await
this
.
crearTurnoBajoDemanda
(
ID_AGENDA_IPS
,
federarUsuario
.
id_persona_federada
,
message
,
userData
,
website_id
,
session_id
)
}
else
{
await
this
.
errorDatosInvalidos
(
message
,
userData
,
website_id
,
session_id
);
}
}
}
else
{
await
this
.
errorDatosInvalidos
(
message
,
userData
,
website_id
,
session_id
);
}
},
crearTurnoBajoDemanda
:
async
function
(
idAgenda
,
idPersonaFederada
,
message
,
userData
,
website_id
,
session_id
){
let
turnoDemandaResp
=
await
is
.
crearTurnoBajoDemanda
(
idAgenda
,
idPersonaFederada
);
if
(
!
turnoDemandaResp
.
success
){
//Error al crear turno
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
'Disculpame, en este momento no puedo contactarte con un profesional'
);
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
'Por favor, intentá de nuevo en unos minutos'
);
await
limpiarDatos
(
message
,
userData
,
website_id
,
session_id
);
}
else
{
//Turno reservado exitosamente
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
`Hacé click sobre "Iniciar consulta" para iniciar tu consulta`
);
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
`[Iniciar consulta](
${
turnoDemandaResp
.
link_vc
}
)`
);
await
limpiarDatos
(
message
,
userData
,
website_id
,
session_id
);
}
},
errorDatosInvalidos
:
async
function
(
message
,
userData
,
website_id
,
session_id
){
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
'Uno de los datos ingresados es inválido'
);
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
'Intentemos nuevamente'
);
await
limpiarDatos
(
message
,
userData
,
website_id
,
session_id
);
await
this
.
ask_tipo_documento
(
message
,
userData
,
website_id
,
session_id
);
}
}
\ No newline at end of file
handlers.js
→
handlers
/is_turnos_programados
.js
View file @
0c2b831f
const
crisp
=
require
(
'./crisp.js'
);
const
crisp
=
require
(
'.
.
/crisp.js'
);
const
utils
=
require
(
'./utils.js'
);
const
utils
=
require
(
'.
.
/utils.js'
);
const
pasos
=
require
(
'./pasos.js'
);
const
pasos
=
require
(
'./pasos
_is_turnos_programados
.js'
);
const
is
=
require
(
'./endpoints/is.js'
)
const
is
=
require
(
'.
.
/endpoints/is.js'
)
let
LINK_SOLICITAR_ACCESO_POR_EMAIL
=
'https://www.integrandosalud.com/es-ar/integrando-pacientes-solicitar-acceso-por-email/'
;
let
LINK_SOLICITAR_ACCESO_POR_EMAIL
=
'https://www.integrandosalud.com/es-ar/integrando-pacientes-solicitar-acceso-por-email/'
;
...
@@ -420,7 +420,8 @@ module.exports =
...
@@ -420,7 +420,8 @@ module.exports =
resp_correo
:
async
function
(
message
,
userData
,
website_id
,
session_id
){
resp_correo
:
async
function
(
message
,
userData
,
website_id
,
session_id
){
userData
[
CORREO
]
=
message
.
content
;
userData
[
CORREO
]
=
message
.
content
;
await
crisp
.
updateCrispData
(
website_id
,
session_id
,
userData
[
CORREO
],
userData
[
TIPO_DOCUMENTO
],
userData
[
NUMERO_DOCUMENTO
],
userData
[
FECHA_NACIMIENTO
],
userData
[
SEXO
]);
await
crisp
.
updateCrispData
(
website_id
,
session_id
,
userData
[
CORREO
],
userData
[
TIPO_DOCUMENTO
],
userData
[
NUMERO_DOCUMENTO
],
userData
[
FECHA_NACIMIENTO
],
userData
[
SEXO
]);
if
(
!
await
is
.
existeUsuario
(
userData
[
TIPO_DOCUMENTO
],
userData
[
NUMERO_DOCUMENTO
],
userData
[
FECHA_NACIMIENTO
],
userData
[
SEXO
])
===
true
){
let
existeUsuario
=
await
is
.
existeUsuario
(
userData
[
TIPO_DOCUMENTO
],
userData
[
NUMERO_DOCUMENTO
],
fechaArgToFechaUsa
(
userData
[
FECHA_NACIMIENTO
]),
userData
[
SEXO
]);
if
(
!
existeUsuario
.
existe
){
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
'No se pudieron validar sus datos. Solicite por favor su acceso por email ingresando al siguiente link'
'No se pudieron validar sus datos. Solicite por favor su acceso por email ingresando al siguiente link'
);
);
...
@@ -428,8 +429,7 @@ module.exports =
...
@@ -428,8 +429,7 @@ module.exports =
return
;
return
;
}
}
let
turnoElegido
=
userData
[
TURNO_ELEGIDO
];
let
turnoElegido
=
userData
[
TURNO_ELEGIDO
];
let
resp
=
await
is
.
crearTurno
(
userData
[
TIPO_DOCUMENTO
],
userData
[
NUMERO_DOCUMENTO
],
fechaArgToFechaUsa
(
userData
[
FECHA_NACIMIENTO
]),
let
resp
=
await
is
.
crearTurno
(
existeUsuario
.
id_persona_federada
,
turnoElegido
.
horarioId
,
turnoElegido
.
fechaHora
);
userData
[
SEXO
],
userData
[
CORREO
],
0
,
turnoElegido
.
horarioId
,
turnoElegido
.
fechaHora
);
if
(
resp
.
success
===
true
){
if
(
resp
.
success
===
true
){
let
fechaHoraArg
=
fechaHoraUsaToFechaHoraArg
(
turnoElegido
.
fechaHora
);
let
fechaHoraArg
=
fechaHoraUsaToFechaHoraArg
(
turnoElegido
.
fechaHora
);
let
fechaArg
=
fechaHoraArg
.
split
(
" "
)[
0
];
let
fechaArg
=
fechaHoraArg
.
split
(
" "
)[
0
];
...
@@ -445,7 +445,8 @@ module.exports =
...
@@ -445,7 +445,8 @@ module.exports =
}
}
else
{
else
{
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
'Ha ocurrido un error al reservar el turno, intente nuevamente'
);
await
crisp
.
sendTextMessage
(
website_id
,
session_id
,
'Ha ocurrido un error al reservar el turno, intente nuevamente'
);
await
crisp
.
updateUserData
(
website_id
,
session_id
,
{});
userData
=
{};
await
crisp
.
updateUserData
(
website_id
,
session_id
,
userData
);
await
this
.
ask_reservar_turno
(
message
,
userData
,
website_id
,
session_id
);
await
this
.
ask_reservar_turno
(
message
,
userData
,
website_id
,
session_id
);
}
}
},
},
...
...
handlers/pasos_ips_turnos_bajo_demanda.js
0 → 100644
View file @
0c2b831f
module
.
exports
=
Object
.
freeze
({
BIENVENIDA
:
'bienvenida'
,
ASK_ACEPTA_CONDICIONES
:
'ask_acepta_condiciones'
,
RESP_ACEPTA_CONDICIONES
:
'resp_acepta_condiciones'
,
ASK_TIPO_DOCUMENTO
:
'ask_tipo_documento'
,
RESP_TIPO_DOCUMENTO
:
'resp_tipo_documento'
,
ASK_NUMERO_DOCUMENTO
:
'ask_numero_documento'
,
RESP_NUMERO_DOCUMENTO
:
'resp_numero_documento'
,
ASK_FECHA_NACIMIENTO
:
'ask_fecha_nacimiento'
,
RESP_FECHA_NACIMIENTO
:
'resp_fecha_nacimiento'
,
ASK_SEXO
:
'ask_sexo'
,
RESP_SEXO
:
'resp_sexo'
,
ASK_TELEFONO
:
'ask_telefono'
,
RESP_TELEFONO
:
'resp_telefono'
,
ASK_CORREO
:
'ask_correo'
,
RESP_CORREO
:
'resp_correo'
});
\ No newline at end of file
pas
os.js
→
handlers/pasos_is_turnos_programad
os.js
View file @
0c2b831f
File moved
index.js
View file @
0c2b831f
const
axios
=
require
(
'axios'
);
const
axios
=
require
(
'axios'
);
const
config
=
require
(
'config'
);
const
config
=
require
(
'config'
);
const
handlers
=
require
(
'./handlers.js'
);
const
handlerTurnosProgramados
=
require
(
'./handlers/is_turnos_programados.js'
);
const
handlerTurnosBajoDemanda
=
require
(
'./handlers/ips_turnos_bajo_demanda'
);
const
crisp
=
require
(
'./crisp.js'
);
const
crisp
=
require
(
'./crisp.js'
);
const
utils
=
require
(
'./utils.js'
);
const
utils
=
require
(
'./utils.js'
);
const
pasos
=
require
(
'./pasos.js'
);
const
pasosTurnosProgramados
=
require
(
'./handlers/pasos_is_turnos_programados.js'
);
const
pasosIpsTurnosBajoDemanda
=
require
(
'./handlers/pasos_ips_turnos_bajo_demanda'
);
const
is
=
require
(
'./endpoints/is.js'
);
const
is
=
require
(
'./endpoints/is.js'
);
const
sendinblue
=
require
(
'./endpoints/sendinblue.js'
);
const
sendinblue
=
require
(
'./endpoints/sendinblue.js'
);
const
WEBSITE_ID_IPS_TURNOS_BAJO_DEMANDA
=
config
.
get
(
'crispWebsiteIdIpsTurnosBajoDemanda'
);
const
WEBSITE_ID_TURNOS_PROGRAMADOS
=
config
.
get
(
'crispWebsiteIdIsTurnosProgramados'
);
crisp
.
CrispClient
.
userProfile
.
get
().
then
(
function
(
myProfile
)
{
console
.
log
(
`El chatbot esta escuchando eventos (profile name:
${
myProfile
.
first_name
}
)`
);
});
crisp
.
CrispClient
.
on
(
"message:updated"
,
async
function
(
message
)
{
crisp
.
CrispClient
.
on
(
"message:updated"
,
async
function
(
message
)
{
darSiguientePaso
(
message
,
message
.
website_id
,
message
.
session_id
);
darSiguientePaso
(
message
,
message
.
website_id
,
message
.
session_id
);
})
})
async
function
darSiguientePaso
(
message
,
website_id
,
session_id
)
{
let
siguientePaso
=
await
crisp
.
getSiguientePaso
(
message
.
website_id
,
message
.
session_id
);
let
userData
=
await
crisp
.
getUserData
(
website_id
,
session_id
);
handlers
[
siguientePaso
](
message
,
userData
,
website_id
,
session_id
);
}
crisp
.
CrispClient
.
on
(
"message:send"
,
async
function
(
message
)
{
crisp
.
CrispClient
.
on
(
"message:send"
,
async
function
(
message
)
{
if
(
message
.
content
.
toUpperCase
()
===
'REINICIAR'
){
if
(
message
.
content
.
toUpperCase
()
===
'REINICIAR'
){
await
crisp
.
updateUserData
(
message
.
website_id
,
message
.
session_id
,
{});
await
crisp
.
updateUserData
(
message
.
website_id
,
message
.
session_id
,
{});
}
}
let
siguientePaso
=
await
crisp
.
getSiguientePaso
(
message
.
website_id
,
message
.
session_id
);
let
siguientePaso
=
await
crisp
.
getSiguientePaso
(
message
.
website_id
,
message
.
session_id
);
if
(
siguientePaso
==
null
)
{
if
(
siguientePaso
==
null
)
{
enviarUserAListaSendingblue
(
message
.
website_id
,
message
.
session_id
,
config
.
get
(
'sendingblueListId'
));
if
(
message
.
website_id
===
WEBSITE_ID_TURNOS_PROGRAMADOS
){
await
crisp
.
setSiguientePaso
(
message
.
website_id
,
message
.
session_id
,
pasos
.
ASK_RESERVAR_TURNO
)
enviarUserAListaSendingblue
(
message
.
website_id
,
message
.
session_id
,
config
.
get
(
'sendingblueListId'
));
await
crisp
.
setSiguientePaso
(
message
.
website_id
,
message
.
session_id
,
pasosTurnosProgramados
.
ASK_RESERVAR_TURNO
)
}
if
(
message
.
website_id
===
WEBSITE_ID_IPS_TURNOS_BAJO_DEMANDA
){
await
crisp
.
setSiguientePaso
(
message
.
website_id
,
message
.
session_id
,
pasosIpsTurnosBajoDemanda
.
BIENVENIDA
)
}
}
}
await
darSiguientePaso
(
message
,
message
.
website_id
,
message
.
session_id
);
await
darSiguientePaso
(
message
,
message
.
website_id
,
message
.
session_id
);
});
});
async
function
darSiguientePaso
(
message
,
website_id
,
session_id
)
{
let
siguientePaso
=
await
crisp
.
getSiguientePaso
(
message
.
website_id
,
message
.
session_id
);
let
userData
=
await
crisp
.
getUserData
(
website_id
,
session_id
);
if
(
website_id
===
WEBSITE_ID_TURNOS_PROGRAMADOS
){
handlerTurnosProgramados
[
siguientePaso
](
message
,
userData
,
website_id
,
session_id
);
}
if
(
website_id
===
WEBSITE_ID_IPS_TURNOS_BAJO_DEMANDA
){
handlerTurnosBajoDemanda
[
siguientePaso
](
message
,
userData
,
website_id
,
session_id
);
}
}
async
function
enviarUserAListaSendingblue
(
website_id
,
session_id
,
listId
){
async
function
enviarUserAListaSendingblue
(
website_id
,
session_id
,
listId
){
try
{
try
{
let
crispUsrData
=
await
crisp
.
getCrispData
(
website_id
,
session_id
);
let
crispUsrData
=
await
crisp
.
getCrispData
(
website_id
,
session_id
);
...
...
package.json
View file @
0c2b831f
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
"description"
:
"Servidor para chatbot de Crisp"
,
"description"
:
"Servidor para chatbot de Crisp"
,
"main"
:
"index.js"
,
"main"
:
"index.js"
,
"scripts"
:
{
"scripts"
:
{
"start"
:
"node index.js"
,
"start"
:
"node
mon
index.js"
,
"autoload"
:
"nodemon index.js"
,
"autoload"
:
"nodemon index.js"
,
"test"
:
"echo
\"
Error: no test specified
\"
&& exit 1"
"test"
:
"echo
\"
Error: no test specified
\"
&& exit 1"
},
},
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment