ESPACE PUBLICITAIRE DISPONIBLE · PARLONS-EN

Comment les développeurs Salesforce créent et exposent les méthodes Invocable Apex, les flux et les API MuleSoft sous forme d'actions dans Agentforce

365Finds Editorial
11 430 articles Wiki répertoriés

Utilisez 365 Wiki avec votre IA

Copiez le prompt ci-dessous, collez-le dans l’IA que vous utilisez déjà, puis posez directement votre question.

Télécharger le Skill complet

Commencez par essayer le prompt. Si vous utilisez souvent 365 Wiki, installez le Skill 365Wiki complet pour ne plus avoir à le coller. Sans IA habituelle, les versions web de Gemini ou Microsoft Copilot conviennent aussi.

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 :

  1. 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.
  2. 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.
  3. 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) :

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

Étape 2 : Enregistrement de l'action Apex dans Setup

  1. Dans la Configuration (Setup) de Salesforce, recherchez Agent dans la barre de recherche rapide et sélectionnez Agentforce Assets (ou Agent Actions).
  2. Cliquez sur New Agent Action.
  3. Choisissez Reference Action Type = Apex.
  4. Sélectionnez la classe OrderCancellationService et la méthode Cancel Customer Order.
  5. Contrôlez les libellés et descriptions pré-remplis à partir des annotations du code.
  6. 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 »).
  7. 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

  1. Créer le flux : Ouvrez Flow Builder et sélectionnez Autolaunched Flow (No Trigger).
  2. 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.
  3. 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_statusMessage et cochez-la comme disponible pour la sortie.
  4. 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.
  5. Enregistrer et activer : Enregistrez le flux sous le nom Agent_Update_Order_Address et activez-le.

Étape 3 : Enregistrement de l'action de flux

  1. Rendez-vous dans Setup > Agentforce Assets > New Agent Action.
  2. Sélectionnez Reference Action Type = Flow.
  3. Choisissez Agent_Update_Order_Address.
  4. Vérifiez que la description de chaque variable d'entrée et de sortie est parfaitement compréhensible pour le LLM.
  5. 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égrationMécanismeCas d'usage recommandé
MuleSoft for Agentforce: Topic Center et API CatalogSynchronisation native depuis Anypoint Exchange vers Salesforce API CatalogGrandes entreprises disposant d'une gouvernance d'API mature sur Anypoint Platform.
External Services for MuleSoftImport direct via Named Credentials et spécifications OpenAPI 3.0/2.0Inté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 :

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

  1. Configurer la connexion Anypoint : Dans Setup, accédez à Anypoint Platform Setup et authentifiez votre organisation à l'aide de vos identifiants clients Anypoint.
  2. 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.
  3. Configurer les Named Credentials : Associez un identifiant nommé avec OAuth 2.0 pour sécuriser les appels sortants.
  4. 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

  1. Ouvrez Agentforce Builder dans Setup et modifiez l'agent concerné.
  2. Choisissez un thème existant ou créez-en un nouveau via New Topic (ex. : Order Logistics and Changes).
  3. Rédigez la Topic Classification Description : Définissez avec clarté quelles requêtes doivent être prises en charge par ce thème.
  4. 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 architecturaleInvocable ApexAutolaunched FlowMuleSoft External Services
Compétence principaleDéveloppeur Salesforce (Apex)Administrateur / Développeur Low-CodeArchitecte d'Intégration / Développeur MuleSoft
Environnement d'exécutionPlateforme native SalesforcePlateforme native SalesforceSystèmes d'entreprise externes et microservices
Cas d'usage idéauxCalculs algorithmiques, vérifications multi-objets, règles de sécurité complexesOpérations CRUD standard, approbations, réutilisation de flux existantsSynchronisation ERP (SAP/Oracle), passerelles bancaires, systèmes d'entrepôt
Gouvernance et latenceLimite CPU Apex synchrone (10 s), limites SOQL/DMLLimité par le nombre d'éléments et d'itérations de FlowDépend de la latence réseau ; délai d'attente d'appel jusqu'à 120 s
Gestion des versionsCode source sous Git, SFDX et packagingGestion déclarative des versions dans Flow BuilderContrats d'API et gouvernance dans Anypoint Exchange
Traitement des erreursBlocs try-catch structurés avec wrappers d'erreurConnecteurs d'erreur (Fault Connectors) et affectationsCodes 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 :

2. Stratégie de tests multiniveaux

  1. 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.
  2. 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.
  3. 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