
L’API REST Salesforce.com permet d’interagir avec toutes les données du CRM (comptes, contacts, opportunités…). Une authentification est requise au préalable, un jeton d’accès doit être obtenu.
La documentation indique 3 flux OAuth distincts à authentifier: serveur Web OAuth, User-Agent OAuth et nom d’utilisateur-mot de passe OAuth.
Les deux premiers flux peuvent offrir l’avantage de renvoyer également un jeton d’actualisation (refresh token) pouvant être utilisé pour étendre la validité du jeton d’accès. Mais le troisième flux, Nom d’utilisateur-Mot de passe OAuth, est la solution la plus simple pour l’analyse des données. Je vais utiliser celui-ci dans cet extrait.
Créer une application
Dans tous les cas, créez une nouvelle «application connectée» (Connected App) dans votre portail Salesforce (prod ou sandbox).
Allez dans « Configuration », ouvrez le « Gestionnaire d’applications ». Ensuite, créez une “Nouvelle application connectée”. Nommez votre application. Cochez la case «Activer les paramètres OAuth». Dans «Étendues OAuth sélectionnées», définissez toutes les étendues disponibles. Tapez « http://localhost/ » dans « URL de rappel ». Enregistrer.
À la fin, vous devriez obtenir et noter la «Consumer Key”» et le «Consumer Secret».
Utilisez le flux OAuth Nom d’utilisateur-Mot de passe pour vous authentifier
Avec les informations d’identification de l’utilisateur et le jeton de sécurité, utilisez ce script Python pour obtenir un jeton d’accès (access token).
Faire des appels à l’API REST Salesforce
Après avoir réussi à obtenir un jeton d’accès, il est possible d’appeler l’API Salesforce REST pour extraire des données (prospects, opportunités, etc.) ou pour modifier et créer de nouveaux enregistrements.
Exemple très simple: extrayons les prochaines opportunités de fermeture grâce à une requête SOQL (Salesforce Object Query Language).
print(json.dumps(sf_api_call('/services/data/v39.0/query/', {
'q': 'SELECT Account.Name, Name, CloseDate from Opportunity where IsClosed = False order by CloseDate ASC LIMIT 10'
}), indent=2))
Le résultat est un JSON facile à exploiter.