Skip to content

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:

  1. Recepción y validación de la petición en el controlador.
  2. Conversión de datos y validación de estructura de request.
  3. Obtención del origen de la petición y configuración de tipologías.
  4. Validación del tipo de documento del cliente.
  5. Consulta del cliente en el sistema.
  6. Actualización del registro digital con los nuevos datos.
  7. Generación de respuesta con estado de la operación.
  8. 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

CampoTipoObligatorioDescripción
WSRequestHeaderobjectCabecera de la petición con información del sistema

Body

CampoTipoObligatorioDescripción
AccessobjectDatos del acceso del cliente
AuditobjectNoAuditoría de la petición
CustomerobjectDatos del cliente a actualizar

Estructura de objetos anidados:

Estructura de WSRequestHeader

CampoTipoObligatorioDescripción
SystemobjectNoInformación asociada al sistema
PropertyarrayNoPropiedades asociadas al consumo del servicio web

Estructura de WSRequestHeader.System

CampoTipoObligatorioDescripción
NamestringNombre del sistema
CorrelationIDstringIdentificador de la petición
ProcessingServerstringServidor de procesamiento del sistema

Estructura de WSRequestHeader.Property

CampoTipoObligatorioDescripción
NamestringNombre de la propiedad
ValuestringValor de la propiedad

Estructura de Access

CampoTipoObligatorioDescripción
IdstringId del acceso (por ejemplo: 3102392934)
NamestringNombre del acceso
ParametersarrayNoParámetros adicionales

Estructura de Access.Parameters

CampoTipoObligatorioDescripción
ParameterstringParámetro
ValuestringValor del parámetro

Estructura de Audit

CampoTipoObligatorioDescripción
CanalstringNoCanal sobre el cual se hizo la petición
Id_DevicestringNoIdentificador del dispositivo móvil
SOstringNoSistema operativo del dispositivo
IP_AddressstringNoDirección IP desde donde se realiza la petición
WhatsApp_Phone_NumberstringNoNúmero de WhatsApp desde donde se realiza la petición

Estructura de Customer

CampoTipoObligatorioDescripción
Document_NumberstringNúmero de Documento
Document_TypestringTipo de Documento
EmailstringNoCorreo electrónico del Cliente
NamesstringNoNombres del Cliente
LastnamesstringNoApellidos del Cliente
TyCboolNoAceptación de TyC (Términos y Condiciones) por parte del Cliente

Respuesta esperada (Response)

Headers

CampoTipoObligatorioDescripción
WSResponseHeaderobjectCabecera de la respuesta

Body

CampoTipoObligatorioDescripción
WSResponseHeaderobjectCabecera de la respuesta con información del sistema y servicio

Estructura de objetos anidados:

Estructura de WSResponseHeader

CampoTipoObligatorioDescripción
SystemobjectNoInformación asociada al sistema
ServiceobjectNoInformación asociada a la ejecución del servicio
PropertyarrayNoArreglo de propiedades asociado al servicio

Estructura de WSResponseHeader.System

CampoTipoObligatorioDescripción
NamestringNoNombre del sistema
CorrelationIDstringNoIdentificador de la petición
ProcessingServerstringNoServidor de procesamiento del sistema

Estructura de WSResponseHeader.Service

CampoTipoObligatorioDescripción
StatusstringNoEstado de la ejecución del servicio web
ResponseDateDateTimeNoFecha de la respuesta
ProcessingServerstringNoServidor de procesamiento de la solicitud
StatusDetailarrayNoDetalle del procesamiento de la solicitud

Estructura de WSResponseHeader.Service.StatusDetail

CampoTipoObligatorioDescripción
ErrorCodestringNoCódigo del error
ErrorDetailCodestringNoDetalle del error
ErrorMessagestringNoMensaje del error
ErrorMessageUserstringNoMensaje del error para el usuario

Estructura de WSResponseHeader.Property

CampoTipoObligatorioDescripción
NamestringNoNombre de la propiedad
ValuestringNoValor de la propiedad

Manejo de errores

CódigoDescripciónEjemplo
ERROR_00Error interno del sistemaError interno del sistema:
ERROR_03Error en validación de origenError en validación de origen de la petición
ERROR_04Error en estructura de datosError en la estructura de datos de entrada
ERROR_06Tipo de documento no válidoEl tipo de documento no es válido
ERROR_07Error en actualización de registroError al actualizar el registro digital
OK_01Operación exitosaActualizació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)

json
{
  "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

json
{
  "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

json
{
  "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

mermaid
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

mermaid
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 --> ConfigurationUtil

3.3 Secuencia de ejecución

mermaid
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 JSON

Polí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:

  1. Implementar validación más robusta de datos de entrada
  2. Agregar logging estructurado para mejor observabilidad
  3. Implementar circuit breaker para operaciones de base de datos
  4. Agregar métricas de rendimiento y monitoreo

Optimizaciones posibles:

  1. Implementar caché para configuraciones de tipologías
  2. Optimizar consultas a base de datos con índices apropiados
  3. Implementar procesamiento asíncrono para auditoría
  4. Agregar compresión de respuestas para mejorar rendimiento

Consideraciones de mantenimiento importantes:

  1. Mantener actualizada la documentación de tipos de documento válidos
  2. Revisar periódicamente los logs de auditoría
  3. Monitorear el rendimiento de las operaciones de base de datos
  4. Validar regularmente la integridad de los datos

Sugerencias de seguridad aplicables:

  1. Implementar rate limiting por IP y usuario
  2. Agregar validación de tokens JWT más robusta
  3. Implementar encriptación de datos sensibles en tránsito
  4. Agregar validación de firma digital para integridad de datos
  5. Implementar logging de eventos de seguridad críticos