ESPACIO PUBLICITARIO DISPONIBLE · HABLEMOS

Cómo los desarrolladores de Salesforce crean y exponen métodos Invocable Apex, Flows y API de MuleSoft como acciones en Agentforce

365Finds Editorial
11.430 artículos Wiki recopilados

Usa 365 Wiki con tu IA

Copia el prompt de abajo, pégalo en la IA que ya usas y haz tu pregunta.

Descargar el Skill completo

Pruébalo primero con el prompt. Si usas 365 Wiki a menudo, instala el Skill completo de 365Wiki y no tendrás que volver a pegarlo. Si no tienes una IA habitual, también sirven las versiones web de Gemini o Microsoft Copilot.

Salesforce Agentforce transforma la inteligencia artificial empresarial, pasando de asistentes conversacionales pasivos a agentes totalmente autónomos (Autonomous Agents). En entornos corporativos reales, un agente no solo responde preguntas a partir de bases de conocimiento, sino que comprende la intención del cliente, selecciona herramientas empresariales especializadas, ejecuta transacciones en tiempo real y evalúa los resultados para decidir el siguiente paso operativo.

Las acciones estándar listas para usar cubren tareas genéricas de CRM, como redactar correos o resumir registros. Sin embargo, las implementaciones corporativas exigen la aplicación de reglas de negocio propietarias, orquestaciones entre sistemas heredados y acceso a datos externos en tiempo real. Los desarrolladores y arquitectos empresariales de Salesforce deben ampliar las capacidades de Agentforce construyendo Acciones Personalizadas (Custom Actions) sobre tres pilares fundamentales:

  1. Métodos Invocable Apex: Lógica determinista basada en código para cálculos complejos, validaciones avanzadas y consultas SOQL especializadas.
  2. Flujos autolanzados sin interfaz (Autolaunched Flows): Automatizaciones declarativas de bajo código para operaciones estándar de creación, actualización y enrutamiento en Salesforce sin necesidad de programar.
  3. API de MuleSoft mediante External Services y API Catalog: El puente de integración empresarial que conecta sistemas ERP (como SAP u Oracle), pasarelas de pago y microservicios externos directamente al tiempo de ejecución del agente.

Esta guía detalla la arquitectura integral, los pasos de implementación técnica, las mejores prácticas de ingeniería de contexto (Context Engineering) y la gobernanza de seguridad necesarias para crear y exponer estos tres tipos de acciones en Agentforce.


1. Arquitectura central: Cómo el motor de razonamiento Atlas entiende y ejecuta acciones

Para construir acciones fiables y sin alucinaciones, es fundamental comprender el funcionamiento del núcleo de Agentforce: el motor de razonamiento Atlas (Atlas Reasoning Engine).

[ Interacción del usuario / Canales Omni-Channel ]
                        │
                        ▼
          [ Motor de Razonamiento Atlas ]
         (ReAct: Razonar - Actuar - Observar)
                        │
       ┌────────────────┼────────────────┐
       ▼                ▼                ▼
[ Clasificación de Tópicos ] │ [ Filtro de Contexto y Guardrails ]
       │                │
       └───────┬────────┘
               ▼
     [ Selección de Acción / Herramienta ]
               │
   ┌───────────┼───────────┐
   ▼           ▼           ▼
[ Apex ]   [ Flow ]   [ MuleSoft / API ]
   │           │           │
   └───────────┼───────────┘
               ▼
[ Salida estructurada observada por Atlas ]
               │
               ▼
[ Respuesta final o ejecución de siguiente acción ]

El patrón ReAct y la ingeniería de contexto

El motor Atlas opera mediante un ciclo ReAct (Reason - Act - Observe):

En el desarrollo de software tradicional, los módulos se comunican mediante tipos estrictos y llamadas directas. En el paradigma de los agentes autónomos, los metadatos son el prompt. El modelo de lenguaje no inspecciona el código interno de Apex; interpreta el label, la description, las anotaciones de parámetros y las instrucciones de acción (Action Instructions). Una descripción vaga genera confusión de herramientas y errores de extracción, mientras que una descripción precisa produce una ejecución determinista.


2. Creación y exposición de Invocable Apex como acciones personalizadas

Invocable Apex representa la opción idónea cuando la lógica de negocio requiere algoritmos complejos, consultas masivas, transformaciones avanzadas de datos o estrictos controles transaccionales.

Paso 1: Diseñar la clase Invocable Apex

Agentforce detecta el código mediante la anotación @InvocableMethod. El método debe ser public o global, estático, recibir una lista (List) de objetos contenedores de entrada y devolver una lista (List) de objetos contenedores de salida.

A continuación se presenta un patrón de implementación profesional para cancelar pedidos:

public with sharing class OrderCancellationService {

    // Contenedor de entrada: Define los parámetros requeridos por el agente
    public class OrderCancellationRequest {
        @InvocableVariable(
            label = 'Order Number' 
            description = 'Identificador único del pedido que se desea cancelar, por ejemplo ORD-10023.' 
            required = true
        )
        public String orderNumber;

        @InvocableVariable(
            label = 'Cancellation Reason' 
            description = 'Motivo proporcionado por el cliente para la cancelación.' 
            required = false
        )
        public String reason;
    }

    // Contenedor de salida: Devuelve datos estructurados al motor Atlas
    public class OrderCancellationResult {
        @InvocableVariable(
            label = 'Is Success' 
            description = 'Indicador booleano que confirma si el pedido se canceló con éxito.'
        )
        public Boolean isSuccess;

        @InvocableVariable(
            label = 'Cancellation Reference Code' 
            description = 'Código de auditoría generado tras confirmar la cancelación.'
        )
        public String referenceCode;

        @InvocableVariable(
            label = 'Status Message' 
            description = 'Mensaje explicativo del resultado o detalle del error en caso de fallo.'
        )
        public String message;
    }

    @InvocableMethod(
        label = 'Cancel Customer Order'
        description = 'Cancela un pedido pendiente y emite un código de auditoría. Utilizar esta acción únicamente cuando el estado del pedido sea Pending o Processing y el cliente solicite explícitamente la cancelación.'
        category = 'Order Management'
    )
    public static List<OrderCancellationResult> cancelOrders(List<OrderCancellationRequest> requests) {
        List<OrderCancellationResult> results = new List<OrderCancellationResult>();

        for (OrderCancellationRequest req : requests) {
            OrderCancellationResult res = new OrderCancellationResult();
            
            try {
                // Aplicación de seguridad en modo usuario
                List<Order> orders = [
                    SELECT Id, Status, TotalAmount 
                    FROM Order 
                    WHERE OrderNumber = :req.orderNumber 
                    WITH USER_MODE 
                    LIMIT 1
                ];

                if (orders.isEmpty()) {
                    res.isSuccess = false;
                    res.message = 'No se encontró ningún pedido activo con el número: ' + req.orderNumber;
                    results.add(res);
                    continue;
                }

                Order targetOrder = orders[0];
                if (targetOrder.Status == 'Activated' || targetOrder.Status == 'Completed') {
                    res.isSuccess = false;
                    res.message = 'El pedido ' + req.orderNumber + ' ya fue despachado o finalizado y no puede cancelarse de forma automática.';
                    results.add(res);
                    continue;
                }

                targetOrder.Status = 'Cancelled';
                targetOrder.Description = 'Cancelado mediante Agentforce. Motivo: ' + (req.reason != null ? req.reason : 'No especificado');

                Database.SaveResult sr = Database.update(targetOrder, AccessLevel.USER_MODE);
                if (sr.isSuccess()) {
                    res.isSuccess = true;
                    res.referenceCode = 'CAN-' + System.currentTimeMillis();
                    res.message = 'El pedido se canceló correctamente.';
                } else {
                    res.isSuccess = false;
                    res.message = 'Error al actualizar el registro del pedido en la base de datos.';
                }
            } catch (Exception ex) {
                res.isSuccess = false;
                res.message = 'Excepción interna al procesar la cancelación: ' + ex.getMessage();
            }

            results.add(res);
        }

        return results;
    }
}

Mejores prácticas críticas en Apex para Agentforce

Paso 2: Registrar la acción Apex en Salesforce Setup

  1. En Setup (Configuración) de Salesforce, escriba Agent en el cuadro de búsqueda rápida y seleccione Agentforce Assets (o Agent Actions).
  2. Haga clic en New Agent Action (Nueva acción de agente).
  3. En Reference Action Type (Tipo de acción de referencia), seleccione Apex.
  4. Elija la clase OrderCancellationService y el método Cancel Customer Order.
  5. Revise las etiquetas y descripciones generadas automáticamente a partir de las anotaciones.
  6. Complete las Action Instructions (Instrucciones de la acción): Detalle cuándo debe activarse (por ejemplo: «Ejecutar solo cuando un cliente verificado solicite explícitamente cancelar un pedido. Solicitar el número de pedido si no fue proporcionado»).
  7. Guarde la acción.

3. Creación y exposición de Flows autolanzados como acciones

Los flujos autolanzados permiten a los administradores y desarrolladores crear automatizaciones transaccionales de bajo código de forma ágil, aprovechando Flow Builder para operaciones CRUD, derivaciones y aprobaciones.

Restricción del tipo de flujo

Agentforce únicamente puede invocar flujos del tipo Autolaunched Flow (No Trigger) (flujo autolanzado sin desencadenador). Los Screen Flows requieren interacción visual humana en pantalla y los Record-Triggered Flows responden a eventos de base de datos; ninguno de ellos puede funcionar como acción de agente. Un flujo autolanzado ofrece una interfaz limpia de solicitud y respuesta.

[ Petición del usuario: "Actualiza mi dirección de envío a Calle Mayor 12" ]
                               │
                               ▼
             [ Planificador de Acciones de Agentforce ]
                               │
       (Extrae parámetros: orderId, streetAddress, city)
                               │
                               ▼
     [ Autolaunched Flow: Actualizar Dirección de Envío ]
              ┌─────────────────────────┐
              │ Get Record: Pedido      │
              ├─────────────────────────┤
              │ Decision: ¿Ya enviado?  │
              ├─────────────────────────┤
              │ Update Record: Dirección│
              └─────────────────────────┘
                               │
      (Variables de salida: isUpdated = True, mensaje)
                               │
                               ▼
            [ Atlas Genera la Respuesta Final ]

Configuración paso a paso en Flow Builder

  1. Crear el flujo: Abra Flow Builder y seleccione Autolaunched Flow (No Trigger).
  2. Definir variables de entrada:
    • Cree una variable de texto var_orderId.
    • Marque la casilla Available for input (Disponible para entrada).
    • En Description (Descripción), indique: «Identificador de 18 caracteres del registro de pedido en Salesforce».
    • Cree las demás variables de entrada requeridas (var_streetAddress, etc.) con descripciones claras.
  3. Definir variables de salida:
    • Cree una variable booleana var_isUpdated. Marque Available for output (Disponible para salida). Descripción: «Verdadero si la dirección se actualizó correctamente en la base de datos».
    • Cree una variable de texto var_statusMessage y márquela como disponible para salida.
  4. Implementar la lógica declarativa:
    • Use un elemento Get Records para buscar el pedido.
    • Use un elemento Decision para comprobar si el estado permite modificaciones.
    • Use un elemento Update Records para guardar la nueva dirección.
    • Use un elemento Assignment para asignar valores a las variables de salida.
  5. Guardar y activar: Guarde el flujo con el nombre Agent_Update_Order_Address y actívelo.

Paso 3: Registrar la acción de flujo

  1. Vaya a Setup > Agentforce Assets > New Agent Action.
  2. Seleccione Reference Action Type = Flow.
  3. Seleccione Agent_Update_Order_Address.
  4. Compruebe que las descripciones de todas las variables de entrada y salida sean comprensibles para el modelo de lenguaje.
  5. Configure las instrucciones y guarde.

4. Exposición de API de MuleSoft mediante External Services y API Catalog

Los agentes corporativos a menudo necesitan interactuar con sistemas externos a Salesforce, como SAP, Oracle o pasarelas de pago. MuleSoft gestiona la integración empresarial y Salesforce expone esas API como acciones de Agentforce mediante External Services (Servicios externos) y el Salesforce API Catalog.

Vías de integración

Vía de integraciónMecanismoEscenario idóneo
MuleSoft for Agentforce: Topic Center y API CatalogSincronización nativa de especificaciones desde Anypoint Exchange hacia Salesforce API CatalogOrganizaciones con gobernanza centralizada de API en Anypoint Platform y equipos dedicados.
External Services for MuleSoftRegistro directo mediante Named Credentials y especificaciones OpenAPI 3.0/2.0Conexiones punto a punto o API específicas que requieren invocación ágil en Flows y agentes.
[ ERP corporativo / SAP / Base de datos externa ]
                        │
                        ▼
         [ MuleSoft Anypoint Platform ]
       (System, Process, Experience APIs)
                        │
         (Topic Center / Especificación OAS 3.0)
                        │
                        ▼
        [ Salesforce Anypoint Setup / Sync ]
                        │
           ┌────────────┴────────────┐
           ▼                         ▼
   [ Named Credentials ]     [ Salesforce API Catalog ]
  (Autenticación segura)       (Descubrimiento de API)
           │                         │
           └────────────┬────────────┘
                        ▼
            [ External Services ]
        (Genera acciones invocables)
                        │
                        ▼
   [ Catálogo de Acciones de Agentforce ]

Paso 1: Diseñar especificaciones OpenAPI optimizadas para IA

El motor Atlas analiza la especificación OpenAPI para identificar rutas, parámetros y estructuras de respuesta. Las API para agentes deben seguir estas directrices:

Ejemplo de especificación OpenAPI 3.0 para consulta de inventario:

openapi: 3.0.3
info:
  title: Enterprise Warehouse API
  version: 1.0.0
  description: Servicio de consulta de inventario y disponibilidad en tiempo real.
paths:
  /inventory/{sku}:
    get:
      summary: Consultar stock disponible por código SKU
      description: Devuelve la cantidad disponible, ubicación del almacén y tiempos de reposición para un producto dado.
      operationId: getInventoryBySku
      parameters:
        - name: sku
          in: path
          required: true
          description: Código identificador del producto, por ejemplo PROD-WIDGET-99.
          schema:
            type: string
      responses:
        '200':
          description: Consulta de inventario exitosa
          content:
            application/json:
              schema:
                type: object
                properties:
                  sku:
                    type: string
                    description: Código SKU consultado.
                  quantityOnHand:
                    type: integer
                    description: Unidades físicas disponibles en el almacén.
                  isAvailableToShip:
                    type: boolean
                    description: Indica si el producto puede despacharse de inmediato.
                  warehouseRegion:
                    type: string
                    description: Región del centro logístico principal.
        '404':
          description: El código SKU no existe en el catálogo

Paso 2: Sincronizar y generar la acción en Salesforce

  1. Configurar la conexión con Anypoint: En Salesforce Setup, busque Anypoint Platform Setup y conecte la organización mediante su ID de organización y credenciales de cliente.
  2. Sincronización en API Catalog: En MuleSoft Topic Center o Exchange, etiquete la especificación de API con sf-api-catalog. En el API Catalog de Salesforce, active las operaciones como acciones.
  3. Configurar Named Credentials: Asigne una credencial nombrada con OAuth 2.0 para autenticar las llamadas salientes con seguridad.
  4. Crear la acción en Agentforce: En Agentforce Assets, cree una nueva acción de tipo External Service y seleccione la operación de almacén.

5. Orquestación en Agentforce Builder: La capa de Tópicos

Las acciones no operan de forma aislada; deben asociarse a un Tópico (Topic) dentro de Agentforce Builder. Los tópicos delimitan el ámbito temático y las herramientas disponibles para el agente.

[ Agente Autónomo: Agente de Servicio al Cliente ]
                       │
       ┌───────────────┴───────────────┐
       ▼                               ▼
[ Tópico: Logística de Pedidos ]    [ Tópico: Soporte Técnico ]
 (Alcance y clasificación)           (Alcance y clasificación)
       │
   ┌───┴───────────────────────────────┐
   ▼                                   ▼
[ Acción: Consultar Pedido ]        [ Acción: Cancelar Pedido ]
(Autolaunched Flow)                 (Invocable Apex)

Pasos de asignación

  1. Abra Agentforce Builder desde Setup y seleccione el agente a editar.
  2. Seleccione un tópico existente o cree uno nuevo (por ejemplo, Order Logistics and Changes).
  3. Redacte la Topic Classification Description: Describa con claridad qué solicitudes de los usuarios deben canalizarse a través de este tópico.
  4. En la pestaña Actions, haga clic en Add Action y seleccione las acciones personalizadas creadas (Apex, Flow o MuleSoft).

Redacción de instrucciones efectivas

Las instrucciones en lenguaje natural guían las decisiones del agente:

### Instrucciones del Tópico: Order Logistics and Changes
- Asiste al cliente con el seguimiento de pedidos, consultas de estado, cambio de dirección y cancelaciones.
- Antes de cancelar un pedido, verifica siempre su estado actual y solicita confirmación expresa del cliente.
- Si la cancelación falla porque el paquete ya fue despachado, explica la situación y ofrece la política de devoluciones.

### Instrucciones de la Acción: Cancel Customer Order
- Ejecutar esta acción únicamente después de que el usuario proporcione el número de pedido y acepte la confirmación.
- Si falta el número de pedido, pregunta: "¿Podría indicarme el número de pedido que desea cancelar?"
- Al finalizar, proporciona siempre el código de auditoría (referenceCode) al cliente.

Confirmación humana (Human-in-the-Loop)

Para operaciones que modifiquen registros críticos, procesen pagos o cancelen servicios, active la opción Require Confirmation (Requerir confirmación) en la configuración de la acción. Esto obliga a Agentforce a solicitar una confirmación explícita (por ejemplo: «¿Está seguro de que desea cancelar el pedido ORD-10023? Esta operación no se puede deshacer») antes de invocar el código o la API subyacente.


6. Matriz de comparación y selección arquitectónica

Seleccionar la tecnología adecuada para cada acción optimiza los tiempos de desarrollo, la mantenibilidad y la latencia del sistema.

Dimensión arquitectónicaInvocable ApexAutolaunched FlowMuleSoft External Services
Perfil principal requeridoDesarrollador Salesforce (Apex)Administrador / Desarrollador Low-CodeArquitecto de Integración / Desarrollador MuleSoft
Entorno de ejecuciónNúcleo de Salesforce PlatformNúcleo de Salesforce PlatformSistemas empresariales externos y microservicios
Casos de uso idóneosAlgoritmos complejos, validaciones avanzadas, transacciones sobre múltiples objetosOperaciones CRUD estándar, enrutamientos, aprobaciones, flujos existentesConexión con ERPs (SAP/Oracle), pasarelas de pago, almacenes externos
Límites de gobernador y latenciaTiempo de CPU sincrónico (10 s), límites SOQL/DMLLímites de iteración y elementos de FlowDepende de la red externa; soporta tiempos de espera de hasta 120 s
Modelo de mantenimientoCódigo fuente en Git, SFDX y paquetes de metadatosVersionado declarativo en Flow BuilderCatálogo y contratos gobernados en Anypoint Exchange
Gestión de excepcionesBloques try-catch estructurados con clases contenedorConectores de fallo (Fault Connectors) y asignacionesCódigos HTTP estándar (2xx, 4xx, 5xx) con cuerpos de error JSON

7. Pruebas, seguridad y despliegue a producción

1. Permisos del Agent User y contexto de seguridad

Las acciones se ejecutan en el contexto de seguridad del Agent User configurado. La mayoría de los errores en producción se deben a permisos insuficientes de este usuario:

2. Estrategia de pruebas multinivel

  1. Pruebas unitarias en Apex: Desarrolle clases de prueba con una cobertura superior al 85%, validando entradas nulas, excepciones y seguridad en User Mode.
  2. Pruebas interactivas en Agentforce Builder: Utilice el panel de conversación para formular preguntas reales y observe en la pestaña de razonamiento si Atlas selecciona el tópico correcto, extrae todos los parámetros y recibe las respuestas adecuadamente.
  3. Pruebas masivas en Agentforce Testing Center: Ejecute conjuntos de pruebas con cientos de variaciones de preguntas para evaluar de forma cuantitativa la precisión en la selección de herramientas y prevenir alucinaciones.

Al integrar la precisión de Invocable Apex, la agilidad de los flujos autolanzados y la conectividad de las API de MuleSoft, los equipos de desarrollo establecen una base sólida, extensible y segura para la operación de agentes de IA en Salesforce.


Referencias