Dans cet article, nous verrons pas à pas comment nous servir de la suite GCP pour automatiser l’envoi des données vers un CRM.
Le scénario est le suivant : Nous avons une liste de personnes malades dans un fichier brut csv. Nous voulons sauvegarder ces informations dans notre base de données (BigQuery) et envoyer cette liste dans notre CRM (Hubspot) pour pouvoir les contacter ou leur envoyer un mail. Il faudrait que nous soyons capables à la fois de :
Ajouter de nouveaux contacts
Mettre à jour les contacts pour corriger les noms, prénoms etc…
Pour suivre ce tutoriel, vous aurez besoin de:
File.csv: données des contacts à insérer,
Config.py: fichier de configuration pour GCP,
Main.py: programme python pour récupérer les données, les transformer etc..
Les étapes pour réaliser ce projet seront les suivantes :
Importer les données csv (File.csv) dans BigQuery
Créer la requête SQL
Créer un récepteur (Google Cloud Logging et Google Cloud Pub/sub)
Créer une fonction (Google Cloud Function)
Interagir avec Hubspot
1. Importer les données CSV
Se créer un projet dans son espace console google cloud.
Nommer le projet : “exampleTrigger”, vous pouvez le nommer comme vous le souhaiter. N’oubliez pas de reprendre ce nom dans la requête SQL.
Se diriger dans la page BigQuery : qui est la base de données que nous utiliserons pour réaliser ce projet.
Créer un dataset dans BigQuery : “exampleDataset” qui correspond à un répertoire dans lequel des bases de données peuvent être déposées. Ne pas oubliez de valider en bas de la page.
Créer la base de données : “exampleData” qui nous servira tout au long de ce tutoriel.
Pour se faire :
Importer le fichier file.csv depuis sa page
Laisser la détection automatique des schémas de données
Ignorer la première ligne L’opération vous permettra d’obtenir une base de données dans le répertoire “exampleDataset”.
2. Créer la requête SQL
La requête SQL qui sera créer sera utilisée pour faire nos tests. L’objectif est de pouvoir mettre à jour la table des informations et de mettre à jour les informations dans le CRM (Hubspot) lorsque la requête est terminée.
Pour crée et sauvegarder une requête sous BigQuery, il faut (explication en image) :
Aller dans éditeur de requête
Rentrer la requête SQL
Cliquer sur le bouton « enregistrer une requête »
Donner un nom à la requête “test” Une fois l’enregistrement terminé, on peut exécuter la requête
Se diriger vers le bouton “Exécuter” A la fin de l’exécution, un message s’affiche nous spécifiant que cette dernière a été correctement effectuée.
Pour voir la table mise à jour :
Cliquer sur le bouton “Accéder à la table”
Cliquer sur “Aperçu” et voilà
Notre travail préparatoire est terminé. Nous pourrons tester que notre workflow fonctionne correctement en réalisant cette requête régulièrement.
3. Créer un récepteur
Le récepteur devra être capable d’écouter les actions effectuées sur la base de données (exampleData) et d’effectuée l’action voulue en réponse. Dans notre cas, l’action sera d’envoyer les mise à jour dans le CRM (Hubspot). Pour réaliser la dernière action, nous utiliserons google fonction (prochaine partie).
Pour créer un récepteur (explication en image):
Se connecteur à Google cloud logging : il s’agit de l’espace dans lequel, toutes les tâches effectuées dans son espace GCP sont répertoriées.
Se diriger vers le “Routeur de journaux” - menu à gauche de l’écran et qui nous permettra de créer notre récepteur
Cliquer sur créer un routeur
Dans détail du récepteur :
nommer le récepteur “recepteur_update”
Dans destination du récepteur :
Dans sélectionner un service de récepteur, choississez Sujet Cloud pub/sub
Dans choisissez un service pub/sub, créer un sujet pub/sub et nommer le comme vous le souhaitez “recepteur_pubsub”
Dans Choisissez les journaux à inclure, rentrer les mots clés que vous souhaiter intercepter (code ci-dessous)
resource.type="bigquery_resource"protoPayload.methodName = "jobservice.jobcompleted"protoPayload.serviceData.jobCompletedEvent.job.jobName.projectId = "exampletrigger"protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.query.statementType="UPDATE"
Créer votre récepteur:
Une fois le récepteur crée, on peut s’occuper de la fonction qui permettra d’envoyer les données dans Hubspot.
4. Création de la fonction google
Pour créer la fonction google, se diriger vers sa plateforme google cloud fonction (lien). Ne pas oublier d’activer l’api cloud Build de google qui vous permettra d’effectuer des tests de votre fonction avant de la déployer. Pour créer votre fonction :
Cliquer sur « créer une fonction »
Donner lui un nom
Dans le déclencheur :
Définissez le type : Cloud Pub/Sub
Choisissez le service : celui que vous aurez créé précédemment « recepteur_pubsub »
Enregistrez
Cliquez ensuite sur suivant pour accéder à l’éditeur
Dans l’éditeur (explication en image) : Dans l’environnement d’exécution : choisir python 3.8 : vous avez la possibilité de choisir le langage qui vous correspond le mieux (node, python, etc…) Point d’entrée : permet de spécifier le programme qui sera lancé. Dans mon cas, ce sera « get_data ». Vous pouvez le renommer comme vous le souhaitez à condition que la fonction existe dans votre fichier. Dans le code source, créer le fichier main.py , écrire le programme (ci-dessous) et déployer la fonction
main.py
import base64import jsonimport configfrom google.cloud import bigqueryimport requestsdef transform_data(ligne,data):contact = {"email": data.at[ligne,"email"],"name": data.at[ligne,"first_name"] + " " + data.at[ligne,"last_name"],"properties": [{"property": "firstname", "value": data.at[ligne,"first_name"]},{"property": "lastname", "value": data.at[ligne,"last_name"]},{"property": "company", "value": ""},{"property": "associatedcompanyid", "value": ""}]}return contactdef create_contacts_to_hs():#global blobglobal contactssql = "SELECT * FROM exampleDataset.exampleData"bq_client = bigquery.Client(project=config.config_vars['project_id'])rows_df = bq_client.query(sql).to_dataframe()rows_df_length = len(rows_df.index)print('Create Contacts to HubSpot.')for x in range(rows_df_length):try:contact = transform_data(x, rows_df)email = contact['email']#get api keyurl = f"https://api.hubapi.com/contacts/v1/contact/createOrUpdate/email/{email}/?hapikey=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"r = requests.post(url, json= contact)name = contact["name"]status_code = r.status_codeprint(str(status_code) + ' - Contact: '+ name)if status_code != 200:logger.info(r.json())contact['vid'] = r.json().get('vid')except Exception as e:print(e.args)passdef get_data(event, context):message = base64.b64decode(event['data']).decode('utf-8')pubsub_message = json.loads(message)if pubsub_message["protoPayload"]["serviceData"]["jobCompletedEvent"]["job"]["jobConfiguration"]["query"]["statementType"]=="UPDATE":print("Update")create_contacts_to_hs()
5. Interagir avec le CRM (Hubspot)
Pour interagir avec Hubspot, il vous faut un compte développeur. Ce compte vous permettra d’obtenir une clé avec laquelle vous pourrez interagir pour faire vos tests. Au début, vous n’aurez aucune information dans hubspot :
Ensuite, se diriger dans BigQuery et faire une mise à jour
Enfin retourner dans son compte développeur pour voir le résultat.