Prospectez efficacement à des dizaines de missions freelance en mêlant automatisation et chatGPT

6 février 2023 (il y a 1 ans)

background image

En tant free-lance, une partie de notre travail consiste à prospecter. On doit souvent accepter de perdre du temps pour essayer de trouver des missions, mais parfois cela peut prendre énormément de temps car notre prospection n'est pas suffisamment efficace. Pour remédier à ce problème, j'ai décidé de m'amuser un peu en utilisant mes compétences en automatisation et l'émergence de ChatGPT pour créer un système de prospection parfaitement automatisé et intelligent.

Dans cet article, je vais vous détailler comment j'ai imaginé ce système en combinant Google Apps Script et ChatGPT pour prospecter automatiquement dès qu'une annonce de mission free-lance apparaît sur nocodejobs.fr, un site qui référence des dizaines de missions free-lance et de postes permanents autour du marketing et du NoCode. Suivez le guide, vous devriez être en mesure de le répliquer facilement ! Ça devrait même vous donner des idées...

Télécharger le code complet

Table des matières

  1. Collecte automatisée de missions free-lance avec Google Apps Script
  2. Ajouter chatGPT au système pour prospecter intelligemment
  3. Le mot de la fin

Collecte automatisée de missions free-lance avec Google Apps Script

Dans cette première partie de l'article, je vais vous parler de nocodejobs.fr, un site référençant des dizaines de missions free-lance pour les professionnels du marketing et du NoCode. J'ai découvert ce site en faisant quelques recherches et j'ai été surpris par la quantité d'annonces freelance pertinentes, référencées dans le domaine du No-code et les informations disponibles, telles que les adresses e-mails des recruteurs, le nom du poste et la description détaillée du rôle. Cette découverte rapidement m'a donné l'idée de gagner en efficience dans mon processus de prospection en utilisant Google Apps Script pour collecter les données des missions sur le site et y postuler par la suite.

J'ai donc commencé par inspecter les éléments du site et son infrastructure Web et API pour déterminer la façon la plus simple de collecter les informations des missions. En utilisant Google Apps Script, j'ai pu collecter rapidement les données de chaque mission et les stocker sur une feuille de calcul Google. Ci-dessous, le code que j'ai utilisé pour réaliser cette première étape:

function collectDataFromContournement() {
 
var ss = SpreadsheetApp.getActive().getSheetByName("Summary");
var lastRow = ss.getLastRow() + 1;
var today = new Date();
var twoMonthsAgo = new Date(today.getFullYear(), today.getMonth() - 1, 1);
var lastDayOfTwoMonthsAgo = new Date(today.getFullYear(), today.getMonth(), 0);
 
var profile = UrlFetchApp.fetch("https://www.nocodejobs.fr/v1/integrations/airtable/ff9e9558-d24c-4a7d-817b-092007912063/app33Z3BSLAF69i0s/Offres/records?block_id=7f4e08ad-c57b-425d-82b7-eb026f4aa595",
 
{
"headers": {
"accept": "application/json, text/javascript, */*; q=0.01",
"accept-language": "fr,en;q=0.9",
"content-type": "application/json; charset=UTF-8",
"sec-ch-ua": "\"Not_A Brand\";v=\"99\", \"Google Chrome\";v=\"109\", \"Chromium\";v=\"109\"",
"sec-ch-ua-mobile": "?1",
"sec-ch-ua-platform": "\"Android\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"softr-page-id": "180582e5-5ac5-432c-b3d5-9e6198f8a2ef",
"x-requested-with": "XMLHttpRequest"
},
"referrer": "https://www.nocodejobs.fr/les-offres/",
"referrerPolicy": "strict-origin-when-cross-origin",
"payload": "{\"page_size\":\"100\",\"view\":\"Pour le site : publication checkée \",\"filter_by_formula\":\"OR(SEARCH(\\\",mission freelance,\\\", \\\",\\\" & SUBSTITUTE(LOWER(ARRAYJOIN({Type de contrat}) & \\\",\\\"), \\\", \\\", \\\",\\\")))\",\"sort_resources\":[{\"field\":\"Date de publication de l'offre\",\"direction\":\"desc\"}],\"rows\":0}",
"method": "POST",
"mode": "cors",
"credentials": "omit"
})
 
var json = profile.getContentText();
var data = JSON.parse(json);
var existingIds = ss.getRange(2, 1, lastRow - 1, 1).getValues().flat();
 
for (var j = 0; j < 100; j++) {
 
if (data.records[j] !== undefined) {
var date = new Date(data.records[j].fields["Date de publication de l'offre"]);
}
else {
break
}
 
var id = data.records[j]["id"];
 
if (date >= twoMonthsAgo && date <= lastDayOfTwoMonthsAgo) {
 
if (existingIds.indexOf(id) === -1) {
 
var publicationDate = data.records[j].fields["Date de publication de l'offre"];
var jobName = data.records[j].fields["Titre de l'offre"];
var offerDescr = data.records[j].fields["Offre"];
var location = data.records[j].fields["Localisation"];
var companyName = data.records[j].fields["Nom de l'employeur"];
var contractType = data.records[j].fields["Type de contrat"][0] != undefined ? data.records[j].fields["Type de contrat"][0] : "";
var salary = data.records[j].fields["Salaire"];
var email = data.records[j].fields["E-mail"];
 
if (contractType.indexOf("CDI") != -1) {
var offerDescr1 = " offre en CDI"
} else {
var offerDescr1 = "offre en Freelance"
}
 
ss.appendRow([id, publicationDate, jobName, offerDescr, location, companyName, email, salary, offerDescr1]);
 
}
}
}
var range = ss.getRange("A2:N");
range.sort([{ column: 2, ascending: false }]);
 
}

Ce code est conçu pour être efficace et facile à utiliser mais je n'entrerai pas dans les détails car le but de cet article est de parler du raisonnement plus que de la technique. Il faut juste retenir que ce code permet de collecter plus d'une dizaine de missions freelance en les organisant sur un tableau Google Sheet via des noms de colonnes définis par moi-même. De plus, je m'assure de ne collecter que les annonces qui n'ont pas encore été collectées, ce qui est important pour la structure et pour permettre un développement futur si nous voulons lancer cette automatisation de manière récurrente. On obtient alors le résultat suivant :

Google Sheets Automatisation ChatGPT

Ajouter chatGPT au système pour prospecter intelligemment

Dans ce paragraphe, je vais décrire les étapes pour améliorer notre système de prospection de missions de freelance en utilisant ChatGPT. Tout d'abord, nous avons collecté les données en utilisant l'API de nocodejobs.fr ainsi que Google Apps Script pour éviter les doublons grâce à une automatisation appropriée. Maintenant, nous passons à la deuxième étape qui consiste à alimenter ChatGPT pour qu'il postule pour nous. L'objectif est de formuler un e-mail bien structuré en utilisant les informations disponibles, telles que le résumé de la mission, le nom du recruteur, le nom de l'entreprise, la localisation de l'offre et nos propres expériences. Pour ce faire, nous utilisons encore Google App Script en reliant ce module à l'API ChatGPT. J'ai consulté la documentation complète et la seule "étape nécessaire" est d'obtenir la clé API, ce que j'ai réussi à faire. J'ai ensuite utilisé cette clé API pour me permettre de résumer la description de la mission et l'ajouter automatiquement dans Google Sheets. Voici le code :

var question= "Faire un résumé de l'" + offerDescr1 + " à partir des informations suivantes: \n•"
+ "Nom de l'entreprise: " + companyName + "\n•"
+ "Salaire: " + salary + "\n•"
+ "Titre de l'offre: " + jobName + "\n•"
+ "Localisation: " + location + "\n•"
var answer = openaiRequest(question).replace(/^\s+/g, '');

Ensuite, nous avons sollicité l'aide de ChatGPT pour extraire le nom du recruteur à partir de l'adresse email. Il a accompli cette tâche avec succès à 100% du temps, ce qui est très impressionnant. Cela m'incite à réfléchir aux possibilités pour une prospection de masse à l'avenir...

var question2 = "Dans l'email suivant, m'indiquer le prénom avec un Majuscule: " + email
var answer2 = openaiRequest(question2).replace(/^\s+/g, '');

Et pour conclure, nous avons demandé à ChatGPT de rédiger la parfait e-mail de prospection et de la traduire en HTML. Voici le code.

var question3 = "Rédiger un e-mail précis pour indiquer que je suis le candidat idéal en utilisant les informations que l'on a déjà à disposition à savoir: \n•"
+ "Résumé de la mission: " + answer + "\n•"
+ "Nom du contact: " + answer2 + "\n•"
+ "Nom de l'entreprise: " + companyName + "\n•"
+ "Localisation de l'offre: " + location + "\n•"
+ "Lieu de publication de l'offre: " + "nocodejobs.fr" + "\n•"
+ "Rédiger son experience ici:" + "\n•" // write a short story about your pro experiences
var answer3 = openaiRequest(question3).replace(/^\s+/g, '');
 
// #4 - HTML Email //
var question4 = "Rédiger l'email en HTML pour que je puisse l'intégrer avec max-Width:550px, et systématiquement utiliser des hyperlink pour les liens./n" + answer3
var emailObjet = openaiRequest(question4).replace(/^\s+/g, '');

Mon automatisation peut être terminée en ajoutant un dernier bloc qui consiste à demander à App Script d'envoyer un email à mon "prospect" dès qu'une nouvelle mission de freelance est disponible, après avoir effectué plusieurs tests concluants avec ces formats. D'ailleurs, vous êtes curieux de voir l'une des réponses que ChatGPT a envoyé à l'un des recruteurs ?

Email prospection chatgpt google sheets app script

Bluffant, non ? Il a même fait le rapprochement entre des mots et URL en les liants.

Collecter les informations de missions de freelance sur nocodejobs.fr on sait faire. Enrichir ses informations par l'intelligence artificielle ChatGPT et envoyer un e-mail clair et précis, c'est bon aussi. On a donc plus qu'à l'automatiser en activant un déclencheur dans App Script. Pour ma part, je vais lancer l'automatisation une fois par jour pendant quelques jours et observer les résultats.

Télécharger le code complet

Le mot de la fin

Je progresse souvent en faisant des hypothèses dans mes projets, mais cette fois, c'est allé très vite (moins de 24 heures) et j'avais envie de partager ma découverte et la réflexion qui se cache derrière. Bien que j'utilise de plus en plus l'IA dans ma vie quotidienne, je n'avais encore jamais testé dans mon environnement pro. Je tire donc ici une conclusion et je suis vraiment impressionné par les résultats, en particulier la capacité de rédiger des emails professionnels qui me permettent aujourd'hui, sans aucun sas de validation, de faire tourner mon automatisation les yeux fermés et de faire confiance à l'IA pour envoyer des emails à des recruteurs pour moi. J'espère que ce cas d'étude vous apportera de la valeur et des idées sur ce que vous pouvez faire avec ce sujet. Vous trouverez le code complet juste au-dessus.

À bientôt! Corentin