Skip to content

WhatsApp v1 GetByPhone - Consulta de Clientes por Teléfono

Información del Servicio

Endpoint: /api/whatsapp/v1/getbyphone
Método: POST
Versión: v1
Categoría: Atención y Soporte

Documentación del Servicio

Descripción general

El servicio whatsapp-v1-getbyphone permite consultar los datos básicos de un cliente mediante el número de teléfono utilizado para acceder a los servicios de MAX WhatsApp. Este servicio pertenece a la categoría de Gestión de Clientes Digitales y forma parte del ecosistema de servicios de WhatsApp Business de ETB.

Casos de Uso Principales

  • Consulta de información de clientes registrados en el canal digital WhatsApp
  • Validación de existencia de registros digitales por número de teléfono
  • Obtención de datos básicos del cliente para procesos de autenticación y validación
  • Integración con sistemas MAX para gestión de usuarios WhatsApp

Especificación Técnica

Capas involucradas:

  1. Controlador: WhatsAppController.GetByPhone_v1() - Maneja la recepción de la petición HTTP
  2. Lógica de negocio: WhatsAppBusiness.GetByPhone_v1() - Procesa la lógica principal del servicio
  3. Acceso a datos: WhatsAppUtil.Get() - Consulta la base de datos MongoDB
  4. Auditoría: AuditUtil - Registra transacciones y métricas

Flujo de procesamiento:

  1. Recepción de petición HTTP POST
  2. Validación de autenticación y autorización
  3. Conversión de datos de entrada
  4. Obtención del origen de la petición
  5. Consulta del registro digital por número de teléfono
  6. Construcción de respuesta
  7. Auditoría de transacción
  8. Retorno de respuesta

Dependencias principales:

  • WhatsAppUtil - Utilidades específicas de WhatsApp
  • ConfigurationUtil - Gestión de configuraciones y tipologías
  • AuditUtil - Auditoría de transacciones
  • CRUD_MDM_REGISTRO_DIGITAL - Acceso a datos de registros digitales
  • MongoContext - Conexión a base de datos MongoDB

Consideraciones de Seguridad

  • Autenticación mediante atributo [Authorize]
  • Validación de origen de petición
  • Auditoría completa de transacciones
  • Validación de parámetros de entrada

Parámetros de Entrada (Request)

Headers

CampoTipoObligatorioDescripción
AuthorizationstringToken de autenticación Bearer
Content-Typestringapplication/json

Body

CampoTipoObligatorioDescripción
WSRequestHeaderobjectCabecera estándar de la petición
WSRequestBodyobjectCuerpo de la petición con datos específicos

WSRequestHeader

CampoTipoObligatorioDescripción
SystemobjectInformación del sistema origen
CorrelationIDstringIdentificador único de correlación
TimestampdatetimeMarca de tiempo de la petición

WSRequestBody

CampoTipoObligatorioDescripción
AuditobjectNoInformación de auditoría
PhonestringNúmero de teléfono usado en MAX WhatsApp

Audit

CampoTipoObligatorioDescripción
UserstringNoUsuario que realiza la petición
ChannelstringNoCanal de origen
ApplicationstringNoAplicación origen

Respuesta Esperada (Response)

Headers

CampoTipoObligatorioDescripción
Content-Typestringapplication/json
StatusstringCódigo de estado HTTP

Body

CampoTipoObligatorioDescripción
WSResponseHeaderobjectCabecera estándar de la respuesta
WSResponseBodyobjectCuerpo de la respuesta con datos del cliente

WSResponseHeader

CampoTipoObligatorioDescripción
ServiceobjectInformación del estado del servicio
CorrelationIDstringIdentificador de correlación de la petición
TimestampdatetimeMarca de tiempo de la respuesta

WSResponseBody

CampoTipoObligatorioDescripción
CustomerobjectInformación del cliente
AccessobjectInformación del canal de acceso

Customer

CampoTipoObligatorioDescripción
Document_TypestringTipo de documento de identidad
Document_NumberstringNúmero de documento de identidad
NamesstringNombres del cliente
LastnamesstringApellidos del cliente
EmailstringCorreo electrónico del cliente

Access

CampoTipoObligatorioDescripción
NamestringNombre del canal de registro digital
Creation_DatedatetimeFecha de creación del registro en el canal

Manejo de Errores

CódigoDescripciónEjemplo
ERROR_00Excepción técnica general"La solicitud no fue exitosa. Se ha generado una excepción técnica"
ERROR_03No se pudo validar la petición"La solicitud no fue exitosa. No fue posible validar la petición"
ERROR_04Objetos no acordes a la petición"La solicitud no fue exitosa. Fueron enviados objetos no acordes a la petición"
ERROR_06No se encontró información válida"La solicitud no fue exitosa. No se encontró información válida"
OK_01Procesamiento exitoso"La solicitud fue exitosa"

Análisis de Componentes

Modelos y Componentes

Modelos base utilizados:

  • BaseRequest - Clase base para todas las peticiones
  • BaseResponse - Clase base para todas las respuestas
  • BotBaseRequestHeader - Cabecera estándar de petición
  • BotBaseResponseHeader - Cabecera estándar de respuesta
  • BotBaseResponseService - Información de estado del servicio
  • BotBaseResponseStatusDetail - Detalles de estado y errores

Utilidades y servicios comunes:

  • ConfigurationUtil - Gestión de configuraciones y tipologías
  • AuditUtil - Auditoría de transacciones
  • WhatsAppUtil - Operaciones específicas de WhatsApp
  • Util.FillBaseRequest - Llenado de información base de la petición

Patrones de diseño implementados:

  • Singleton Pattern: WhatsAppBusiness.GetInstance, WhatsAppUtil.GetInstance
  • Template Method: Flujo de procesamiento estándar con regiones
  • Factory Pattern: Creación de objetos de respuesta
  • Repository Pattern: CRUD_MDM_REGISTRO_DIGITAL para acceso a datos

Componentes reutilizados:

  • Modelos de respuesta estándar (BaseResponseGetByPhoneWhatsApp)
  • Utilidades de configuración y auditoría
  • Clases de base de datos MongoDB (MDM_REGISTRO_DIGITAL)

Referencias Cruzadas

  • Servicio SOAP equivalente: /soap/whatsapp/v1/getbyphone
  • Servicio de actualización: whatsapp-v1-update
  • Servicio de consulta por nombre: whatsapp-v1-getbyname

Ejemplos de Request/Response

Solicitud (Request)

json
{
  "WSRequestHeader": {
    "System": {
      "name": "MAX",
      "correlationID": "LUZ-0.16316496738717456",
      "processingServer": ""
    },
    "Property": []
  },
  "WSRequestBody": {
    "Phone": "3052957123",
    "Audit": {
      "Canal": "whatsapp",
      "Date": "2025-07-12",
      "Hour": "17:04:20"
    }
  }
}

Respuesta Exitosa

json
{
  "WSResponseHeader": {
    "System": {
      "name": "MAX",
      "correlationID": "LUZ-0.16316496738717456",
      "processingServer": ""
    },
    "Service": {
      "status": "OK",
      "responseDate": "2025-07-12T17:04:21.1627351Z",
      "processingServer": null,
      "statusDetail": [
        {
          "errorCode": "OK_01",
          "errorDetailCode": "Se consulto el cliente de manera exitosa.",
          "errorMessage": "La solicitud LUZ-0.16316496738717456 fue exitosa",
          "errorMessageUser": null
        }
      ]
    },
    "Property": []
  },
  "WSResponseBody": {
    "Access": {
      "Creation_Date": "2024-06-17T16:15:40.992Z",
      "Name": "WhatsApp"
    },
    "Customer": {
      "Document_Number": "1080277123",
      "Document_Type": "CC",
      "Email": "pruebas@etb.com",
      "Names": "Juan",
      "Lastnames": "Morales"
    }
  }
}

Respuesta de Error

json
{
  "WSResponseHeader": {
    "Service": {
      "Status": "FAIL",
      "StatusDetails": [
        {
          "Code": "ERROR_06",
          "Message": "La solicitud no fue exitosa. No se encontró información válida",
          "Description": "La solicitud no fue exitosa. No se encontró información válida"
        }
      ]
    },
    "CorrelationID": "12345678-1234-1234-1234-123456789012",
    "Timestamp": "2024-01-15T10:30:01Z"
  },
  "WSResponseBody": {
    "Customer": {
      "Document_Type": null,
      "Document_Number": null,
      "Names": null,
      "Lastnames": null,
      "Email": null
    },
    "Access": {
      "Name": null,
      "Creation_Date": "0001-01-01T00:00:00Z"
    }
  }
}

Diagramas Técnicos

3.1 Flujo de Datos

mermaid
graph TD
    A[Cliente MAX WhatsApp] --> B[WhatsAppController]
    B --> C[Validación de Autenticación]
    C --> D[Creación BaseRequest]
    D --> E[WhatsAppBusiness.GetByPhone_v1]
    E --> F[Auditoría de Entrada]
    F --> G[Conversión de Datos]
    G --> H[Validación de Parámetros]
    H --> I[Obtención de Origen]
    I --> J[Consulta MDM_REGISTRO_DIGITAL]
    J --> K{¿Registro encontrado?}
    K -->|Sí| L[Construcción de Respuesta]
    K -->|No| M[Error ERROR_06]
    L --> N[Auditoría de Salida]
    M --> N
    N --> O[BAM - Save_WhatsApp_Get_Phone]
    O --> P[Respuesta al Cliente]

3.2 Arquitectura de Clases

mermaid
classDiagram
    class WhatsAppController {
        +GetByPhone_v1(BaseRequestGetByPhoneWhatsApp) BaseResponseGetByPhoneWhatsApp
    }
    
    class WhatsAppBusiness {
        +GetByPhone_v1(BaseRequest, string) BaseResponseGetByPhoneWhatsApp
    }
    
    class WhatsAppUtil {
        +Get(string) MDM_REGISTRO_DIGITAL
        +Update(MDM_REGISTRO_DIGITAL) bool
    }
    
    class CRUD_MDM_REGISTRO_DIGITAL {
        +Get(string) MDM_REGISTRO_DIGITAL
        +Update(MDM_REGISTRO_DIGITAL) bool
    }
    
    class MDM_REGISTRO_DIGITAL {
        +string Apellidos
        +string Nombres
        +string Email
        +string Numero_Documento
        +string Tipo_Documento
        +MDM_REGISTRO_DIGITAL_CANAL Canal_Acceso
    }
    
    class GetByPhoneWhatsAppResponse {
        +GetByPhoneCustomerResponse Customer
        +GetByPhoneAccessResponse Access
    }
    
    WhatsAppController --> WhatsAppBusiness
    WhatsAppBusiness --> WhatsAppUtil
    WhatsAppUtil --> CRUD_MDM_REGISTRO_DIGITAL
    CRUD_MDM_REGISTRO_DIGITAL --> MDM_REGISTRO_DIGITAL
    WhatsAppBusiness --> GetByPhoneWhatsAppResponse

3.3 Secuencia de Ejecución

mermaid
sequenceDiagram
    participant Client as Cliente MAX
    participant Controller as WhatsAppController
    participant Business as WhatsAppBusiness
    participant Util as WhatsAppUtil
    participant DB as MongoDB
    participant Audit as AuditUtil
    
    Client->>Controller: POST /api/whatsapp/v1/getbyphone
    Controller->>Business: GetByPhone_v1(request)
    Business->>Audit: Save_Request_Async(entrada)
    Business->>Business: Conversión de datos
    Business->>Business: Validación de parámetros
    Business->>Business: Obtención de origen
    Business->>Util: Get(phone)
    Util->>DB: Consulta MDM_REGISTRO_DIGITAL
    DB-->>Util: Registro digital
    Util-->>Business: MDM_REGISTRO_DIGITAL
    Business->>Business: Construcción respuesta
    Business->>Audit: Save_Request_Async(salida)
    Business->>Audit: Save_WhatsApp_Get_Phone
    Business-->>Controller: BaseResponseGetByPhoneWhatsApp
    Controller-->>Client: JSON Response

Políticas y Consideraciones

Políticas de Seguridad

Mecanismos de autenticación y autorización:

  • Autenticación mediante token Bearer en header Authorization
  • Validación de origen de petición mediante ConfigurationUtil.Get_Origin()
  • Verificación de permisos por sistema y canal

Validaciones de seguridad implementadas:

  • Validación de parámetros de entrada obligatorios
  • Sanitización de datos de entrada
  • Validación de formato de número de teléfono
  • Control de acceso por IP y origen

Límites de tasa (rate limits):

  • No se identifican límites específicos de tasa en el código
  • Se recomienda implementar rate limiting por IP/origen

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. Manejo de excepciones:
csharp
// Actual - Captura genérica
catch (Exception ex)
{
    _BotBaseResponse = new BaseResponseGetByPhoneWhatsApp();
    _BotBaseResponse.WSResponseHeader.Service.Status = Constants.Error;
    _BotBaseResponse.WSResponseHeader.Service.AddStatusDetailItem(
        new BotBaseResponseStatusDetail(Constants.ERROR_00, Constants.ERROR_00_Msg, ex.Message), 
        _BotBaseRequest.CorrelationID);
}

// Recomendado - Captura específica
catch (MongoException ex)
{
    // Manejo específico para errores de base de datos
}
catch (ValidationException ex)
{
    // Manejo específico para errores de validación
}
  1. Validación de entrada mejorada:
csharp
// Agregar validación de formato de teléfono
if (!Regex.IsMatch(_Request.Phone, @"^\d{10}$"))
{
    continuar = false;
    _BotBaseResponse.WSResponseHeader.Service.AddStatusDetailItem(
        new BotBaseResponseStatusDetail("ERROR_07", "Formato de teléfono inválido"), 
        _BotBaseRequest.CorrelationID);
}
  1. Implementación de caché:
csharp
// Agregar caché para consultas frecuentes
public async Task<MDM_REGISTRO_DIGITAL> Get(string Phone) 
{
    string cacheKey = $"whatsapp_registro_{Phone}";
    var cached = UtilCacheHelper.GetInstance.Get<MDM_REGISTRO_DIGITAL>(cacheKey);
    if (cached != null) return cached;
    
    var result = await CRUD_MDM_REGISTRO_DIGITAL.GetInstance.Get(Phone);
    if (result != null)
    {
        UtilCacheHelper.GetInstance.Set(cacheKey, result, 300); // 5 minutos
    }
    return result;
}

Optimizaciones posibles:

  1. Consultas paralelas: Para servicios que requieran múltiples fuentes de datos
  2. Paginación: Si se requiere consultar múltiples registros
  3. Compresión: Implementar gzip para respuestas grandes
  4. Logging estructurado: Mejorar el logging para monitoreo

Consideraciones de mantenimiento importantes:

  1. Monitoreo: Implementar métricas de rendimiento y disponibilidad
  2. Logs: Mejorar el logging para debugging y auditoría
  3. Documentación: Mantener documentación actualizada de cambios
  4. Testing: Implementar pruebas unitarias y de integración

Sugerencias de seguridad aplicables:

  1. Rate Limiting: Implementar límites por IP y usuario
  2. Validación de entrada: Sanitizar todos los parámetros de entrada
  3. Encriptación: Encriptar datos sensibles en tránsito y reposo
  4. Auditoría: Mantener logs de auditoría completos
  5. Monitoreo de seguridad: Implementar alertas para actividades sospechosas

Notas Adicionales

  • El servicio está diseñado para ser escalable y mantener alta disponibilidad
  • Se recomienda implementar health checks para monitoreo de salud del servicio
  • Considerar implementar versionado de API para futuras actualizaciones
  • Mantener compatibilidad con el servicio SOAP equivalente