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:
- Métodos Invocable Apex: Lógica determinista basada en código para cálculos complejos, validaciones avanzadas y consultas SOQL especializadas.
- 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.
- 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):
- Razonar (Reason): Evalúa la conversación entrante frente a los Tópicos (Topics) configurados y determina qué acción específica puede satisfacer la intención del usuario.
- Actuar (Act): Extrae los parámetros de la conversación, los mapea al esquema de entrada de la acción y la ejecuta.
- Observar (Observe): Analiza el resultado estructurado devuelto por la acción, verifica si el objetivo se ha cumplido y decide si debe invocar otra acción o responder al usuario en lenguaje natural.
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
- Acciones atómicas frente a clases monolíticas: Evite crear clases que ejecuten múltiples tareas secuenciales inconexas (búsqueda, cobro, facturación y despacho en un solo método). Mantenga cada acción enfocada en un único propósito para que Atlas pueda razonar y orquestar modularmente.
- Devolver errores estructurados en lugar de excepciones no controladas: Si el método arroja una excepción no capturada, el agente fallará o interrumpirá la conversación. Capture las excepciones y devuelva
isSuccess = falsecon unmessageclaro. De este modo, el agente puede explicar el inconveniente al usuario o solicitar información adicional. - Seguridad en modo usuario (User Mode): Utilice siempre
WITH USER_MODEoAccessLevel.USER_MODEen las operaciones DML, garantizando que el agente respete estrictamente los permisos a nivel de objeto y campo asignados al usuario ejecutor del agente.
Paso 2: Registrar la acción Apex en Salesforce Setup
- En Setup (Configuración) de Salesforce, escriba
Agenten el cuadro de búsqueda rápida y seleccione Agentforce Assets (o Agent Actions). - Haga clic en New Agent Action (Nueva acción de agente).
- En Reference Action Type (Tipo de acción de referencia), seleccione Apex.
- Elija la clase
OrderCancellationServicey el métodoCancel Customer Order. - Revise las etiquetas y descripciones generadas automáticamente a partir de las anotaciones.
- 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»).
- 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
- Crear el flujo: Abra Flow Builder y seleccione Autolaunched Flow (No Trigger).
- 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.
- Cree una variable de texto
- 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_statusMessagey márquela como disponible para salida.
- Cree una variable booleana
- 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.
- Guardar y activar: Guarde el flujo con el nombre
Agent_Update_Order_Addressy actívelo.
Paso 3: Registrar la acción de flujo
- Vaya a Setup > Agentforce Assets > New Agent Action.
- Seleccione Reference Action Type = Flow.
- Seleccione
Agent_Update_Order_Address. - Compruebe que las descripciones de todas las variables de entrada y salida sean comprensibles para el modelo de lenguaje.
- 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ón | Mecanismo | Escenario idóneo |
|---|---|---|
| MuleSoft for Agentforce: Topic Center y API Catalog | Sincronización nativa de especificaciones desde Anypoint Exchange hacia Salesforce API Catalog | Organizaciones con gobernanza centralizada de API en Anypoint Platform y equipos dedicados. |
| External Services for MuleSoft | Registro directo mediante Named Credentials y especificaciones OpenAPI 3.0/2.0 | Conexiones 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:
- Descripciones completas: Cada parámetro de ruta, parámetro de consulta y propiedad JSON debe incluir una
descriptionclara y concisa. - Esquemas simplificados: Evite esquemas polimórficos (
oneOf,anyOf) o estructuras con anidamientos excesivos. Los esquemas planos minimizan fallos en la extracción de parámetros. - Códigos de estado claros: Defina respuestas estándar (200, 400, 404, 500) con cuerpos JSON informativos.
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
- 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.
- 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. - Configurar Named Credentials: Asigne una credencial nombrada con OAuth 2.0 para autenticar las llamadas salientes con seguridad.
- 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
- Abra Agentforce Builder desde Setup y seleccione el agente a editar.
- Seleccione un tópico existente o cree uno nuevo (por ejemplo, Order Logistics and Changes).
- Redacte la Topic Classification Description: Describa con claridad qué solicitudes de los usuarios deben canalizarse a través de este tópico.
- 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ónica | Invocable Apex | Autolaunched Flow | MuleSoft External Services |
|---|---|---|---|
| Perfil principal requerido | Desarrollador Salesforce (Apex) | Administrador / Desarrollador Low-Code | Arquitecto de Integración / Desarrollador MuleSoft |
| Entorno de ejecución | Núcleo de Salesforce Platform | Núcleo de Salesforce Platform | Sistemas empresariales externos y microservicios |
| Casos de uso idóneos | Algoritmos complejos, validaciones avanzadas, transacciones sobre múltiples objetos | Operaciones CRUD estándar, enrutamientos, aprobaciones, flujos existentes | Conexión con ERPs (SAP/Oracle), pasarelas de pago, almacenes externos |
| Límites de gobernador y latencia | Tiempo de CPU sincrónico (10 s), límites SOQL/DML | Límites de iteración y elementos de Flow | Depende de la red externa; soporta tiempos de espera de hasta 120 s |
| Modelo de mantenimiento | Código fuente en Git, SFDX y paquetes de metadatos | Versionado declarativo en Flow Builder | Catálogo y contratos gobernados en Anypoint Exchange |
| Gestión de excepciones | Bloques try-catch estructurados con clases contenedor | Conectores de fallo (Fault Connectors) y asignaciones | Có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:
- Acceso a clases Apex: Asigne al perfil o Permission Set del Agent User acceso explícito a las clases que contienen métodos
@InvocableMethod. - Permisos de flujo: Asegúrese de que el Agent User tenga el permiso de sistema Run Flows y acceso específico al flujo autolanzado.
- Named Credentials y seguridad a nivel de campo (FLS): Verifique que el Agent User tenga acceso a las credenciales nombradas y permisos de lectura/escritura FLS sobre los objetos y campos involucrados.
2. Estrategia de pruebas multinivel
- Pruebas unitarias en Apex: Desarrolle clases de prueba con una cobertura superior al 85%, validando entradas nulas, excepciones y seguridad en User Mode.
- 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.
- 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
- Agent Customization with Apex | Salesforce Trailhead
- Learn How to Make Agent-Ready Flows | Salesforce Trailhead
- How to Write Effective Natural Language Instructions for Agentforce | Salesforce Developers Blog
- A Developer’s Guide to Context Engineering with Agentforce | Salesforce Developers Blog
- Salesforce Agentforce Specialist Certification Guide & Tips | Salesforce Ben
- External Services | Salesforce Help