Desde el portal autenticado, cada cliente tiene acceso a su propio espacio de tickets donde puede abrir nuevas solicitudes de soporte, consultar el estado de las existentes y continuar la conversación con el equipo de Banred. Toda la interacción ocurre de forma asincrónica: el cliente escribe su mensaje desde el portal y el agente responde desde el panel de administración, manteniéndose ambos informados mediante notificaciones.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/banredco/helpdesk/llms.txt
Use this file to discover all available pages before exploring further.
Lista de tickets
Ruta:/soporte/portal/tickets.php
La página muestra todos los tickets creados por el cliente actualmente autenticado, filtrados estrictamente por customer_id de la sesión. En la cabecera se presentan cuatro contadores de resumen:
| Contador | Descripción |
|---|---|
| Todos | Total de tickets del cliente sin filtro de estado. |
| Abiertos | Tickets con estado Abierto. |
| Pendientes | Tickets con estado Pendiente. |
| Resueltos | Tickets con estado Resuelto o Cerrado. |
| Columna | Campo en base de datos | Descripción |
|---|---|---|
| Ticket | ticket_number | Número único del ticket, precedido por #. |
| Asunto | subject | Asunto de la solicitud. |
| Estado | status_name / status_color | Etiqueta con color propio de cada estado. |
| Prioridad | priority_name / priority_color | Nivel de prioridad asignado por el agente. |
| Agente | agent_name (de users) | Nombre del agente asignado o “Sin asignar” si aún no tiene responsable. |
- Buscar por texto: campo libre que busca en
subjectyticket_numberusandoLIKE. - Filtrar por estado: menú desplegable con las opciones Abierto, Pendiente, Resuelto y Cerrado. La selección de “Todos los estados” elimina el filtro.
Crear ticket
Ruta:/soporte/portal/ticket-create.php
Iniciar sesión
El cliente debe estar autenticado en el portal. Si no lo está,
auth.php redirige automáticamente a /soporte/login.Ir al formulario de nuevo ticket
Desde el dashboard, haz clic en el acceso rápido Crear Ticket, o desde la lista de tickets pulsa el botón Nuevo Ticket en la parte superior derecha.
Completar el formulario
El formulario solicita los siguientes campos:
| Campo | Requerido | Descripción |
|---|---|---|
| Tipo | Sí | Selecciona el tipo de solicitud desde los tipos activos en ticket_types. |
| Prioridad | Sí | Selecciona la prioridad desde ticket_priorities (ordenadas por sort_order). |
| Asunto | Sí | Título corto que resume la solicitud. |
| Descripción | Sí | Cuerpo del mensaje inicial. Se inserta como primer mensaje en ticket_messages. |
| Adjuntos | No | Archivos opcionales. Formatos aceptados: .pdf, .jpg, .jpeg, .png, .doc, .docx, .xls, .xlsx. |
Enviar el formulario
Al hacer clic en Crear Ticket, el sistema:
- Calcula el siguiente número de ticket (
MAX(ticket_number) + 1) con verificación de colisión. - Genera un
public_tokenaleatorio conbin2hex(random_bytes(32)). - Inserta el ticket en la tabla
ticketsconsource = 'portal',status_id = 1(Abierto) ycustomer_idtomado de la sesión activa. - Inserta el mensaje inicial en
ticket_messages. - Si hay archivos adjuntos, los guarda en
uploads/tickets/y registra la referencia enticket_attachments. - Crea una notificación interna para el equipo de soporte (
"Nuevo ticket #N"). - Redirige a la vista del ticket recién creado.
Ver hilo de conversación
Ruta:/soporte/portal/ticket-view.php?id={id}
Esta página muestra el detalle completo de un ticket. Solo el cliente propietario del ticket puede acceder a él — la consulta SQL filtra simultáneamente por t.id y t.customer_id, por lo que cualquier intento de ver un ticket ajeno devuelve el error “Ticket no encontrado”.
Información en la cabecera del ticket:
- Número de ticket y asunto.
- Etiquetas de estado y prioridad con sus colores correspondientes.
- Barra de progreso visual con los pasos del ciclo de vida del ticket: Abierto → Pendiente → Esperando Cliente → (Escalado, si aplica) → Resuelto → (Cerrado, si aplica). El paso activo se resalta en morado oscuro y los pasos completados en verde.
ticket_messages ordenados por id ASC (cronológico). Cada burbuja se distingue visualmente:
- Mensajes del cliente (
customer_idno nulo): fondo violeta claro, etiqueta “Tú”. - Mensajes del agente (
customer_idnulo): fondo gris claro, etiqueta “Banred”.
/download.php?id={attachment_id}.
Responder al ticket:
El formulario de respuesta aparece al pie de la página cuando el ticket está en estado Abierto, Pendiente o Esperando Cliente. El cliente escribe su mensaje y puede adjuntar archivos adicionales. Al enviar:
- Se inserta un nuevo registro en
ticket_messages. - Se actualiza
activity_label = 'Cliente respondió'ylast_reply_at = NOW()en el ticket. - Se registra la acción en
ticket_audit_logcomo'Cliente respondió desde portal'. - Se crea una notificación interna para los agentes (
"Cliente respondió ticket #N").
status_id = 4) o Cerrado (status_id = 5), el formulario de respuesta directa se oculta y en su lugar aparece el botón Reabrir Ticket. Al hacer clic, se muestra el formulario de respuesta y, al enviarlo, el estado del ticket vuelve a status_id = 1 (Abierto) automáticamente.
Notificaciones
Ruta:/soporte/portal/notifications.php
La página muestra el historial completo de notificaciones del cliente, obtenidas de la tabla customer_notifications y ordenadas de más reciente a más antigua. Cada notificación incluye el título, el mensaje y la fecha/hora de creación, y actúa como enlace directo a la vista del ticket correspondiente.
Al acceder a esta página, todas las notificaciones pendientes del cliente se marcan automáticamente como leídas (is_read = 1). El ícono de la campana en el dashboard muestra un badge rojo con el conteo de notificaciones no leídas mientras haya alguna pendiente.
Los clientes únicamente ven sus propios tickets. La cláusula
WHERE customer_id = ? está presente en todas las consultas relacionadas con tickets y notificaciones, por lo que es imposible que un cliente acceda, de forma accidental o intencionada, a tickets creados por otros clientes.Cada vez que un agente responde a un ticket desde el panel de administración, el sistema envía automáticamente una notificación por correo electrónico al cliente utilizando
MailService. El correo se envía a la dirección registrada en la cuenta (customers.email) e incluye el contenido de la respuesta y un enlace directo al ticket en el portal.