Workflow: Telegram Chat with Buffering
Integrations: aggregate, if, noOp, sort, stickyNote, stopAndError, supabase, telegram, telegramTrigger, wait

{"id": "DnHvQ3KL8v8r5L5Z", "meta": {"instanceId": "workflow-b6990196", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:57.082599", "updatedAt": "2025-09-29T07:07:57.082648", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "Telegram Chat with Buffering", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "a3cc74e9-c696-48de-a04e-d48555641897", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [-1640, -800], "parameters": {"color": 7, "width": 220, "height": 280, "content": "## 1. Receive Message\n\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "ff18667d-0a31-4768-acf8-ed0d53b2f382", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [160, -840], "parameters": {"color": 7, "width": 600, "height": 520, "content": "## 3. AI Assistant\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "ce90f954-19b6-4224-ae88-b20c4da639e6", "name": "Reply", "type": "n8n-nodes-base.telegram", "position": [920, -700], "webhookId": "e3313c88-0d56-4d06-81cf-b48870dfe2fe", "parameters": {"text": "={{ $json.output }}", "chatId": "={{ $('Receive Message').item.json.message.chat.id }}", "additionalFields": {"appendAttribution": false}}, "credentials": {"telegramApi": {"id": "lvrGkOs0ywXp5agp", "name": "Telegram bsde.ai"}}, "typeVersion": 1.2, "notes": "This telegram node performs automated tasks as part of the workflow."}, {"id": "6f46d89b-034c-47ea-a217-8d007bec1531", "name": "Receive Message", "type": "n8n-nodes-base.telegramTrigger", "position": [-1580, -680], "webhookId": "5047a673-ca1d-4e87-b51b-893108de0a59", "parameters": {"updates": ["message"], "additionalFields": {}}, "credentials": {"telegramApi": {"id": "lvrGkOs0ywXp5agp", "name": "Telegram bsde.ai"}}, "typeVersion": 1.1, "notes": "This telegramTrigger node performs automated tasks as part of the workflow."}, {"id": "0f391daa-0e74-4058-8923-52f3c050c9ad", "name": "Wait 10 Seconds", "type": "n8n-nodes-base.wait", "position": [-1000, -580], "webhookId": "87994c9a-fd20-48b6-8dbe-9af36dc40b2f", "parameters": {"amount": 10}, "typeVersion": 1.1, "notes": "This wait node performs automated tasks as part of the workflow."}, {"id": "8e6495d8-db6e-4692-ade5-45239049de34", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [-1320, -760], "parameters": {"color": 7, "width": 1400, "height": 440, "content": "## 2. Buffer Incoming Messages"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "d4876fd2-2e0b-4f82-9dc3-553f926310bd", "name": "Add to Queued Messages", "type": "n8n-nodes-base.supabase", "position": [-1240, -680], "parameters": {"tableId": "message_queue", "fieldsUi": {"fieldValues": [{"fieldId": "user_id", "fieldValue": "={{ $json.message.chat.id }}"}, {"fieldId": "message", "fieldValue": "={{ $json.message.text }}"}, {"fieldId": "message_id", "fieldValue": "={{ $json.message.message_id }}"}]}}, "credentials": {"supabaseApi": {"id": "1iEg1EzFrF29iqp2", "name": "Supabase (bsde.ai)"}}, "typeVersion": 1, "notes": "This supabase node performs automated tasks as part of the workflow."}, {"id": "a2eeb77f-2d74-44ac-9812-c3659d2e2803", "name": "No Operation, do nothing", "type": "n8n-nodes-base.noOp", "position": [-340, -460], "parameters": {}, "typeVersion": 1, "notes": "This noOp node performs automated tasks as part of the workflow."}, {"id": "638fc82e-aba1-4deb-b506-33dcf4746896", "name": "Aggregate", "type": "n8n-nodes-base.aggregate", "position": [220, -700], "parameters": {"options": {}, "fieldsToAggregate": {"fieldToAggregate": [{"fieldToAggregate": "message"}]}}, "typeVersion": 1, "notes": "This aggregate node performs automated tasks as part of the workflow."}, {"id": "772f60e5-e52f-4779-aa03-e4d532ee4b5c", "name": "Delete Queued Messages", "type": "n8n-nodes-base.supabase", "position": [-100, -700], "parameters": {"filters": {"conditions": [{"keyName": "YOUR_CREDENTIAL_HERE", "keyValue": "YOUR_CREDENTIAL_HERE", "condition": "eq"}]}, "tableId": "message_queue", "operation": "delete"}, "credentials": {"supabaseApi": {"id": "1iEg1EzFrF29iqp2", "name": "Supabase (bsde.ai)"}}, "typeVersion": 1, "notes": "This supabase node performs automated tasks as part of the workflow."}, {"id": "16b46a70-85a0-4c8c-94ba-172ebe9aafa4", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [860, -780], "parameters": {"color": 7, "width": 280, "height": 260, "content": "## 4. Send Reply\n\n\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "9162f110-465f-4cd6-9f03-17751d7e43a4", "name": "OpenAI Chat Model", "type": "n8n-nodes-base.noOp", "position": [380, -460], "parameters": {"model": {"__rl": true, "mode": "list", "value": "gpt-4o-mini"}, "options": {}}, "credentials": {"openAiApi": {"id": "1OMpAMAKR9l3eUDI", "name": "OpenAi account"}}, "typeVersion": 1.2, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow."}, {"id": "b47ef0c9-725b-4837-b9e9-96a4ff2b3636", "name": "Sort by Message ID", "type": "n8n-nodes-base.sort", "position": [-580, -680], "parameters": {"options": {}, "sortFieldsUi": {"sortField": [{"fieldName": "message_id"}]}}, "typeVersion": 1, "notes": "This sort node performs automated tasks as part of the workflow."}, {"id": "1aa80c99-eec8-4174-bcf3-c6873354ed0f", "name": "Get Queued Messages", "type": "n8n-nodes-base.supabase", "position": [-780, -680], "parameters": {"filters": {"conditions": [{"keyName": "YOUR_CREDENTIAL_HERE", "keyValue": "YOUR_CREDENTIAL_HERE", "condition": "eq"}]}, "tableId": "message_queue", "operation": "getAll", "returnAll": true}, "credentials": {"supabaseApi": {"id": "1iEg1EzFrF29iqp2", "name": "Supabase (bsde.ai)"}}, "typeVersion": 1, "notes": "This supabase node performs automated tasks as part of the workflow."}, {"id": "85050328-b5aa-47fe-802c-7d9f31f225cb", "name": "Check Most Recent Message", "type": "n8n-nodes-base.if", "position": [-360, -680], "parameters": {"options": {}, "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "loose"}, "combinator": "and", "conditions": [{"id": "8852bab7-230e-442a-a4a2-994e979c8f9f", "operator": {"type": "number", "operation": "equals"}, "leftValue": "={{ $input.last().json.message_id }}\n", "rightValue": "={{ $('Receive Message').item.json.message.message_id }}"}]}, "looseTypeValidation": true}, "typeVersion": 2.2, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "bed86d81-bb57-42ce-aaa7-4bdc21e1651c", "name": "AI Agent", "type": "n8n-nodes-base.noOp", "position": [420, -700], "parameters": {"text": "={{ $json.message.join(String.fromCharCode(10)) }}", "options": {}, "promptType": "define"}, "typeVersion": 1.7, "notes": "This agent node performs automated tasks as part of the workflow."}, {"id": "4f468a14-fbea-44ec-a2b8-e4b3785c0362", "name": "Postgres Chat Memory", "type": "n8n-nodes-base.noOp", "position": [560, -460], "parameters": {"sessionKey": "YOUR_CREDENTIAL_HERE", "sessionIdType": "customKey"}, "credentials": {"postgres": {"id": "tzLXHvhykxvYghPC", "name": "bsde.ai Supabase (Session Pooler)"}}, "typeVersion": 1.3, "notes": "This memoryPostgresChat node performs automated tasks as part of the workflow."}, {"id": "610516e8-d4ad-448e-ac97-17aad1a31862", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [-2420, -820], "parameters": {"width": 700, "height": 420, "content": "## Allow Users to Send a Sequence of Messages to an AI Agent in Telegram with Supabase\n### Use Case\nWhen creating chatbots that interface through applications such as **Telegram** and **WhatsApp**, users can often sends multiple shorter messages in quick succession, in place of a single, longer message. This workflow accounts for this behaviour.\n### What it Does\nThis workflow allows users to send several messages in quick succession, treating them as one coherent conversation instead of separate messages requiring individual responses. \n### How it Works\n1. When messages arrive, they are stored in a **Supabase PostgreSQL** table\n2. The system waits briefly to see if additional messages arrive\n3. If no new messages arrive within the waiting period, all queued messages are:\n   - Combined and processed as a single conversation\n   - Responded to with one unified reply\n   - Deleted from the queue"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "c8bd8777-fb0f-4941-8674-f5bb7c264506", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [-1640, -1060], "parameters": {"width": 520, "height": 220, "content": "### Setup\n1. Create a table in Supabase called **message_queue**. It needs to have the following columns: **user_id** (`uint8`), **message** (`text`), and **message_id** (`uint8`)\n2. Add your **Telegram**, **Supabase**, **OpenAI**, and **PostgreSQL** credentials\n3. Activate the workflow and test by sending multiple messages the Telegram bot in one go\n4. Wait ten seconds after which you will receive a single reply to all of your messages"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "24604fc7-7957-4e20-8303-b31f2ce1e257", "name": "Sticky Note6", "type": "n8n-nodes-base.stickyNote", "position": [-1060, -700], "parameters": {"color": 5, "width": 220, "height": 280, "content": "### Modification\nChange the value of *Wait Amount* to vary the buffering window"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "24f388f3-5655-4bd4-9c30-978efb2dc400", "name": "Sticky Note8", "type": "n8n-nodes-base.stickyNote", "position": [180, -480], "parameters": {"color": 5, "width": 340, "height": 140, "content": "### Modification\nReplace this sub-node \nto use a different language\n model"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "3db12526-6b97-4e3a-b53d-987f5d20c46e", "name": "Sticky Note9", "type": "n8n-nodes-base.stickyNote", "position": [380, -800], "parameters": {"color": 5, "width": 340, "height": 240, "content": "### Modification\nAdd a **System Message** to tailor the chatbot to your use case"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "error-7f085589", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [1000, 400], "parameters": {"message": "Workflow execution error", "options": {}}}], "active": true, "pinData": {}, "settings": {"callerPolicy": "workflowsFromSameOwner", "executionOrder": "v1", "saveManualExecutions": true, "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "e415eb18-1bb9-426b-b759-0ba269db1f8f", "connections": {"ce90f954-19b6-4224-ae88-b20c4da639e6": {"main": [[{"node": "error-handler-ce90f954-19b6-4224-ae88-b20c4da639e6-0ad5ca12", "type": "main", "index": 0}]]}, "6f46d89b-034c-47ea-a217-8d007bec1531": {"main": [[{"node": "error-handler-6f46d89b-034c-47ea-a217-8d007bec1531-70057788", "type": "main", "index": 0}]]}, "9162f110-465f-4cd6-9f03-17751d7e43a4": {"main": [[{"node": "error-handler-9162f110-465f-4cd6-9f03-17751d7e43a4-c864528d", "type": "main", "index": 0}]]}}, "description": "Automated workflow: Telegram Chat with Buffering. This workflow integrates 13 different services: telegramTrigger, stickyNote, wait, telegram, agent. It contains 25 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Telegram Chat with Buffering. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}