Déclencher une fonction cloud pour envoyer les données BigQuery vers un CRM (Hubspot)

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:

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.

"00_select_project"

Nommer le projet : “exampleTrigger”, vous pouvez le nommer comme vous le souhaiter. N’oubliez pas de reprendre ce nom dans la requête SQL.

"01_name_project"

Se diriger dans la page BigQuery : qui est la base de données que nous utiliserons pour réaliser ce projet.

"02_goToBigQuery"

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.

"03_create_datasetBG"

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”.

"05_create_and_view_csv_tab"

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à

"06_create_sql"

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:

"07_create_recepteur"

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

"08_create_fonction"

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 base64
import json
import config
from google.cloud import bigquery
import requests
def 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 contact
def create_contacts_to_hs():
#global blob
global contacts
sql = "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 key
url = 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_code
print(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)
pass
def 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()

"09_deploy_fonction"

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 :

"10_hubspot_vide"

Ensuite, se diriger dans BigQuery et faire une mise à jour

"11_update_tables"

Enfin retourner dans son compte développeur pour voir le résultat.

"12_data_in_hubspot"

Commentaires