Salesforce Agentforce transforme l'intelligence artificielle d'entreprise en faisant évoluer les assistants conversationnels passifs vers de véritables agents autonomes (Autonomous Agents). Dans des environnements opérationnels réels, un agent ne se contente pas de répondre à des questions à partir d'une base de connaissances : il comprend précisément l'intention de l'utilisateur, sélectionne des outils d'entreprise spécialisés, exécute des transactions en temps réel et analyse les résultats pour déterminer la suite du processus.
Les actions standard prêtes à l'emploi couvrent des besoins CRM génériques comme la rédaction d'e-mails ou la synthèse d'enregistrements. Toutefois, les déploiements d'entreprise exigent l'application de règles métier propriétaires, l'orchestration de transactions complexes sur des systèmes hérités et l'accès à des données externes en temps réel. Les développeurs et architectes d'entreprise Salesforce doivent étendre les capacités d'Agentforce en concevant des Actions Personnalisées (Custom Actions) reposant sur trois piliers technologiques :
- Méthodes Invocable Apex : Logique programmatique déterministe pour les calculs complexes, les validations avancées et les requêtes spécifiques sur la base de données.
- Flux lancés automatiquement sans interface (Autolaunched Flows) : Automatisations déclaratives low-code permettant d'exécuter des opérations CRUD et des approbations sans écrire de code.
- API MuleSoft via External Services et API Catalog : Passerelles d'intégration connectant les ERP (SAP, Oracle), les processeurs de paiement et les microservices d'entreprise directement au moteur d'exécution de l'agent.
Ce guide détaille l'architecture globale, les étapes concrètes d'implémentation, les règles d'ingénierie de contexte (Context Engineering) et la gouvernance de sécurité nécessaires pour publier ces trois types d'actions dans Agentforce.
1. Architecture centrale : Comment le moteur de raisonnement Atlas comprend et exécute les actions
Pour construire des actions stables et exemptes d'hallucinations, les développeurs doivent comprendre le fonctionnement du cœur d'Agentforce : le moteur de raisonnement Atlas (Atlas Reasoning Engine).
[ Interaction utilisateur / Canaux Omni-Channel ]
│
▼
[ Moteur de Raisonnement Atlas ]
(ReAct: Raisonner - Agir - Observer)
│
┌────────────────┼────────────────┐
▼ ▼ ▼
[ Classification des Topics ] │ [ Filtre de Contexte et Règles ]
│ │
└───────┬────────┘
▼
[ Sélection de l'Action / Outil ]
│
┌───────────┼───────────┐
▼ ▼ ▼
[ Apex ] [ Flow ] [ MuleSoft / API ]
│ │ │
└───────────┼───────────┘
▼
[ Sortie structurée observée par Atlas ]
│
▼
[ Réponse finale ou exécution de l'action suivante ]
Le modèle ReAct et l'ingénierie de contexte
Le moteur Atlas fonctionne selon une boucle continue ReAct (Reason - Act - Observe) :
- Raisonner (Reason) : Il analyse le contexte de l'échange au regard des Thèmes (Topics) configurés et identifie quel outil (Action) est en mesure de répondre à l'intention.
- Agir (Act) : Il extrait les paramètres nécessaires de la conversation, les associe au schéma d'entrée de l'action et déclenche son exécution.
- Observer (Observe) : Il évalue la charge utile structurée renvoyée par l'action, vérifie si l'objectif est atteint et décide d'enchaîner une action complémentaire ou de formuler une réponse en langage naturel.
En développement logiciel traditionnel, les composants communiquent via des types stricts et des appels de méthodes directs. Dans l'écosystème des agents autonomes, les métadonnées constituent le prompt. Le grand modèle de langage n'inspecte pas le code source Apex interne : il s'appuie sur le label, la description, les annotations des paramètres et les instructions de l'action (Action Instructions). Des descriptions vagues entraînent des confusions d'outils et des erreurs d'extraction, tandis que des descriptions précises assurent une exécution déterministe.
2. Création et exposition d'Invocable Apex comme actions personnalisées
Invocable Apex s'impose lorsque la logique métier requiert des calculs algorithmiques lourds, des transactions multi-objets, des traitements par lots ou des règles de sécurité strictes.
Étape 1 : Conception de la classe Invocable Apex
Agentforce expose le code via l'annotation @InvocableMethod. La méthode doit être statique, déclarée en public ou global, accepter une liste (List) d'objets wrapper d'entrée et retourner une liste (List) d'objets wrapper de sortie.
Voici une implémentation robuste pour la gestion des annulations de commandes :
public with sharing class OrderCancellationService {
// Wrapper d'entrée : Déclare les paramètres requis par l'agent
public class OrderCancellationRequest {
@InvocableVariable(
label = 'Order Number'
description = 'Identifiant alphanumérique unique de la commande à annuler, ex. ORD-10023.'
required = true
)
public String orderNumber;
@InvocableVariable(
label = 'Cancellation Reason'
description = 'Motif fourni par le client pour justifier l\'annulation.'
required = false
)
public String reason;
}
// Wrapper de sortie : Données structurées renvoyées au moteur Atlas
public class OrderCancellationResult {
@InvocableVariable(
label = 'Is Success'
description = 'Indicateur booléen confirmant le succès de l\'annulation.'
)
public Boolean isSuccess;
@InvocableVariable(
label = 'Cancellation Reference Code'
description = 'Numéro de suivi d\'audit généré pour confirmer l\'annulation.'
)
public String referenceCode;
@InvocableVariable(
label = 'Status Message'
description = 'Message explicatif du résultat ou détail de l\'erreur.'
)
public String message;
}
@InvocableMethod(
label = 'Cancel Customer Order'
description = 'Annule une commande client en attente et génère un code d\'audit. À exécuter uniquement si le statut est Pending ou Processing et que le client demande expressément l\'annulation.'
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 {
// Application de la sécurité en mode utilisateur
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 = 'Aucune commande active trouvée avec le numéro : ' + req.orderNumber;
results.add(res);
continue;
}
Order targetOrder = orders[0];
if (targetOrder.Status == 'Activated' || targetOrder.Status == 'Completed') {
res.isSuccess = false;
res.message = 'La commande ' + req.orderNumber + ' est déjà expédiée ou finalisée et ne peut plus être annulée automatiquement.';
results.add(res);
continue;
}
targetOrder.Status = 'Cancelled';
targetOrder.Description = 'Annulée via Agentforce. Motif : ' + (req.reason != null ? req.reason : 'Non précisé');
Database.SaveResult sr = Database.update(targetOrder, AccessLevel.USER_MODE);
if (sr.isSuccess()) {
res.isSuccess = true;
res.referenceCode = 'CAN-' + System.currentTimeMillis();
res.message = 'Commande annulée avec succès.';
} else {
res.isSuccess = false;
res.message = 'Échec de la mise à jour de l\'enregistrement dans la base de données.';
}
} catch (Exception ex) {
res.isSuccess = false;
res.message = 'Erreur interne lors de l\'annulation de la commande : ' + ex.getMessage();
}
results.add(res);
}
return results;
}
}
Bonnes pratiques Apex pour Agentforce
- Privilégier les actions granulaires aux classes fourre-tout (God Classes) : Ne concevez pas de méthode combinant recherche, calcul, facturation et expédition. Conservez des actions modulaires pour qu'Atlas puisse combiner les étapes de manière traçable.
- Renvoyer des erreurs structurées au lieu d'exceptions non gérées : Une exception non interceptée brise la session de conversation de l'agent. Utilisez des blocs
try-catchet renvoyezisSuccess = falseaccompagné d'unmessageclair, permettant à l'agent d'expliquer la situation ou de relancer le client. - Sécurité en User Mode : Déclarez toujours
with sharing, utilisezWITH USER_MODEdans vos requêtes SOQL etAccessLevel.USER_MODElors des opérations DML afin que l'agent respecte les permissions de profil et les sécurités au niveau du champ (FLS).
Étape 2 : Enregistrement de l'action Apex dans Setup
- Dans la Configuration (Setup) de Salesforce, recherchez
Agentdans la barre de recherche rapide et sélectionnez Agentforce Assets (ou Agent Actions). - Cliquez sur New Agent Action.
- Choisissez Reference Action Type = Apex.
- Sélectionnez la classe
OrderCancellationServiceet la méthodeCancel Customer Order. - Contrôlez les libellés et descriptions pré-remplis à partir des annotations du code.
- Renseignez les Action Instructions (Instructions de l'action) (ex. : « Exécuter uniquement lorsqu'un client authentifié demande explicitement l'annulation de sa commande. Demander le numéro de commande s'il n'est pas fourni »).
- Enregistrez.
3. Création et exposition de flux autolancés sans interface comme actions
Pour les modifications de données CRM standard, les déclenchements de processus d'approbation et la réutilisation de règles déclaratives, les Autolaunched Flows constituent une alternative rapide et facile à maintenir pour les administrateurs.
Contrainte sur le type de flux
Agentforce prend en charge exclusivement les flux lancés automatiquement sans déclencheur (Autolaunched Flow - No Trigger). Les flux d'écran (Screen Flows) requièrent une interface utilisateur interactive et les flux déclenchés par enregistrement répondent à des événements de base de données. Un flux autolancé fournit une interface requête-réponse directe conforme au cycle ReAct.
[ Demande de l'utilisateur : "Modifie mon adresse de livraison au 10 rue de la Paix" ]
│
▼
[ Planificateur d'Actions Agentforce ]
│
(Extrait les paramètres : orderId, streetAddress, city)
│
▼
[ Autolaunched Flow : Mettre à jour l'adresse de livraison ]
┌─────────────────────────┐
│ Get Record : Commande │
├─────────────────────────┤
│ Decision : Statut envoi │
├─────────────────────────┤
│ Update Record : Adresse │
└─────────────────────────┘
│
(Variables de sortie : isUpdated = True, confirmation)
│
▼
[ Atlas formule la réponse finale ]
Configuration étape par étape dans Flow Builder
- Créer le flux : Ouvrez Flow Builder et sélectionnez Autolaunched Flow (No Trigger).
- Définir les variables d'entrée :
- Créez une variable texte
var_orderId. - Cochez Available for input (Disponible pour l'entrée).
- Renseignez la Description : « Identifiant Salesforce à 18 caractères de la commande ciblée ».
- Déclarez les autres variables nécessaires (
var_streetAddress, etc.) avec des descriptions précises.
- Créez une variable texte
- Définir les variables de sortie :
- Créez la variable booléenne
var_isUpdated, cochez Available for output (Disponible pour la sortie) et décrivez-la : « Vrai si l'adresse a été mise à jour en base ». - Créez la variable texte
var_statusMessageet cochez-la comme disponible pour la sortie.
- Créez la variable booléenne
- Construire la logique :
- Utilisez Get Records pour charger la commande.
- Utilisez un élément Decision pour valider la possibilité de modification.
- Utilisez Update Records pour enregistrer la nouvelle adresse.
- Utilisez Assignment pour valoriser les variables de sortie.
- Enregistrer et activer : Enregistrez le flux sous le nom
Agent_Update_Order_Addresset activez-le.
Étape 3 : Enregistrement de l'action de flux
- Rendez-vous dans Setup > Agentforce Assets > New Agent Action.
- Sélectionnez Reference Action Type = Flow.
- Choisissez
Agent_Update_Order_Address. - Vérifiez que la description de chaque variable d'entrée et de sortie est parfaitement compréhensible pour le LLM.
- Saisissez les instructions de l'action et validez.
4. Exposition d'API MuleSoft via External Services et API Catalog
Les agents d'entreprise ont fréquemment besoin d'interagir avec des systèmes extérieurs à Salesforce, tels que les ERP (SAP, Oracle), les centres logistiques ou les passerelles bancaires. MuleSoft gère l'intégration et la gouvernance, tandis que Salesforce convertit ces API en actions exécutables grâce à External Services et au Salesforce API Catalog.
Comparaison des approches d'intégration
| Méthode d'intégration | Mécanisme | Cas d'usage recommandé |
|---|---|---|
| MuleSoft for Agentforce: Topic Center et API Catalog | Synchronisation native depuis Anypoint Exchange vers Salesforce API Catalog | Grandes entreprises disposant d'une gouvernance d'API mature sur Anypoint Platform. |
| External Services for MuleSoft | Import direct via Named Credentials et spécifications OpenAPI 3.0/2.0 | Intégrations point à point ou API dédiées devant être consommées rapidement par les flux et agents. |
[ ERP d'entreprise / SAP / Base de données externe ]
│
▼
[ MuleSoft Anypoint Platform ]
(System, Process, Experience APIs)
│
(Topic Center / Spécifications OAS 3.0)
│
▼
[ Salesforce Anypoint Setup / Sync ]
│
┌─────────────┴─────────────┐
▼ ▼
[ Named Credentials ] [ Salesforce API Catalog ]
(Authentification sécurisée) (Découverte unifiée d'API)
│ │
└─────────────┬─────────────┘
▼
[ External Services ]
(Génération d'actions invocables)
│
▼
[ Bibliothèque d'Actions Agentforce ]
Étape 1 : Conception de spécifications OpenAPI (OAS) adaptées à l'IA
Atlas interprète la spécification OpenAPI pour déterminer les points de terminaison, les paramètres d'URL et les corps de requêtes. Pour optimiser l'usage par l'agent :
- Descriptions exhaustives : Chaque paramètre de requête et propriété JSON doit comporter un champ
descriptionexplicite. - Schémas épurés : Évitez les types polymorphiques complexes (
oneOf,anyOf) et les imbrications trop profondes qui nuisent à l'extraction des paramètres. - Codes d'état explicites : Définissez les réponses 200 mais également les erreurs 400, 404 et 500 avec des structures JSON informatives.
Exemple de spécification OpenAPI 3.0 pour la consultation des stocks :
openapi: 3.0.3
info:
title: Enterprise Warehouse API
version: 1.0.0
description: Service de consultation des stocks et de disponibilité en temps réel.
paths:
/inventory/{sku}:
get:
summary: Consulter le stock d'entrepôt par SKU
description: Renvoie la quantité disponible, l'entrepôt d'expédition et le délai de réapprovisionnement pour une référence produit.
operationId: getInventoryBySku
parameters:
- name: sku
in: path
required: true
description: Code produit unique du fabricant, ex. PROD-WIDGET-99.
schema:
type: string
responses:
'200':
description: Consultation de stock réussie
content:
application/json:
schema:
type: object
properties:
sku:
type: string
description: La référence produit demandée.
quantityOnHand:
type: integer
description: Nombre d'unités physiques disponibles en entrepôt.
isAvailableToShip:
type: boolean
description: Indique si l'article peut être expédié immédiatement.
warehouseRegion:
type: string
description: Région du centre logistique principal.
'404':
description: SKU introuvable dans le catalogue d'inventaire
Étape 2 : Synchronisation et création de l'action dans Salesforce
- Configurer la connexion Anypoint : Dans Setup, accédez à Anypoint Platform Setup et authentifiez votre organisation à l'aide de vos identifiants clients Anypoint.
- Synchroniser l'API Catalog : Dans MuleSoft Topic Center ou Exchange, appliquez le tag
sf-api-catalog. Dans le Salesforce API Catalog, activez les opérations souhaitées sous forme d'actions. - Configurer les Named Credentials : Associez un identifiant nommé avec OAuth 2.0 pour sécuriser les appels sortants.
- Créer l'action d'agent : Dans Agentforce Assets, créez une nouvelle action de type External Service et associez l'opération d'inventaire.
5. Câblage dans Agentforce Builder : La couche des Thèmes (Topics)
Les actions personnalisées ne flottent pas librement dans l'environnement de l'agent. Pour être invoquées, elles doivent être assignées à un Thème (Topic) dans Agentforce Builder. Les thèmes structurent les domaines de compétences et limitent la portée des outils accessibles.
[ Agent Autonome : Agent de Service Client ]
│
┌───────────────┴───────────────┐
▼ ▼
[ Topic : Logistique des Commandes ] [ Topic : Support Technique ]
(Périmètre et classification) (Périmètre et classification)
│
┌───┴───────────────────────────────┐
▼ ▼
[ Action : Consulter Commande ] [ Action : Annuler Commande ]
(Autolaunched Flow) (Invocable Apex)
Étapes d'association
- Ouvrez Agentforce Builder dans Setup et modifiez l'agent concerné.
- Choisissez un thème existant ou créez-en un nouveau via New Topic (ex. : Order Logistics and Changes).
- Rédigez la Topic Classification Description : Définissez avec clarté quelles requêtes doivent être prises en charge par ce thème.
- Dans l'onglet Actions du thème, cliquez sur Add Action et sélectionnez vos actions Apex, Flow ou MuleSoft.
Rédaction d'instructions d'action et de thème
Les instructions en langage naturel orientent les choix de l'agent :
### Instructions du Thème : Order Logistics and Changes
- Aide le client pour le suivi de colis, les demandes de statut, le changement d'adresse et l'annulation de commandes.
- Avant d'annuler une commande, vérifie toujours son état actuel et demande confirmation explicite au client.
- Si l'annulation est impossible car le colis est déjà expédié, explique la situation et présente la politique de retour.
### Instructions de l'Action : Cancel Customer Order
- Déclencher cette action uniquement après que l'utilisateur a fourni le numéro de commande et confirmé son accord.
- Si le numéro de commande est manquant, demander : « Pourriez-vous me communiquer le numéro de la commande à annuler ? »
- À l'issue de l'opération, communiquer impérativement le code de suivi d'annulation (referenceCode) au client.
Confirmation humaine préalable (Human-in-the-Loop)
Pour les opérations qui altèrent des données critiques, entraînent des mouvements financiers ou procèdent à des annulations, activez l'option Require Confirmation (Exiger confirmation) dans les paramètres de l'action. Agentforce demandera ainsi une confirmation explicite (ex. : « Êtes-vous sûr de vouloir annuler la commande ORD-10023 ? Cette action est irréversible ») avant d'exécuter l'action sous-jacente.
6. Matrice de décision et comparaison architecturale
Choisir la technologie appropriée pour chaque action garantit un équilibre optimal entre rapidité de livraison, maintenabilité et temps de réponse.
| Dimension architecturale | Invocable Apex | Autolaunched Flow | MuleSoft External Services |
|---|---|---|---|
| Compétence principale | Développeur Salesforce (Apex) | Administrateur / Développeur Low-Code | Architecte d'Intégration / Développeur MuleSoft |
| Environnement d'exécution | Plateforme native Salesforce | Plateforme native Salesforce | Systèmes d'entreprise externes et microservices |
| Cas d'usage idéaux | Calculs algorithmiques, vérifications multi-objets, règles de sécurité complexes | Opérations CRUD standard, approbations, réutilisation de flux existants | Synchronisation ERP (SAP/Oracle), passerelles bancaires, systèmes d'entrepôt |
| Gouvernance et latence | Limite CPU Apex synchrone (10 s), limites SOQL/DML | Limité par le nombre d'éléments et d'itérations de Flow | Dépend de la latence réseau ; délai d'attente d'appel jusqu'à 120 s |
| Gestion des versions | Code source sous Git, SFDX et packaging | Gestion déclarative des versions dans Flow Builder | Contrats d'API et gouvernance dans Anypoint Exchange |
| Traitement des erreurs | Blocs try-catch structurés avec wrappers d'erreur | Connecteurs d'erreur (Fault Connectors) et affectations | Codes d'état HTTP (2xx, 4xx, 5xx) et corps d'erreur JSON |
7. Stratégie de test, sécurité et mise en production
1. Permissions de l'Agent User et contexte de sécurité
Les actions s'exécutent sous l'identité de l'Agent User configuré. Les échecs constatés après le déploiement résultent souvent d'un manque de privilèges :
- Accès aux classes Apex : Assurez-vous que le profil ou le Permission Set de l'Agent User dispose de l'accès aux classes Apex contenant
@InvocableMethod. - Accès aux flux : Vérifiez que l'Agent User possède la permission système Run Flows et un accès direct au flux concerné.
- Named Credentials et sécurité au niveau du champ (FLS) : Attribuez les droits d'accès aux identifiants nommés et vérifiez les autorisations de lecture/écriture (FLS) sur les objets et champs impactés.
2. Stratégie de tests multiniveaux
- Tests unitaires Apex : Rédigez des classes de test couvrant au moins 85 % du code, en validant les entrées nulles, les exceptions et le respect du User Mode.
- Tests interactifs dans Agentforce Builder : Utilisez le volet de conversation pour tester des requêtes en langage naturel et vérifiez dans le journal de raisonnement si Atlas identifie le bon thème, extrait les paramètres et reçoit les réponses attendues.
- Tests de masse dans l'Agentforce Testing Center : Exécutez des suites de tests automatisées sur des centaines de variations de phrases pour mesurer la précision du choix des outils et prévenir les hallucinations.
En combinant la rigueur d'Invocable Apex, l'agilité déclarative des flux autolancés et la puissance d'intégration des API MuleSoft, les équipes de développement établissent une architecture robuste et sécurisée pour leurs agents d'IA autonomes sur la plateforme Salesforce.
Références
- 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