Inicialización de Soporte Técnico - support-v1-init
Información del Servicio
Endpoint: /api/support/v1/init
Método: POST
Versión: v1
Categoría: Soporte / Atención al cliente
1. Documentación del Servicio
Descripción general
El servicio support-v1-init permite inicializar una solicitud de soporte de primer nivel para un cliente, validando la información de origen, auditando la petición y retornando información relevante sobre posibles fallas masivas asociadas al número de conexión o cuenta de servicio. Pertenece a la categoría de atención y soporte técnico, y es utilizado principalmente para:
- Iniciar procesos de soporte técnico automatizado.
- Consultar si existen fallas masivas que afecten al cliente.
- Auditar y registrar la solicitud para trazabilidad.
- Determinar la tipología de atención según el origen y estado del servicio.
Casos de uso principales
- Un canal digital (web, app, WhatsApp) inicia soporte para un cliente.
- Se requiere saber si el cliente está afectado por una falla masiva antes de escalar el caso.
- Auditoría y control de solicitudes de soporte.
Especificación técnica
- Endpoint:
/api/support/v1/init - Método HTTP: POST
- Controlador:
SupportController(BotApp/Controllers/SupportController.cs) - Método:
Init(BaseRequestInit _BaseRequest) - Lógica de negocio:
SupportBusiness.GetInstance.Init(BaseRequest, request_name) - Acceso a datos y utilidades: Utiliza utilidades de auditoría, configuración y modelos de negocio para validar origen, registrar auditoría y consultar tipologías y fallas masivas.
Flujo de procesamiento
- Recepción de la solicitud en el controlador con el body
BaseRequestInit. - Conversión y validación de datos, incluyendo auditoría y validación de origen.
- Consulta de tipologías y verificación de si el endpoint está habilitado.
- Consulta de fallas masivas asociadas al cliente.
- Auditoría de la solicitud y generación de la respuesta.
- Retorno de la respuesta con información de cabecera y cuerpo (incluyendo posibles fallas masivas).
Dependencias principales
BaseRequestInit,InitRequest,Audit(request)BaseResponseInit,InitResponse,MassiveFailureModel(response)- Utilidades:
AuditUtil,ConfigurationUtil - Modelos:
RequestModel,ResultModel,ConfigurationModel
Seguridad y autenticación
- Autenticación:
[Authorize]en el controlador, requiere autenticación previa. - Validaciones: Validación de origen, canal y datos obligatorios.
- Auditoría: Registro de todas las solicitudes y respuestas.
- Errores: Manejo de errores y tipologías configurables.
Parámetros de entrada (Request)
Headers
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| System | Objeto (ver tabla abajo) | Sí | Información del sistema que realiza la petición |
| Property | Array de objetos | No* | Propiedades adicionales para la petición |
System
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | Sí | Nombre del sistema que consume el servicio |
| CorrelationID | string | Sí | Identificador único de la petición |
| ProcessingServer | string | Sí | Servidor que procesa la petición |
Property
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | Sí | Nombre de la propiedad |
| Value | string | Sí | Valor de la propiedad |
Body
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Audit | Objeto | Sí | Información de auditoría de la petición |
| Phone | string | No* | Número de conexión del cliente |
| Service_Account | string | No* | Cuenta de servicio del cliente |
*Al menos uno de los campos Phone o Service_Account debe estar presente.
Audit
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Canal | string | Sí | Canal desde el que se realiza la petición |
| Id_Device | string | No | Identificador del dispositivo |
| SO | string | No | Sistema operativo del dispositivo |
| IP_Address | string | No | Dirección IP desde donde se realiza la petición |
| WhatsApp_Phone_Number | string | No | Número de WhatsApp desde donde se realiza la petición |
Respuesta esperada (Response)
Headers
| Campo | Tipo | Descripción |
|---|---|---|
| System | Objeto (ver tabla abajo) | Información del sistema que responde |
| Service | Objeto (ver tabla abajo) | Estado y detalles de la ejecución |
| Property | Array de objetos | Propiedades adicionales de la respuesta |
System
| Campo | Tipo | Descripción |
|---|---|---|
| Name | string | Nombre del sistema que responde |
| CorrelationID | string | Identificador único de la petición |
| ProcessingServer | string | Servidor que procesó la petición |
Service
| Campo | Tipo | Descripción |
|---|---|---|
| Status | string | Estado de la ejecución (OK/Error) |
| ResponseDate | datetime | Fecha y hora de la respuesta |
| ProcessingServer | string | Servidor que procesó la petición |
| StatusDetail | array | Detalles de estado y errores |
Property
| Campo | Tipo | Descripción |
|---|---|---|
| Name | string | Nombre de la propiedad |
| Value | string | Valor de la propiedad |
Body
| Campo | Tipo | Descripción |
|---|---|---|
| MassiveFailure | Objeto | Información de falla masiva asociada (si aplica) |
MassiveFailure
| Campo | Tipo | Descripción |
|---|---|---|
| Affectation | string | Afectación de la falla masiva |
| CUN | string | CUN asociado a la falla |
| Description | string | Descripción general de la falla |
| Description_User | string | Descripción para el usuario |
| Description_Technical | string | Descripción técnica de la falla |
| End_Date | DateModel | Fecha estimada de cierre |
| Id | string | Id de la PQR asociada |
| Incident | string | Id del incidente en remedy |
| Priority | int? | Prioridad (1 Crítica, 2 Alta, 3 Media, 4 Baja) |
| Product | string | Producto afectado |
| Start_Date | DateModel | Fecha de inicio de la falla |
| TES | int? | Tiempo estimado de solución |
DateModel
| Campo | Tipo | Descripción |
|---|---|---|
| Date | datetime | Fecha sin formato |
| Format_1 | string | Formato dd/MM |
| Format_2 | string | Formato dd/MM/yyyy |
| Format_3 | string | Formato dd/MM/yyyy HH:mm:ss |
| Format_4 | string | Formato dd/MM/yyyy hh:mm:ss tt |
Manejo de errores
| Código | Descripción | Ejemplo |
|---|---|---|
| ERROR_03 | Error de validación de origen | Origen no válido o no encontrado |
| ERROR_04 | Error de datos obligatorios | Falta Phone y Service_Account |
| ERROR | Endpoint deshabilitado o error general | Servicio temporalmente fuera de línea |
2. Análisis de Componentes
Modelos y componentes
- Modelos base:
BaseRequestInit,InitRequest,Audit,BaseResponseInit,InitResponse,MassiveFailureModel,DateModel - Utilidades:
AuditUtil(auditoría),ConfigurationUtil(validación de origen y tipologías) - Patrones: Singleton para lógica de negocio (
SupportBusiness.GetInstance) - Reutilización: Modelos de cabecera y auditoría son usados en otros servicios de la plataforma.
- Referencias cruzadas: El endpoint es invocado desde otros procesos de soporte y validación de fallas.
Ejemplos de Request/Response
Solicitud (request)
json
{
"WSRequestHeader": {
"System": {
"Name": "CanalWeb",
"CorrelationID": "123456789",
"ProcessingServer": "web01"
},
"Property": [
{ "Name": "SessionId", "Value": "abc-123" }
]
},
"WSRequestBody": {
"Audit": {
"Canal": "WEB",
"Id_Device": "device-001",
"SO": "Android",
"IP_Address": "192.168.1.10",
"WhatsApp_Phone_Number": null
},
"Phone": "3001234567",
"Service_Account": null
}
}Respuesta exitosa
json
{
"WSResponseHeader": {
"System": {
"Name": "BotServices",
"CorrelationID": "123456789",
"ProcessingServer": "web01"
},
"Service": {
"Status": "OK",
"ResponseDate": "2024-06-01T12:34:56Z",
"ProcessingServer": "web01",
"StatusDetail": []
},
"Property": []
},
"WSResponseBody": {
"MassiveFailure": {
"Affectation": "Internet",
"CUN": "CUN12345",
"Description": "Falla masiva en la zona norte",
"Description_User": "Estamos trabajando para restablecer el servicio.",
"Description_Technical": "Corte de fibra óptica",
"End_Date": {
"Date": "2024-06-01T18:00:00Z",
"Format_1": "01/06",
"Format_2": "01/06/2024",
"Format_3": "01/06/2024 18:00:00",
"Format_4": "01/06/2024 06:00:00 PM"
},
"Id": "PQR98765",
"Incident": "INC123456",
"Priority": 1,
"Product": "INTERNET",
"Start_Date": {
"Date": "2024-06-01T10:00:00Z",
"Format_1": "01/06",
"Format_2": "01/06/2024",
"Format_3": "01/06/2024 10:00:00",
"Format_4": "01/06/2024 10:00:00 AM"
},
"TES": 120
}
}
}Respuesta de error
json
{
"WSResponseHeader": {
"System": {
"Name": "BotServices",
"CorrelationID": "123456789",
"ProcessingServer": "web01"
},
"Service": {
"Status": "Error",
"ResponseDate": "2024-06-01T12:35:00Z",
"ProcessingServer": "web01",
"StatusDetail": [
{
"ErrorCode": "ERROR_04",
"ErrorMessage": "Faltan datos obligatorios: Phone o Service_Account",
"ErrorMessageUser": "Por favor ingrese un número de conexión o cuenta de servicio."
}
]
},
"Property": []
},
"WSResponseBody": {
"MassiveFailure": null
}
}3. Diagramas Técnicos
3.1 Flujo de datos
mermaid
graph TD
A[Recepción de la solicitud] --> B[SupportController]
B --> C[SupportBusiness]
C --> D[Validación de origen y auditoría]
D --> E[Consulta de tipologías y fallas masivas]
E --> F[Generación de respuesta]
F --> G[Retorno al cliente]3.2 Arquitectura de clases
mermaid
classDiagram
BaseRequestInit --> BotBaseRequestHeader
BaseRequestInit --> InitRequest
InitRequest --> Audit
BaseResponseInit --> BotBaseResponseHeader
BaseResponseInit --> InitResponse
InitResponse --> MassiveFailureModel
MassiveFailureModel --> DateModel
BotBaseRequestHeader --> BotBaseRequestSystem
BotBaseRequestHeader --> BotBaseRequestProperty
BotBaseResponseHeader --> BotBaseResponseSystem
BotBaseResponseHeader --> BotBaseResponseService
BotBaseResponseHeader --> BotBaseResponseProperty3.3 Secuencia de ejecución
mermaid
sequenceDiagram
participant Cliente
participant API as SupportController
participant Negocio as SupportBusiness
participant Util as ConfigurationUtil/AuditUtil
Cliente->>API: POST /api/support/v1/init (BaseRequestInit)
API->>Negocio: Init(BaseRequest, request_name)
Negocio->>Util: Validar origen y auditar solicitud
Negocio->>Util: Consultar tipologías y fallas masivas
Negocio-->>API: BaseResponseInit (con MassiveFailure)
API-->>Cliente: Respuesta HTTP 200/4004. Políticas y Consideraciones
Políticas de seguridad
- Autenticación: Requiere autenticación previa (
[Authorize]). - Validación de datos: Se valida la presencia de
PhoneoService_Accounty el origen de la solicitud. - Auditoría: Todas las solicitudes y respuestas son auditadas.
- Errores: Se retornan códigos y mensajes claros en caso de error.
- Rate limits: No explícitos en el código, pero recomendados para exponer públicamente.
Recomendaciones y mejores prácticas
- Validar exhaustivamente los datos de entrada antes de procesar la solicitud.
- Centralizar la gestión de errores y mensajes para facilitar el mantenimiento.
- Implementar rate limiting si el endpoint se expone a canales públicos.
- Actualizar y documentar las tipologías y códigos de error para mantener la trazabilidad.
- Revisar y auditar periódicamente los logs de auditoría para detectar patrones anómalos.
- Asegurar la actualización de la información de fallas masivas y su integración con sistemas externos.