Registro de Encuestas de Satisfacción - scraping-v1-satisfactionsurvey
Información del Servicio
Endpoint: /api/scraping/v1/satisfactionsurvey
Método: POST
Versión: v1
Categoría: Integraciones Externas
1. Documentación del Servicio
Descripción general
Este servicio permite registrar las respuestas de una encuesta de satisfacción asociada a un caso o interacción de cliente gestionada por canales digitales. Su objetivo es almacenar las respuestas, auditar el proceso, controlar intentos de respuesta y notificar automáticamente a áreas responsables si se detectan respuestas críticas (por ejemplo, insatisfacción).
Pertenece a la categoría de Scraping y gestión de feedback de clientes.
Casos de uso principales:
- Registrar la satisfacción del cliente tras una atención digital.
- Auditar y controlar la cantidad de respuestas por caso.
- Notificar automáticamente respuestas negativas para seguimiento.
Especificación técnica
- Endpoint:
/api/scraping/v1/satisfactionsurvey - Método HTTP: POST
- Capas involucradas:
- Controlador:
ScrapingController(métodoSatisfactionSurvey_v1) - Lógica de negocio:
ScrapingBusiness.SatisfactionSurvey_v1 - Acceso a datos: Utilidades de persistencia y auditoría (
CRUD_MDM_INTERACCION_CD,AuditUtil,NotifyUtil)
- Controlador:
- Flujo de procesamiento:
- El controlador recibe la petición y extrae la IP del cliente.
- Se construye un objeto de request estándar y se envía a la capa de negocio.
- Se audita la entrada.
- Se valida la estructura y datos del request.
- Se obtiene el origen y tipologías de la operación.
- Se valida si el endpoint está habilitado.
- Se consulta o crea la interacción asociada al caso.
- Se actualizan o insertan las respuestas de la encuesta.
- Si alguna respuesta es crítica, se notifica automáticamente.
- Se audita la salida y se registra en BAM.
- Se retorna la respuesta estándar.
- Dependencias principales:
- Modelos:
BaseRequestSatisfactionSurvey,SatisfactionSurveyRequest,SatisfactionSurveyCustomerRequest,SatisfactionSurveyItemRequest - Utilidades:
AuditUtil,NotifyUtil,CRUD_MDM_INTERACCION_CD - Seguridad:
[Authorize]en el controlador
- Modelos:
- Seguridad y autenticación:
- Requiere autenticación (atributo
[Authorize]). - Valida cabecera de sistema y canal.
- Control de intentos por caso.
- Requiere autenticación (atributo
Parámetros de entrada (Request)
Headers
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| System.Name | string | Sí | Nombre del sistema que realiza la petición |
| System.CorrelationID | string | Sí | Identificador único de la transacción |
| System.ProcessingServer | string | Sí | Servidor de procesamiento |
| Property | array | No* | Propiedades adicionales de la petición |
*Opcional, pero puede ser requerido según integración.
Body
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Audit | objeto | Sí | Información de auditoría de la operación |
| Case_Number | string | Sí | Número de caso asociado a la encuesta |
| Customer | objeto | Sí | Información del cliente |
| Survey | array | Sí | Lista de preguntas y respuestas de la encuesta |
Detalle de objetos anidados:
Customer
Campo Tipo Obligatorio Descripción Document_Number string Sí Número de identificación del cliente Document_Type string Sí Tipo de identificación Survey (array de objetos)
Campo Tipo Obligatorio Descripción Question string Sí Pregunta de la encuesta Answer string Sí Respuesta dada por el cliente
Respuesta esperada (Response)
Headers
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| System.Name | string | Sí | Nombre del sistema que responde |
| System.CorrelationID | string | Sí | Identificador único de la transacción |
| System.ProcessingServer | string | Sí | Servidor de procesamiento |
| Service.Status | string | Sí | Estado de la ejecución (OK/ERROR) |
| Service.ResponseDate | datetime | Sí | Fecha de la respuesta |
| Service.ProcessingServer | string | Sí | Servidor de procesamiento |
| Service.StatusDetail | array | Sí | Detalles de estado y errores |
| Property | array | No | Propiedades adicionales |
StatusDetail (array de objetos)
Campo Tipo Obligatorio Descripción ErrorCode string Sí Código de error o estado ErrorDetailCode string No Detalle funcional del error ErrorMessage string No Mensaje técnico ErrorMessageUser string No Mensaje para el usuario
Body
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| WSResponseHeader | objeto | Sí | Cabecera estándar de respuesta |
Manejo de errores
| Código | Descripción | Ejemplo |
|---|---|---|
| ERROR_04 | Request nulo o mal formado | "El request es nulo" |
| ERROR_06 | Error al insertar la interacción | "No fue posible registrar la encuesta" |
| ERROR_07 | Intento de respuesta no permitido | "Ya existe una respuesta para este caso" |
| BOTERROR | Excepción no controlada | "se ha generado una excepcion no controlada" |
2. Análisis de Componentes
Modelos y componentes
- Modelos base utilizados:
BaseRequestSatisfactionSurveySatisfactionSurveyRequestSatisfactionSurveyCustomerRequestSatisfactionSurveyItemRequestBaseResponseSatisfactionSurveyBotBaseRequestHeader,BotBaseResponseHeader
- Utilidades y servicios comunes:
AuditUtil(auditoría de entrada/salida)NotifyUtil(notificación automática de respuestas críticas)CRUD_MDM_INTERACCION_CD(persistencia de interacciones)
- Patrones de diseño:
- Singleton para utilidades de negocio y auditoría.
- Separación de capas (controlador, negocio, datos).
- Componentes reutilizados:
- Modelos de request/response estándar en otros endpoints de Scraping.
- Utilidades de auditoría y notificación.
- Referencias cruzadas:
- Endpoint
/api/scraping/v1/validatesurveypara validación de encuestas. - Otros endpoints de Scraping para inserción y consulta de interacciones.
- Endpoint
Ejemplos de Request/Response
Solicitud (request)
json
{
"WSRequestHeader": {
"System": {
"name": "LUZ",
"correlationID": "LUZ-CC-79657111-222527",
"processingServer": null
},
"Property": [
{
"name": "MotivoContacto",
"value": "Reconexion_por_pago"
},
{
"name": "NumeroCaso",
"value": "23221521"
}
]
},
"WSRequestBody": {
"Customer": {
"Document_Number": "79657111",
"Document_Type": "CC"
},
"Survey": [
{
"Question": "Origen",
"Answer": "ENCUESTA_BOT"
},
{
"Question": "MotivoContacto",
"Answer": "Reconexion_por_pago"
},
{
"Question": "NumeroCaso",
"Answer": "23221521"
},
{
"Question": "Tecnologia",
"Answer": "FTTH"
},
{
"Question": "Pasillo",
"Answer": "Atención"
},
{
"Question": "SegmentoUEN",
"Answer": "Hogares"
}
],
"Audit": {
"Canal": "directline",
"Date": "{au_fecha}",
"Hour": "{au_hora}"
}
}
}Respuesta exitosa
json
{
"WSResponseHeader": {
"System": {
"name": "LUZ",
"correlationID": "LUZ-CC-79657805-222527",
"processingServer": null
},
"Service": {
"status": "OK",
"responseDate": "2025-04-16T22:25:28.3273172Z",
"processingServer": null,
"statusDetail": [
{
"errorCode": "OK_01",
"errorDetailCode": "La solicitud fue exitosa",
"errorMessage": "La solicitud LUZ-CC-79657805-222527 fue exitosa",
"errorMessageUser": null
}
]
},
"Property": [
{
"name": "MotivoContacto",
"value": "Reconexion_por_pago"
},
{
"name": "NumeroCaso",
"value": "23221521"
}
]
}
}Respuesta de error
json
{
"WSResponseHeader": {
"System": {
"Name": "MDM-SCRAPING",
"CorrelationID": "123e4567-e89b-12d3-a456-426614174000",
"ProcessingServer": "server-01"
},
"Service": {
"Status": "ERROR",
"ResponseDate": "2024-06-01T12:35:00Z",
"ProcessingServer": "server-01",
"StatusDetail": [
{
"ErrorCode": "ERROR_07",
"ErrorDetailCode": "Ya existe una respuesta para este caso",
"ErrorMessage": "Intento de respuesta duplicado",
"ErrorMessageUser": "Ya has respondido esta encuesta anteriormente."
}
]
},
"Property": []
}
}3. Diagramas Técnicos
3.1 Flujo de datos
mermaid
graph TD
A["Cliente/API Consumer"] --> B["ScrapingController"]
B --> C["ScrapingBusiness"]
C --> D["CRUD_MDM_INTERACCION_CD (Persistencia)"]
C --> E["AuditUtil (Auditoría)"]
C --> F["NotifyUtil (Notificación)"]
D --> G["Base de datos"]
F --> H["Correo/Alerta"]3.2 Arquitectura de clases
mermaid
classDiagram
class ScrapingController {
+SatisfactionSurvey_v1(request)
}
class ScrapingBusiness {
+SatisfactionSurvey_v1(request, name)
}
class BaseRequestSatisfactionSurvey
class SatisfactionSurveyRequest
class SatisfactionSurveyCustomerRequest
class SatisfactionSurveyItemRequest
class BaseResponseSatisfactionSurvey
class BotBaseRequestHeader
class BotBaseResponseHeader
ScrapingController --> ScrapingBusiness
ScrapingController --> BaseRequestSatisfactionSurvey
BaseRequestSatisfactionSurvey --> SatisfactionSurveyRequest
SatisfactionSurveyRequest --> SatisfactionSurveyCustomerRequest
SatisfactionSurveyRequest --> SatisfactionSurveyItemRequest
ScrapingBusiness --> BaseResponseSatisfactionSurvey
BaseResponseSatisfactionSurvey --> BotBaseResponseHeader
BotBaseRequestHeader <.. BaseRequestSatisfactionSurvey3.3 Secuencia de ejecución
mermaid
sequenceDiagram
participant Cliente
participant API as ScrapingController
participant Negocio as ScrapingBusiness
participant Persistencia as CRUD_MDM_INTERACCION_CD
participant Auditoria as AuditUtil
participant Notificacion as NotifyUtil
Cliente->>API: POST /api/scraping/v1/satisfactionsurvey
API->>Negocio: SatisfactionSurvey_v1(request)
Negocio->>Auditoria: Save_Request(entrada)
Negocio->>Persistencia: Get/Insert Interacción
Negocio->>Notificacion: Satisfaction_Survey (si aplica)
Negocio->>Auditoria: Save_Request(salida)
Negocio-->>API: BaseResponseSatisfactionSurvey
API-->>Cliente: WSResponseHeader4. Políticas y Consideraciones
Políticas de seguridad
- Autenticación: Requiere autenticación mediante
[Authorize]en el controlador. - Validaciones: Se valida la estructura del request, la existencia de la interacción y el control de intentos.
- Notificación: Respuestas críticas (insatisfacción) generan notificación automática.
- Auditoría: Todas las operaciones son auditadas (entrada y salida).
- Rate limits: No explícitos en el código, pero el control de intentos por caso actúa como limitador.
- SLA: No especificado en el código fuente, depende de la política de la plataforma.
Recomendaciones y mejores prácticas
- Validar exhaustivamente los datos de entrada para evitar requests nulos o mal formados.
- Centralizar la gestión de errores para mensajes más claros y homogéneos.
- Implementar rate limits explícitos si se detectan abusos o automatizaciones no deseadas.
- Monitorear las notificaciones automáticas para asegurar que los casos críticos sean gestionados oportunamente.
- Mantener actualizada la documentación de los modelos y flujos, ya que el endpoint depende de varios componentes reutilizables.
- Revisar y actualizar las tipologías de error para alinearlas con la experiencia de usuario y necesidades de negocio.