Como sabemos toda la configuración de las horas de servicio se realiza mediante la ejecución de un script y considerando todos los niveles de conocimiento del usuario, en este artículo crearemos una plantilla de chatbot que permite una fácil configuración de las horas de servicio.
Estructurando el Bot de atención al público
1. Crea el bot de servicio
Comenzaremos a estructurar el bot desde la plantilla de servicio, como se muestra en la imagen a continuación.
Adaptación de la plantilla de asistencia para verificar los asistentes disponibles por hilera
En el flujo de la plantilla de servicio, solo cambiaremos el bloque "2.0 - Verificar horas de servicio", por lo que nuestro flujo permanece así como la imagen de la plantilla de servicio a continuación.
2. Agrega el script "SetWorkSchedule"
Añadiendo este script en el bloque "2.0 - Verifica Horas de Servicio", presta atención al orden de los scripts. El script "SetWorkSchedule" debe ejecutarse antes que el script "CheckWorkTime", observa la imagen a continuación:
En este script en cuestión, no hay variables de entrada. A su vez, nuestra devolución se guardará en la variable workSchedule. Para nuestro ejemplo, supón que necesitamos los siguientes tiempos de disponibilidad.
|
Domingo |
Lunes |
Martes |
Miércoles |
Jueves |
Viernes |
Sábado |
Inicio de la atención [1] |
8:30 |
8:30 |
8:30 |
8:30 |
8:30 |
8:30 |
8:30 |
Fin de la atención [1] |
12:00 |
12:00 |
18:00 |
12:00 |
12:00 |
12:00 |
12:00 |
Inicio de la atención [2] |
----- |
13:00 |
----- |
13:00 |
13:00 |
13:00 |
----- |
Fin de la atención [2] |
----- |
15:00 |
----- |
18:00 |
18:00 |
18:00 |
----- |
Inicio de la atención [3] |
----- |
15:30 |
----- |
----- |
----- |
----- |
----- |
Fin de la atención [3] |
----- |
18:00 |
----- |
----- |
----- |
----- |
----- |
A continuación te mostraremos el script resultante que puede ser personalizado según sea necesario.
function run() {
let workSchedule = [
{
num: 0,
name: "Sunday",
spanishName: "Domingo",
workTime: [
{
start: "8:30",
end: "12:00"
}
]
},
{
num: 1,
name: "Monday",
spanishName: "Lunes",
workTime: [
{
start: "8:30",
end: "12:00"
},
{
start: "13:00",
end: "15:00"
},
{
start: "15:30",
end: "18:00"
}
]
},
{
num: 2,
name: "Tuesday",
spanishName: "Martes",
workTime: [
{
start: "8:30",
end: "18:00"
}
]
},
{
num: 3,
name: "Wednesday",
spanishName: "Miércoles",
workTime: [
{
start: "8:30",
end: "12:00"
},
{
start: "13:00",
end: "18:00"
}
]
},
{
num: 4,
name: "Thursday",
spanishName: "Jueves",
workTime: [
{
start: "8:30",
end: "12:00"
},
{
start: "13:00",
end: "18:00"
}
]
},
{
num: 5,
name: "Friday",
spanishName: "Viernes",
workTime: [
{
start: "8:30",
end: "12:00"
},
{
start: "13:00",
end: "18:00"
}
]
},
{
num: 6,
name: "Saturday",
spanishName: "Sábado",
workTime: [
{
start: "8:30",
end: "12:00"
}
]
}
];
return JSON.stringify(workSchedule); //Return value will be saved as "Return value variable" field name
}
Observa el resultado en la imagen de abajo.
3. Cambiar el script "CheckWorkTime"
Finalmente, cambiaremos el "CheckWorkTime", que debería ser el segundo script de "2.0 - Check Service Hours" (Verificar el Horario de Atención). El primer cambio está en las variables de entrada, para este ejemplo nuestras variables de entrada son: config.dateTimeOffset y workSchedule. La devolución del script aún se guardará en la variable isWorkTime.
A su vez, tenemos el propio script, se presenta a continuación y se puede transferir a tu bot y funcionará perfectamente, si se siguen los pasos aquí presentados.
// Receive the variables as parameters
function run(offset, weekSchedule) {
offset = parseInt(offset);
weekSchedule = JSON.parse(weekSchedule);
let today = nowUTC(offset);
if (isWorkDay(today, weekSchedule)) {
let todaySchedule = getTodaySchedule(weekSchedule, today);
let intervalTime = getIntervalTime(todaySchedule);
return checkTime(intervalTime, today);
}
return false;
}
function getIntervalTime(todaySchedule) {
let intervalTime = [];
for (let i = 0; i < todaySchedule.workTime.length; i++) {
intervalTime.push({
start: utcDate(todaySchedule.workTime[i].start),
end: utcDate(todaySchedule.workTime[i].end)
});
}
return intervalTime;
}
function checkTime(intervalTime, today) {
for (let i = 0; i < intervalTime.length; i++) {
if (today - intervalTime[i].start > 0 && intervalTime[i].end - today > 0)
return true;
}
return false;
}
function getTodaySchedule(weekSchedule, today) {
for (let i = 0; i < weekSchedule.length; i++) {
if (weekSchedule[i].num == today.getDay()) return weekSchedule[i];
}
}
//Get now UTC Date
function nowUTC(offset) {
let now = new Date();
let utc_timestamp = Date.UTC(
now.getUTCFullYear(),
now.getUTCMonth(),
now.getUTCDate(),
now.getUTCHours(),
now.getUTCMinutes(),
now.getUTCSeconds(),
now.getUTCMilliseconds()
);
return new Date(utc_timestamp + offset * 3600 * 1000);
}
//Get UTC Date
function utcDate(timeString) {
let now = new Date();
let hour = getValueByString("hour", timeString);
let minutes = getValueByString("minutes", timeString);
let utc_timestamp = Date.UTC(
now.getUTCFullYear(),
now.getUTCMonth(),
now.getUTCDate(),
hour,
minutes,
0,
0
);
return new Date(utc_timestamp);
}
//Get hour/minute by string with pattern HH:mm
function getValueByString(type, timeString) {
if (type === "hour") {
return parseInt(timeString.substring(0, timeString.indexOf(":")));
} else if (type === "minutes") {
return parseInt(
timeString.substring(timeString.indexOf(":") + 1, timeString.length)
);
}
return 0;
}
//Get if today is a work day
function isWorkDay(today, workDays) {
for (let i = 0; i < workDays.length; i++) {
if (workDays[i].num == today.getDay().toString()) return true;
}
return false;
}
Observaciones
Dado que este ejemplo se usó para verificar los horarios de atención al público realizada por humanos la ubicación para cambiar la configuración del tiempo de servicio no será la misma que la plantilla de servicio oficial. Observa dónde puedes cambiar la configuración.
Cambia el script "SetWorkSchedule", si deseas:
- Agregar o eliminar días de servicio.
- Agregar, cambiar o eliminar horas de servicio de un día.
Cambia las variables de configuración del chatbot, si deseas:
- Cambiar los husos horarios.
Personaliza tu plantilla
Todo el contenido de este artículo generó una plantilla que se puede configurar, descargar e importar a su chatbot, utilizando la herramienta a continuación: