AutomationFlowsAI & RAG › Career Assistant Workflow

Career Assistant Workflow

Career Assistant Workflow. Uses telegramTrigger, googleGemini, telegram, postgres. Event-driven trigger; 15 nodes.

Event trigger★★★★☆ complexityAI-powered15 nodesTelegram TriggerGoogle GeminiTelegramPostgresHTTP Request
AI & RAG Trigger: Event Nodes: 15 Complexity: ★★★★☆ AI nodes: yes Added:

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 →

Download .json
{
  "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, '&lt;').replace(/>/g, '&gt;') }}",
        "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.

Pro

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 →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

BotClimaRecover. Uses httpRequest, googleGemini, telegram, telegramTrigger. Event-driven trigger; 21 nodes.

HTTP Request, Google Gemini, Telegram +1
AI & RAG

BotClimaRecover. Uses httpRequest, googleGemini, telegram, telegramTrigger. Event-driven trigger; 16 nodes.

HTTP Request, Google Gemini, Telegram +1
AI & RAG

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

Telegram Trigger, Telegram, Information Extractor +3
AI & RAG

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

Google Gemini, Telegram, Google Docs Tool +5
AI & RAG

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.

Telegram Trigger, HTTP Request, Supabase +1