EMPRESA_JOSESAID · clientes-ms

Uso de IA · Clientes

Clientes, prospectos, interacciones y métricas de conversión.

Cómo se usa la IA aquí. Los fragmentos son código real del repositorio.

Usuario a ser usado: admin@empresa.mx (contraseña Demo2026!)

Herramientas que expone a la IA (9):

buscar_clientesobtener_clienteconsultar_interacciones_clienteobtener_prospectoconsultar_metricas_conversioncrear_clienteactualizar_clienteagregar_contacto_clientecambiar_estatus_cliente

Ruta base en Nexus: /clientes-ms/v1/clientes

01 Herramienta de lectura: consulta el servicio y devuelve datos

Herramienta de lectura: consulta el servicio y devuelve datos.

HerramientasClientes.java
    @Tool(name = "obtener_cliente",
          description = "Devuelve el detalle de un cliente por su identificador (UUID).")
    public String obtenerCliente(
            @ToolParam(description = "Identificador UUID del cliente", required = true) String id) {
        RegistroHerramientasUsadas.registrar("obtener_cliente");
        String cuerpo = gateway.get()
                .uri(RUTA_BASE + "/{id}", id)
                .retrieve()
                .body(String.class);
        return redactar(cuerpo);
    }
Qué hace: Llama al gateway con la ruta del servicio y devuelve el resultado al modelo.

02 Herramienta de escritura: prepara la acción y NO la ejecuta

Herramienta de escritura: prepara la acción y NO la ejecuta.

HerramientasClientes.java
    @Tool(name = "crear_cliente",
          description = "Prepara el alta de un cliente con su contacto principal. NO lo crea: devuelve un resumen y un accion_id. "
                  + "El usuario debe confirmarlo en la aplicación. Solo ADMIN puede usarla.")
    public String crearCliente(
            @ToolParam(description = "Razón social del cliente", required = true) String razonSocial,
            @ToolParam(description = "RFC del cliente, en mayúsculas", required = true) String rfc,
            @ToolParam(description = "Nombre del contacto principal", required = true) String contactoNombre,
            @ToolParam(description = "Correo electrónico del contacto principal", required = true) String contactoCorreo,
            @ToolParam(description = "Rol del contacto: COMPRAS, PAGOS o ASISTENCIA", required = true) String contactoRol) {
        RegistroHerramientasUsadas.registrar("crear_cliente");
        if (acciones == null) {
            return NO_DISPONIBLE;
        }
        if (vacio(razonSocial) || razonSocial.trim().length() > 250) {
            return "La razón social es obligatoria y de hasta 250 caracteres.";
        }
        String rfcNormalizado = rfc == null ? "" : rfc.trim().toUpperCase();
        if (!RFC.matcher(rfcNormalizado).matches()) {
            return "El RFC no tiene un formato válido.";
        }
        String rol = normalizar(contactoRol);
        if (!ROLES_CONTACTO.contains(rol)) {
            return "El rol del contacto debe ser COMPRAS, PAGOS o ASISTENCIA.";
        }
        if (!correoValido(contactoCorreo)) {
            return "El correo del contacto no es válido.";
        }
        if (vacio(contactoNombre) || contactoNombre.trim().length() > 200) {
            return "El nombre del contacto es obligatorio y de hasta 200 caracteres.";
        }
        Map<String, Object> contacto = new LinkedHashMap<>();
        contacto.put("nombre", contactoNombre.trim());
        contacto.put("correo", contactoCorreo.trim());
        contacto.put("rol", rol);
        Map<String, Object> cuerpo = new LinkedHashMap<>();
        cuerpo.put("razonSocial", razonSocial.trim());
        cuerpo.put("rfc", rfcNormalizado);
        cuerpo.put("contactoPrincipal", contacto);
        String resumen = "Alta de cliente " + razonSocial.trim() + " (RFC " + rfcNormalizado + ")";
        return guardarAccion(AccionesPendientes.TIPO_CLIENTE_CREAR, cuerpo, resumen, "Alta preparada, no creada.");
    }
Qué hace: La acción queda pendiente hasta que la persona confirma con el código.

03 Ruta base del servicio dentro de Nexus

Ruta base del servicio dentro de Nexus.

HerramientasClientes.java
    static final String RUTA_BASE = "/clientes-ms/v1/clientes";
Qué hace: Todas las herramientas de este módulo se construyen sobre esta ruta.
Regla del proyecto: la IA propone o prepara; la persona confirma con el código de 8 dígitos. Ninguna herramienta de escritura cambia datos por sí sola.