Le 22 mai 2025, nous avons eu le plaisir de participer au Agentforce World Tour 2025 à Paris, et d’animer une session intitulée « Booster votre agent autonome avec Agentforce et Apex ».
L’objectif principal de notre présentation était d’identifier les scénarios précis dans lesquels l’utilisation d’Apex devient essentielle pour enrichir les capacités d’un agent autonome sur la plateforme Agentforce.
L'Apex dans Agentforce
Un topic comporte trois composants essentiels :
-
Description : précise ce que le topic peut gérer. L’agent s’appuie sur cette description pour déterminer la pertinence du topic dans une conversation.
-
Scope : permet de saisir un ensemble de descriptions supplémentaires dans le but de définir ce que l’agent est capable de faire.
-
Instructions : orientent l’agent dans ses prises de décisions et sur l’exécution des actions associées.
-
Flow : Pour automatiser des processus sans développement complexe.
-
Apex : Pour exécuter du code personnalisé sur la plateforme Salesforce, permettant ainsi une logique métier complexe.
-
Prompt template : Pour structurer clairement les demandes aux agents virtuels, améliorant ainsi la compréhension et la précision des réponses.
-
API : Pour étendre les interactions avec des systèmes externes.

Agent Action Apex
Pour celles et ceux qui sont familiers avec l’utilisation d’Apex dans les flows Salesforce, le fonctionnement des actions Apex dans Agentforce est très similaire.
@InvocableMethod
, une annotation spécifique qui permet à ces méthodes d’être appelées directement depuis un agent.Prompt Template - ressource Apex
Par exemple, prenons le cas où je souhaite stocker dans un champ d’un compte un résumé des cases résolus. Pour cela, je peux alimenter mon prompt avec les enregistrements de cases associés, préalablement récupérés et formatés via une méthode Apex. Le résultat du prompt peut ensuite être utilisé pour alimenter un champ texte sur l’objet compte.
Comment intégrer concrètement l'Apex dans vos agents ?
Une fois le besoin identifié, l’implémentation d’une action Apex dans un agent autonome suit un process clair :
Définir la méthode Apex : commencez par créer une classe Apex contenant une méthode publique annotée
@InvocableMethod
. C’est cette annotation qui rend la méthode accessible depuis Agentforce.Structurer les entrées et sorties : créez des classes d’entrée et de sortie avec l’annotation
@InvocableVariable
pour décrire les paramètres input et output qui seront utilisés par l’agent.Créer l’action personnalisée : dans Agentforce, ajoutez une action custom de type Apex. Sélectionnez la classe précédemment développée.
Configurer les instructions : rédigez les instructions pour expliquer à l’agent à quoi sert cette action, quand l’utiliser et quel objectif elle permet d’atteindre.
Décrire les paramètres : fournissez une description claire de chaque paramètre d’entrée et de sortie pour aider l’agent à bien contextualiser leur usage.
Pour les prompt templates, l’intégration suit une logique très proche. Il suffit de :
- Sélectionner une méthode Apex comme ressource dans le template,
- Faire correspondre les inputs attendus par la méthode Apex avec ceux définis dans le prompt template,
- Veiller à ce que les données transmises soient cohérentes entre les deux éléments.
Cette cohérence garantit que les inputs envoyés à la méthode Apex sont traités comme prévu et que le prompt fonctionne de manière optimale.

Les bonnes pratiques Apex dans Agentforce
Adopter des conventions de nommage claires : Le nom de vos méthodes, variables et classes doit refléter explicitement leur objectif. Cela facilite non seulement la maintenance, mais aussi la compréhension par l’agent, car dans Agentforce, le langage naturel fait partie intégrante de la logique de traitement. Un nom bien choisi améliore la capacité de l’agent à interpréter correctement l’action associée.
Gestion des erreurs : implémentez systématiquement des blocs
try/catch
pour capturer les erreurs et retourner des messages d’erreur explicites et compréhensibles. Cela permet à l’agent de mieux interpréter ce qui s’est mal passé et, si nécessaire, d’en informer l’utilisateur final de manière pertinente.Protéger les données avec des mécanismes de rollback : lorsque votre logique modifie des enregistrements Salesforce, pensez à prévoir des rollbacks pour éviter tout impact en cas d’erreur inattendue. Cela contribue à la fiabilité globale de vos process et à la qualité de vos données
Tester, tester et tester : Rédigez des tests unitaires performants pour garantir le bon fonctionnement de vos classes Apex. Au-delà du code, utilisez l’Agentforce Testing Center pour simuler des charges réelles, tester la performance et vous assurer que l’agent reste réactif même à grande échelle.
Définir la sécurité au niveau de vos classes : déclarez vos classes avec l’instruction
with sharing
afin que l’agent respecte les règles de sécurité et d’accès aux données de l’utilisateur en contexte. Cette approche permet de garantir que les actions de l’agent ne contournent pas les règles d’accès définies dans votre organisation Salesforce.Dans Agentforce, les agents peuvent fonctionner de deux manières :
- En héritant des droits de l’utilisateur connecté,
- En opérant avec leurs propres droits définis.
L’usage de
with sharing
permet d’assurer que les données manipulées par l’agent respectent toujours les contraintes de visibilité attendues, que l’agent agisse au nom de l’utilisateur ou non.
Apex ou Flows ?
- Gestion de données complexes ou personnalisées : Apex est adapté lorsqu’il s’agit de manipuler des types de données qui ne correspondent pas aux objets standards Salesforce (ex. : structures JSON complexes, objets métier spécifiques, formats externes). Cela permet de répondre à des besoins métier exigeants, là où les Flows atteignent leurs limites.
Traitement asynchrone avancé : L’un des grands avantages d’Apex est sa capacité à exécuter et enchaîner des traitements asynchrones, notamment grâce aux features
Queueable
. Cela permet de lancer des opérations longues sans bloquer l’interaction utilisateur. Une fonctionnalité impossible à mettre en place en utilisant des flows.Robustesse des traitements et gestion des erreurs : Apex permet d’implémenter des logiques d’exception avancées avec des blocs
try/catch
, des mécanismes de contrôle fin et des instructions de rollback. Cela garantit l’intégrité des données même en cas d’échec d’une opération intermédiaire. Il est par exemple possible d’insérer une liste d’enregistrement en modeallOrNone
et donc de définir si l’opération permet une réussite partielle. Si l’insertion d’un enregistrement échoue, le reste de l’opération DML peut tout de même réussir.Traitement de fichiers binaires (blobs) : Que ce soit pour gérer des pièces jointes, des images, ou des contenus encodés, Apex offre une vraie flexibilité pour manipuler des données binaires, un domaine difficilement adressable par Flow.
Gestion fine des droits d’accès : Apex vous permet de choisir d’exécuter le code en mode utilisateur ou système. Cela signifie que chaque requête et chaque opération peut être adaptée aux besoins de sécurité : soit en respectant strictement les droits de l’utilisateur connecté, soit en adoptant des privilèges système pour certains traitements critiques. Cette nuance n’est pour le moment pas possible dans un flow.