This workflow follows the Chainllm → HTTP Request recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"nodes": [
{
"id": "79849bb5-00a4-42e6-92c4-b06c7a20eb3e",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1580,
340
],
"parameters": {
"model": "gpt-4-turbo-preview",
"options": {
"temperature": 0,
"responseFormat": "json_object"
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "85df0106-1f78-4412-8751-b84d417c8bf9",
"name": "Convert education to HTML",
"type": "n8n-nodes-base.code",
"position": [
2420,
180
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "function convertToHTML(list) {\n let html = '';\n\n list.forEach((education, index) => {\n if (index > 0) {\n html += '<br /><br />'; // Adiciona uma nova linha se n\u00e3o for o primeiro item\n }\n html += `<b>Institui\u00e7\u00e3o:</b> ${education.institution}<br />\n<b>Ano de in\u00edcio:</b> ${education.start_year}<br />\n<b>Curso:</b> ${education.degree}`;\n });\n\n return html;\n}\n\n// Assumindo que payload j\u00e1 est\u00e1 definido\nconst payload = $input.item.json.education;\n\nconst htmlOutput = convertToHTML(payload);\nreturn {\n htmlOutput\n};"
},
"typeVersion": 2
},
{
"id": "da4fc45d-712f-4171-b72a-66b74b4d8e05",
"name": "Auto-fixing Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserAutofixing",
"position": [
1820,
340
],
"parameters": {},
"typeVersion": 1
},
{
"id": "225a7513-6fd4-4672-9b40-b10b00f121a7",
"name": "OpenAI Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1740,
520
],
"parameters": {
"options": {
"temperature": 0
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "0606c99d-a080-4277-b071-1bc0c93bb2e3",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1960,
520
],
"parameters": {
"jsonSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"personal_info\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"address\": { \"type\": \"string\" },\n \"email\": { \"type\": \"string\", \"format\": \"email\" },\n \"github\": { \"type\": \"string\"},\n \"linkedin\": { \"type\": \"string\" }\n }\n },\n \"employment_history\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"position\": { \"type\": \"string\" },\n \"company\": { \"type\": \"string\" },\n \"duration\": { \"type\": \"string\" },\n \"responsibilities\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n }\n }\n },\n \"education\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"institution\": { \"type\": \"string\" },\n \"start_year\": { \"type\": \"integer\" },\n \"degree\": { \"type\": \"string\" }\n }\n }\n },\n \"projects\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": { \"type\": \"string\" },\n \"year\": { \"type\": \"integer\" },\n \"description\": { \"type\": \"string\" },\n \"technologies\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n }\n }\n },\n \"volunteering\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"activity\": { \"type\": \"string\" },\n \"location\": { \"type\": \"string\" },\n \"date\": { \"type\": \"string\" },\n \"description\": { \"type\": \"string\" }\n }\n }\n },\n \"programming_languages\": {\n \"type\": \"object\",\n \"properties\": {\n \"languages\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n },\n \"tools\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n },\n \"methodologies\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"string\" }\n }\n }\n },\n \"foreign_languages\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"language\": { \"type\": \"string\" },\n \"level\": { \"type\": \"string\" }\n }\n }\n }\n }\n}\n"
},
"typeVersion": 1
},
{
"id": "027975cd-768a-4048-858d-9060f48ab622",
"name": "Convert employment history to HTML",
"type": "n8n-nodes-base.code",
"position": [
2420,
-20
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "function convertToHTML(list) {\n let html = '';\n\n list.forEach((item, index) => {\n if (index > 0) {\n html += '<br />'; // Adiciona uma nova linha se n\u00e3o for o primeiro item\n }\n html += `<b>Cargo:</b> ${item.position}\n<b>Empresa:</b> ${item.company}\n<br />\n<b>Dura\u00e7\u00e3o:</b> ${item.duration}\n<br />\n<b>Responsabilidades:</b>\n`;\n\n item.responsibilities.forEach((responsibility, i) => {\n html += `- ${responsibility}`;\n if (i < item.responsibilities.length - 1 || index < list.length - 1) {\n html += '<br />'; // Adiciona nova linha se n\u00e3o for a \u00faltima responsabilidade do \u00faltimo item\n }\n });\n });\n\n return html;\n}\n\n// Assumindo que payload j\u00e1 est\u00e1 definido\nconst payload = $input.item.json.employment_history;\n\nconst htmlOutput = convertToHTML(payload);\nreturn {\n htmlOutput\n};"
},
"typeVersion": 2
},
{
"id": "823a241d-1c68-40a9-8f2c-f1bdfaab7603",
"name": "Convert projects to HTML",
"type": "n8n-nodes-base.code",
"position": [
2420,
380
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "function convertToHTML(list) {\n let html = '';\n\n list.forEach((project, index) => {\n if (index > 0) {\n html += '<br />'; // Adiciona uma nova linha se n\u00e3o for o primeiro projeto\n }\n html += `<b>Nome:</b> ${project.name}<br />\n<b>Ano:</b> ${project.year}<br />\n<b>Descri\u00e7\u00e3o:</b> ${project.description}<br /><br />\n<b>Tecnologias:</b>\n<br />`;\n\n project.technologies.forEach((technology, i) => {\n html += `- ${technology}`;\n if (i < project.technologies.length - 1 || index < list.length - 1) {\n html += '<br />'; // Adiciona nova linha se n\u00e3o for a \u00faltima tecnologia do \u00faltimo projeto\n }\n });\n });\n\n return html;\n}\n\n// Assumindo que payload j\u00e1 est\u00e1 definido\nconst payload = $input.item.json.projects;\n\nconst htmlOutput = convertToHTML(payload);\nreturn {\n htmlOutput\n};\n"
},
"typeVersion": 2
},
{
"id": "a12eb0e1-1cb9-4b83-a1ec-42dd8214f6bc",
"name": "Convert volunteering to HTML",
"type": "n8n-nodes-base.code",
"position": [
2420,
580
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "function convertToHTML(list) {\n let html = '';\n\n list.forEach((event, index) => {\n if (index > 0) {\n html += '<br />'; // Adiciona uma nova linha se n\u00e3o for o primeiro evento de voluntariado\n }\n html += `<b>Atividade:</b> ${event.activity}<br />\n<b>Local:</b> ${event.location}<br />\n<b>Data:</b> ${event.date}<br />\n<b>Descri\u00e7\u00e3o:</b> ${event.description}<br />`;\n });\n\n return html;\n}\n\n// Assumindo que payload j\u00e1 est\u00e1 definido\nconst payload = $input.item.json.volunteering;\n\nconst htmlOutput = convertToHTML(payload);\nreturn {\n htmlOutput\n};\n"
},
"typeVersion": 2
},
{
"id": "70b67b80-d22d-4eea-8c97-3d2cb2b9bbfc",
"name": "Telegram trigger",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
360,
340
],
"parameters": {
"updates": [
"message"
],
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.1
},
{
"id": "21bead1d-0665-44d5-b623-b0403c9abd6c",
"name": "Auth",
"type": "n8n-nodes-base.if",
"position": [
600,
340
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "7ca4b4c3-e23b-4896-a823-efc85c419467",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $json.message.chat.id }}",
"rightValue": 0
}
]
}
},
"typeVersion": 2
},
{
"id": "de76d6ec-3b0e-44e0-943d-55547aac2e46",
"name": "No operation (unauthorized)",
"type": "n8n-nodes-base.noOp",
"position": [
860,
520
],
"parameters": {},
"typeVersion": 1
},
{
"id": "439f5e2c-be7d-486b-a1f1-13b09f77c2c8",
"name": "Check if start message",
"type": "n8n-nodes-base.if",
"position": [
860,
220
],
"parameters": {
"options": {},
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "1031f14f-9793-488d-bb6b-a021f943a399",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $json.message.text }}",
"rightValue": "/start"
}
]
}
},
"typeVersion": 2
},
{
"id": "af5f5622-c338-40c0-af72-90e124ed7ce1",
"name": "No operation (start message)",
"type": "n8n-nodes-base.noOp",
"position": [
1120,
360
],
"parameters": {},
"typeVersion": 1
},
{
"id": "2efae11a-376b-44aa-ab91-9b3dea82ede0",
"name": "Get file",
"type": "n8n-nodes-base.telegram",
"position": [
1120,
120
],
"parameters": {
"fileId": "={{ $json.message.document.file_id }}",
"resource": "file"
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.1
},
{
"id": "88fd1002-ad2c-445f-92d4-11b571db3788",
"name": "Extract text from PDF",
"type": "n8n-nodes-base.extractFromFile",
"position": [
1380,
120
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "9dfc204b-c567-418a-93a3-9b72cf534a8c",
"name": "Set parsed fileds",
"type": "n8n-nodes-base.set",
"position": [
2040,
120
],
"parameters": {
"options": {}
},
"typeVersion": 3.2
},
{
"id": "314c771a-5ff2-484f-823b-0eab88f43ea3",
"name": "Personal info",
"type": "n8n-nodes-base.set",
"position": [
2420,
-380
],
"parameters": {
"fields": {
"values": [
{
"name": "personal_info",
"stringValue": "=<b><u>Informa\u00e7\u00f5es pessoais</u></b>\n<br /><br />\n<b>Nome:</b> {{ $json.personal_info.name }}\n<br />\n<b>Endere\u00e7o:</b> {{ $json.personal_info.address }}\n<br />\n<b>E-mail:</b> {{ $json.personal_info.email }}\n<br />\n<b>GitHub:</b> {{ $json.personal_info.github }}\n<br />"
}
]
},
"include": "none",
"options": {}
},
"typeVersion": 3.2
},
{
"id": "be6b32e8-6000-4235-a723-0e22828ead45",
"name": "Technologies",
"type": "n8n-nodes-base.set",
"position": [
2420,
-200
],
"parameters": {
"fields": {
"values": [
{
"name": "technologies",
"stringValue": "=<b><u>Tecnologias</u></b>\n<br /><br />\n<b>Linguagens de programa\u00e7\u00e3o:</b> {{ $json.programming_languages.languages.join(', ') }}\n<br />\n<b>Ferramentas:</b> {{ $json.programming_languages.tools.join(', ') }}\n<br />\n<b>Metodologias:</b> {{ $json.programming_languages.methodologies.join(', ') }}\n<br />"
}
]
},
"include": "none",
"options": {}
},
"typeVersion": 3.2
},
{
"id": "ab726d61-84b8-4af7-a195-33e1add89153",
"name": "Employment history",
"type": "n8n-nodes-base.set",
"position": [
2640,
-20
],
"parameters": {
"fields": {
"values": [
{
"name": "employment_history",
"stringValue": "=<b><u>Hist\u00f3rico profissional</u></b>\n<br /><br />\n{{ $json[\"htmlOutput\"] }}"
}
]
},
"include": "none",
"options": {}
},
"typeVersion": 3.2
},
{
"id": "692f9555-6102-4d3c-b0a1-868e27e3c343",
"name": "Education",
"type": "n8n-nodes-base.set",
"position": [
2640,
180
],
"parameters": {
"fields": {
"values": [
{
"name": "education",
"stringValue": "=<b><u>Forma\u00e7\u00e3o</u></b>\n<br /><br />\n{{ $json[\"htmlOutput\"] }}"
}
]
},
"include": "none",
"options": {}
},
"typeVersion": 3.2
},
{
"id": "258728f2-1f03-4786-8197-feb9f1bc4dfe",
"name": "Projects",
"type": "n8n-nodes-base.set",
"position": [
2640,
380
],
"parameters": {
"fields": {
"values": [
{
"name": "projects",
"stringValue": "=<b><u>Projetos</u></b>\n<br /><br />\n{{ $json[\"htmlOutput\"] }}"
}
]
},
"include": "none",
"options": {}
},
"typeVersion": 3.2
},
{
"id": "3c819ce4-235a-4b12-a396-d33dca9f80da",
"name": "Volunteering",
"type": "n8n-nodes-base.set",
"position": [
2640,
580
],
"parameters": {
"fields": {
"values": [
{
"name": "volunteering",
"stringValue": "=<b><u>Voluntariado</u></b>\n<br /><br />\n{{ $json[\"htmlOutput\"] }}"
}
]
},
"include": "none",
"options": {}
},
"typeVersion": 3.2
},
{
"id": "41bd7506-7330-4c25-8b43-aa3c836736fc",
"name": "Merge education and employment history",
"type": "n8n-nodes-base.merge",
"position": [
2880,
100
],
"parameters": {
"mode": "combine",
"options": {},
"combinationMode": "multiplex"
},
"typeVersion": 2.1
},
{
"id": "d788da36-360b-4009-82ad-2f206fad8e53",
"name": "Merge projects and volunteering",
"type": "n8n-nodes-base.merge",
"position": [
2880,
500
],
"parameters": {
"mode": "combine",
"options": {},
"combinationMode": "multiplex"
},
"typeVersion": 2.1
},
{
"id": "57c20e19-3d84-41c0-a415-1d55cb031da1",
"name": "Merge personal info and technologies",
"type": "n8n-nodes-base.merge",
"position": [
3140,
-160
],
"parameters": {
"mode": "combine",
"options": {},
"combinationMode": "multiplex"
},
"typeVersion": 2.1
},
{
"id": "f12be010-8375-4ff7-ba8e-9c2c870f648b",
"name": "Merge all",
"type": "n8n-nodes-base.merge",
"position": [
3400,
200
],
"parameters": {
"mode": "combine",
"options": {},
"combinationMode": "multiplex"
},
"typeVersion": 2.1
},
{
"id": "d6428167-2c75-42a5-a905-7590ff1d6a25",
"name": "Set final data",
"type": "n8n-nodes-base.set",
"position": [
3620,
200
],
"parameters": {
"fields": {
"values": [
{
"name": "output",
"stringValue": "={{ $json.personal_info }}\n<br /><br />\n{{ $json.employment_history }}\n<br /><br />\n{{ $json.education }}\n<br /><br />\n{{ $json.projects }}\n<br /><br />\n{{ $json.volunteering }}\n<br /><br />\n{{ $json.technologies }}"
}
]
},
"include": "none",
"options": {}
},
"typeVersion": 3.2
},
{
"id": "9ea13c62-2e09-4b37-b889-66edaef1fcf1",
"name": "Convert raw to base64",
"type": "n8n-nodes-base.code",
"position": [
3840,
200
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const encoded = Buffer.from($json.output).toString('base64');\n\nreturn { encoded };"
},
"typeVersion": 2
},
{
"id": "c4474fa1-b1b5-432f-b30e-100201c9ec7c",
"name": "Convert to HTML",
"type": "n8n-nodes-base.convertToFile",
"position": [
4060,
200
],
"parameters": {
"options": {
"fileName": "index.html",
"mimeType": "text/html"
},
"operation": "toBinary",
"sourceProperty": "encoded"
},
"typeVersion": 1.1
},
{
"id": "3c4d2010-1bdc-4f01-bb1a-bd0128017787",
"name": "Generate plain PDF doc",
"type": "n8n-nodes-base.httpRequest",
"position": [
4340,
200
],
"parameters": {
"url": "http://gotenberg:3000/forms/chromium/convert/html",
"method": "POST",
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
},
"sendBody": true,
"contentType": "multipart-form-data",
"bodyParameters": {
"parameters": [
{
"name": "files",
"parameterType": "formBinaryData",
"inputDataFieldName": "data"
}
]
}
},
"typeVersion": 4.1
},
{
"id": "2b3cd55f-21a3-4c14-905f-82b158aa3fd0",
"name": "Send PDF to the user",
"type": "n8n-nodes-base.telegram",
"position": [
4640,
200
],
"parameters": {
"chatId": "={{ $('Telegram trigger').item.json[\"message\"][\"chat\"][\"id\"] }}",
"operation": "sendDocument",
"binaryData": true,
"additionalFields": {
"fileName": "={{ $('Set parsed fileds').item.json[\"personal_info\"][\"name\"].toLowerCase().replace(' ', '-') }}.pdf"
}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.1
},
{
"id": "54fe1d2d-eb9d-4fe1-883f-1826e27ac873",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
540,
180
],
"parameters": {
"width": 226.21234567901217,
"height": 312.917333333334,
"content": "### Adicione o chat ID\nLembre-se de definir seu ID real para acionar a automa\u00e7\u00e3o pelo Telegram."
},
"typeVersion": 1
},
{
"id": "b193a904-260b-4d45-8a66-e3cb46fc7ce4",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
800,
83.43940740740783
],
"parameters": {
"width": 229.64938271604922,
"height": 293.54824691358016,
"content": "### Ignorar mensagem inicial\nO fluxo ignora a mensagem inicial `/start` enviada ao bot."
},
"typeVersion": 1
},
{
"id": "d5c95d8f-b699-4a8e-9460-a4f5856b5e6f",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1066,
-20
],
"parameters": {
"width": 211.00246913580224,
"height": 302.41975308642,
"content": "### Baixar arquivo do curr\u00edculo\nCom base no file ID, o n\u00f3 realiza o download do arquivo enviado pelo usu\u00e1rio."
},
"typeVersion": 1
},
{
"id": "2de0751d-8e11-457e-8c38-a6dcca59190c",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1320,
-20
],
"parameters": {
"width": 217.87654320987633,
"height": 302.41975308642,
"content": "### Extrair texto do PDF\nO n\u00f3 extrai o texto leg\u00edvel do PDF."
},
"typeVersion": 1
},
{
"id": "4b9ccab8-ff6c-408f-93fe-f148034860a0",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1580,
-20
],
"parameters": {
"width": 410.9479506172837,
"height": 302.41975308642,
"content": "### Fazer parse dos dados do curr\u00edculo\nCria dados estruturados a partir do texto extra\u00eddo do curr\u00edculo. A chain usa o modelo `gpt-4-turbo-preview` da OpenAI e o modo de resposta em JSON. **Ajuste o JSON schema no output parser conforme suas necessidades.**"
},
"typeVersion": 1
},
{
"id": "bfb1d382-90fa-4bff-8c38-04e53bcf5f58",
"name": "Parse resume data",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1660,
120
],
"parameters": {
"prompt": "={{ $json.text }}",
"messages": {
"messageValues": [
{
"message": "Sua tarefa \u00e9 extrair todos os dados necess\u00e1rios, como nome, sobrenome, experi\u00eancia, tecnologias dominadas etc., do texto do curr\u00edculo fornecido e retornar em um formato JSON bem unificado. N\u00e3o invente informa\u00e7\u00f5es."
}
]
}
},
"typeVersion": 1.3
},
{
"id": "7e8eb10a-f21c-4a9c-90b1-b71537b78356",
"name": "Merge other data",
"type": "n8n-nodes-base.merge",
"position": [
3140,
340
],
"parameters": {
"mode": "combine",
"options": {},
"combinationMode": "multiplex"
},
"typeVersion": 2.1
},
{
"id": "7c4398de-7b4d-4095-b38f-eaf099d2991b",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
2340,
-491.4074074074074
],
"parameters": {
"width": 1196.8442469135782,
"height": 1260.345679012346,
"content": "### Formatar HTML\nFormate o HTML para cada se\u00e7\u00e3o do curr\u00edculo (hist\u00f3rico profissional, projetos etc.)."
},
"typeVersion": 1
},
{
"id": "9de2f504-6ff0-4b00-8e0d-436c789b4e23",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
3580,
40
],
"parameters": {
"width": 638.6516543209876,
"height": 322.5837037037037,
"content": "### Criar arquivo HTML\nA partir da sa\u00edda formatada, crie o arquivo `index.html` para executar a convers\u00e3o em PDF."
},
"typeVersion": 1
},
{
"id": "11abdff5-377e-490d-9136-15c24ff6a05e",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
4260,
39.83604938271645
],
"parameters": {
"color": 3,
"width": 262.0096790123454,
"height": 322.5837037037035,
"content": "### Converter arquivo para PDF\nA partir do `index.html`, gere o PDF usando o [Gotenberg](https://gotenberg.dev/). Se voc\u00ea n\u00e3o conhece esse software, d\u00ea uma olhada no [meu tutorial no YouTube](https://youtu.be/bo15xdjXf1Y?si=hFZMTfjzfSOLOLPK)."
},
"typeVersion": 1
},
{
"id": "73fb81d0-5218-4311-aaec-7fa259d8cbd3",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
4560,
40
],
"parameters": {
"width": 262.0096790123454,
"height": 322.5837037037035,
"content": "### Enviar arquivo PDF ao usu\u00e1rio\nEntregue o PDF convertido ao usu\u00e1rio do Telegram (com base no chat ID)."
},
"typeVersion": 1
},
{
"id": "bb5fa375-4cc9-4559-a014-7b618d6c5f32",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
-280,
128
],
"parameters": {
"width": 432.69769500990674,
"height": 364.2150828344463,
"content": "## \u26a0\ufe0f Aviso\n\nEste \u00e9 o fluxo *extrator de curr\u00edculos* que tive o prazer de apresentar no [n8n community hangout](https://youtu.be/eZacuxrhCuo?si=KkJQrgQuvLxj-6FM&t=1701\n) em 7 de mar\u00e7o de 2024.\n\n1. Lembre-se de adicionar suas credenciais e configurar os n\u00f3s.\n2. Este n\u00f3 requer o [Gotenberg](https://gotenberg.dev/) instalado para a gera\u00e7\u00e3o de PDF. Se voc\u00ea n\u00e3o conhece esse software, d\u00ea uma olhada no [meu tutorial no YouTube](https://youtu.be/bo15xdjXf1Y?si=hFZMTfjzfSOLOLPK). Se n\u00e3o quiser self-hostear o Gotenberg, use outro provedor de gera\u00e7\u00e3o de PDF (PDFMonkey, ApiTemplate ou similar).\n3. Se voc\u00ea gostou deste fluxo, inscreva-se no [meu canal do YouTube](https://www.youtube.com/@workfloows) e/ou na [minha newsletter](https://workfloows.com/).\n\n**Obrigado pelo seu apoio!**"
},
"typeVersion": 1
}
],
"connections": {
"Auth": {
"main": [
[
{
"node": "Check if start message",
"type": "main",
"index": 0
}
],
[
{
"node": "No operation (unauthorized)",
"type": "main",
"index": 0
}
]
]
},
"Get file": {
"main": [
[
{
"node": "Extract text from PDF",
"type": "main",
"index": 0
}
]
]
},
"Projects": {
"main": [
[
{
"node": "Merge projects and volunteering",
"type": "main",
"index": 0
}
]
]
},
"Education": {
"main": [
[
{
"node": "Merge education and employment history",
"type": "main",
"index": 1
}
]
]
},
"Merge all": {
"main": [
[
{
"node": "Set final data",
"type": "main",
"index": 0
}
]
]
},
"Technologies": {
"main": [
[
{
"node": "Merge personal info and technologies",
"type": "main",
"index": 1
}
]
]
},
"Volunteering": {
"main": [
[
{
"node": "Merge projects and volunteering",
"type": "main",
"index": 1
}
]
]
},
"Personal info": {
"main": [
[
{
"node": "Merge personal info and technologies",
"type": "main",
"index": 0
}
]
]
},
"Set final data": {
"main": [
[
{
"node": "Convert raw to base64",
"type": "main",
"index": 0
}
]
]
},
"Convert to HTML": {
"main": [
[
{
"node": "Generate plain PDF doc",
"type": "main",
"index": 0
}
]
]
},
"Merge other data": {
"main": [
[
{
"node": "Merge all",
"type": "main",
"index": 1
}
]
]
},
"Telegram trigger": {
"main": [
[
{
"node": "Auth",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Parse resume data",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Parse resume data": {
"main": [
[
{
"node": "Set parsed fileds",
"type": "main",
"index": 0
}
]
]
},
"Set parsed fileds": {
"main": [
[
{
"node": "Convert employment history to HTML",
"type": "main",
"index": 0
},
{
"node": "Convert education to HTML",
"type": "main",
"index": 0
},
{
"node": "Convert projects to HTML",
"type": "main",
"index": 0
},
{
"node": "Personal info",
"type": "main",
"index": 0
},
{
"node": "Convert volunteering to HTML",
"type": "main",
"index": 0
},
{
"node": "Technologies",
"type": "main",
"index": 0
}
]
]
},
"Employment history": {
"main": [
[
{
"node": "Merge education and employment history",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "Auto-fixing Output Parser",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Convert raw to base64": {
"main": [
[
{
"node": "Convert to HTML",
"type": "main",
"index": 0
}
]
]
},
"Extract text from PDF": {
"main": [
[
{
"node": "Parse resume data",
"type": "main",
"index": 0
}
]
]
},
"Check if start message": {
"main": [
[
{
"node": "Get file",
"type": "main",
"index": 0
}
],
[
{
"node": "No operation (start message)",
"type": "main",
"index": 0
}
]
]
},
"Generate plain PDF doc": {
"main": [
[
{
"node": "Send PDF to the user",
"type": "main",
"index": 0
}
]
]
},
"Convert projects to HTML": {
"main": [
[
{
"node": "Projects",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Auto-fixing Output Parser",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Auto-fixing Output Parser": {
"ai_outputParser": [
[
{
"node": "Parse resume data",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Convert education to HTML": {
"main": [
[
{
"node": "Education",
"type": "main",
"index": 0
}
]
]
},
"Convert volunteering to HTML": {
"main": [
[
{
"node": "Volunteering",
"type": "main",
"index": 0
}
]
]
},
"Merge projects and volunteering": {
"main": [
[
{
"node": "Merge other data",
"type": "main",
"index": 1
}
]
]
},
"Convert employment history to HTML": {
"main": [
[
{
"node": "Employment history",
"type": "main",
"index": 0
}
]
]
},
"Merge personal info and technologies": {
"main": [
[
{
"node": "Merge all",
"type": "main",
"index": 0
}
]
]
},
"Merge education and employment history": {
"main": [
[
{
"node": "Merge other data",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
openAiApitelegramApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
57-Curriculo-Extraido-Pdf-Padronizado. Uses lmChatOpenAi, outputParserAutofixing, outputParserStructured, telegramTrigger. Event-driven trigger; 43 nodes.
Source: https://github.com/mascenaa/AutoPronto/blob/d3dafe08d296506b85c3bd29aba5d98df9c9906a/pacotes/kit-completo/57-curriculo-extraido-pdf-padronizado.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
This workflow is for users who want to turn Telegram into a personal AI-powered assistant capable of handling everyday tasks through natural language. It's ideal for solo founders, operators, or profe
With this workflow you can extract data from resume documents uploaded via a Telegram bot. Workflow transform readable content of PDF resume into structured data, using AI nodes and returns PDF with f
This n8n template demonstrates how to create authentic-looking User Generated Content (UGC) advertisements using AI image generation, voice synthesis, and lip-sync technology. The workflow transforms
📌 How it works