Cómo configurar horario de atención y días festivos 18 de agosto de 2026 20:36 Actualización Resumen Configurando su horario de atención Cómo configurar períodos sin atención Configurando el horario de atención vía Script (opcional) Consejos ResumenEsta documentación explica detalladamente cómo crear y configurar la programación de horarios de su operación de atención. Aprenderá a definir colas, establecer períodos sin operación y configurar la condición de salida en el Builder para dirigir los contactos cuando el equipo no esté disponible. Configurando su horario de atención Acceda al submenú Horario de atención, que se encuentra en el menú Atención en el encabezado del Portal. En la nueva pantalla, cree un horario definiendo los siguientes parámetros: Nombre y descripción; Colas pertenecientes; Programación (días y horarios de la operación); Períodos sin atención. Guarde la configuración. El horario estará creado, pero requerirá la configuración de una condición de salida en su Builder para comenzar a funcionar. Después de guardar, su horario estará creado, pero aún no estará funcionando. Para que la validación de su horario de atención se aplique, es obligatorio INDICAR UNA CONDICIÓN DE SALIDA en el cuadro de atención de su Builder. Acceda al menú Builder. Seleccione el bloque de atención humana de su bot. Navegue hasta la pestaña Condiciones de salida. Ubique y haga clic en la opción + Condición para horario de atención. Defina a qué bloque seguirá la conversación en caso de que su equipo de atención no esté disponible. Publique su bot para que el horario de atención comience a funcionar activamente en su operación. Con esto, solo resta publicar su bot para que el horario de atención comience a funcionar en su operación. Cómo configurar períodos sin atenciónEsta configuración es útil para días festivos, recesos o pausas específicas en la operación.Navegue en el horario de atención deseado hasta la sección Períodos sin atención. Haga clic en el botón Registrar período. Complete los componentes de configuración que se muestran en pantalla: Nombre del período: Campo obligatorio para personalizar el título del período. Día completo: Si está activado, el período sin atención será bloqueado y configurado para iniciar a las 00:00 y finalizar a las 23:59, en los respectivos días de inicio y fin. Es decir, el período siempre comenzará a las 00:00 del día inicial y terminará a las 23:59 del día final. Día inicial: Fecha de inicio del período sin atención. Día final: Fecha de término del período sin atención. Definir hora (inicio): Hora en que el período sin atención comienza a operar. Definir hora (fin): Hora en que el período sin atención finaliza. Ejemplos prácticos de configuración de períodos Operación sin atención los días 10/01 y 11/01: Haga clic en el botón Registrar período para agregar un nuevo período. Complete el campo con un título para su período. Mantenga la opción Día completo habilitada. Defina la fecha de inicio para el día 10 y la fecha de término para el día 11. Operación sin atención el día 20/01, con regreso el día 21/01, a las 13h: Haga clic en el botón Registrar período para agregar un nuevo período. Complete el campo con un título para su período. Deshabilite la opción Día completo. Defina la fecha de inicio para el día 20/01. Defina la hora de inicio a las 00:00. Defina la fecha de término para el día 21/01. Defina la hora de fin a las 12:59. Configurando el horario de atención vía Script (opcional)Si opta por realizar esta configuración mediante Script, siga los siguientes pasos:1. Agregando el script SetWorkSchedule Acceda al bloque 2.0 - Verifica Horario Atención. Cree una acción de entrada del tipo ejecutar un script. Cambie el nombre del script a SetWorkSchedule. El script SetWorkSchedule debe ejecutarse obligatoriamente antes del script CheckWorkTime. No defina variables de entrada para este script. Guarde el retorno en la variable workSchedule. El script resultante se presenta a continuación y puede ser personalizado según necesidad: function run() { let workSchedule = [ { num: 0, name: "Sunday", portugueseName: "Domingo", workTime: [ { start: "8:30", end: "12:00" } ] }, { num: 1, name: "Monday", portugueseName: "Lunes", workTime: [ { start: "8:30", end: "12:00" }, { start: "13:00", end: "15:00" }, { start: "15:30", end: "18:00" } ] }, { num: 2, name: "Tuesday", portugueseName: "Martes", workTime: [ { start: "8:30", end: "18:00" } ] }, { num: 3, name: "Wednesday", portugueseName: "Miércoles", workTime: [ { start: "8:30", end: "12:00" }, { start: "13:00", end: "18:00" } ] }, { num: 4, name: "Thursday", portugueseName: "Jueves", workTime: [ { start: "8:30", end: "12:00" }, { start: "13:00", end: "18:00" } ] }, { num: 5, name: "Friday", portugueseName: "Viernes", workTime: [ { start: "8:30", end: "12:00" }, { start: "13:00", end: "18:00" } ] }, { num: 6, name: "Saturday", portugueseName: "Sábado", workTime: [ { start: "8:30", end: "12:00" } ] } ]; return JSON.stringify(workSchedule); }2. Agregando el script CheckWorkTime Acceda nuevamente al bloque 2.0 - Verifica Horario Atención. Cree una segunda acción de entrada del tipo ejecutar un script. Cambie el nombre del script a CheckWorkTime. Configure las variables de entrada pasando estrictamente: config.dateTimeOffset y workSchedule. Guarde el retorno en la variable isWorkTime. Transfiera el script a continuación a su bot: // Recibe las variables como parámetros 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]; } } //Obtiene la fecha UTC actual 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); } //Obtiene la fecha UTC 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); } //Obtiene hora/minuto por cadena con patrón 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; } //Obtiene si hoy es día laboral function isWorkDay(today, workDays) { for (let i = 0; i < workDays.length; i++) { if (workDays[i].num == today.getDay().toString()) return true; } return false; }3. Publicando el flujoPublique el flujo para aplicar todas las configuraciones.Para continuar con la configuración de días festivos vía Script, siga los pasos a continuación:1. Creación del script de verificación Acceda al flujo del bot. Cree un nuevo bloque llamado 1.0 - Verifica feriado. Acceda al bloque 1.0 - Verifica feriado. Cree una acción de entrada del tipo ejecutar un script. Cambie el nombre del script a checkHoliday. No es necesario pasar variables de entrada. Guarde el retorno del script en una variable llamada isHoliday. Borre el script que viene por defecto. Pegue el código a continuación: function run() { const today = new Date(); const holidays = ["01-01", "15-04", "21-04", "01-05", "16-06", "07-09", "12-10", "02-11", "15-11", "25-12", "14-10"]; const month = ((today.getUTCMonth() + 1) <= 9) ? "0" + (today.getUTCMonth() + 1) : (today.getUTCMonth() + 1); const day = today.getUTCDate() <= 9 ? "0" + today.getUTCDate() : today.getUTCDate(); const monthDay = day + "-" + month; return holidays.includes(monthDay); }Presione las teclas control + s para guardar. 2. Configurando las condiciones de salida para días festivos Aún en el bloque 1.0 - Verifica feriado, vaya a la pestaña condiciones de salida. Cree una condición verificando si la variable isHoliday es igual a true. Dirija la condición true a un nuevo bloque llamado 1.1 - Es feriado. En el bloque 1.1 - Es feriado, configure un mensaje informando que en el día determinado no hay atención debido al día festivo. Dirija la salida estándar del bloque 1.1 - Es feriado al Inicio del flujo o al redireccionamiento del bot principal, en caso de uso de router. Cree una segunda condición en el bloque 1.0 - Verifica feriado verificando si la variable isHoliday es igual a false. Dirija la condición false para continuar al bloque de verificación de horario (recomendamos el nombre 2.0 - Verifica Horario Atención).3. Personalizando días festivosCualquier cambio de fechas debe realizarse únicamente en el comando let holidays.let holidays = ["01-01", "15-04", "21-04", "01-05", "16-06", "07-09","12-10", "02-11", "15-11", "25-12"]; Por defecto, el script ya incluye algunos días festivos nacionales, a continuación algunas indicaciones sobre cómo incluir o excluir días festivos.IncluirLa inclusión de una nueva fecha debe realizarse siempre en formato “dd-MM”, si utiliza otro símbolo como barra (/) en lugar del guion (-) no funcionará, ejemplo de inclusión del día 31-12. Agregue una coma Inserte la fecha deseada en el formato “dd-MM” entre comillas dobles Presione ctrl+ s para guardar el script Publique el flujo let holidays = ["01-01", "15-04", "21-04", "01-05", "16-06", "07-09","12-10", "02-11", "15-11", "25-12", “31-12”];Nota: Como buena práctica, se sugiere incluir la fecha en orden cronológico para facilitar futuras modificaciones, ejemplo: feriado 28-02 (carnaval), debe incluirse entre 01-01 y 15-04, como se muestra a continuación. ["01-01", “28-02”, "15-04", "21-04", "01-05", "16-06", "07-09","12-10", "02-11", "15-11", "25-12"]; ExcluirLa exclusión de alguna fecha específica debe ir acompañada de la eliminación de una coma, ya que cada día festivo debe estar separado solo por una coma. Ejemplo antes: let holidays = ["01-01", "15-04", "21-04", "01-05", "16-06", "07-09","12-10", "02-11", "15-11", "25-12"];Ejemplo después de eliminar 15-04let holidays = ["01-01", "21-04", "01-05", "16-06", "07-09","12-10", "02-11", "15-11", "25-12"]; Sugerencia de estructuraLa siguiente sugerencia utiliza el bot de plantilla de atención humana proporcionado, es importante que la implementación se adecue a la estructura de cada bot. Cree un nuevo bloque llamado 1.0 - Verifica feriado que recibirá las configuraciones detalladas anteriormente. Cree un nuevo bloque llamado 1.1 - Es feriado que tendrá un mensaje informando que en el día determinado no hay atención debido al día festivo y dirigiendo su salida estándar al Inicio del flujo, o redireccionamiento al bot principal, en caso de uso de router. En el bloque 1.0 - Verifica feriado cree dos condiciones de salida para verificar la variable isHoliday, si es true, envía a 1.1 - Es feriado, si es false, envía y continúa al bloque de verificación de horario. Consejos Como buena práctica, se sugiere incluir las fechas de días festivos en orden cronológico para facilitar futuras modificaciones. Ejemplo: feriado 28-02 (carnaval) debe incluirse entre 01-01 y 15-04. Modifique el script SetWorkSchedule si desea agregar, cambiar o eliminar días y horarios de atención. Modifique las variables de configuración del chatbot si desea cambiar la zona horaria. Dado que este ejemplo se utilizó para la verificación de horarios para atención humana, el lugar para modificar la definición del horario de atención no será el mismo que en la plantilla oficial de atención. ¿Necesita más ayuda? Explore nuestros contenidos en la Blip Academy o en la Blip Community, vea tutoriales en nuestro canal de YouTube o resuelva sus dudas en nuestro canal de atención 😃 Artículos relacionados Ajustando horario del Builder Pausas personalizadas Creación de mensajes interactivos en WhatsApp Envío de Mensajes Activos de WhatsApp en Blip Desk Configuración del archivo de audiencia - Envío masivo de notificaciones