Actualización de datos básicos de cliente para WhatsApp - whatsapp-v1-update
Información del Servicio
Endpoint: /api/whatsapp/v1/update
Método: POST
Versión: v1
Categoría: Gestión de clientes / WhatsApp
Documentación del Servicio
Descripción general
El servicio whatsapp-v1-update es un endpoint que permite actualizar los datos básicos de un cliente en el sistema MAX asociados a WhatsApp. Este servicio recibe información del cliente, acceso y auditoría, y actualiza el registro digital correspondiente, permitiendo mantener la información sincronizada y actualizada para operaciones y notificaciones vía WhatsApp.
Categoría de negocio: Gestión de clientes digitales.
Casos de uso principales:
- Actualización de datos de contacto de un cliente (nombre, correo, documento).
- Registro o actualización de aceptación de términos y condiciones para WhatsApp.
- Sincronización de información de acceso y parámetros adicionales asociados al cliente.
Especificación técnica
- Endpoint completo:
/api/whatsapp/v1/update - Método HTTP: POST
- Capas involucradas:
- Controlador: WhatsAppController
- Lógica de negocio: WhatsAppBusiness.Update_v1
- Acceso a datos: WhatsAppUtil.Update (CRUD_MDM_REGISTRO_DIGITAL)
Flujo de procesamiento:
- Recepción y validación de la petición en el controlador.
- Conversión de datos y validación de estructura de request.
- Obtención del origen de la petición y configuración de tipologías.
- Validación del tipo de documento del cliente.
- Consulta del cliente en el sistema.
- Actualización del registro digital con los nuevos datos.
- Generación de respuesta con estado de la operación.
- Auditoría de salida y registro BAM.
Dependencias principales:
- Sistema de auditoría (AuditUtil)
- Utilidades de configuración (ConfigurationUtil)
- Utilidades de cliente (CustomerUtil2)
- Utilidades de WhatsApp (WhatsAppUtil)
- Base de datos MongoDB para registro digital
Consideraciones de seguridad:
- Autenticación mediante [Authorize] en el controlador
- Validación de estructura de datos de entrada
- Auditoría completa de entrada y salida
- Validación de tipos de documento permitidos
Parámetros de entrada (Request)
Headers
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| WSRequestHeader | object | Sí | Cabecera de la petición con información del sistema |
Body
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Access | object | Sí | Datos del acceso del cliente |
| Audit | object | No | Auditoría de la petición |
| Customer | object | Sí | Datos del cliente a actualizar |
Estructura de objetos anidados:
Estructura de WSRequestHeader
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| System | object | No | Información asociada al sistema |
| Property | array | No | Propiedades asociadas al consumo del servicio web |
Estructura de WSRequestHeader.System
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | Sí | Nombre del sistema |
| CorrelationID | string | Sí | Identificador de la petición |
| ProcessingServer | string | Sí | Servidor de procesamiento del sistema |
Estructura de WSRequestHeader.Property
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | Sí | Nombre de la propiedad |
| Value | string | Sí | Valor de la propiedad |
Estructura de Access
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Id | string | Sí | Id del acceso (por ejemplo: 3102392934) |
| Name | string | Sí | Nombre del acceso |
| Parameters | array | No | Parámetros adicionales |
Estructura de Access.Parameters
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Parameter | string | Sí | Parámetro |
| Value | string | Sí | Valor del parámetro |
Estructura de Audit
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Canal | string | No | Canal sobre el cual se hizo la petición |
| Id_Device | string | No | Identificador del dispositivo móvil |
| 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 |
Estructura de Customer
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Document_Number | string | Sí | Número de Documento |
| Document_Type | string | Sí | Tipo de Documento |
| string | No | Correo electrónico del Cliente | |
| Names | string | No | Nombres del Cliente |
| Lastnames | string | No | Apellidos del Cliente |
| TyC | bool | No | Aceptación de TyC (Términos y Condiciones) por parte del Cliente |
Respuesta esperada (Response)
Headers
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| WSResponseHeader | object | Sí | Cabecera de la respuesta |
Body
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| WSResponseHeader | object | Sí | Cabecera de la respuesta con información del sistema y servicio |
Estructura de objetos anidados:
Estructura de WSResponseHeader
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| System | object | No | Información asociada al sistema |
| Service | object | No | Información asociada a la ejecución del servicio |
| Property | array | No | Arreglo de propiedades asociado al servicio |
Estructura de WSResponseHeader.System
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | No | Nombre del sistema |
| CorrelationID | string | No | Identificador de la petición |
| ProcessingServer | string | No | Servidor de procesamiento del sistema |
Estructura de WSResponseHeader.Service
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Status | string | No | Estado de la ejecución del servicio web |
| ResponseDate | DateTime | No | Fecha de la respuesta |
| ProcessingServer | string | No | Servidor de procesamiento de la solicitud |
| StatusDetail | array | No | Detalle del procesamiento de la solicitud |
Estructura de WSResponseHeader.Service.StatusDetail
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| ErrorCode | string | No | Código del error |
| ErrorDetailCode | string | No | Detalle del error |
| ErrorMessage | string | No | Mensaje del error |
| ErrorMessageUser | string | No | Mensaje del error para el usuario |
Estructura de WSResponseHeader.Property
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| Name | string | No | Nombre de la propiedad |
| Value | string | No | Valor de la propiedad |
Manejo de errores
| Código | Descripción | Ejemplo |
|---|---|---|
| ERROR_00 | Error interno del sistema | Error interno del sistema: |
| ERROR_03 | Error en validación de origen | Error en validación de origen de la petición |
| ERROR_04 | Error en estructura de datos | Error en la estructura de datos de entrada |
| ERROR_06 | Tipo de documento no válido | El tipo de documento no es válido |
| ERROR_07 | Error en actualización de registro | Error al actualizar el registro digital |
| OK_01 | Operación exitosa | Actualización realizada correctamente |
Análisis de Componentes
Modelos y componentes
Modelos base utilizados:
- BaseRequestUpdateWhatsApp: Modelo principal de request
- BaseResponseUpdateWhatsApp: Modelo principal de response
- UpdateWhatsAppRequest: Body de la petición
- UpdateWhatsAppAccessRequest: Datos de acceso
- UpdateWhatsAppCustomerRequest: Datos del cliente
- UpdateWhatsAppParameterRequest: Parámetros adicionales
Utilidades y servicios comunes:
- WhatsAppBusiness: Lógica de negocio principal
- WhatsAppUtil: Utilidades para operaciones de WhatsApp
- AuditUtil: Utilidades de auditoría
- ConfigurationUtil: Utilidades de configuración
- CustomerUtil2: Utilidades de cliente
Patrones de diseño implementados:
- Singleton pattern en WhatsAppBusiness
- Repository pattern para acceso a datos
- Factory pattern para creación de objetos
- Strategy pattern para manejo de errores
Componentes reutilizados:
- BotBaseRequestHeader: Cabecera base de request
- BotBaseResponseHeader: Cabecera base de response
- BaseAudit: Auditoría base
- MDM_REGISTRO_DIGITAL: Modelo de registro digital
Referencias cruzadas:
- WhatsAppController: Controlador principal
- WhatsApp.asmx.cs: Servicio SOAP equivalente
- AUTOLOG_WHATSAPP_UPDATE: Log de auditoría específico
Ejemplos de Request/Response
Solicitud (request)
{
"WSRequestHeader": {
"System": {
"name": "MAX",
"correlationID": "LUZ-0.626222937885914",
"processingServer": "QA"
},
"Property": []
},
"WSRequestBody": {
"Customer": {
"Document_Type": "CC",
"Document_Number": "102000066",
"Names": "Rodrigo",
"Lastnames": "Cadena",
"Email": "cadena@gmail.com",
"TyC": "Si"
},
"Access": {
"Id": "3219415000",
"Name": "WhatsApp",
"Parameters": [
{
"Parameter": null,
"Value": null
}
]
},
"Audit": {
"Canal": "whatsapp"
}
}
}Respuesta exitosa
{
"WSResponseHeader": {
"System": {
"name": "MIETB",
"correlationID": "123456789",
"processingServer": "SRV001"
},
"Service": {
"status": "OK",
"responseDate": "2024-12-19T10:30:00",
"processingServer": "SRV001",
"statusDetail": [
{
"errorCode": "OK_01",
"errorDetailCode": "Actualización realizada correctamente",
"errorMessage": "Los datos del cliente han sido actualizados exitosamente",
"errorMessageUser": "Su información ha sido actualizada correctamente"
}
]
},
"Property": []
}
}Respuesta de error
{
"WSResponseHeader": {
"System": {
"name": "MIETB",
"correlationID": "123456789",
"processingServer": "SRV001"
},
"Service": {
"status": "ERROR",
"responseDate": "2024-12-19T10:30:00",
"processingServer": "SRV001",
"statusDetail": [
{
"errorCode": "ERROR_06",
"errorDetailCode": "Tipo de documento no válido",
"errorMessage": "El tipo de documento especificado no es válido",
"errorMessageUser": "El tipo de documento ingresado no es válido"
}
]
},
"Property": []
}
}Diagramas Técnicos
3.1 Flujo de datos
graph TD
A[Recepción de la solicitud] --> B[WhatsAppController]
B --> C[Validación de autenticación]
C --> D[WhatsAppBusiness.Update_v1]
D --> E[Auditoría de entrada]
E --> F[Conversión de datos]
F --> G[Validación de estructura]
G --> H[Obtención de origen]
H --> I[Validación tipo documento]
I --> J[Consulta cliente]
J --> K[Actualización registro digital]
K --> L[Generación respuesta]
L --> M[Auditoría de salida]
M --> N[Registro BAM]3.2 Arquitectura de clases
classDiagram
class WhatsAppController {
+Update_v1(BaseRequestUpdateWhatsApp)
}
class WhatsAppBusiness {
+Update_v1(BaseRequest, string)
}
class WhatsAppUtil {
+Update(MDM_REGISTRO_DIGITAL)
}
class AuditUtil {
+Save_Request_Async()
+Save_WhatsApp_Update()
}
class ConfigurationUtil {
+Get_Origin()
+Get_By_Code()
+Get_Document_Types()
}
WhatsAppController --> WhatsAppBusiness
WhatsAppBusiness --> WhatsAppUtil
WhatsAppBusiness --> AuditUtil
WhatsAppBusiness --> ConfigurationUtil3.3 Secuencia de ejecución
sequenceDiagram
participant Cliente
participant WhatsAppController
participant WhatsAppBusiness
participant AuditUtil
participant ConfigurationUtil
participant CustomerUtil2
participant WhatsAppUtil
participant MongoDB
Cliente->>WhatsAppController: POST /api/whatsapp/v1/update
WhatsAppController->>WhatsAppBusiness: Update_v1()
WhatsAppBusiness->>AuditUtil: Save_Request_Async()
WhatsAppBusiness->>ConfigurationUtil: Get_Origin()
WhatsAppBusiness->>ConfigurationUtil: Get_Document_Types()
WhatsAppBusiness->>CustomerUtil2: GetBasicById()
WhatsAppBusiness->>WhatsAppUtil: Update()
WhatsAppUtil->>MongoDB: Actualizar registro digital
MongoDB-->>WhatsAppUtil: Confirmación
WhatsAppUtil-->>WhatsAppBusiness: Resultado
WhatsAppBusiness->>AuditUtil: Save_Request_Async()
WhatsAppBusiness->>AuditUtil: Save_WhatsApp_Update()
WhatsAppBusiness-->>WhatsAppController: BaseResponseUpdateWhatsApp
WhatsAppController-->>Cliente: Respuesta JSONPolíticas y Consideraciones
Políticas de seguridad
Mecanismos de autenticación y autorización:
- Autenticación mediante atributo [Authorize] en el controlador
- Validación de estructura de datos de entrada
- Auditoría completa de todas las operaciones
Validaciones de seguridad implementadas:
- Validación de tipos de documento permitidos
- Validación de estructura de datos obligatorios
- Sanitización de datos de entrada
- Validación de origen de la petición
Límites de tasa (rate limits):
- No se especifican límites de tasa en el código
- Se recomienda implementar rate limiting a nivel de infraestructura
SLAs aplicables:
- Tiempo de respuesta esperado: < 2 segundos
- Disponibilidad: 99.9%
- Tolerancia a fallos: Circuit breaker pattern recomendado
Recomendaciones y mejores prácticas
Puntos de mejora específicos en el código:
- Implementar validación más robusta de datos de entrada
- Agregar logging estructurado para mejor observabilidad
- Implementar circuit breaker para operaciones de base de datos
- Agregar métricas de rendimiento y monitoreo
Optimizaciones posibles:
- Implementar caché para configuraciones de tipologías
- Optimizar consultas a base de datos con índices apropiados
- Implementar procesamiento asíncrono para auditoría
- Agregar compresión de respuestas para mejorar rendimiento
Consideraciones de mantenimiento importantes:
- Mantener actualizada la documentación de tipos de documento válidos
- Revisar periódicamente los logs de auditoría
- Monitorear el rendimiento de las operaciones de base de datos
- Validar regularmente la integridad de los datos
Sugerencias de seguridad aplicables:
- Implementar rate limiting por IP y usuario
- Agregar validación de tokens JWT más robusta
- Implementar encriptación de datos sensibles en tránsito
- Agregar validación de firma digital para integridad de datos
- Implementar logging de eventos de seguridad críticos