This workflow follows the Googlegemini → 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 →
{
"name": "My workflow",
"nodes": [
{
"parameters": {
"updates": [
"message",
"*"
],
"additionalFields": {}
},
"type": "n8n-nodes-base.telegramTrigger",
"typeVersion": 1.4,
"position": [
0,
0
],
"id": "241a75f7-e86f-427d-b782-8ead713c5180",
"name": "Telegram Trigger",
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/gemini-3-flash-preview"
},
"messages": {
"values": [
{
"content": "=\u0422\u0438 \u2014 \u043f\u0440\u043e\u0444\u0435\u0441\u0456\u0439\u043d\u0438\u0439 HR-\u0430\u043d\u0430\u043b\u0456\u0442\u0438\u043a \u0442\u0430 \u0440\u0435\u043a\u0440\u0443\u0442\u0435\u0440.\n\u041f\u0440\u043e\u0430\u043d\u0430\u043b\u0456\u0437\u0443\u0439 \u0446\u0435 \u0440\u0435\u0437\u044e\u043c\u0435 \u0442\u0430 \u043d\u0430\u0434\u0430\u0439 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u0438\u0439 \u0437\u0432\u0456\u0442:\n\n1. \u0421\u0438\u043b\u044c\u043d\u0456 \u0441\u0442\u043e\u0440\u043e\u043d\u0438 \u0440\u0435\u0437\u044e\u043c\u0435 \u0442\u0430 \u043a\u043b\u044e\u0447\u043e\u0432\u0438\u0439 \u0441\u0442\u0435\u043a \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0456\u0439.\n2. \u0421\u043b\u0430\u0431\u043a\u0456 \u0441\u0442\u043e\u0440\u043e\u043d\u0438 \u0442\u0430 \u0449\u043e \u0432\u0430\u0440\u0442\u043e \u0434\u043e\u043e\u043f\u0440\u0430\u0446\u044e\u0432\u0430\u0442\u0438.\n3. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u0456 \u043f\u043e\u0437\u0438\u0446\u0456\u0457 \u0442\u0430 \u043e\u0446\u0456\u043d\u043a\u0430 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0456 \u0434\u043e \u0441\u043f\u0456\u0432\u0431\u0435\u0441\u0456\u0434\u0438 (\u0432\u0456\u0434 0% \u0434\u043e 100%).\n\n\u0422\u0435\u043a\u0441\u0442 \u0440\u0435\u0437\u044e\u043c\u0435:\n{{ $('Extract from File').item.json.text }}\n\n\u041d\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439 \u0443 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0456 \u0437\u043d\u0430\u043a\u0438 < \u0442\u0430 >. \u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u0438\u0439 \u0442\u0435\u043a\u0441\u0442."
}
]
},
"builtInTools": {},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"typeVersion": 1.2,
"position": [
1760,
-160
],
"id": "6b75cc39-4aed-41ec-a101-0fca74d9aeab",
"name": "Message a model",
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"text": "={{ ($json.text || $json.content?.parts[0]?.text || '').replace(/</g, '<').replace(/>/g, '>') }}",
"replyMarkup": "inlineKeyboard",
"inlineKeyboard": {
"rows": [
{
"row": {
"buttons": [
{
"text": "\ud83c\udfaf \u041f\u0440\u043e\u0430\u043d\u0430\u043b\u0456\u0437\u0443\u0432\u0430\u0442\u0438 \u0432\u0430\u043a\u0430\u043d\u0441\u0456\u044e",
"additionalFields": {
"callback_data": "start_analyze_job"
}
}
]
}
},
{
"row": {
"buttons": [
{
"text": "\ud83d\udd17 \u0410\u043d\u0430\u043b\u0456\u0437 GitHub-\u043f\u0440\u043e\u0444\u0456\u043b\u044e",
"additionalFields": {
"callback_data": "btn_analyze_github"
}
}
]
}
},
{
"row": {
"buttons": [
{
"text": "\ud83d\udcac \u0412\u0456\u043b\u044c\u043d\u0438\u0439 \u0447\u0430\u0442 / \u0417\u0430\u043f\u0438\u0442\u0430\u0442\u0438 AI",
"additionalFields": {
"callback_data": "btn_free_chat"
}
}
]
}
},
{
"row": {
"buttons": [
{
"text": "\ud83d\udd04 \u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u0456\u043d\u0448\u0435 \u0440\u0435\u0437\u044e\u043c\u0435",
"additionalFields": {
"callback_data": "btn_new_cv"
}
}
]
}
}
]
},
"additionalFields": {
"parse_mode": "HTML"
}
},
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [
2016,
0
],
"id": "38e15bff-835b-485d-b5ef-742ff24bb81f",
"name": "Send a text message",
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"resource": "file",
"fileId": "={{ $json.message.document.file_id }}",
"additionalFields": {}
},
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [
1248,
0
],
"id": "b310fe11-c5b8-4d16-b921-631665df7377",
"name": "Get a file",
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "pdf",
"options": {}
},
"type": "n8n-nodes-base.extractFromFile",
"typeVersion": 1.1,
"position": [
1456,
0
],
"id": "c94b5c33-fcf2-4ec1-8303-831405c16d31",
"name": "Extract from File"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 3
},
"conditions": [
{
"id": "468ab463-754a-4364-84c2-fd9d3c885600",
"leftValue": "={{ $json.message.document.file_id }}",
"rightValue": "",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.3,
"position": [
832,
16
],
"id": "157c8772-7106-478a-89dd-6215a80fdce2",
"name": "If"
},
{
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/gemini-3-flash-preview"
},
"messages": {
"values": [
{
"content": "=\u0422\u0438 \u2014 \u0434\u043e\u0441\u0432\u0456\u0434\u0447\u0435\u043d\u0438\u0439 IT-\u0440\u0435\u043a\u0440\u0443\u0442\u0435\u0440 \u0442\u0430 \u043a\u0430\u0440'\u0454\u0440\u043d\u0438\u0439 \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u043d\u0442.\n\n\u0422\u0432\u043e\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0456\u0437\u0443\u0432\u0430\u0442\u0438 \u0432\u0445\u0456\u0434\u043d\u0438\u0439 \u0442\u0435\u043a\u0441\u0442 \u0432\u0456\u0434 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430 \u0442\u0430 \u0432\u0438\u0431\u0440\u0430\u0442\u0438 \u043e\u0434\u0438\u043d \u0456\u0437 \u0442\u0440\u044c\u043e\u0445 \u0440\u0435\u0436\u0438\u043c\u0456\u0432 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0456:\n\n---\n\u0412\u0410\u0420\u0406\u0410\u041d\u0422 \u0410: \u042f\u043a\u0449\u043e \u0432\u0445\u0456\u0434\u043d\u0438\u0439 \u0442\u0435\u043a\u0441\u0442 \u0454 \u0422\u0415\u041a\u0421\u0422\u041e\u041c \u0412\u0410\u041a\u0410\u041d\u0421\u0406\u0407\n\u041f\u043e\u0440\u0456\u0432\u043d\u044f\u0439 \u0420\u0415\u0417\u042e\u041c\u0415 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430 \u0437 \u041e\u041f\u0418\u0421\u041e\u041c \u0412\u0410\u041a\u0410\u041d\u0421\u0406\u0407 \u0442\u0430 \u043d\u0430\u0434\u0430\u0439 \u0447\u0456\u0442\u043a\u0438\u0439 \u0437\u0432\u0456\u0442:\n1. \ud83c\udfaf \u0412\u0456\u0434\u0441\u043e\u0442\u043e\u043a \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u043d\u043e\u0441\u0442\u0456 (Match Score \u0432\u0456\u0434 0% \u0434\u043e 100%).\n2. \ud83d\udca1 \u041a\u043b\u044e\u0447\u043e\u0432\u0456 \u0441\u043f\u0456\u0432\u043f\u0430\u0434\u0456\u043d\u043d\u044f.\n3. \u26a0\ufe0f Gap Analysis (\u0447\u043e\u0433\u043e \u0437 \u0432\u0438\u043c\u043e\u0433 \u0432\u0430\u043a\u0430\u043d\u0441\u0456\u0457 \u0431\u0440\u0430\u043a\u0443\u0454 \u0432 \u0440\u0435\u0437\u044e\u043c\u0435).\n4. \u2753 Top-5 \u0442\u0435\u0445\u043d\u0456\u0447\u043d\u0438\u0445 \u043f\u0438\u0442\u0430\u043d\u044c \u043d\u0430 \u0441\u043f\u0456\u0432\u0431\u0435\u0441\u0456\u0434\u0456.\n5. \ud83d\udcdd 3 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0456 \u043f\u043e\u0440\u0430\u0434\u0438 \u0449\u043e\u0434\u043e \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0456\u0457 \u0440\u0435\u0437\u044e\u043c\u0435.\n\n---\n\u0412\u0410\u0420\u0406\u0410\u041d\u0422 \u0411: \u042f\u043a\u0449\u043e \u0432\u0445\u0456\u0434\u043d\u0438\u0439 \u0442\u0435\u043a\u0441\u0442 \u043c\u0456\u0441\u0442\u0438\u0442\u044c \u041f\u041e\u0421\u0418\u041b\u0410\u041d\u041d\u042f \u041d\u0410 GITHUB (\u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, github.com/...)\n\u041d\u0415 \u0440\u043e\u0431\u0438 \u0430\u043d\u0430\u043b\u0456\u0437 \u0432\u0430\u043a\u0430\u043d\u0441\u0456\u0457 \u0456 \u041d\u0415 \u0441\u0442\u0430\u0432\u0430\u0439 Match Score! \u041f\u0440\u043e\u0430\u043d\u0430\u043b\u0456\u0437\u0443\u0439 \u0446\u0435 \u044f\u043a \u043f\u043e\u0440\u0442\u0444\u043e\u043b\u0456\u043e \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430:\n1. \u041e\u0446\u0456\u043d\u0438 \u043d\u0430\u044f\u0432\u043d\u0456\u0441\u0442\u044c/\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0456\u0457\u0432 \u0442\u0430 README-\u0444\u0430\u0439\u043b\u0456\u0432.\n2. \u0414\u0430\u0439 3 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0456 \u043f\u043e\u0440\u0430\u0434\u0438, \u044f\u043a \u043f\u043e\u043a\u0440\u0430\u0449\u0438\u0442\u0438 GitHub-\u043f\u0440\u043e\u0444\u0456\u043b\u044c \u0434\u043b\u044f \u0440\u043e\u0431\u043e\u0442\u043e\u0434\u0430\u0432\u0446\u0456\u0432 (\u0434\u043e\u0434\u0430\u0442\u0438 \u043e\u043f\u0438\u0441\u0438 \u043f\u0440\u043e\u0454\u043a\u0442\u0456\u0432, CI/CD, \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0456, \u043b\u0456\u0446\u0435\u043d\u0437\u0456\u0457 \u0442\u043e\u0449\u043e).\n\n---\n\u0412\u0410\u0420\u0406\u0410\u041d\u0422 \u0412: \u042f\u043a\u0449\u043e \u0432\u0445\u0456\u0434\u043d\u0438\u0439 \u0442\u0435\u043a\u0441\u0442 \u0454 \u0417\u0412\u0418\u0427\u0410\u0419\u041d\u0418\u041c \u041f\u0418\u0422\u0410\u041d\u041d\u042f\u041c \u0447\u0438 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f\u043c \u0443 \u0447\u0430\u0442\u0456\n\u0414\u0430\u0439 \u043a\u043e\u0440\u043e\u0442\u043a\u0443, \u0435\u043a\u0441\u043f\u0435\u0440\u0442\u043d\u0443 \u0442\u0430 \u0434\u0440\u0443\u0436\u043d\u044e \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u044c \u044f\u043a \u043a\u0430\u0440'\u0454\u0440\u043d\u0438\u0439 \u043c\u0435\u043d\u0442\u043e\u0440, \u0431\u0435\u0437 \u0444\u043e\u0440\u043c\u0430\u0442\u0443 \"Match Score\" \u0447\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0456\u0432 \u0430\u043d\u0430\u043b\u0456\u0437\u0443 \u0432\u0430\u043a\u0430\u043d\u0441\u0456\u0457.\n\n---\n\ud83d\udcc4 \u0420\u0415\u0417\u042e\u041c\u0415 \u041a\u041e\u0420\u0418\u0421\u0422\u0423\u0412\u0410\u0427\u0410 (\u0437 \u0431\u0430\u0437\u0438 \u0434\u0430\u043d\u0438\u0445):\n{{ $('Execute a SQL query1').item.json.resume_text }}\n\n\ud83d\udce5 \u0412\u0425\u0406\u0414\u041d\u0418\u0419 \u0422\u0415\u041a\u0421\u0422 \u0412\u0406\u0414 \u041a\u041e\u0420\u0418\u0421\u0422\u0423\u0412\u0410\u0427\u0410:\n{{ $('Telegram Trigger').item.json.message.text }}\n\n\u041f\u0440\u0430\u0432\u0438\u043b\u043e: \u041d\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439 \u0443 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0456 \u0437\u043d\u0430\u043a\u0438 < \u0442\u0430 >. \u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u0438\u0439 \u0442\u0435\u043a\u0441\u0442 \u0442\u0430 Markdown."
}
]
},
"builtInTools": {},
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"typeVersion": 1.2,
"position": [
1200,
128
],
"id": "1beb8483-6797-4a6e-9c33-40e3afbb6b04",
"name": "Analyze Job Match",
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "executeQuery",
"query": "INSERT INTO user_resumes (chat_id, resume_text)\nVALUES ('{{ $('Telegram Trigger').item.json.message.chat.id }}', '{{ $json.text.replace(/'/g, \"''\") }}')\nON CONFLICT (chat_id) \nDO UPDATE SET resume_text = EXCLUDED.resume_text;",
"options": {}
},
"type": "n8n-nodes-base.postgres",
"typeVersion": 2.6,
"position": [
1600,
-160
],
"id": "6daf4dbd-c75b-4155-91bb-fcb4dd774232",
"name": "Execute a SQL query",
"credentials": {
"postgres": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"operation": "executeQuery",
"query": "SELECT resume_text FROM user_resumes \nWHERE chat_id = '{{ $('Telegram Trigger').item.json.message.chat.id }}';",
"options": {}
},
"type": "n8n-nodes-base.postgres",
"typeVersion": 2.6,
"position": [
1008,
96
],
"id": "b4c667ae-461f-4364-b441-ae78d4d4abc0",
"name": "Execute a SQL query1",
"credentials": {
"postgres": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"rules": {
"values": [
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 3
},
"conditions": [
{
"id": "5e2430d1-1bd9-48e2-b668-65197c8fb210",
"leftValue": "=={{ $json.callback_query?.data || \"\" }}",
"rightValue": "start_upload_cv",
"operator": {
"type": "string",
"operation": "contains"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Upload Resume"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 3
},
"conditions": [
{
"id": "9156f06f-8bc7-4903-81ed-bdb72ce24c84",
"leftValue": "=={{ $json.callback_query?.data || \"\" }}",
"rightValue": "start_help",
"operator": {
"type": "string",
"operation": "contains"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "How it works"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 3
},
"conditions": [
{
"id": "5d87625b-1fac-442b-91f8-8c51e3626981",
"leftValue": "=={{ $json.callback_query?.data || \"\" }}",
"rightValue": "btn_new_cv",
"operator": {
"type": "string",
"operation": "contains"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "New CV"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 3
},
"conditions": [
{
"id": "bfb53e54-e034-481b-83ed-378a55e68df3",
"leftValue": "=={{ $json.callback_query?.data || \"\" }}",
"rightValue": "btn_analyze_github",
"operator": {
"type": "string",
"operation": "contains"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Analyze GitHub"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 3
},
"conditions": [
{
"id": "cb818b0c-7e1c-4b9b-b80d-2c149fe05a3b",
"leftValue": "=={{ $json.callback_query?.data || \"\" }}",
"rightValue": "btn_free_chat",
"operator": {
"type": "string",
"operation": "contains"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Free Chat"
},
{
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 3
},
"conditions": [
{
"id": "df1663fa-e615-4a41-99b5-819e3a49c02f",
"leftValue": "=={{ $json.callback_query?.data || \"\" }}",
"rightValue": "start_analyze_job",
"operator": {
"type": "string",
"operation": "contains"
}
}
],
"combinator": "and"
},
"renameOutput": true,
"outputKey": "Analyze Job"
}
]
},
"looseTypeValidation": true,
"options": {
"fallbackOutput": "extra"
}
},
"type": "n8n-nodes-base.switch",
"typeVersion": 3.4,
"position": [
416,
0
],
"id": "17142aae-204b-4ad2-828c-8ca2042f4a8b",
"name": "Switch"
},
{
"parameters": {
"chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"text": "\ud83d\udc4b \u041f\u0440\u0438\u0432\u0456\u0442! \u042f \u0442\u0432\u0456\u0439 AI Career Assistant. \u042f \u0434\u043e\u043f\u043e\u043c\u043e\u0436\u0443 \u0442\u043e\u0431\u0456 \u043f\u0456\u0434\u0433\u043e\u0442\u0443\u0432\u0430\u0442\u0438\u0441\u044f \u0434\u043e \u0432\u0430\u043a\u0430\u043d\u0441\u0456\u0457, \u0430\u0434\u0430\u043f\u0442\u0443\u0432\u0430\u0442\u0438 \u0440\u0435\u0437\u044e\u043c\u0435 \u0442\u0430 \u043f\u0440\u043e\u0439\u0442\u0438 \u0441\u043f\u0456\u0432\u0431\u0435\u0441\u0456\u0434\u0443. \u041e\u0431\u0435\u0440\u0438 \u0434\u0456\u044e \u043d\u0438\u0436\u0447\u0435:",
"replyMarkup": "inlineKeyboard",
"inlineKeyboard": {
"rows": [
{
"row": {
"buttons": [
{
"text": "\ud83d\udcc4 1. \u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 \u0440\u0435\u0437\u044e\u043c\u0435 (PDF)",
"additionalFields": {
"callback_data": "start_upload_cv"
}
}
]
}
},
{
"row": {
"buttons": [
{
"text": "\ud83d\udcbc 2. \u041f\u0440\u043e\u0430\u043d\u0430\u043b\u0456\u0437\u0443\u0432\u0430\u0442\u0438 \u0432\u0430\u043a\u0430\u043d\u0441\u0456\u044e",
"additionalFields": {
"callback_data": "start_analyze_job"
}
}
]
}
},
{
"row": {
"buttons": [
{
"text": "\u2139\ufe0f \u042f\u043a \u0446\u0435 \u043f\u0440\u0430\u0446\u044e\u0454?",
"additionalFields": {
"callback_data": "start_help"
}
}
]
}
}
]
},
"additionalFields": {}
},
"type": "n8n-nodes-base.telegram",
"typeVersion": 1.2,
"position": [
368,
-224
],
"id": "3f291fcd-e08a-44ee-a51f-6484deb5bf6a",
"name": "Send Welcome",
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"jsCode": "for (const item of $input.all()) {\n // 1. \u041e\u0447\u0438\u0449\u0435\u043d\u043d\u044f chat_id\n const rawId = item.json.callback_query?.from?.id || item.json.message?.from?.id || item.json.chat_id;\n item.json.chat_id = Number(rawId);\n\n // 2. \u041e\u0442\u0440\u0438\u043c\u0443\u0454\u043c\u043e callback_data \u043a\u043d\u043e\u043f\u043a\u0438\n const action = item.json.callback_query?.data || '';\n\n // 3. \u0414\u0438\u043d\u0430\u043c\u0456\u0447\u043d\u043e \u0432\u0438\u0437\u043d\u0430\u0447\u0430\u0454\u043c\u043e \u0442\u0435\u043a\u0441\u0442 \u0442\u0430 \u0440\u0435\u0436\u0438\u043c (mode) \u0434\u043b\u044f AI\n if (action === 'btn_new_cv') {\n item.json.reply_text = \"\ud83d\udd04 \u041d\u0430\u0434\u0456\u0448\u043b\u0438 \u043d\u043e\u0432\u0438\u0439 PDF-\u0444\u0430\u0439\u043b \u0437 \u0440\u0435\u0437\u044e\u043c\u0435, \u0456 \u044f \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0456\u0437\u0443\u044e \u0439\u043e\u0433\u043e!\";\n item.json.mode = \"upload_cv\";\n\n } else if (action === 'btn_analyze_github') {\n item.json.reply_text = \"\ud83d\udd17 \u041d\u0430\u0434\u0456\u0448\u043b\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0441\u0432\u0456\u0439 GitHub-\u043f\u0440\u043e\u0444\u0456\u043b\u044c (\u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, https://github.com/username), \u0456 \u044f \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u044e \u0442\u0432\u043e\u0457 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0456\u0457 \u0442\u0430 README.\";\n item.json.mode = \"github\";\n\n } else if (action === 'btn_free_chat') {\n item.json.reply_text = \"\ud83d\udcac \u042f \u0432 \u0440\u0435\u0436\u0438\u043c\u0456 \u043a\u0430\u0440'\u0454\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0441\u0443\u043b\u044c\u0442\u0430\u043d\u0442\u0430! \u0417\u0430\u043f\u0438\u0442\u0430\u0439 \u043c\u0435\u043d\u0435 \u043f\u0440\u043e \u0449\u043e \u0437\u0430\u0432\u0433\u043e\u0434\u043d\u043e: \u044f\u043a \u043f\u0456\u0434\u0442\u044f\u0433\u043d\u0443\u0442\u0438 \u0437\u043d\u0430\u043d\u043d\u044f, \u043f\u0440\u043e\u0439\u0442\u0438 \u0441\u043f\u0456\u0432\u0431\u0435\u0441\u0456\u0434\u0443 \u0447\u0438 \u043f\u0440\u043e\u0441\u0438\u0442\u0438 \u043f\u0440\u043e Werkstudent-\u043f\u043e\u0437\u0438\u0446\u0456\u044e.\";\n item.json.mode = \"chat\";\n\n } else if (action === 'start_analyze_job') {\n item.json.reply_text = \"\ud83c\udfaf \u041d\u0430\u0434\u0456\u0448\u043b\u0438 \u0442\u0435\u043a\u0441\u0442 \u0430\u0431\u043e \u043e\u043f\u0438\u0441 \u0432\u0430\u043a\u0430\u043d\u0441\u0456\u0457, \u0456 \u044f \u043f\u043e\u0440\u0456\u0432\u043d\u044f\u044e \u0457\u0457 \u0437 \u0442\u0432\u043e\u0457\u043c \u0440\u0435\u0437\u044e\u043c\u0435 \u0442\u0430 \u043f\u0456\u0434\u0433\u043e\u0442\u0443\u044e \u0442\u0435\u0431\u0435 \u0434\u043e \u0441\u043f\u0456\u0432\u0431\u0435\u0441\u0456\u0434\u0438.\";\n item.json.mode = \"job_analysis\";\n\n } else {\n item.json.reply_text = \"\ud83d\udcc4 \u041f\u0440\u0438\u0439\u043d\u044f\u0442\u043e! \u041d\u0430\u0434\u0456\u0448\u043b\u0438 \u043c\u0435\u043d\u0456 PDF-\u0444\u0430\u0439\u043b \u0437 \u0440\u0435\u0437\u044e\u043c\u0435.\";\n item.json.mode = \"upload_cv\";\n }\n}\n\nreturn $input.all();"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
608,
-112
],
"id": "ef297294-0831-44d7-8030-b74f7941a00a",
"name": "Code in JavaScript"
},
{
"parameters": {
"method": "POST",
"url": "https://api.telegram.org/botYOUR_TELEGRAM_BOT_TOKEN/sendMessage",
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "chat_id",
"value": "={{ $json.chat_id }}"
},
{
"name": "text",
"value": "={{ $json.reply_text }}"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.4,
"position": [
1120,
-192
],
"id": "fd2e6b94-db11-4a9d-a509-0a8206016a48",
"name": "HTTP Request"
},
{
"parameters": {
"method": "POST",
"url": "https://api.telegram.org/bot8221321195:AAFYbnf8Z5GYD3w0L-y1z1I8Wq8SaO2XJ1I/sendMessage",
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "chat_id",
"value": "={{ $json.callback_query?.message?.chat?.id || $json.message?.chat?.id }}"
},
{
"name": "text",
"value": "\u2139\ufe0f \u042f\u043a \u043f\u0440\u0430\u0446\u044e\u0454 AI Career Assistant: 1. \u041d\u0430\u0434\u0456\u0448\u043b\u0438 \u0441\u0432\u0456\u0439 PDF-\u0444\u0430\u0439\u043b \u0437 \u0440\u0435\u0437\u044e\u043c\u0435 \u2014 \u044f \u0437\u0440\u043e\u0431\u043b\u044e \u043f\u043e\u0432\u043d\u0438\u0439 \u0430\u043d\u0430\u043b\u0456\u0437. 2. \u041d\u0430\u0434\u0456\u0448\u043b\u0438 \u043e\u043f\u0438\u0441 \u0432\u0430\u043a\u0430\u043d\u0441\u0456\u0457 \u2014 \u044f \u043e\u0446\u0456\u043d\u044e \u0442\u0432\u043e\u0457 \u0448\u0430\u043d\u0441\u0438 \u0442\u0430 \u043f\u0456\u0434\u0433\u043e\u0442\u0443\u044e \u0434\u043e \u043f\u0438\u0442\u0430\u043d\u044c. 3. \u0417\u0430 \u0437\u0430\u043f\u0438\u0442\u043e\u043c \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0456\u0437\u0443\u044e \u0442\u0432\u0456\u0439 GitHub-\u043f\u0440\u043e\u0444\u0456\u043b\u044c!"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.4,
"position": [
720,
160
],
"id": "ba39e30d-c9bf-44ef-b37e-3e36a83ed223",
"name": "HTTP Request1"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 3
},
"conditions": [
{
"id": "22b62e4c-b511-4cb2-9dc4-5a4c837a62a6",
"leftValue": "=={{ $json.message?.text || $json.body?.message?.text || \"\" }}",
"rightValue": "/start",
"operator": {
"type": "string",
"operation": "contains"
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.3,
"position": [
176,
0
],
"id": "fcacf739-3717-476b-9dcd-89092e468a91",
"name": "If1"
}
],
"connections": {
"Telegram Trigger": {
"main": [
[
{
"node": "If1",
"type": "main",
"index": 0
}
]
]
},
"Message a model": {
"main": [
[
{
"node": "Send a text message",
"type": "main",
"index": 0
}
]
]
},
"Get a file": {
"main": [
[
{
"node": "Extract from File",
"type": "main",
"index": 0
}
]
]
},
"Extract from File": {
"main": [
[
{
"node": "Execute a SQL query",
"type": "main",
"index": 0
}
]
]
},
"If": {
"main": [
[
{
"node": "Get a file",
"type": "main",
"index": 0
}
],
[
{
"node": "Execute a SQL query1",
"type": "main",
"index": 0
}
]
]
},
"Analyze Job Match": {
"main": [
[
{
"node": "Send a text message",
"type": "main",
"index": 0
}
]
]
},
"Execute a SQL query": {
"main": [
[
{
"node": "Message a model",
"type": "main",
"index": 0
}
]
]
},
"Execute a SQL query1": {
"main": [
[
{
"node": "Analyze Job Match",
"type": "main",
"index": 0
}
]
]
},
"Switch": {
"main": [
[
{
"node": "Code in JavaScript",
"type": "main",
"index": 0
}
],
[
{
"node": "HTTP Request1",
"type": "main",
"index": 0
}
],
[
{
"node": "Code in JavaScript",
"type": "main",
"index": 0
}
],
[
{
"node": "Code in JavaScript",
"type": "main",
"index": 0
}
],
[
{
"node": "Code in JavaScript",
"type": "main",
"index": 0
}
],
[
{
"node": "Code in JavaScript",
"type": "main",
"index": 0
}
],
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"Code in JavaScript": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"If1": {
"main": [
[
{
"node": "Send Welcome",
"type": "main",
"index": 0
}
],
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
}
},
"active": true,
"settings": {
"executionOrder": "v1",
"binaryMode": "separate",
"availableInMCP": false
},
"versionId": "75211b3c-41c3-4ef4-be8c-9f2cd524da88",
"meta": {
"templateCredsSetupCompleted": true
},
"nodeGroups": [],
"id": "XnHFN0A4vLUk5ees",
"tags": []
}
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.
googlePalmApipostgrestelegramApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Career Assistant Workflow. Uses telegramTrigger, googleGemini, telegram, postgres. Event-driven trigger; 15 nodes.
Source: https://github.com/ostra17/ai-career-assistant/blob/main/workflows/career_assistant_workflow.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.
BotClimaRecover. Uses httpRequest, googleGemini, telegram, telegramTrigger. Event-driven trigger; 21 nodes.
BotClimaRecover. Uses httpRequest, googleGemini, telegram, telegramTrigger. Event-driven trigger; 16 nodes.
This workflow automates the process of scanning business cards received via Telegram and instantly saving the extracted contact information into Google Contacts. It combines OCR technology, AI-powered
This workflow connects a Telegram bot to OpenAi/Google Gemini (PaLM API) so the bot can reply to users with AI-generated answers. Useful for FAQs, assistants, classroom helpers, or bots that fetch doc
I prepared a detailed guide that showed the whole process of building an AI bot, from the simplest version to the most complex in a template.