// Capturar la fecha y hora actual // Función para agregar cero si es necesario function agregarCeroSiEsNecesario(valor) { if (valor < 10) { return '0' + valor; } else { return valor.toString(); } } // Función para obtener la fecha y hora actual function obtenerFechaHoraActual() { var ahora = new Date(); var fechaHora = agregarCeroSiEsNecesario(ahora.getDate()) + '/' + agregarCeroSiEsNecesario(ahora.getMonth() + 1) + ' ' + agregarCeroSiEsNecesario(ahora.getHours()) + ':' + agregarCeroSiEsNecesario(ahora.getMinutes()); return fechaHora; } $(document).ready(function() { var temporizadorMensajeAutomatico; function reiniciarTemporizadorMensajeAutomatico() { clearTimeout(temporizadorMensajeAutomatico); // Limpia el temporizador anterior temporizadorMensajeAutomatico = setTimeout(function() { // Establece un nuevo temporizador var chatArea = $('#chatArea'); var mensajeAutomatico = '
DeclaraChat: Gracias por ingresar al DeclaraChat, que tenga buen día. ' + obtenerFechaHoraActual() + '

'; chatArea.append(mensajeAutomatico); chatArea.scrollTop(chatArea.prop("scrollHeight")); }, 60000); // 5 minutos = 300000 milisegundos } $('#chatForm').submit(function(e) { e.preventDefault(); // Evita el envío tradicional del formulario var mensaje = $('input[name="mensaje"]').val(); var chatArea = $('#chatArea'); if (mensaje.trim() === '') return; // No enviar mensajes vacíos chatArea.append('
Ciudadano: ' + mensaje + ' ' + obtenerFechaHoraActual() + '
'+ '
'); // AJAX para enviar el mensaje al servidor y recibir la respuesta $.post("/preguntar", {mensaje: mensaje}, function(data) { var chatArea = $('#chatArea'); var respuestaHtml = ''; var muestraAyudaHtml = true; // Este mensaje se añadirá solo si la respuesta no incluye opciones var ayudaHtml = function() { return '
DeclaraChat: ¿En qué más te puedo ayudar?' + ' ' + obtenerFechaHoraActual() + '

'; }; if (data.esSaludoInicial) { muestraAyudaHtml = false; } var muestraAyudaHtml = data.muestraAyudaHtml; if (data.respuesta && data.respuesta.opciones) { // Respuesta que contiene opciones, manejo especial sin mensaje adicional de ayuda respuestaHtml += '
DeclaraChat:
'; data.respuesta.opciones.forEach(function(opcion) { respuestaHtml += '
' + opcion.texto + '
'; }); respuestaHtml += '

'; chatArea.append(respuestaHtml); } else { // Caso para detalles, respuesta directa, o ninguna respuesta if (data.respuesta && data.respuesta.detalles) { data.respuesta.detalles.forEach(function(detalle) { respuestaHtml += '
DeclaraChat: ' + detalle.texto + '

'; }); } else if (data.respuesta && data.respuesta.respuesta) { respuestaHtml = '
DeclaraChat: ' + data.respuesta.respuesta + ' ' + obtenerFechaHoraActual() + '

'; if (data.respuesta.respuesta.includes("Dime, ¿en qué te puedo apoyar hoy?")) { muestraAyudaHtml = false; // No mostrar mensaje de ayuda después de confirmación de nombre } } else if (data.respuesta && typeof data.respuesta === 'string') { respuestaHtml = '
DeclaraChat: ' + data.respuesta + ' ' + obtenerFechaHoraActual() + '

'; } else { respuestaHtml = '
DeclaraChat: Respuesta no disponible'+ ' ' + obtenerFechaHoraActual() + ''+'

'; } // Añadir la respuesta al chatArea chatArea.append(respuestaHtml); if (muestraAyudaHtml) { chatArea.append(ayudaHtml()); } // Añadir el mensaje adicional de ayuda después de la respuesta principal, excepto en respuestas con opciones } chatArea.scrollTop(chatArea.prop("scrollHeight")); $('input[name="mensaje"]').val(''); // Limpia el campo de entrada después de enviar reiniciarTemporizadorMensajeAutomatico(); // Reinicia el temporizador de mensaje automático si lo tienes implementado }); // Utilizar delegación de eventos para manejar clics en las opciones $('#chatArea').on('click', '.opcion', function() { if ($(this).closest('.opciones-container').hasClass('disabled')) return; var indiceSeleccionado = $(this).data('index'); var detallesTexto = $(this).find('.detalles').text(); var detallesPuntos = detallesTexto.split(/\. |\: |\" /); var primerElementoHtml = ''; // Inicializa el HTML del primer elemento var detallesItemsHtml = detallesPuntos.map(function(punto, index) { punto = punto.trim(); if (!punto) return ''; // Ignora elementos vacíos // Maneja el primer elemento por separado if (index === 0) { primerElementoHtml = '
' + punto + '
'; return ''; } else { // A partir del segundo elemento, crea la lista return '
  • ' + punto + '
  • '; } }).join(''); // Envuelve los elementos de la lista con indentación var detallesListaHtml = detallesItemsHtml ? '
      ' + detallesItemsHtml + '
    ' : ''; // Combina el primer elemento sin indentación con la lista con indentación var detallesHtml = '
    Declara Chat:
    ' + primerElementoHtml + detallesListaHtml + ' ' + obtenerFechaHoraActual() + '' + '
    ' ; $('#chatArea').append(detallesHtml); var ayudaHtml = '
    Declara Chat: ¿Te puedo ayudar con algo más? ' + ' ' + obtenerFechaHoraActual() + '

    '; $('#chatArea').append(ayudaHtml); $('#chatArea').scrollTop($('#chatArea').prop("scrollHeight")); $(this).closest('.opciones-container').addClass('disabled').find('.opcion').off('click').css('opacity', '0.5'); }); // Limpiar el campo de entrada después de enviar $('input[name="mensaje"]').val(''); reiniciarTemporizadorMensajeAutomatico(); }); var mensajeBienvenidaMostrado = false; $('#toggleChat').click(function() { $('#chatBox').show(); // Muestra el chat $(this).hide(); // Oculta el botón de abrir chat // Solo realiza la petición y muestra el mensaje de bienvenida si no se ha mostrado antes if (!mensajeBienvenidaMostrado) { $.get("/check_name", function(data) { var chatArea = $('#chatArea'); if (data.nombre) { var mensajeConNombre = '
    ' + '

    ¡Hola ' + data.nombre + ' 😃!, soy DeclaraChat, tu asistente virtual de DeclaraNet Chihuahua

    ' + '

    Quiero recordarte que ni yo ni nadie del equipo de la Secretaría de la Función Pública del Estado de Chihuahua te solicitará ningún tipo de información personal sensible mediante correo o liga que lleve a nuestra página de internet. Por tu seguridad NO la compartas

    ' + '

    Estos son algunos de los temas con los que puedo ayudarte:

    ' + '' + '

    Dime, ' + data.nombre + ' ¿En qué te puedo apoyar hoy?

    ' + ' ' + obtenerFechaHoraActual() + '' '
    '; chatArea.append(mensajeConNombre); } else { var mensajeInicial = '
    ' + '

    ¡Hola 😃!, soy DeclaraChat, tu asistente virtual de DeclaraNet Chihuahua

    ' + '

    Quiero recordarte que ni yo ni nadie del equipo de la Secretaría de la Función Pública del Estado de Chihuahua te solicitará ningún tipo de información personal sensible mediante correo o liga que lleve a nuestra página de internet. Por tu seguridad NO la compartas

    ' + '

    Estos son algunos de los temas con los que puedo ayudarte:

    ' + '' + '

    Dime, ¿Cual es tu nombre?

    ' + ' ' + obtenerFechaHoraActual() + '' '
    ' ; chatArea.append(mensajeInicial); } chatArea.scrollTop(chatArea.prop("scrollHeight")); mensajeBienvenidaMostrado = true; // Marca que el mensaje ya se mostró }); } reiniciarTemporizadorMensajeAutomatico(); }); $('#closeChat').click(function() { $('#chatBox').hide(); // Oculta el chat $('#toggleChat').show(); // Muestra el botón de abrir chat }); // Cierra el chat al hacer clic fuera de él $(document).mouseup(function(e) { var container = $("#chatBox"); // Si el objetivo del clic no es el contenedor ni un descendiente del contenedor if (!container.is(e.target) && container.has(e.target).length === 0) { container.hide(); // Oculta el chat $('#toggleChat').show(); // Muestra el botón de abrir chat } }); }); let mensaje = document.querySelector('.chat-container'); mensaje.addEventListener('mouseenter', function() { document.body.classList.add('no-scroll'); }); mensaje.addEventListener('mouseleave', function() { document.body.classList.remove('no-scroll'); });