{"id":"bV0JTA5NtRZxiD1q","meta":{"instanceId":"workflow-1ddabc5a","versionId":"1.0.0","createdAt":"2025-09-29T07:07:57.631357","updatedAt":"2025-09-29T07:07:57.631378","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"name":"Telegram-bot AI Da Nang","nodes":[{"id":"ae5f9ca6-6bba-4fe8-b955-6c615d8a522f","name":"SendTyping","type":"n8n-nodes-base.telegram","position":[-1780,-260],"webhookId":"26ea953e-93d9-463e-ad90-95ea8ccb449f","parameters":{"chatId":"={{ $('telegramInput').item.json.message.chat.id }}","operation":"sendChatAction"},"credentials":{"telegramApi":{"id":"V3EtQBeqEvnOtl9p","name":"Telegram account"}},"typeVersion":1.2,"notes":"This telegram node performs automated tasks as part of the workflow."},{"id":"244e7be3-2caa-46f7-8628-d063a3b84c12","name":"SetResponse","type":"n8n-nodes-base.set","notes":"Assemble response etc.","position":[40,-420],"parameters":{"options":{},"assignments":{"assignments":[{"id":"fba8dc48-1484-4aae-8922-06fcae398f05","name":"responseMessage","type":"string","value":"={{ $json.output }}"},{"id":"df8243e6-6a24-4bad-8807-63d75c828150","name":"","type":"string","value":""}]},"includeOtherFields":true},"notesInFlow":true,"typeVersion":3.4},{"id":"192aa194-f131-4ba3-8842-7c88da1a6129","name":"Settings","type":"n8n-nodes-base.set","position":[-1260,-420],"parameters":{"options":{},"assignments":{"assignments":[{"id":"6714203d-04b3-4a3c-9183-09cddcffdfe8","name":"scheduleURL","type":"string","value":"{{ $env.WEBHOOK_URL }}"}]},"includeOtherFields":true},"typeVersion":3.4,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"1c52cdf5-da32-4c76-a294-5ec2109dbf39","name":"Schedule","type":"n8n-nodes-base.googleSheets","position":[-980,-420],"parameters":{"options":{},"sheetName":{"__rl":true,"mode":"list","value":"gid=0","cachedResultUrl":"{{ $env.WEBHOOK_URL }}","cachedResultName":"Schedule"},"documentId":{"__rl":true,"mode":"url","value":"={{ $json.scheduleURL }}"}},"credentials":{"googleSheetsOAuth2Api":{"id":"XeXufn5uZvHp3lcX","name":"Google Sheets account 2"}},"typeVersion":4.5,"notes":"This googleSheets node performs automated tasks as part of the workflow."},{"id":"eff88417-4ce6-4809-8693-dc63e00fff20","name":"ScheduleToMarkdown","type":"n8n-nodes-base.code","position":[-800,-420],"parameters":{"jsCode":"// Get all rows from the input (each item has a \"json\" property)\nconst rows = items.map(item => item.json);\n\n// If no data, return an appropriate message\nif (rows.length === 0) {\n  return [{ json: { markdown: \"No data available.\" } }];\n}\n\n// Use the keys from the first row as the header columns\nconst headers = Object.keys(rows[0]);\n\n// Build the markdown table string\nlet markdown = \"\";\n\n// Create the header row\nmarkdown += `| ${headers.join(\" | \")} |\\n`;\n\n// Create the separator row (using dashes for markdown)\nmarkdown += `| ${headers.map(() => '---').join(\" | \")} |\\n`;\n\n// Add each data row to the table\nrows.forEach(row => {\n  // Ensure we output something for missing values\n  const rowValues = headers.map(header => row[header] !== undefined ? row[header] : '');\n  markdown += `| ${rowValues.join(\" | \")} |\\n`;\n});\n\nconst result = { 'binary': {}, 'json': {} };\n\n// Convert the markdown string to a binary buffer\nconst binaryData = Buffer.from(markdown, 'utf8');\n/*\n// Attach the binary data to the first item under a binary property named 'data'\nresult.binary = {\n  data: {\n    data: binaryData,\n    mimeType: 'text/markdown',\n  }\n};\n*/\n// Optionally, also return the markdown string in the json property if needed\nresult.json.markdown = markdown;\n\nreturn result;"},"typeVersion":2,"notes":"This code node performs automated tasks as part of the workflow."},{"id":"04fab70c-493a-4c5d-adfb-0d9e8a5b7382","name":"ScheduleBot","type":"n8n-nodes-base.noOp","position":[-480,-420],"parameters":{"text":"={{ $('Settings').first().json.inputMessage }}","options":{"systemMessage":"=You are a helpful assistant that helps members of a meetup group with scheduling their meetups and answering questions about them.\n\nThe current version of the schedule in tabular format is the following:\n\n {{ $json.markdown }}\n\n"},"promptType":"define"},"typeVersion":1,"notes":"This agent node performs automated tasks as part of the workflow."},{"id":"be29d3ec-8211-4f23-82f2-83a1aa3aad5b","name":"n8nChatSettings","type":"n8n-nodes-base.set","position":[-1580,-520],"parameters":{"options":{},"assignments":{"assignments":[{"id":"1ecb3515-c1a2-4d69-adec-5b4d74e32056","name":"inputMessage","type":"string","value":"={{ $json.chatInput }}"},{"id":"424b9697-94cb-4c38-953c-992436832684","name":"chatId","type":"string","value":"={{ $json.sessionId }}"},{"id":"e23988e2-7c3d-4e38-9d5d-0c4b0c94d127","name":"mode","type":"string","value":"n8n"}]}},"typeVersion":3.4,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"b7078c59-b6e6-4002-831f-96e56278ab61","name":"telegramChatSettings","type":"n8n-nodes-base.set","position":[-1580,-260],"parameters":{"options":{},"assignments":{"assignments":[{"id":"1ecb3515-c1a2-4d69-adec-5b4d74e32056","name":"inputMessage","type":"string","value":"={{ $('telegramInput').item.json.message.text }}"},{"id":"424b9697-94cb-4c38-953c-992436832684","name":"chatId","type":"string","value":"={{ $('telegramInput').item.json.message.chat.id }}"},{"id":"e23988e2-7c3d-4e38-9d5d-0c4b0c94d127","name":"mode","type":"string","value":"telegram"}]}},"typeVersion":3.4,"notes":"This set node performs automated tasks as part of the workflow."},{"id":"1ba6ad37-f1e5-440d-bf10-569038c27bce","name":"telegramInput","type":"n8n-nodes-base.telegramTrigger","position":[-1960,-260],"webhookId":"f56e8e22-975e-4f9a-a6f9-253ebc63668d","parameters":{"updates":["message"],"additionalFields":{}},"credentials":{"telegramApi":{"id":"V3EtQBeqEvnOtl9p","name":"Telegram account"}},"typeVersion":1.1,"notes":"This telegramTrigger node performs automated tasks as part of the workflow."},{"id":"56a52e8a-714f-4e7a-8a13-e915e9dc29c4","name":"n8nInput","type":"n8n-nodes-base.noOp","position":[-1960,-520],"webhookId":"f4ab7d4a-5cdd-425a-bbbb-e3bb94719266","parameters":{"options":{}},"typeVersion":1,"notes":"This chatTrigger node performs automated tasks as part of the workflow."},{"id":"961f67f0-bd44-4e7f-9f2f-c2f02f3176ce","name":"Switch","type":"n8n-nodes-base.switch","position":[220,-420],"parameters":{"rules":{"values":[{"outputKey":"YOUR_CREDENTIAL_HERE","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"operator":{"type":"string","operation":"equals"},"leftValue":"={{ $('Settings').first().json.mode }}","rightValue":"n8n"}]},"renameOutput":true},{"outputKey":"YOUR_CREDENTIAL_HERE","conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"e7d6a994-48e3-44bb-b662-862d9bf9c53b","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $('Settings').first().json.mode }}","rightValue":"telegram"}]},"renameOutput":true}]},"options":{}},"typeVersion":3.2,"notes":"This switch node performs automated tasks as part of the workflow."},{"id":"57056425-37ba-417d-9a2d-977a81d378ab","name":"telegramResponse","type":"n8n-nodes-base.telegram","position":[500,-280],"webhookId":"ff71ba7e-affa-4952-90a5-6bb7f37a5598","parameters":{"text":"={{ $json.responseMessage }}","chatId":"={{ $('Settings').first().json.chatId }}","additionalFields":{}},"credentials":{"telegramApi":{"id":"V3EtQBeqEvnOtl9p","name":"Telegram account"}},"typeVersion":1.2,"notes":"This telegram node performs automated tasks as part of the workflow."},{"id":"2962a77f-5727-43be-93fb-b0751b63c6ac","name":"n8nResponse","type":"n8n-nodes-base.noOp","position":[500,-520],"parameters":{},"typeVersion":1,"notes":"This noOp node performs automated tasks as part of the workflow."},{"id":"0932484f-707b-412b-b9cb-431a8ae64447","name":"LLM","type":"n8n-nodes-base.noOp","position":[-600,-220],"parameters":{"options":{}},"credentials":{"openRouterApi":{"id":"bs7tPtvgDTJNGAFJ","name":"OpenRouter account"}},"typeVersion":1,"notes":"This lmChatOpenRouter node performs automated tasks as part of the workflow."},{"id":"65948d2c-71b2-4df0-97db-ed216ed7c691","name":"Memory","type":"n8n-nodes-base.noOp","position":[-500,-220],"parameters":{"sessionKey":"YOUR_CREDENTIAL_HERE","sessionIdType":"customKey"},"typeVersion":1,"notes":"This memoryBufferWindow node performs automated tasks as part of the workflow."},{"id":"50566274-cf7c-496f-a166-b45eb3114da3","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-2000,-600],"parameters":{"color":2,"width":620,"height":240,"content":"## Chat input triggered inside n8n\nUsed for testing and debugging"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"9dc636fb-cc86-4236-8eb9-952a4ab0ef68","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[-2000,-340],"parameters":{"color":2,"width":620,"height":240,"content":"## Chat input triggered by Telegram\nUsed for live chat within Telegram"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"0429d589-3e80-4b26-96a0-01554899a3e7","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[420,-340],"parameters":{"color":5,"width":360,"height":240,"content":"## Chat response to Telegram"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"9eeccee0-c6a0-40c6-9b7d-1f672bf0fdb9","name":"Sticky Note3","type":"n8n-nodes-base.stickyNote","position":[420,-600],"parameters":{"color":5,"width":360,"height":240,"content":"## Chat response inside n8n"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"acb8e550-be94-41b7-904a-641b3b87e928","name":"Sticky Note4","type":"n8n-nodes-base.stickyNote","position":[-40,-600],"parameters":{"color":7,"width":440,"height":500,"content":"## Prepare response\nDecide to which chat the response will go."},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"42ce6eac-165b-463d-822e-355aff030525","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[-620,-600],"parameters":{"color":3,"width":560,"height":500,"content":"## AI Processing\nChat input → Chat output"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"33c45fcc-3aa5-4cd3-b393-e1723560dfeb","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[-1040,-600],"parameters":{"color":4,"width":400,"height":500,"content":"## Retrieve Data\nGet schedule from Google Spreadsheet and convert it to a Markdown-Table as context for the LLM"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"6e1017e3-bf9d-4056-a64f-c94476bd1f43","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[-1360,-600],"parameters":{"color":7,"width":300,"height":500,"content":"## Normalize input\nTransfer the chat data into a unified set of variables"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"error-1505e7d8","name":"Error Handler","type":"n8n-nodes-base.stopAndError","typeVersion":1,"position":[1000,400],"parameters":{"message":"Workflow execution error","options":{}}}],"active":true,"settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"versionId":"9078c996-e932-40c0-882e-1eb261ca1535","connections":{"SendTyping":{"main":[[]]},"Schedule":{"main":[[]]},"telegramInput":{"main":[[]]},"telegramResponse":{"main":[[]]}},"description":"Automated workflow: Telegram-bot AI Da Nang. This workflow integrates 13 different services: telegramTrigger, stickyNote, telegram, code, agent. It contains 27 nodes and follows best practices for error handling and security.","notes":"Excellent quality workflow: Telegram-bot AI Da Nang. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}