SDK Python pour Zoho CRM
Table des matières
Le SDK Python pour Zoho CRM fournit des wrappers pour les API Zoho CRM. Donc, invoquer une API Zoho CRM à partir de votre application Python cliente n'est qu'un appel de méthode.
Le SDK Python prend en charge l'authentification d'un utilisateur unique et celle de plusieurs utilisateurs.
Enregistrement d'un client Zoho
Étant donné que les API Zoho CRM sont authentifiées par des normes OAuth2, vous devriez enregistrer votre application cliente auprès de Zoho. Pour enregistrer votre application :
- Visitez cette page https://accounts.zoho.com/developerconsole.
- Cliquez sur « Add Client ID » (Ajouter un ID client).
- Entrez le nom du client, le domaine du client et l'URI de redirection.
- Pour le type de client, sélectionnez « Web based » (Basé sur le Web).
- Cliquez sur « Create » (Créer).
- Votre application cliente devrait désormais être créée et s'afficher.
- L'ID client et la clé secrète client de l'application nouvellement enregistrée sont accessibles en cliquant sur Options → Edit (Options → Modifier).
(Les options sont représentées par l'icône des points de suspension dans le coin droit).
Configuration
Le SDK Python peut être installé par le biais de « Pip ». Pip est un outil de gestion des dépendances dans Python. Le SDK attend ce qui suit de l'application cliente
- L'application cliente doit disposer de Python 2.7 et version supérieure.
- https://www.python.org/downloads/
- L'application cliente a besoin que des demandes Python soient installées
- http://docs.python-requests.org/en/master/user/install/
- Le SDK Python doit être installé par le biais de Pip.
- La méthode ZCRMRestClient.initialize() doit être appelée au démarrage de votre application
- MySQL doit s'exécuter sur la machine en service au port par défaut 3306.
- Le nom de la base de données doit être « zohooauth ».
- Il doit y avoir un tableau « oauthtokens » comportant les colonnes « user identifier » (varchar(100)), « accesstoken » (varchar(100)), « refreshtoken » (varchar(100)), « expirytime » (bigint).
Si token_persistence_path est fourni dans le fichier oauth_configuration.properties, la persistance n'a lieu que dans le fichier. Dans ce cas, MySQL est inutile.
Créez un fichier vide appelézcrm_oauthtokens.pkl dans le token_persistence_path mentionné.
Installation du SDK à l'aide de Pip
Installez Pip (s'il ne l'est pas déjà)
Veuillez consulter le document ci-dessous pour installer Pip
https://pip.pypa.io/en/stable/installing/
Installer le SDK
Voici comment installer le SDK Python
- Exécutez la commande ci-dessous :
pip install zcrmsdk
Le SDK Python sera installé et un package nommé « zcrmsdk » sera créé dans le répertoire d'installation de Python ( par exemple, '/Library/Python/2.7/site-packages').
Mettre à niveau le SDK
- Exécutez cette commande pour mettre à niveau le SDK Python vers la version la plus récente.
pip install --upgrade zcrmsdk
Configurations
Les détails de votre client OAuth doivent être fournis au SDK en tant que fichier de propriétés. Dans le SDK, nous avons placé un fichier de configuration (oauth_configuration.properties). Veuillez placer les valeurs respectives dans ce fichier. Ce fichier est disponible sous « zcrmsdk/resources ».
Veuillez remplir les valeurs pour les seules clés suivantes.
En fonction de votre domaine (EU ,CN), modifiez la valeur de accounts_url. La valeur par défaut est un domaine US.
client_id=
client_secret=
redirect_uri=
accounts_url=https://accounts.zoho.com
token_persistence_path=
- client_id, client_secret et redirect_uri sont les configurations du client OAuth que vous obtenez après avoir enregistré votre client Zoho.
- access_type doit être défini comme ayant la valeur offline (hors ligne) uniquement, car le client OAuth n'est pas pris en charge par le SDK Python pour le moment.
- token_persistence_path est le chemin d'accès au stockage des jetons associés à OAuth dans le fichier. S'il est défini, la persistance ne requiert pas de base de données. La persistance intervient par le biais du fichier uniquement.
Incluez le chemin d'accès absolu dans configuration.properties pour la clé « applicationLogFilePath » afin de stocker les journaux. Ce fichier est disponible sous « zcrmsdk/resources ». Ce fichier sert à consigner les exceptions lors de l'utilisation du SDK Python.
Veuillez indiquer la valeur pour la clé suivante uniquement. Si le chemin d'accès aux journaux n'est pas fourni, les journaux ne seront pas stockés, mais vous pourrez les voir dans la console
applicationLogFilePath=
Pour effectuer des appels d'API au compte Sandbox, veuillez modifier la valeur de clé suivante en true. La valeur par défaut est false.
sandbox=true
Si votre application ne nécessite qu'une authentification pour utilisateur unique, vous devez définir l'identifiant de messagerie de l'utilisateur dans le fichier configurations.properties comme indiqué ci-dessous.
currentUserEmail=user@email.com
Pour utiliser l'authentification pour plusieurs utilisateurs, vous devez définir l'identifiant de messagerie des utilisateurs dans le fil actuel en tant qu'attribut.
threading.current_thread().__setattr__('current_user_email','user@email.com')
Vous pouvez également utiliser celui présenté ci-dessus pour l'authentification d'un utilisateur unique, mais il est conseillé de définir l'identifiant de messagerie dans le fichier configuration.properties.
Si vous ne configurez pas l'e-mail de l'utilisateur dans le fil actuel, le SDK s'attend à l'obtenir depuis le fichier configuration.properties. Si l'e-mail de l'utilisateur n'a pas l'une de ces deux configurations, le SDK Python renvoie une exception.
Initialisation
L'application sera prête à être initialisée après la définition du fichier de configuration OAuth.
Générer un jeton d'autorisation et d'actualisation auto-autorisé
Pour les applications clientes, le jeton d'autorisation auto-autorisé doit être généré à partir de Zoho Developer Console (https://accounts.zoho.com/developerconsole)
- Visiter https://accounts.zoho.com/developerconsole
- Cliquez sur Options → Self Client (Client auto) pour le client à autoriser.
- Entrez une ou plusieurs étendues (séparées par des virgules) Zoho CRM valides que vous souhaitez autoriser dans le champ « Scope » (Étendue) et choisissez l'heure d'expiration. Indiquez une étendue « aaaserver.profile.READ » avec les étendues Zoho CRM.
- Copiez le jeton d'autorisation à des fins de sauvegarde.
- Générez refresh_token à partir du jeton d'autorisation en effectuant une demande POST à l'aide de l'URL ci-dessous
https://accounts.zoho.com/oauth/v2/token?code={grant_token}&redirect_uri={redirect_uri}&client_id={client_id}&client_secret={client_secret}&grant_type=authorization_code
- Copiez le jeton d'actualisation à des fins de sauvegarde.
Veuillez noter que le jeton d'autorisation généré n'est valide que pendant le délai indiqué lors de sa création. Par conséquent, les jetons d'accès et d'actualisation doivent être générés dans ce délai.
Générer un jeton d'accès
Il est possible de générer un jeton d'accès à l'aide d'un jeton d'autorisation ou d'un jeton d'actualisation. Il suffit de suivre l'une de ces deux méthodes.
Générer des jetons d'accès à partir d'un jeton d'autorisation
L'extrait de code suivant doit être exécuté à partir de votre classe principale pour obtenir un jeton d'accès.
Veuillez coller le jeton d'autorisation généré dans le littéral de chaîne mentionné. Ce processus est uniquement ponctuel.
ZCRMRestClient.initialize()
oauth_client = ZohoOAuth.get_client_instance()
grant_token="paste_grant_token_here"
oauth_tokens = oauth_client.generate_access_token(grant_token)
Générer des jetons d'accès à partir d'un jeton d'actualisation
L'extrait de code suivant doit être exécuté à partir de votre classe principale pour obtenir un jeton d'accès.
Veuillez coller le jeton d'actualisation généré dans le littéral de chaîne mentionné. Ce processus est uniquement ponctuel.
ZCRMRestClient.initialize()
oauth_client = ZohoOAuth.get_client_instance()
refresh_token="paste_refresh_token_here"
user_identifier="provide_user_identifier_like_email_here"
oauth_tokens = oauth_client.generate_access_token_from_refresh_token(refresh_token,user_identifier)
Quand l'exécution de l'extrait de code ci-dessus a réussi, les jetons d'accès et d'actualisation générés sont conservés dans notre classe de gestion de la persistance.
Quand les jetons OAuth ont été conservés, les appels d'API suivants utilisent les jetons d'accès et d'actualisation conservés. Le SDK Python va procéder à l'actualisation du jeton d'accès à l'aide d'un jeton d'actualisation, en fonction des exigences.
Démarrage de l'application
Le SDK Python a besoin que la ligne de code suivante soit invoquée chaque fois que votre application cliente est démarrée.
ZCRMRestClient.initialize()
Une fois que le SDK aura été initialisé par la ligne ci-dessus, vous pourrez utiliser n'importe quelle API du SDK pour obtenir des résultats corrects.
Utilisation du SDK
Ajoutez la ligne ci-dessous aux fichiers Python de votre application cliente, là où vous voudriez utiliser le SDK Python.
import zcrmsdk
Vous pouvez ainsi accéder à toutes les fonctionnalités du SDK Python.
Pour accéder à un module ou à une classe, utilisez zcrmsdk.ClassName
Hiérarchie des classes
Toutes les entités Zoho CRM sont modélisées sous forme de modules comportant des classes, méthodes et variables d'instance applicables à cette entité particulière. ZCRMRestClient est la classe de base du SDK Python. ZCRMRestClient a des méthodes pour obtenir des instances de diverses autres entités Zoho CRM. Elles sont dans le module RestClient.
Les relations de classe et la hiérarchie du SDK suivent la hiérarchie des entités dans Zoho CRM. La hiérarchie des classes des diverses entités Zoho CRM est présentée ci-dessous :
ZCRMRestClient
-ZCRMOrganization
-ZCRMUser
-ZCRMUserTheme
-ZCRMUserCustomizeInfo
-ZCRMRole
-ZCRMProfile
-ZCRMPermission
-ZCRMProfileSection
-ZCRMProfileCategory
-ZCRMModule
-ZCRMLayout
-ZCRMSection
-ZCRMField
-ZCRMPickListValue
-ZCRMLookupField
-ZCRMLeadConvertMapping
-ZCRMLeadConvertMappingField
-ZCRMCustomView
-ZCRMCustomViewCategory
-ZCRMCustomViewCriteria
-ZCRMRelatedListProperties
-ZCRMModuleRelatedList
-ZCRMRecord
-ZCRMNote
-ZCRMAttachment
-ZCRMInventoryLineItem
-ZCRMTax
-ZCRMEventParticipant
-ZCRMPriceBookPricing
-ZCRMModuleRelation
-ZCRMJunctionRecord
-ZCRMTrashRecord
Telles qu'elles apparaissent dans la hiérarchie, toutes les classes d'entités ont des méthodes pour récupérer leurs propres propriétés et pour récupérer les données de leurs entités enfant immédiates par le biais d'un appel d'API.
Par exemple, un objet de module Zoho CRM (ZCRMModule) comportera des variables d'instance permettant d'obtenir les propriétés d'un module (comme le nom de l'affichage, l'ID du modules, etc.) ainsi que des variables d'instance pour récupérer tous ses objets enfants (comme ZCRMLayout).
Instancier l'object
Il n'est pas toujours efficace de respecter l'ensemble de la hiérarchie des classes à partir du niveau supérieur pour récupérer les données d'une entité de niveau inférieur, cela impliquant des appels d'API à tous les niveaux. Pour gérer ce problème, chaque classe d'entité dispose d'une méthode get_instance() pour obtenir son propre objet factice, ainsi que des variables d'instance pour obtenir les objets factices de ses entités enfant.
Veuillez noter qu'aucune propriété n'est indiquée pour la méthode get_instance() car cela ne renvoie pas d'appel d'API, mais seulement un objet factice à utiliser uniquement pour accéder aux méthodes non statiques de la classe.
En résumé,
- ZCRMRestClient.get_module(“Contacts”) renvoie le module Contacts réel, dont toutes les propriétés sont renseignées par le biais d'un appel d'API.
- ZCRMRestClient.get_module_instance(“Contacts”) renvoie un objet factice ZCRMModule faisant référence au module Contacts, sans aucune propriété renseignée, étant donné que cela ne génère pas d'appel d'API.
Par conséquent, pour obtenir des enregistrements d'un module, vous n'avez pas besoin de commencer à partir de ZCRMRestClient. Au lieu de cela, vous pouvez obtenir une instance de ZCRMModule avec ZCRMModule.get_instance(), puis invoquer sa méthode get_records() non statique à partir de l'instance créée. Cela permettrait d'éviter l'appel d'API qui aurait été déclenché pour remplir l'objet ZCRMModule.
Accès aux propriétés d'un enregistrement
Étant donné que les propriétés d'enregistrement sont dynamiques entre les modules, nous avons seulement donné les champs communs comme created_time, created_by, owner (propriétaire), etc., comme propriétés par défaut de ZCRMRecord. Toutes les autres propriétés d'un enregistrement sont disponibles sous forme de dictionnaire dans l'objet ZCRMRecord.
Pour accéder aux valeurs des champs individuels d'un enregistrement, utilisez les méthodes get et set disponibles. Les clés du dictionnaire des propriétés de l'enregistrement sont les noms d'API des champs du module. Tous les noms d'API des champs de tous les modules sont disponibles sous Setup → Extensions & APIs → APIs → CRM API → API Names. (Configuration → Extensions et API → API → API CRM → Noms d'API).
Pour obtenir une valeur de champ, utilisez record.get_field_value(field_api_name). Pour définir une valeur de champ, utilisez record.set_field_value(field_api_name,new_value). Lorsque vous définissez une valeur de champ, veillez à ce que la valeur définie corresponde au type de données du champ pour lequel vous allez la définir.
Gestion des réponses
APIResponse et BulkAPIResponse sont des objets wrappers pour les réponses des API Zoho CRM. Toutes les méthodes d'appel d'API renverront l'un de ces deux objets.
DownloadFile et downloadPhoto renvoient FileAPIResponse au lieu d'APIResponse.
Une méthode recherchant une entité unique renvoie l'objet APIResponse, alors qu'une liste d'entités recherchant une méthode renvoie l'objet BulkAPIResponse.
Utilisez la variable d'instance « data » pour obtenir uniquement les données d'entité à partir d'objets de wrapper de réponse. APIResponse.data renvoie un objet d'entité Zoho CRM unique, alors que BulkAPIResponse.data renvoie une liste d'objets d'entités Zoho CRM.
À part les données, ces objets de wrapper de réponse ont les propriétés suivantes :
- response_headers - nombre d'API restantes pour le jour/la fenêtre actuel(e) et temps écoulé pour la réinitialisation de la fenêtre actuelle.
- Info - toute autre information, si elle est fournie par l'API, en plus des données réelles.
- bulk_entity_response (liste des instances EntityResponse) - statut des entités individuelles dans une API en bloc. Par exemple, une API d'insertion d'enregistrements peut partiellement échouer en raison de quelques enregistrements. Ce tableau donne le statut de création des enregistrements individuels.
Exceptions
Tous les comportements inattendus, comme des réponses d'API erronées ou des anomalies du SDK, sont gérés par le SDK Python et sont regroupés dans une exception unique, à savoir ZCRMException. Cela suffit donc pour identifier cette exception seule dans le code de l'application cliente.
Classes et leurs variables d'instance
Nom du module | Nom de la classe | Variables d'instance | Méthodes |
---|---|---|---|
RestClient | ZCRMRestClient |
| |
Org | ZCRMOrganization |
|
|
Opérations | ZCRMModule |
|
|
ZCRMRecord |
|
| |
ZCRMInventoryLineItem |
|
| |
ZCRMTax |
|
| |
ZCRMEventParticipant |
|
| |
ZCRMPriceBookPricing |
|
| |
ZCRMUser |
|
| |
ZCRMUserCustomizeInfo |
|
| |
ZCRMUserTheme |
|
| |
ZCRMRole |
|
| |
ZCRMLayout |
|
| |
ZCRMAttachment |
|
| |
ZCRMCustomView |
|
| |
ZCRMCustomViewCategory |
|
| |
ZCRMCustomViewCriteria |
|
| |
ZCRMField |
|
| |
ZCRMJunctionRecord |
|
| |
ZCRMLeadConvertMapping |
|
| |
ZCRMLeadConvertMappingField |
|
| |
ZCRMLookupField |
|
| |
ZCRMModuleRelatedList |
|
| |
ZCRMModuleRelation |
|
| |
ZCRMNote |
|
| |
ZCRMPermission |
|
| |
ZCRMPickListValue |
|
| |
ZCRMProfile |
|
| |
ZCRMProfileCategory |
|
| |
ZCRMProfileSection |
|
| |
ZCRMRelatedListProperties |
|
| |
ZCRMSection |
|
| |
ZCRMTrashRecord |
|
| |
Réponse | APIResponse |
| |
BulkApiRepsponse |
| ||
EntityRepsponse |
| ||
RepsponseInfo |
| ||
FileApiRepsponse |
| ||
CLException | ZCRMException |
|