Tuto : Recevoir un email hebdomadaire avec mes tâches complétées de Notion
Contexte
Notion est un outil que j’utilise au quotidien, aussi bien pour prendre des notes en réunions que pour suivre toutes les tâches/actions que j’ai à effectuer par projet et pour mon équipe. Pourtant, et bien que l’utilisation de Notion me permet d’être hyper productif, mon utilisation actuelle de Notion génère pas mal de frustration. S’il est très facile dans Notion d’avoir une vision des tâches qu’il reste à réaliser, il me semble tout aussi important de mesurer le travail accompli pour rester motiver. C’est pourquoi j’ai décidé d’automatiser une email hebdomadaire récapitulant l’ensemble des tâches réalisées la semaine passée.
1. Mise à jour de ma base de données Notion
Pour ce faire, j’ai commencé par ajouter une nouvelle propriété à la base de données que j’utilise pour mes tâches. Cette nouvelle propriété est basée sur la formule suivante : si le statut de la tâche = ‘Complété’ alors ‘Date de complétion’ = mettre la même valeur que le champ ‘Date MAJ’ sinon laisser à vide.
L’hypothèse derrière cette formule est lorsqu’une tâche est complétée, je ne remets plus jamais à jour cette tâche, sinon mon champ ‘Date de complétion’ sera recalculé.
if(prop("Statut") == "Completé", prop("Date MAJ"), fromTimestamp(toNumber("")))
Je pensais baser mon automatisation mais finalement ça ne sera pas le cas (cf plus loin). Néanmoins ce champ reste très utile comme filtre dans Notion.
2. Sélectionner le bon outil d’automatisation pour mon process (Zapier ou Make)
Mon premier choix s’est orienté vers Zapier car je l’utilise pour d’autres automatisation. Mais j’ai découvert que le module natif Notion dans Zapier (c’est la même chose pour Make) est loin d’être parfait. Par exemple :
- Dans le module Notion de Zapier on ne retrouve pas tous les champs disponibles dans ma base de données Notion. J’ai lu que les formules, les relations, les champs multi valeurs n’étaient pas supportés par ce module (pour rappel mon champ ‘Date de complétion’ est une formule)
- Le module de Notion de Zapier n’a qu’un nombre limité de fonctions pour interagir avec Notion et je n’ai pas trouvé comment utiliser ces fonctions pour réaliser mon objectif
Pour pouvoir avancer j’ai donc pris la décision de me baser directement sur l’API de Notion et de trouver une façon de m’y connecter via mon outil d’automatisation. Je me suis orienté vers Make et son module HTTP.
3. Connexion entre Make et Notion
L’API Notion
Notion met à disposition une documentation très claire de son API.
Test de l’API Notion via Postman
- Récupérer ses identifiants Notion (token). La première chose à faire est de générer ses identifiants Notion. Pour cela, il suffit d’aller dans la version web de Notion, puis dans “Settings and member” > “Integration” > “Develop your own integration”. Une fois la nouvelle intégration créée vous pouvez récupérer votre token.
- Trouver l’identifiant de la base de données Notion: Cet identifiant est contenu dans l’URL Notion de la page de votre base de données https://www.notion.so/YOUR_DATABASE_ID?v=eae568cd3eec41a59039203e67377c59
- Partager la base de données avec l’intégration créée à l’étape 1 : il suffit de cliquer sur le bouton “Share” en haut à droite de la page de votre base de données et d’autoriser votre intégration à cette base de données
- Paramétrer la requête Postman : L’URL pour interroger la base de données est : https://api.notion.com/v1/databases/YOUR_DATABASE_ID/query. C’est une requête POST (et non GET). Dans la section autorisation sélectionnez “Bearer token” et renseignez le token que Notion vous a donné à l’étape 1. Dans la partie Header il faudra renseigner les paramètres suivants : Notion-Version = 2021–08–16 et Content-Type = application/json
- Ajouter les filtres. Dans mon cas je ne souhaitais récupérer de ma base de données uniquement les tâches complétées de la semaine passée. C’est à cette étape que j’ai réalisé que mon champ calculé ‘Date de complétion’ n’était pas utile. En fait, filtrer sur un champ de type Formule n’est pas aussi simple que de filtrer sur un champ de type Date. Heureusement les filtres sur les champs de type Date sont très bien fait et me permettent de réaliser pleinement l’objectif que je m’étais fixé. Ci-dessous les différents filtres que j’ai passé dans le body de ma requête API :
{
"filter": {
"and": [
{
"property": "Last update date",
"last_edited_time": {
"past_week": {}
}},
{
"property":"Status",
"select": {
"equals": "Completé" }}]}}
Paramétrer le call HTTP dans Make
Paramétrer le call HTTP dans Make est assez simple une fois que le test a été fait dans Postman. Néanmoins j’ai rencontré un léger contre temps dans cette partie. Lorsque je copiais et collais le body (la partie avec les filtres) de Postman dans le module HTTP de Make and gardant le format JSON avec les espaces et les tabulations, la requête me renvoyait une erreur. J’ai donc supprimé tous ces espaces et ces tabulations et le call a fonctionné sans souci.
4. Récupérer les données de l’API
Via du code (lecture optionnelle)
Une des options du module HTTP est de directement parser la réponse de l’API (“parse response”), ce qui est parfait puisque cela évite de le faire soi-même. Cependant dans ma réponse API j’obtiens plusieurs tâches et donc plusieurs noeuds de data. Au début je pensais que ça ne poserait aucun souci sauf que je me suis rapidement rendu compte que je récupérais via cette méthode que la première tâche et non toutes les tâches.
Or, manipuler et extraire des données d’un JSON est assez facile en passant par du code. Ma première étape a été de décocher l’option “parse response” et de faire ce travail directement via python. Pour utiliser python dans mon flux Make j’ai utilisé le module 1Saas.co. Ce module permet d’exécuter un script directement dans un flux Make. J’ai écris le code suivant pour récupérer mes données :
import pandas as pdnull = None
false = False
results = ""my_json_df = {{2.data}}df = pd.DataFrame(my_json_df)
for attr in df['results']:
results = attr['properties']['Projects']['title'][0]['plain_text'] + ", " + resultsresult = {'data': results}
Néanmoins utiliser le module 1Saas.co n’était pas idéal, car :
- La partie gratuite de 1Saas.co ne permet que d’exécuter 25 fois un script en tout (ce n’est pas par mois) et ensuite le prix est de 10$ / mois
- Ce n’est pas une solution no-code
- Le formatage de la réponse n’est pas flexible
Après quelques recherches j’ai trouvé une alternative purement no code à mon problème.
La solution no-code (option retenue)
Evidemment Make sait par lui même gérer plusieurs noeuds de données renvoyés par une API. Il existe un module natif appelé ‘Iterator’ qui permet d’appeler chaque noeud les uns à la suite des autres.
- Recocher l’option “parse response” dans le module HTTP
- Ajouter le module “Iterator” et sélectionner le tableau (array) sur lequel vous voulez itérer
- Dans mon cas je voulais itérer sur les noms de mes tâches et les combiner ensemble en les séparant par “</br>”. De cette façon les tâches apparaitront dans mon email les uns sous les autres.
5. Paramétrer l’envoi automatique de l’email
Connecter son compte gmail à Make est assez facile bien que long. Il suffit de suivre les différentes étapes décrites ici : https://www.integromat.com/en/help/app/google-email
Conclusion
Ce projet a été une première expérience très intéressante autour des possibilités qu’offre le no-code. J’ai pu tirer de cette expérience des apprentissages pérennes et utiles comme l’utilisation de l’API de Notion ( ouvrant la porte à une kyrielle d’automatisations) ou l’utilisation du module HTTP de Make.
Après quelques semaines d’utilisations, je peux définitivement valider cette automatisation. Elle me permet en chaque début de semaine de faire le bilan de tout ce qui a été réalisé en une semaine et de facto d’être plus motivé pour la semaine à suivre.
Mon prochain challenge sera de développer un dashboard pour suivre toutes les tâches complétées semaine après semaine (cet article est à retrouver ici en anglais).