Índice:
Como sabemos, toda la configuración del horario de atención se realiza mediante la ejecución de un script, y considerando todos los niveles de conocimiento del usuario, en este artículo crearemos un modelo] de chatbot que permite la configuración fácil del horario de atención.
Agregar el script "SetWorkSchedule"
Al agregar este script al bloque "2.0 - Verifica Horario de Atención", asegúrese de seguir el orden de los scripts. El script "SetWorkSchedule" debe ejecutarse antes del script "CheckWorkTime":
En este script en particular, no hay variables de entrada. A su vez, nuestro resultado se guardará en la variable workSchedule. Para nuestro ejemplo, supongamos que necesitamos los siguientes horarios de disponibilidad.
Domingo | Lunes | Martes | Miércoles | Jueves | Viernes | Sábado | |
Inicio de atención [1] | 8:30 | 8:30 | 8:30 | 8:30 | 8:30 | 8:30 | 8:30 |
Fin de atención [1] | 12:00 | 12:00 | 18:00 | 12:00 | 12:00 | 12:00 | 12:00 |
Inicio de atención [2] | ----- | 13:00 | ----- | 13:00 | 13:00 | 13:00 | ----- |
Fin de atención [2] | ----- | 15:00 | ----- | 18:00 | 18:00 | 18:00 | ----- |
Inicio de atención [3] | ----- | 15:30 | ----- | ----- | ----- | ----- | ----- |
Fin de atención [3] | ----- | 18:00 | ----- | ----- | ----- | ----- | ----- |
El script resultante se presenta a continuación y se puede personalizar 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
}
Modificar el script "CheckWorkTime"
Por fin, cambiaremos el "CheckWorkTime", que debe ser el segundo script del “2.0-Verifica Horario de Atención”.
La primera modificación es en las variables de entrada, para este ejemplo nuestras variables de entrada son: config.dateTimeOffset y workSchedule. El resultado del script será guardado aún en la variable isWorkTime.
Por otro lado, tenemos el script propiamente dicho, se presenta a continuación y puede ser transferido a su bot y funcionará perfectamente, siempre que se sigan los pasos descritos aquí.
// 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, today);
return checkTime(intervalTime, today);
}
return false;
}
function getIntervalTime(todaySchedule, today) {
let intervalTime = [];
for (let i = 0; i < todaySchedule.workTime.length; i++) {
intervalTime.push({
start: utcDate(todaySchedule.workTime[i].start, today),
end: utcDate(todaySchedule.workTime[i].end, today)
});
}
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.getUTCDay()) 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, today) {
let hour = getValueByString("hour", timeString);
let minutes = getValueByString("minutes", timeString);
let utc_timestamp = Date.UTC(
today.getUTCFullYear(),
today.getUTCMonth(),
today.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;
}
Nota: Dado que este ejemplo se utilizó para verificación de horarios para atención humana, el lugar de cambio para la definición del horario de atención no será el mismo que el del template de atención oficial. Vea dónde puede cambiar las configuraciones. |
Cambie en el script "SetWorkSchedule" si quiere:
- Agregar o quitar días de atención.
- Agregar, cambiar o quitar horarios de atención de un día.
Cambie en las variables de configuración del chatbot si quiere:
- Cambiar la zona horaria.
Personalizar su template
Todo el contenido de este artículo ha generado un template que se puede configurar, descargar e importar en su chatbot a partir de la siguiente herramienta:
Para obtener más información, visita la discusión sobre el tema en nuestra comunidad o los videos en nuestro canal. 😃