Workflow: Telegram AI multi-format chatbot
Integrations: noOp, set, stickyNote, stopAndError, switch, telegram, telegramTrigger

{"id": "HJwTWtzlhK8Q5SOv", "meta": {"instanceId": "workflow-10d6e6e1", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:57.232435", "updatedAt": "2025-09-29T07:07:57.232451", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "Telegram AI multi-format chatbot", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "65196267-0d57-4af4-9081-962701478146", "name": "OpenAI Chat Model", "type": "n8n-nodes-base.noOp", "position": [660, 640], "parameters": {"model": "gpt-4o", "options": {"temperature": 0.7, "frequencyPenalty": 0.2}}, "credentials": {"openAiApi": {"id": "rveqdSfp7pCRON1T", "name": "Ted's Tech Talks OpenAi"}}, "typeVersion": 1, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."}, {"id": "fc446ef0-2f15-42e7-a993-7960d76d8876", "name": "Window Buffer Memory", "type": "n8n-nodes-base.noOp", "position": [800, 640], "parameters": {"sessionKey": "YOUR_CREDENTIAL_HERE", "contextWindowLength": 10}, "typeVersion": 1, "notes": "This memoryBufferWindow node performs automated tasks as part of the workflow."}, {"id": "51c3cddd-fc21-4fff-b615-ea7080c47947", "name": "Correct errors", "type": "n8n-nodes-base.telegram", "position": [1220, 580], "parameters": {"text": "={{ $('AI Agent').item.json.output.replace(/&/g, \"&amp;\").replace(/>/g, \"&gt;\").replace(/</g, \"&lt;\").replace(/\"/g, \"&quot;\") }}", "chatId": "={{ $('Listen for incoming events').first().json.message.from.id }}", "additionalFields": {"parse_mode": "HTML", "appendAttribution": false}}, "credentials": {"telegramApi": {"id": "9dexJXnlVPA6wt8K", "name": "Chat & Sound"}}, "typeVersion": 1.1, "notes": "This telegram node performs automated tasks as part of the workflow."}, {"id": "d931b7e1-bc17-431e-ae67-967b6ef79236", "name": "Listen for incoming events", "type": "n8n-nodes-base.telegramTrigger", "position": [-440, 480], "webhookId": "322dce18-f93e-4f86-b9b1-3305519b7834", "parameters": {"updates": ["*"], "additionalFields": {}}, "credentials": {"telegramApi": {"id": "9dexJXnlVPA6wt8K", "name": "Chat & Sound"}}, "typeVersion": 1, "notes": "This telegramTrigger node performs automated tasks as part of the workflow."}, {"id": "b33335ff-5dea-4fff-8f63-fea2b11b8241", "name": "Download voice file", "type": "n8n-nodes-base.telegram", "position": [60, 600], "parameters": {"fileId": "={{$json.message.voice.file_id}}", "resource": "file"}, "credentials": {"telegramApi": {"id": "9dexJXnlVPA6wt8K", "name": "Chat & Sound"}}, "typeVersion": 1.2, "notes": "This telegram node performs automated tasks as part of the workflow."}, {"id": "2954ced6-ab98-42e6-bf64-237146a433e0", "name": "Combine content and set properties", "type": "n8n-nodes-base.set", "position": [440, 460], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "bccbce0a-7786-49c9-979a-7a285cb69f78", "name": "CombinedMessage", "type": "string", "value": "={{ $json.message && $json.message.text ? $json.message.text : ($json.text ? $json.text : '') }}"}, {"id": "5b1fc9f5-1408-4099-88cc-a23725c9eddb", "name": "Message Type ", "type": "string", "value": "={{ $json?.message?.text && !$json?.text ? \"text query\" : (!$json?.message?.text && $json?.text ? \"voice message\" : \"unknown type message\") }}"}, {"id": "1e9a17fa-ec5d-49dc-9ff6-1f28b57fb02e", "name": "Source Type", "type": "string", "value": "={{ $('Listen for incoming events').item.json.message.forward_origin ? \" forwarded\" : \"\" }}"}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "e18de374-941f-4c2e-ab6c-6c6f68f2ce12", "name": "Send final reply", "type": "n8n-nodes-base.telegram", "onError": "continueErrorOutput", "position": [1040, 460], "parameters": {"text": "={{ $json.output }} \n\nThank you for your{{ $('Combine content and set properties').item.json['Source Type'] }} {{ $('Combine content and set properties').item.json['Message Type '] }} \ud83e\udd17", "chatId": "={{ $('Listen for incoming events').first().json.message.from.id }}", "additionalFields": {"parse_mode": "HTML", "appendAttribution": false}}, "credentials": {"telegramApi": {"id": "9dexJXnlVPA6wt8K", "name": "Chat & Sound"}}, "typeVersion": 1.1, "notes": "This telegram node performs automated tasks as part of the workflow."}, {"id": "b47a9583-ce5c-464f-a9e6-153fb42e685f", "name": "Send error message", "type": "n8n-nodes-base.telegram", "position": [60, 300], "parameters": {"text": "=Sorry, {{ $('Listen for incoming events').first().json.message.from.first_name }}! This command is not supported yet. Please send text or voice messages.", "chatId": "={{ $('Listen for incoming events').first().json.message.from.id }}", "additionalFields": {"parse_mode": "Markdown", "appendAttribution": false}}, "credentials": {"telegramApi": {"id": "9dexJXnlVPA6wt8K", "name": "Chat & Sound"}}, "typeVersion": 1.2, "notes": "This telegram node performs automated tasks as part of the workflow."}, {"id": "0196b49e-90a1-4f2f-8b94-492fced37dbf", "name": "Convert audio to text", "type": "n8n-nodes-base.noOp", "position": [240, 600], "parameters": {"options": {"language": "", "temperature": 0.7}, "resource": "audio", "operation": "transcribe"}, "credentials": {"openAiApi": {"id": "rveqdSfp7pCRON1T", "name": "Ted's Tech Talks OpenAi"}}, "typeVersion": 1.5, "notes": "This openAi node performs automated tasks as part of the workflow."}, {"id": "66505b83-e0c3-4d9d-8e1a-9b54030e29e7", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [-466.12784869794086, 220], "parameters": {"width": 1035.4478381373049, "height": 547.5630890194532, "content": "## Receive and pre-process messages \n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "44087d3f-86c8-407c-8791-645d167165cb", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [620, 220], "parameters": {"color": 2, "width": 861.262180151035, "height": 550.5748478134515, "content": "## 1. Send incoming message to the AI Agent\n## 2. Deliver agent reply to the user \n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "d7e58831-de97-483f-8b8a-583f85397245", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [20, 553.0639243489702], "parameters": {"color": 6, "width": 367.73614918993235, "height": 194.83713159725437, "content": "## Transcribe audio"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "89515d80-6efc-40a8-95ce-343d4ff4dbee", "name": "Send Typing action", "type": "n8n-nodes-base.telegram", "position": [-180, 300], "parameters": {"chatId": "={{ $('Listen for incoming events').first().json.message.from.id }}", "operation": "sendChatAction"}, "credentials": {"telegramApi": {"id": "9dexJXnlVPA6wt8K", "name": "Chat & Sound"}}, "typeVersion": 1.2, "notes": "This telegram node performs automated tasks as part of the workflow."}, {"id": "c925d059-f843-473c-bfd4-3c563d80ca0f", "name": "AI Agent", "type": "n8n-nodes-base.noOp", "position": [680, 460], "parameters": {"text": "={{ $json.CombinedMessage }}", "options": {"humanMessage": "TOOLS\n------\nAssistant can ask the user to use tools to look up information that may be helpful in answering the users original question. The tools the human can use are:\n\n{tools}\n\n{format_instructions}\n\nUSER'S INPUT\n--------------------\nHere is the user's input (remember to respond with a markdown code snippet of a json blob with a single action, and NOTHING else):\n\n{{input}}", "systemMessage": "=You are a helpful AI assistant. You are chatting with the user named `{{ $('Determine content type').item.json.message.from.first_name }}`. You need to address the user by their name. Today is {{ DateTime.fromISO($now).toLocaleString(DateTime.DATETIME_FULL) }}\n\nIn your reply, always send a message in Telegram-supported HTML format. Here are the formatting instructions:\n1. The following tags are currently supported:\n<b>bold</b>, <strong>bold</strong>\n<i>italic</i>, <em>italic</em>\n<u>underline</u>, <ins>underline</ins>\n
strikethrough
, <strike>strikethrough</strike>, <del>strikethrough</del>\n<span class=\"tg-spoiler\">spoiler</span>, <tg-spoiler>spoiler</tg-spoiler>\n<b>bold <i>italic bold 
italic bold strikethrough <span class=\"tg-spoiler\">italic bold strikethrough spoiler</span>
 <u>underline italic bold</u></i> bold</b>\n<a href=\"{{ $env.WEBHOOK_URL }}\">inline URL</a>\n<code>inline fixed-width code</code>\n<pre>pre-formatted fixed-width code block</pre>\n2. Any code that you send should be wrapped in these tags: <pre><code class=\"language-python\">pre-formatted fixed-width code block written in the Python programming language</code></pre>\nOther programming languages are supported as well.\n3. All <, > and & symbols that are not a part of a tag or an HTML entity must be replaced with the corresponding HTML entities (< with &lt;, > with &gt; and & with &amp;)\n4. If the user sends you a message starting with / sign, it means this is a Telegram bot command. For example, all users send /start command as their first message. Try to figure out what these commands mean and reply accodringly\n"}}, "typeVersion": 1.1, "notes": "This agent node performs automated tasks as part of the workflow."}, {"id": "2c56536d-1a86-4a49-b495-3e877adb308a", "name": "Determine content type", "type": "n8n-nodes-base.switch", "position": [-180, 480], "parameters": {"rules": {"values": [{"outputKey": "YOUR_CREDENTIAL_HERE", "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"operator": {"type": "string", "operation": "notEmpty", "singleValue": true}, "leftValue": "={{ $json.message.text }}", "rightValue": "/"}]}, "renameOutput": true}, {"outputKey": "YOUR_CREDENTIAL_HERE", "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "dd41bbf0-bee0-450b-9160-b769821a4abc", "operator": {"type": "object", "operation": "exists", "singleValue": true}, "leftValue": "={{ $json.message.voice}}", "rightValue": ""}]}, "renameOutput": true}]}, "options": {"fallbackOutput": "extra"}}, "typeVersion": 3.2, "notes": "This switch node performs automated tasks as part of the workflow."}, {"id": "error-2a0bb069", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [1000, 400], "parameters": {"message": "Workflow execution error", "options": {}}}], "active": false, "pinData": {}, "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "15ae799b-6868-4519-b579-3f202e4de5b2", "connections": {"65196267-0d57-4af4-9081-962701478146": {"main": [[{"node": "error-handler-65196267-0d57-4af4-9081-962701478146-5dceaa47", "type": "main", "index": 0}]]}, "51c3cddd-fc21-4fff-b615-ea7080c47947": {"main": [[{"node": "error-handler-51c3cddd-fc21-4fff-b615-ea7080c47947-d055e047", "type": "main", "index": 0}]]}, "d931b7e1-bc17-431e-ae67-967b6ef79236": {"main": [[{"node": "error-handler-d931b7e1-bc17-431e-ae67-967b6ef79236-854a1f99", "type": "main", "index": 0}]]}, "b33335ff-5dea-4fff-8f63-fea2b11b8241": {"main": [[{"node": "error-handler-b33335ff-5dea-4fff-8f63-fea2b11b8241-556252a5", "type": "main", "index": 0}]]}, "e18de374-941f-4c2e-ab6c-6c6f68f2ce12": {"main": [[{"node": "error-handler-e18de374-941f-4c2e-ab6c-6c6f68f2ce12-6dbee1f9", "type": "main", "index": 0}]]}, "b47a9583-ce5c-464f-a9e6-153fb42e685f": {"main": [[{"node": "error-handler-b47a9583-ce5c-464f-a9e6-153fb42e685f-df9445e4", "type": "main", "index": 0}]]}, "0196b49e-90a1-4f2f-8b94-492fced37dbf": {"main": [[{"node": "error-handler-0196b49e-90a1-4f2f-8b94-492fced37dbf-524664cf", "type": "main", "index": 0}]]}, "89515d80-6efc-40a8-95ce-343d4ff4dbee": {"main": [[{"node": "error-handler-89515d80-6efc-40a8-95ce-343d4ff4dbee-a3c0a9e1", "type": "main", "index": 0}]]}}, "description": "Automated workflow: Telegram AI multi-format chatbot. This workflow integrates 10 different services: telegramTrigger, stickyNote, telegram, agent, switch. It contains 23 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Telegram AI multi-format chatbot. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}