Agent Assistant pour la recherche d'emploi

Avancé

Ceci est unMiscellaneous, Multimodal AIworkflow d'automatisation du domainecontenant 16 nœuds.Utilise principalement des nœuds comme Set, Code, Gmail, FormTrigger, Agent. Trouver le travail idéal et générer des lettres de motivation personnalisées avec Gemini et Google Jobs

Prérequis
  • Compte Google et informations d'identification Gmail API
  • Clé API Google Gemini
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "jDUtQ2fgs8EOqU95",
  "meta": {
    "instanceId": "c2650793f644091dc80fb900fe63448ad1f4b774008de9608064d67294f8307c",
    "templateCredsSetupCompleted": true
  },
  "name": "JOB Hunter Agent",
  "tags": [],
  "nodes": [
    {
      "id": "c6d0bc1b-bd78-4eea-84ed-6bed5c999d45",
      "name": "Note - Fonctionnement",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        432,
        -288
      ],
      "parameters": {
        "color": 5,
        "width": 500,
        "height": 864,
        "content": "## 🎯 SMART JOB HUNTER + COVER LETTER GENERATOR\n\n### 🚀 What This Workflow Does:\n\n1. **User Submission**\n   - User upload CV (PDF) + preferences (location, job type, salary, etc.)\n   - Triggered by Form node\n\n2. **Extract CV**\n   - PDF text extracted\n   - Stored in `cvData`\n\n3. **Prepare Data**\n   - Collects all form fields (location, work setting, job type, salary, email)\n   - Normalized into JSON variables\n\n4. **Job Hunter Agent**\n   - Uses SerpAPI + Gemini LLM\n   - System prompt forces **ONLY 1 job result**\n   - Returns structured JSON with cover letter\n\n5. **Parse Agent Output**\n   - Cleans JSON (removes ```json fences)\n   - Ensures valid JSON for downstream\n\n6. **Generate HTML Email**\n   - Builds clean email template\n   - Inserts candidate profile + job match + cover letter + application tips\n\n7. **Send via Gmail**\n   - Sends final email to user’s address\n   - Subject: *Your Job MATCH!*\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ef02ff8f-9fa8-4f8a-a66f-d81003fe3915",
      "name": "Note - Guide d'installation",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -384,
        48
      ],
      "parameters": {
        "color": 4,
        "width": 380,
        "height": 528,
        "content": "## ⚙️ SETUP GUIDE (Updated)\n\n### 1. Google Gemini (Required)\n* Go to [Google AI Studio](https://aistudio.google.com/)\n* Create Gemini API key\n* Add it to n8n credentials (`Google Palm / Gemini`)\n* Model used: **Gemini 2.5 Pro**\n\n### 2. SerpAPI (Required)\n* Go to [SerpAPI Dashboard](https://serpapi.com/)\n* Create API key\n* Add it to n8n credentials (`SerpAPI`)\n* Used by workflow to fetch **Google Jobs search results**\n\n### 3. Form Configuration\n* Form webhook auto-generated by n8n\n* Share form link directly with users\n* Or embed form in your website\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d776ebde-2cda-4b59-a0aa-a6ee0925d4f9",
      "name": "Note - Conseils avancés",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32,
        48
      ],
      "parameters": {
        "color": 3,
        "width": 360,
        "height": 528,
        "content": "## 🛠️ Customization Tips\n\n- **Prompt**:\n  Adjust system message in Job Hunter Agent to refine tone/length of cover letter.\n\n- **Email Branding**:\n  Update footer in HTML email (currently: *Generated by khmuhtadin.com*).\n\n- **Job Filters**:\n  Extend Prepare Data node to pass blacklist, industries, or company size.\n\n- **LLM Model**:\n  Currently using Google Gemini (Gemini 2.5 Pro).\n  Switch to GPT-4o or Claude 3.5 Sonnet if available for better reasoning.\n\n- **Attachments**:\n  Optionally attach parsed CV summary as PDF for user reference.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "027c527d-90c0-4aec-b3f5-7ca212c72b1d",
      "name": "À la soumission du formulaire",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -1200,
        -256
      ],
      "webhookId": "smart-job-hunter-v2",
      "parameters": {
        "options": {},
        "formTitle": "🎯 Smart Job Hunter + Cover Letter Generator",
        "formFields": {
          "values": [
            {
              "fieldType": "file",
              "fieldLabel": "CV/Resume (PDF)",
              "multipleFiles": false,
              "requiredField": true,
              "acceptFileTypes": ".pdf"
            },
            {
              "fieldLabel": "Preferred Location",
              "placeholder": "e.g., Jakarta, Bandung, Remote, Anywhere",
              "requiredField": true
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Job Type",
              "fieldOptions": {
                "values": [
                  {
                    "option": "Full Time"
                  },
                  {
                    "option": "Part Time"
                  },
                  {
                    "option": "Freelance"
                  },
                  {
                    "option": "Contract"
                  },
                  {
                    "option": "Internship"
                  }
                ]
              },
              "requiredField": true
            },
            {
              "fieldType": "dropdown",
              "fieldLabel": "Work Setting",
              "fieldOptions": {
                "values": [
                  {
                    "option": "On Site"
                  },
                  {
                    "option": "Remote"
                  },
                  {
                    "option": "Hybrid"
                  }
                ]
              },
              "requiredField": true
            },
            {
              "fieldLabel": "Minimum Salary Expectation (Optional)",
              "placeholder": "e.g., 10 juta, 15-20 juta, negotiable"
            },
            {
              "fieldType": "textarea",
              "fieldLabel": "Additional Preferences (Optional)",
              "placeholder": "e.g., startup culture, specific companies, must have BPJS"
            },
            {
              "fieldType": "email",
              "fieldLabel": "Email",
              "placeholder": "We will send the results to this email",
              "requiredField": true
            }
          ]
        },
        "formDescription": "Upload your CV and let AI find perfect jobs with custom cover letters!"
      },
      "typeVersion": 2.3
    },
    {
      "id": "c84aae8d-0731-4158-ae47-74cbf7a3fb92",
      "name": "Extraire le CV du PDF",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        -976,
        -256
      ],
      "parameters": {
        "options": {},
        "operation": "pdf",
        "binaryPropertyName": "CV_Resume__PDF_"
      },
      "typeVersion": 1
    },
    {
      "id": "6fa762f1-f99a-4436-b975-7583e5456ddd",
      "name": "Préparer les données",
      "type": "n8n-nodes-base.set",
      "position": [
        -752,
        -256
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "ce5f3a96-c63d-40fa-b02c-8d763bfa2ed1",
              "name": "cvData",
              "type": "string",
              "value": "={{ $json.text }}"
            },
            {
              "id": "51623c31-dacf-4828-b1ac-f03f67e00d54",
              "name": "location",
              "type": "string",
              "value": "={{ $('On form submission').item.json['Preferred Location'] }}"
            },
            {
              "id": "068b13d5-6941-415d-935b-4936e42df913",
              "name": "workSetting",
              "type": "string",
              "value": "={{ $('On form submission').item.json['Work Setting'] }}"
            },
            {
              "id": "e1636d57-472b-4886-b631-5deb45b103a3",
              "name": "jobType",
              "type": "string",
              "value": "={{ $('On form submission').item.json['Job Type'] }}"
            },
            {
              "id": "salary-expectation",
              "name": "salaryExpectation",
              "type": "string",
              "value": "={{ $('On form submission').item.json['Minimum Salary Expectation (Optional)'] || 'Not specified' }}"
            },
            {
              "id": "additional-prefs",
              "name": "additionalPreferences",
              "type": "string",
              "value": "={{ $('On form submission').item.json['Additional Preferences (Optional)'] || 'None' }}"
            },
            {
              "id": "user-email",
              "name": "userEmail",
              "type": "string",
              "value": "={{ $('On form submission').item.json['Email'] }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "7ace28c0-f3d0-4d89-b250-8896817dbac5",
      "name": "Agent de recherche d'emploi",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -528,
        -256
      ],
      "parameters": {
        "text": "={{ \n`ANALYZE CV AND FIND JOBS:\n\nCV Content:\n${$json.cvData}\n\nUser Preferences:\n- Location: ${$json.location}\n- Work Setting: ${$json.workSetting}\n- Job Type: ${$json.jobType}\n- Salary: ${$json.salaryExpectation}\n- Additional: ${$json.additionalPreferences}\n\nTASKS:\n1. Extract key info from CV (name, skills, experience, achievements)\n2. Search for 3 best matching jobs using tools\n3. Generate personalized cover letter for each job\n4. Format everything as structured JSON for email template`\n}}",
        "options": {
          "systemMessage": "=You are an expert Job Hunter specializing in the Indonesian job market.  \nUse Decodo Scrapper and SerpAPI to find a real job.  \n\n## YOUR MISSION:\n1. Analyze the CV to extract skills, experience, and achievements.  \n2. Search for exactly 1 best matching job using the tools.  \n   - Return the first high-quality match you find.  \n   - Do not attempt multiple searches or retries.  \n3. Generate one personalized cover letter for that job (250–350 words).  \n4. Output everything as structured JSON.\n\n## OUTPUT FORMAT:\nYou MUST output a valid JSON object with this exact structure:\n\n{\n  \"candidateName\": \"[Name from CV]\",\n  \"candidateExperience\": \"[X years in Y field]\",\n  \"candidateSkills\": \"[Top 3 skills]\",\n  \"candidateLevel\": \"[Junior/Mid/Senior]\",\n  \"candidateStrength\": \"[Key differentiator]\",\n  \"searchSummary\": \"[Platform searched and result]\",\n  \"job\": {\n    \"title\": \"[Job title]\",\n    \"company\": \"[Company name]\",\n    \"location\": \"[City/Remote]\",\n    \"salary\": \"[Range or estimate]\",\n    \"postedDate\": \"[X days ago]\",\n    \"applyUrl\": \"[URL]\",\n    \"whyMatch\": [\"Reason 1\",\"Reason 2\",\"Reason 3\"],\n    \"coverLetter\": \"Dear Hiring Manager at [Company],\\n\\n[250-350 word letter]\\n\\nBest regards,\\n[Name]\"\n  },\n  \"applicationTips\": {\n    \"bestTime\": \"Monday-Wednesday, 9-11 AM\",\n    \"keywords\": \"[List of keywords from the job]\",\n    \"followUp\": \"After 1 week\",\n    \"interviewPrep\": \"[Focus areas]\"\n  }\n}\n\n## IMPORTANT:\n- Use real job data from the tools (no imaginary jobs).  \n- Stop after finding **one** matching job.  \n- Output ONLY valid JSON, no extra text.\n"
        },
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "da5ec126-74e9-4708-8ec6-bc0136cf6fa2",
      "name": "Générer un e-mail HTML",
      "type": "n8n-nodes-base.code",
      "position": [
        0,
        -256
      ],
      "parameters": {
        "jsCode": "const jobData = $json;\nconst job = jobData.job || null;\n\n// Build HTML email\nconst htmlEmail = `\n<!DOCTYPE html>\n<html lang=\"id\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Your Job Match</title>\n</head>\n<body style=\"margin:0; padding:0; font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color:#f4f7fa;\">\n  <table role=\"presentation\" width=\"100%\" style=\"background-color:#f4f7fa;\">\n    <tr>\n      <td align=\"center\" style=\"padding:40px 20px;\">\n        <table role=\"presentation\" width=\"600\" style=\"background:#fff; border-radius:10px; box-shadow:0 4px 6px rgba(0,0,0,0.1);\">\n\n          <!-- Header -->\n          <tr>\n            <td style=\"background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); padding:40px; border-radius:10px 10px 0 0; text-align:center;\">\n              <h1 style=\"margin:0; color:#fff; font-size:28px;\">🎯 Your Job Match Is Ready!</h1>\n            </td>\n          </tr>\n\n          <!-- Profile Summary -->\n          <tr>\n            <td style=\"padding:30px;\">\n              <div style=\"background:#f8f9fa; border-radius:8px; padding:20px; margin-bottom:30px;\">\n                <h2 style=\"margin:0 0 15px 0;\">👤 Profile Summary</h2>\n                <p><strong>Name:</strong> ${jobData.candidateName || 'N/A'}</p>\n                <p><strong>Experience:</strong> ${jobData.candidateExperience || 'N/A'}</p>\n                <p><strong>Skills:</strong> ${(jobData.candidateSkills || []).join(', ')}</p>\n                <p><strong>Level:</strong> ${jobData.candidateLevel || 'N/A'}</p>\n              </div>\n\n              <!-- Job Match -->\n              ${job ? `\n              <div style=\"border:1px solid #e0e0e0; border-radius:8px; padding:20px; margin-bottom:25px;\">\n                <div style=\"background:linear-gradient(135deg,#f093fb 0%,#f5576c 100%); color:white; padding:8px 16px; border-radius:20px; font-weight:600; font-size:14px; display:inline-block; margin-bottom:15px;\">\n                  🥇 BEST MATCH\n                </div>\n\n                <h3>${job.title}</h3>\n                <p>🏢 ${job.company} | 📍 ${job.location}</p>\n                <p>💰 ${job.salary} | 📅 Posted ${job.postedDate}</p>\n\n                <div style=\"background:#f8f9fa; padding:12px; border-radius:6px; margin:15px 0;\">\n                  <p style=\"margin:0 0 8px 0; font-weight:600;\">Why this matches:</p>\n                  <ul>${(job.whyMatch || []).map(r => `<li>${r}</li>`).join('')}</ul>\n                </div>\n\n                <a href=\"${job.applyUrl}\" style=\"display:inline-block; background:#00a8e8; color:white; padding:10px 24px; text-decoration:none; border-radius:5px; font-weight:600;\">\n                  Apply Now →\n                </a>\n\n                <!-- Cover Letter -->\n                <div style=\"margin-top:20px; padding-top:20px; border-top:1px solid #e0e0e0;\">\n                  <h4>💌 Your Cover Letter</h4>\n                  <div style=\"background:#fff; border:1px solid #e0e0e0; padding:20px; border-radius:6px; white-space:pre-line; line-height:1.6;\">\n                    ${job.coverLetter}\n                  </div>\n                </div>\n              </div>\n              ` : '<p>No job found.</p>'}\n\n              <!-- Tips -->\n              ${jobData.applicationTips ? `\n              <div style=\"background:linear-gradient(135deg,#667eea 0%,#764ba2 100%); color:white; border-radius:8px; padding:20px;\">\n                <h3 style=\"margin:0 0 15px 0;\">💡 Application Tips</h3>\n                <p>📅 Best Time: ${jobData.applicationTips.bestTime}</p>\n                <p>🎯 Keywords: ${(jobData.applicationTips.keywords || []).join(', ')}</p>\n                <p>📧 Follow-up: ${jobData.applicationTips.followUp}</p>\n              </div>\n              ` : ''}\n            </td>\n          </tr>\n\n          <!-- Footer -->\n          <tr>\n            <td style=\"background:#f8f9fa; padding:30px; text-align:center; border-radius:0 0 10px 10px;\">\n              <p style=\"margin:0; color:#999; font-size:12px;\">\n                Generated by khmuhtadin.com | ${new Date().toLocaleDateString()}\n              </p>\n            </td>\n          </tr>\n\n        </table>\n      </td>\n    </tr>\n  </table>\n</body>\n</html>\n`;\n\n// Ambil email user dari workflow sebelumnya\nconst userEmail = $('Prepare Data').first().json.userEmail;\n\nreturn {\n  htmlEmail,\n  userEmail,\n  jobData\n};\n"
      },
      "typeVersion": 2
    },
    {
      "id": "4496a0d1-5bc3-4155-9b7f-5760f997da15",
      "name": "Envoyer un message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        192,
        -256
      ],
      "webhookId": "f8fd58d8-4038-4e45-b7df-261ab2cfcddc",
      "parameters": {
        "sendTo": "={{ $('On form submission').item.json.Email }}",
        "message": "={{ $json.htmlEmail }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "=Your Job MATCH!"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "8p11S7abjY8KddB9",
          "name": "contactmuhtadin"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "7c1caa4d-d9f2-4404-a7e1-497ea55c87b5",
      "name": "Analyser la sortie de l'agent",
      "type": "n8n-nodes-base.code",
      "position": [
        -208,
        -256
      ],
      "parameters": {
        "jsCode": "let raw = $json.output || \"\";\n\n// Clean markdown fences if they exist\nraw = raw.replace(/```json/g, '').replace(/```/g, '').trim();\n\nlet parsed;\ntry {\n  parsed = JSON.parse(raw);\n} catch (e) {\n  parsed = { error: \"Failed to parse JSON\", raw };\n}\n\nreturn parsed;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "bb0c881a-0185-4de3-ba10-97d1e5e91f7b",
      "name": "SerpAPI",
      "type": "@n8n/n8n-nodes-langchain.toolSerpApi",
      "position": [
        -384,
        -96
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "serpApi": {
          "id": "RnX2LOB0xs45mOEw",
          "name": "Login w Github"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "08df6d1a-16fd-47aa-9c42-5a88e7184b59",
      "name": "Note - Fonctionnement 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -832,
        48
      ],
      "parameters": {
        "color": 7,
        "width": 420,
        "height": 528,
        "content": "## ⚠️ Known Limitations\n\n- **Job Sources**:\n  Currently only SerpAPI (Google Jobs) + Decodo supported.\n  Can add LinkedIn, Jobstreet, Indeed with API/connector.\n\n- **Result Count**:\n  Hard-limited to **1 job** per run (by system prompt).\n  Change prompt if you want multiple jobs.\n\n- **Parsing**:\n  If AI fails to return valid JSON → fallback is `{ error: ... }`.\n  Email will show \"No job found\".\n\n- **Email Output**:\n  Gmail API required in n8n.\n  Make sure OAuth2 refresh tokens are valid.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "19c63f7b-d693-495d-94ec-5195c17df88a",
      "name": "Gemini 2.5 Pro",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -528,
        -96
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.5-pro"
      },
      "credentials": {
        "googlePalmApi": {
          "id": "KMIkjDkgwnQFlQ9j",
          "name": "dev.uratalier"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "d3684fdb-1701-400b-b6fc-1bab7bc6f2e3",
      "name": "Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2256,
        32
      ],
      "parameters": {
        "width": 432,
        "height": 912,
        "content": "![Inbox 1](https://raw.githubusercontent.com/khmuhtadin/n8n-template/main/Website/%20JOB%20Hunter/inbox1.PNG)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c9019277-17de-4099-a76f-a73742e42142",
      "name": "Note 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1792,
        32
      ],
      "parameters": {
        "width": 432,
        "height": 912,
        "content": "![Inbox 2](https://raw.githubusercontent.com/khmuhtadin/n8n-template/main/Website/%20JOB%20Hunter/inbox%202.PNG)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "5f1f23db-4681-4473-a0e6-1f142853e68f",
      "name": "Note 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1344,
        32
      ],
      "parameters": {
        "width": 432,
        "height": 912,
        "content": "![Inbox 3](https://raw.githubusercontent.com/khmuhtadin/n8n-template/main/Website/%20JOB%20Hunter/inbox3.PNG)"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {
    "On form submission": [
      {
        "json": {
          "Email": "khmuhtadin@proton.me",
          "Job Type": "Freelance",
          "formMode": "test",
          "submittedAt": "2025-09-11T23:14:58.671+07:00",
          "Work Setting": "Remote",
          "CV/Resume (PDF)": {
            "size": 4430,
            "filename": "Dummy_ATS_Programmer_CV.pdf",
            "mimetype": "application/pdf"
          },
          "Preferred Location": "USA",
          "Additional Preferences (Optional)": "",
          "Minimum Salary Expectation (Optional)": ""
        },
        "binary": {
          "CV_Resume__PDF_": {
            "data": "JVBERi0xLjQKJZOMi54gUmVwb3J0TGFiIEdlbmVyYXRlZCBQREYgZG9jdW1lbnQgaHR0cDovL3d3dy5yZXBvcnRsYWIuY29tCjEgMCBvYmoKPDwKL0YxIDIgMCBSIC9GMiAzIDAgUgo+PgplbmRvYmoKMiAwIG9iago8PAovQmFzZUZvbnQgL0hlbHZldGljYSAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZyAvTmFtZSAvRjEgL1N1YnR5cGUgL1R5cGUxIC9UeXBlIC9Gb250Cj4+CmVuZG9iagozIDAgb2JqCjw8Ci9CYXNlRm9udCAvSGVsdmV0aWNhLUJvbGQgL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcgL05hbWUgL0YyIC9TdWJ0eXBlIC9UeXBlMSAvVHlwZSAvRm9udAo+PgplbmRvYmoKNCAwIG9iago8PAovQ29udGVudHMgOSAwIFIgL01lZGlhQm94IFsgMCAwIDU5NS4yNzU2IDg0MS44ODk4IF0gL1BhcmVudCA4IDAgUiAvUmVzb3VyY2VzIDw8Ci9Gb250IDEgMCBSIC9Qcm9jU2V0IFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdCj4+IC9Sb3RhdGUgMCAvVHJhbnMgPDwKCj4+IAogIC9UeXBlIC9QYWdlCj4+CmVuZG9iago1IDAgb2JqCjw8Ci9Db250ZW50cyAxMCAwIFIgL01lZGlhQm94IFsgMCAwIDU5NS4yNzU2IDg0MS44ODk4IF0gL1BhcmVudCA4IDAgUiAvUmVzb3VyY2VzIDw8Ci9Gb250IDEgMCBSIC9Qcm9jU2V0IFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdCj4+IC9Sb3RhdGUgMCAvVHJhbnMgPDwKCj4+IAogIC9UeXBlIC9QYWdlCj4+CmVuZG9iago2IDAgb2JqCjw8Ci9QYWdlTW9kZSAvVXNlTm9uZSAvUGFnZXMgOCAwIFIgL1R5cGUgL0NhdGFsb2cKPj4KZW5kb2JqCjcgMCBvYmoKPDwKL0F1dGhvciAoXChhbm9ueW1vdXNcKSkgL0NyZWF0aW9uRGF0ZSAoRDoyMDI1MDkxMTE2MTM1OCswMCcwMCcpIC9DcmVhdG9yIChcKHVuc3BlY2lmaWVkXCkpIC9LZXl3b3JkcyAoKSAvTW9kRGF0ZSAoRDoyMDI1MDkxMTE2MTM1OCswMCcwMCcpIC9Qcm9kdWNlciAoUmVwb3J0TGFiIFBERiBMaWJyYXJ5IC0gd3d3LnJlcG9ydGxhYi5jb20pIAogIC9TdWJqZWN0IChcKHVuc3BlY2lmaWVkXCkpIC9UaXRsZSAoXChhbm9ueW1vdXNcKSkgL1RyYXBwZWQgL0ZhbHNlCj4+CmVuZG9iago4IDAgb2JqCjw8Ci9Db3VudCAyIC9LaWRzIFsgNCAwIFIgNSAwIFIgXSAvVHlwZSAvUGFnZXMKPj4KZW5kb2JqCjkgMCBvYmoKPDwKL0ZpbHRlciBbIC9BU0NJSTg1RGVjb2RlIC9GbGF0ZURlY29kZSBdIC9MZW5ndGggMTkwOQo+PgpzdHJlYW0KR2F0VXQ/JEchXiY7S1pGLyo6SGlUcG49RmFpQF4+cS5NXz8sVUowI2hXLi9ZX0dPZklYcz5CK0osUEM8VEcxVHFoOD1kR2EwcDRfUmVONTQ+XUIyb1JhM0FhXDx0LC5IUF1vdEFkYFIxPzMlO25cPVQ3PTRgT1BJJVljXCw4JW1sIzFyTGQyIV4+VV03V0lzTGJXTD8wIipyZmNINkM4QDZpcnEmO0AiJidCcGxmUDlHJVYtVCVBYXUxPFl0O1NrV1c7R1RvXEU7PVAtLj9SZFg+I2FrUi5oUGZOSj9UV1QzTkxucyFTbmpQVG04cy1MMUFdJU9MXm1bUzBuVXBzJ3BtXVxadGFWS1ghWWwqV1RjR2cvP09pIVVTc2NjNy9dXk00aFpZYUhmYW9qIi5RdCYwUGkxVm8kJF1bM0JRVlQwUWIiMissJ1VcP29XMyMuaVhHS2I1LWFWYjNqTEInXVhJRWdiIWRwNkJPKDZhXlw6Jyk7MjNybW9uNkY8YF44PWE3OiNiaF9fOSliblpRMW9mUW1fXFImdXE3LyQ5VVghQElZQ1wqIV9sRT41Nz0uKGM4PmdBPkstQG8zW1kkSWpQZiFZakciZEtfUFJcVlcrWHE3alM1WTcwMkUrSEBta1peMV4zbm84QVJcMio6VyZHbktjb2Jfc1Yjb0xtXGZhK2gscGJrWj9OQyUqOnItZmQ7LilDOGF1JktYN0E6VFNrcG9KUk9qUkcsQC9AYWdQZkVRY0gtJnQuTT9NZiJnXVdCRUZcI0IqWEBkTz9WOjppNUpaaV5jRiVdaV0xX1FsZEJDTl1IZ0E8KT9pIklDS3JbKW4hUEdMU1JuI2wrXlYtKjtRYEthS0NVbGk1TUlTOkhEJzFxOlRlNVBPWjNJU1AlSypka28mXykzQ2tCWHFKL3RVcWVyX2o/MTJjQztJclA6SSUuNlldX2IsaGM6byZmbEAkNDlnMVpqaTojODI6KmdgP0ZoYFVJZHAjLTFkQG0hTVY+TnB0ITI2Xj0+UFlUVlwncWhTQm05NFkqVSNbazRbRkY3SE9uJl1cTGVDRiluNUMua0V1bm04TV9wSUkkVGFEMSpNR2F1Mi06N0JEYk1CUWNeZkpiZz8tJ0gpM1dGOC1zZD0mc2tCNDJoaVhHLjheYTQ5Q2JiJDEkXWtCTUkrZmg7TzZraGM3bjY+Si5fSyZeVGM+dCxYNS5YMmRULjRSLmImSm9CaC00Q0xFRkgpKHBuK0NxWFYoIUQ8Tz9sI2MmVStWUUg+TVJmMmQ9IjElK2h0Ny1MZCZlOU4vR0MkY09tcCspOlk0KVlkS04nLVJcY05RWGw1XGVSRSlTQV1xUjs0JyJQUDdUXmdlYVRxMTAkZUUjaztXUSVgSD9hNTxzRTVPPiUqNiFAWGdjZjRLVjQ1TjIoLVk6WjcxJDAzJEdgJF01JDgoIWdoWiZYR2wuUWIocmw+IXA/cURndV86SidldHMsdTUsdEhuMlpJYS5PaiZacVFjIy5GbUVtaU5FQCFlWUgrLUFVYHEiaV0hcUZiNXJcNCliU0BAW2VnL1JOO14zUGFhNz1LVmwkdS1ySFRxbXJRbi5lNUEzXD9BRWpsUCpNUlhGP1pNYi9LWVxNOT1uMitjZSNwb1lAc1JBOjxmbSxgPkVJWyxXVEwxZGcqdEhAczc1bUxFMzRmYFNiQGA5U0BHJjhbIzk+Y21UNlo9Lm9OKVc+Z3VwaiRZQ0xFMmU+JChYUyJWR2MkKyRzPElhWF5xIWZAVElfOjRoa2VpXyFxJSE7WCEiKjE7IT08KFwsPjNscl00XEFdLGZgLnNBMnRmSSIpckA4KV8zaysuT1ttI0w8O01YQ3BDLUNbO2UjRTJFZmwvM2hMMChXVnIlQSVJQjhtW1YsNEk9c00udS5rU1N1Vi4sUj9SKW5HTi1SLSEwXzwhSyhjKSl0a2tAc1xRJiJHJCJXZkIkNUElRFFLMiI8bV9lTkU6OmFTZVtIPUlhcWZSOio5T1w1OUsxV2Q4KlVXYWJpSkdhVVpdS1dFPW1kTVthPWJbPV0lNikiJEgmW2lsQ21PUCZOOCRxQkxCK05GLU1zZj1UQjNhZGZUa1k7JT1MbWdaSVkkNydVSl1BW0UpMSEpb2ZuPUVtQ0hcTEJWaS4hQk1FP20iaFZbMGcsTzUwaVZSY2lYamhPM3A9KC1WUD5wKUgpPSkxLFJVK2xhQHBRSltdNlFJNUNQIkNUX2pwdGZmRG1ZRV1ac1RCWDtSSGlXPlpHXGA0c0lnNDQiRz0lIShfP1dzQFt0ZUVNS2w5I0ZeKUY/UTFfQiYjciVwYCk2PF0odC89biJxYWNsQVk9OkUjLChQTzQxIk4jRENpbT1rdDxgPWR0KiVnWTVuUUZvWGF1LmRTQEJEdTBJOEw+TitzVltALXNyIi1GZidBUTIlTHNMTlw0IzViKHFROCsoL0lUZmo8MSdyQGJqLzMiUFU3WVpyalgmZlJHYlNXMGMjb0VtTC42OWNzYyc6Vm1fbC9gdExILip0ZnBhLjB+PmVuZHN0cmVhbQplbmRvYmoKMTAgMCBvYmoKPDwKL0ZpbHRlciBbIC9BU0NJSTg1RGVjb2RlIC9GbGF0ZURlY29kZSBdIC9MZW5ndGggNzM2Cj4+CnN0cmVhbQpHYXRuJDlsbyNCJjtLWk9NRVEqVEZURUEwNV07JUg4SHInal1ALi0oYD4xcVpRRGU+LXEiSidgUFxDNT8pLEVhWXAzUSlVNS1KJTY3QSxRa1BoLjtjKGtwPkkrW0JpTD0kVzphIjVzWmNASDBrMV1SSyw+XzA4Sl9oXU1KRiIoLEZDM1IqLyQ9ZF9GakgjK1ZaQFwuSHQ8ISg8WV1TZ0lLVi5gMGlJJnA6ciFURXBNYXMycV0ubG0kc2RiQGo6aEdrLUokdDtXIjIrc2JJXFVxKjFbXyYlWSNVN1BeYCpoOTInLl4lO1VsNy0oN0RdNDxNTWwjdS5bYzlsW1ZtR1kpRyxjYU5WWkI9NF1AZzQ8KCJfYjZEY05zRSRvKkRSLSMqS1tkQV8nLSt0TW5NVEEiWlJSayxDT2pyXi8yJmRMP0JKIkhzO1s+OUQ6JWFlTXAmJ0InYFVkbT1wRVI9T3MsR106LiUpS1BBXzlKPjszQzNZX1hzYGJOKHBnW0hRIzswRGZdLmZlJWtqYkNnIXUlakQtNDZJXzJnLEdhcWQ6IW1gKVw0ak4hI2wrJyk3bSYqZiUlSVlGKDE7K2dtLyMsc1pfI28mK2dXcGM/KTcpKWNeMitQNShzSnFRSF43XD9FZEMyQF4kQXFdKUY1JSpkak0uSzIuXzZQVDhwWm5sOSVxRk45PShhRVxhcHNBJ0InUV5NUGU9TzQ2JUskaUZpQEFRcSEkU0I+LGIvbi0kIiU5IiRpazUiRTQkJjI9OUpfNVM1cFY4aVBYQVonI1s/Umg2aG4mZD8lV2VkYWM+XlY/VjovXTdhIlpJJGxlalxTQUpUcl8kMWN0cmBma28rTnBFMilddDFYbmc8PFhwTlUlTV1gY15TRGMsbCdkZD8sTz9vW201aGRyZ1VFaVMqc3EhWTtBc2xoKGhsRC9ZK2kqTEBdQEVxLXJnNmdkYltCKWZGJVUlJk45Li06N34+ZW5kc3RyZWFtCmVuZG9iagp4cmVmCjAgMTEKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDczIDAwMDAwIG4gCjAwMDAwMDAxMTQgMDAwMDAgbiAKMDAwMDAwMDIyMSAwMDAwMCBuIAowMDAwMDAwMzMzIDAwMDAwIG4gCjAwMDAwMDA1MzYgMDAwMDAgbiAKMDAwMDAwMDc0MCAwMDAwMCBuIAowMDAwMDAwODA4IDAwMDAwIG4gCjAwMDAwMDEwOTEgMDAwMDAgbiAKMDAwMDAwMTE1NiAwMDAwMCBuIAowMDAwMDAzMTU2IDAwMDAwIG4gCnRyYWlsZXIKPDwKL0lEIApbPDg0OTg1YmZkMjE4MjNjZDU2OTYwODI5MmZhYzMwMmFhPjw4NDk4NWJmZDIxODIzY2Q1Njk2MDgyOTJmYWMzMDJhYT5dCiUgUmVwb3J0TGFiIGdlbmVyYXRlZCBQREYgZG9jdW1lbnQgLS0gZGlnZXN0IChodHRwOi8vd3d3LnJlcG9ydGxhYi5jb20pCgovSW5mbyA3IDAgUgovUm9vdCA2IDAgUgovU2l6ZSAxMQo+PgpzdGFydHhyZWYKMzk4MwolJUVPRgo=",
            "fileName": "Dummy_ATS_Programmer_CV.pdf",
            "fileSize": "4.43 kB",
            "fileType": "pdf",
            "mimeType": "application/pdf",
            "fileExtension": "pdf"
          }
        }
      }
    ]
  },
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "1ec8485f-2772-409f-bb99-f834cbb7c390",
  "connections": {
    "bb0c881a-0185-4de3-ba10-97d1e5e91f7b": {
      "ai_tool": [
        [
          {
            "node": "7ace28c0-f3d0-4d89-b250-8896817dbac5",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "6fa762f1-f99a-4436-b975-7583e5456ddd": {
      "main": [
        [
          {
            "node": "7ace28c0-f3d0-4d89-b250-8896817dbac5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "19c63f7b-d693-495d-94ec-5195c17df88a": {
      "ai_languageModel": [
        [
          {
            "node": "7ace28c0-f3d0-4d89-b250-8896817dbac5",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "7ace28c0-f3d0-4d89-b250-8896817dbac5": {
      "main": [
        [
          {
            "node": "7c1caa4d-d9f2-4404-a7e1-497ea55c87b5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "027c527d-90c0-4aec-b3f5-7ca212c72b1d": {
      "main": [
        [
          {
            "node": "c84aae8d-0731-4158-ae47-74cbf7a3fb92",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7c1caa4d-d9f2-4404-a7e1-497ea55c87b5": {
      "main": [
        [
          {
            "node": "da5ec126-74e9-4708-8ec6-bc0136cf6fa2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c84aae8d-0731-4158-ae47-74cbf7a3fb92": {
      "main": [
        [
          {
            "node": "6fa762f1-f99a-4436-b975-7583e5456ddd",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "da5ec126-74e9-4708-8ec6-bc0136cf6fa2": {
      "main": [
        [
          {
            "node": "4496a0d1-5bc3-4155-9b7f-5760f997da15",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Avancé - Divers, IA Multimodale

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds16
Catégorie2
Types de nœuds9
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34