Automatisation RH avec n8n : traitement de candidatures simplifié
Ce workflow n8n est conçu pour automatiser le processus de gestion des candidatures dans le domaine des ressources humaines. En intégrant des outils d'intelligence artificielle, il permet d'extraire des informations pertinentes des CV soumis et de les analyser efficacement. Les entreprises peuvent ainsi gagner un temps précieux en automatisant la collecte et le traitement des données des candidats, tout en minimisant les erreurs humaines. Le workflow commence par un déclencheur basé sur la soumission d'un formulaire, ce qui permet de capturer les candidatures dès leur arrivée. Ensuite, les fichiers sont extraits et les informations sont analysées grâce à des nœuds tels que 'Qualifications' et 'Personal Data', qui utilisent des modèles d'IA pour extraire des données clés. Les résultats sont ensuite résumés et structurés avant d'être envoyés vers Google Sheets pour un suivi facile. Ce processus d'automatisation n8n améliore non seulement l'efficacité opérationnelle, mais permet également aux équipes RH de se concentrer sur des tâches à plus forte valeur ajoutée, comme l'interaction avec les candidats. En intégrant ce workflow, les entreprises peuvent optimiser leur processus de recrutement tout en garantissant une gestion des données conforme et sécurisée.
Workflow n8n RH, Google Sheets, intelligence artificielle : vue d'ensemble
Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.
Workflow n8n RH, Google Sheets, intelligence artificielle : détail des nœuds
Inscris-toi pour voir l'intégralité du workflow
Inscription gratuite
S'inscrire gratuitementBesoin d'aide ?{
"id": "t1P14FvfibKYCh3E",
"meta": {
"instanceId": "a4bfc93e975ca233ac45ed7c9227d84cf5a2329310525917adaf3312e10d5462",
"templateCredsSetupCompleted": true
},
"name": "HR-focused automation pipeline with AI",
"tags": [],
"nodes": [
{
"id": "b1092f93-502c-4af0-962e-2b69311b92a3",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"position": [
-520,
-200
],
"webhookId": "2a87705d-8ba1-41f1-80ef-85f364ce253e",
"parameters": {
"options": {},
"formTitle": "Send CV",
"formFields": {
"values": [
{
"fieldLabel": "Name",
"placeholder": "Name",
"requiredField": true
},
{
"fieldType": "email",
"fieldLabel": "Email",
"placeholder": "Email",
"requiredField": true
},
{
"fieldType": "file",
"fieldLabel": "CV",
"requiredField": true,
"acceptFileTypes": ".pdf"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "77edfe2a-4c6a-48c8-8dc9-b275491be090",
"name": "Extract from File",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-160,
-200
],
"parameters": {
"options": {},
"operation": "pdf",
"binaryPropertyName": "CV"
},
"typeVersion": 1
},
{
"id": "ebf2e194-3515-4c0a-8745-790b63bf336f",
"name": "Qualifications",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
160,
-100
],
"parameters": {
"text": "={{ $json.text }}",
"options": {
"systemPromptTemplate": "You are an expert extraction algorithm.\nOnly extract relevant information from the text.\nIf you do not know the value of an attribute asked to extract, you may omit the attribute's value."
},
"attributes": {
"attributes": [
{
"name": "Educational qualification",
"required": true,
"description": "Summary of your academic career. Focus on your high school and university studies. Summarize in 100 words maximum and also include your grade if applicable."
},
{
"name": "Job History",
"required": true,
"description": "Work history summary. Focus on your most recent work experiences. Summarize in 100 words maximum"
},
{
"name": "Skills",
"required": true,
"description": "Extract the candidate’s technical skills. What software and frameworks they are proficient in. Make a bulleted list."
}
]
}
},
"typeVersion": 1
},
{
"id": "4f40404c-1d47-4bde-9b4b-16367cf11e4f",
"name": "Summarization Chain",
"type": "@n8n/n8n-nodes-langchain.chainSummarization",
"position": [
900,
-220
],
"parameters": {
"options": {
"summarizationMethodAndPrompts": {
"values": {
"prompt": "=Write a concise summary of the following:\n\nCity: {{ $json.output.city }}\nBirthdate: {{ $json.output.birthdate }}\nEducational qualification: {{ $json.output[\"Educational qualification\"] }}\nJob History: {{ $json.output[\"Job History\"] }}\nSkills: {{ $json.output.Skills }}\n\nUse 100 words or less. Be concise and conversational.",
"combineMapPrompt": "=Write a concise summary of the following:\n\nCity: {{ $json.output.city }}\nBirthdate: {{ $json.output.birthdate }}\nEducational qualification: {{ $json.output[\"Educational qualification\"] }}\nJob History: {{ $json.output[\"Job History\"] }}\nSkills: {{ $json.output.Skills }}\n\nUse 100 words or less. Be concise and conversational."
}
}
}
},
"typeVersion": 2
},
{
"id": "9f9c5f16-1dc2-4928-aef8-284daeb6be51",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
660,
-220
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineAll"
},
"typeVersion": 3
},
{
"id": "51bd14cc-2c54-4f72-b162-255f7e277aff",
"name": "Profile Wanted",
"type": "n8n-nodes-base.set",
"position": [
1300,
-220
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a3d049b0-5a70-4e7b-a6f2-81447da5282a",
"name": "profile_wanted",
"type": "string",
"value": "We are a web agency and we are looking for a full-stack web developer who knows how to use PHP, Python and Javascript. He has experience in the sector and lives in Northern Italy."
}
]
}
},
"typeVersion": 3.4
},
{
"id": "4a120e5d-b849-4a29-b7f3-12c653552367",
"name": "Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
1960,
-220
],
"parameters": {
"columns": {
"value": {
"CITY": "={{ $('Merge').item.json.output.city }}",
"DATA": "={{ $now.format('dd/LL/yyyy') }}",
"NAME": "={{ $('On form submission').item.json.Nome }}",
"VOTE": "={{ $json.output.vote }}",
"EMAIL": "={{ $('On form submission').item.json.Email }}",
"SKILLS": "={{ $('Merge').item.json.output.Skills }}",
"TELEFONO": "={{ $('Merge').item.json.output.telephone }}",
"SUMMARIZE": "={{ $('Summarization Chain').item.json.response.text }}",
"EDUCATIONAL": "={{ $('Merge').item.json.output[\"Educational qualification\"] }}",
"JOB HISTORY": "={{ $('Merge').item.json.output[\"Job History\"] }}",
"DATA NASCITA": "={{ $('Merge').item.json.output.birthdate }}",
"CONSIDERATION": "={{ $json.output.consideration }}"
},
"schema": [
{
"id": "DATA",
"type": "string",
"display": true,
"required": false,
"displayName": "DATA",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "NAME",
"type": "string",
"display": true,
"required": false,
"displayName": "NAME",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "PHONE",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "PHONE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "CITY",
"type": "string",
"display": true,
"required": false,
"displayName": "CITY",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "EMAIL",
"type": "string",
"display": true,
"required": false,
"displayName": "EMAIL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "DATA NASCITA",
"type": "string",
"display": true,
"required": false,
"displayName": "DATA NASCITA",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "EDUCATIONAL",
"type": "string",
"display": true,
"required": false,
"displayName": "EDUCATIONAL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "JOB HISTORY",
"type": "string",
"display": true,
"required": false,
"displayName": "JOB HISTORY",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "SKILLS",
"type": "string",
"display": true,
"required": false,
"displayName": "SKILLS",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "SUMMARIZE",
"type": "string",
"display": true,
"required": false,
"displayName": "SUMMARIZE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "VOTE",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "VOTE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "CONSIDERATION",
"type": "string",
"display": true,
"required": false,
"displayName": "CONSIDERATION",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ssz5RvN1Hr20Q31pnYnbjCLu1MGBvoLttBAjXunMRQE/edit#gid=0",
"cachedResultName": "Foglio1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1ssz5RvN1Hr20Q31pnYnbjCLu1MGBvoLttBAjXunMRQE",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ssz5RvN1Hr20Q31pnYnbjCLu1MGBvoLttBAjXunMRQE/edit?usp=drivesdk",
"cachedResultName": "Ricerca WebDev"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "JYR6a64Qecd6t8Hb",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "a154d8a5-9f85-45bb-b082-f702c13c3507",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1720,
-20
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"vote\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"consideration\": {\n\t\t\t\"type\": \"string\"\n\t\t}\n\t}\n}"
},
"typeVersion": 1.2
},
{
"id": "037ac851-7885-4b78-ac75-dfa0ebb6003d",
"name": "HR Expert",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1560,
-220
],
"parameters": {
"text": "=Profilo ricercato:\n{{ $json.profile_wanted }}\n\nCandidato:\n{{ $('Summarization Chain').item.json.response.text }}",
"messages": {
"messageValues": [
{
"message": "Sei un esperto HR e devi capire se il candidato è in linea con il profilo ricercato dall'azienda.\n\nDevi dare un voto da 1 a 10 dove 1 significa che il candidato non è in linea con quanto richiesto mentre 10 significa che è il candidato ideale perchè rispecchia in toto il profilo cercato.\n\nInoltre nel campo \"consideration\" motiva il perchè hai dato quel voto. "
}
]
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.5
},
{
"id": "ed5744c4-df06-4a01-a103-af4dd470d482",
"name": "Personal Data",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
160,
-280
],
"parameters": {
"text": "={{ $json.text }}",
"options": {
"systemPromptTemplate": "You are an expert extraction algorithm.\nOnly extract relevant information from the text.\nIf you do not know the value of an attribute asked to extract, you may omit the attribute's value."
},
"schemaType": "manual",
"inputSchema": "{\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"telephone\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n \"city\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n \"birthdate\": {\n\t\t\t\"type\": \"string\"\n\t\t}\n\t}\n}"
},
"typeVersion": 1
},
{
"id": "181c1249-b05c-4c35-8cac-5f9738cc1fe6",
"name": "Upload CV",
"type": "n8n-nodes-base.googleDrive",
"position": [
-160,
-380
],
"parameters": {
"name": "=CV-{{ $now.format('yyyyLLdd') }}-{{ $json.CV[0].filename }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1tzeSpx4D3EAGXa3Wg-gqGbdaUk6LIZTV",
"cachedResultUrl": "https://drive.google.com/drive/folders/1tzeSpx4D3EAGXa3Wg-gqGbdaUk6LIZTV",
"cachedResultName": "CV"
},
"inputDataFieldName": "CV"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "HEy5EuZkgPZVEa9w",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "d31ee1c4-e4be-41d9-8f36-e6fb797ced8e",
"name": "OpenAI",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
920,
240
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "CDX6QM4gLYanh0P4",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "0290cb72-a581-4aff-8b5d-1aa63e0a630f",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-560,
-680
],
"parameters": {
"color": 3,
"width": 540,
"content": "## HR Expert \nThis workflow automates the process of handling job applications by extracting relevant information from submitted CVs, analyzing the candidate's qualifications against a predefined profile, and storing the results in a Google Sheet"
},
"typeVersion": 1
},
{
"id": "361084ff-9735-4a56-8988-be573391838b",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-240,
-460
],
"parameters": {
"width": 300,
"height": 420,
"content": "The CV is uploaded to Google Drive and converted so that it can be processed\n"
},
"typeVersion": 1
},
{
"id": "4b6f004f-c77b-4522-99d4-737a68f6cfac",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
120,
-380
],
"parameters": {
"width": 360,
"height": 440,
"content": "The essential information for evaluating the candidate is collected in two different chains"
},
"typeVersion": 1
},
{
"id": "73e11af9-65e3-4fcd-bb99-8a3f212ce9fb",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
860,
-300
],
"parameters": {
"width": 320,
"height": 240,
"content": "Summary of relevant information useful for classifying the candidate"
},
"typeVersion": 1
},
{
"id": "606711d1-8e6d-44b3-91ac-c047d8a4054f",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1240,
-300
],
"parameters": {
"width": 220,
"height": 240,
"content": "Characteristics of the profile sought by the company that intends to hire the candidate"
},
"typeVersion": 1
},
{
"id": "89c3210c-c599-41dc-97a3-bf8df2beb751",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1500,
-300
],
"parameters": {
"width": 360,
"height": 240,
"content": "Candidate evaluation with vote and considerations of the HR agent relating the profile sought with the candidate's skills"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "594728c0-b842-404d-8810-c6f7f3f4631d",
"connections": {
"Merge": {
"main": [
[
{
"node": "Summarization Chain",
"type": "main",
"index": 0
}
]
]
},
"OpenAI": {
"ai_languageModel": [
[
{
"node": "Qualifications",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Summarization Chain",
"type": "ai_languageModel",
"index": 0
},
{
"node": "HR Expert",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Personal Data",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"HR Expert": {
"main": [
[
{
"node": "Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"Upload CV": {
"main": [
[]
]
},
"Personal Data": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Profile Wanted": {
"main": [
[
{
"node": "HR Expert",
"type": "main",
"index": 0
}
]
]
},
"Qualifications": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Extract from File": {
"main": [
[
{
"node": "Qualifications",
"type": "main",
"index": 0
},
{
"node": "Personal Data",
"type": "main",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "Extract from File",
"type": "main",
"index": 0
},
{
"node": "Upload CV",
"type": "main",
"index": 0
}
]
]
},
"Summarization Chain": {
"main": [
[
{
"node": "Profile Wanted",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "HR Expert",
"type": "ai_outputParser",
"index": 0
}
]
]
}
}
}Workflow n8n RH, Google Sheets, intelligence artificielle : pour qui est ce workflow ?
Ce workflow s'adresse aux départements des ressources humaines et aux recruteurs, notamment dans les PME et les grandes entreprises. Il est conçu pour des utilisateurs ayant un niveau technique intermédiaire, souhaitant améliorer leur processus de recrutement grâce à l'automatisation.
Workflow n8n RH, Google Sheets, intelligence artificielle : problème résolu
Ce workflow résout le problème de la gestion manuelle des candidatures, qui est souvent chronophage et sujet à des erreurs. En automatisant l'extraction et l'analyse des données des CV, il réduit le temps consacré à ces tâches et minimise les risques d'erreurs humaines. Les utilisateurs bénéficient d'une gestion plus rapide et plus efficace des candidatures, ce qui leur permet de se concentrer sur des interactions plus qualitatives avec les candidats.
Workflow n8n RH, Google Sheets, intelligence artificielle : étapes du workflow
Étape 1 : Le workflow est déclenché par la soumission d'un formulaire.
- Étape 1 : Les fichiers sont extraits à l'aide du nœud 'Extract from File'.
- Étape 2 : Les informations pertinentes sont extraites grâce aux nœuds 'Qualifications' et 'Personal Data'.
- Étape 3 : Les données sont résumées par le nœud 'Summarization Chain'.
- Étape 4 : Les résultats sont structurés et envoyés vers Google Sheets pour un suivi facile.
- Étape 5 : Les CV sont téléchargés sur Google Drive pour archivage.
Workflow n8n RH, Google Sheets, intelligence artificielle : guide de personnalisation
Pour personnaliser ce workflow, vous pouvez modifier les paramètres du nœud 'On form submission' pour adapter le formulaire aux besoins spécifiques de votre entreprise. Il est également possible de changer le nom de la feuille Google Sheets dans le nœud 'Google Sheets' pour correspondre à votre structure de données. Pour intégrer d'autres outils, vous pouvez ajouter des nœuds supplémentaires en fonction de vos besoins. Assurez-vous de sécuriser les données en configurant les autorisations d'accès appropriées sur Google Drive et en vérifiant les paramètres de confidentialité des données.