Workflow: Telegram Wait Automation

Workflow Details

Download Workflow
{
    "id": "DnHvQ3KL8v8r5L5Z",
    "meta": {
        "instanceId": "ac63467607103d9c95dd644384984672b90b1cb03e07edbaf18fe72b2a6c45bb",
        "templateCredsSetupCompleted": true
    },
    "name": "Telegram Chat with Buffering",
    "tags": [],
    "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
        },
        {
            "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
        },
        {
            "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.1999999999999999555910790149937383830547332763671875
        },
        {
            "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.100000000000000088817841970012523233890533447265625
        },
        {
            "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.100000000000000088817841970012523233890533447265625
        },
        {
            "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
        },
        {
            "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
        },
        {
            "id": "a2eeb77f-2d74-44ac-9812-c3659d2e2803",
            "name": "No Operation, do nothing",
            "type": "n8n-nodes-base.noOp",
            "position": [
                -340,
                -460
            ],
            "parameters": [],
            "typeVersion": 1
        },
        {
            "id": "638fc82e-aba1-4deb-b506-33dcf4746896",
            "name": "Aggregate",
            "type": "n8n-nodes-base.aggregate",
            "position": [
                220,
                -700
            ],
            "parameters": {
                "options": [],
                "fieldsToAggregate": {
                    "fieldToAggregate": [
                        {
                            "fieldToAggregate": "message"
                        }
                    ]
                }
            },
            "typeVersion": 1
        },
        {
            "id": "772f60e5-e52f-4779-aa03-e4d532ee4b5c",
            "name": "Delete Queued Messages",
            "type": "n8n-nodes-base.supabase",
            "position": [
                -100,
                -700
            ],
            "parameters": {
                "filters": {
                    "conditions": [
                        {
                            "keyName": "user_id",
                            "keyValue": "={{ $json.user_id }}",
                            "condition": "eq"
                        }
                    ]
                },
                "tableId": "message_queue",
                "operation": "delete"
            },
            "credentials": {
                "supabaseApi": {
                    "id": "1iEg1EzFrF29iqp2",
                    "name": "Supabase (bsde.ai)"
                }
            },
            "typeVersion": 1
        },
        {
            "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
        },
        {
            "id": "9162f110-465f-4cd6-9f03-17751d7e43a4",
            "name": "OpenAI Chat Model",
            "type": "@n8n\/n8n-nodes-langchain.lmChatOpenAi",
            "position": [
                380,
                -460
            ],
            "parameters": {
                "model": {
                    "__rl": true,
                    "mode": "list",
                    "value": "gpt-4o-mini"
                },
                "options": []
            },
            "credentials": {
                "openAiApi": {
                    "id": "1OMpAMAKR9l3eUDI",
                    "name": "OpenAi account"
                }
            },
            "typeVersion": 1.1999999999999999555910790149937383830547332763671875
        },
        {
            "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
        },
        {
            "id": "1aa80c99-eec8-4174-bcf3-c6873354ed0f",
            "name": "Get Queued Messages",
            "type": "n8n-nodes-base.supabase",
            "position": [
                -780,
                -680
            ],
            "parameters": {
                "filters": {
                    "conditions": [
                        {
                            "keyName": "user_id",
                            "keyValue": "={{ $('Receive Message').item.json.message.from.id }}",
                            "condition": "eq"
                        }
                    ]
                },
                "tableId": "message_queue",
                "operation": "getAll",
                "returnAll": true
            },
            "credentials": {
                "supabaseApi": {
                    "id": "1iEg1EzFrF29iqp2",
                    "name": "Supabase (bsde.ai)"
                }
            },
            "typeVersion": 1
        },
        {
            "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.20000000000000017763568394002504646778106689453125
        },
        {
            "id": "bed86d81-bb57-42ce-aaa7-4bdc21e1651c",
            "name": "AI Agent",
            "type": "@n8n\/n8n-nodes-langchain.agent",
            "position": [
                420,
                -700
            ],
            "parameters": {
                "text": "={{ $json.message.join(String.fromCharCode(10)) }}",
                "options": [],
                "promptType": "define"
            },
            "typeVersion": 1.6999999999999999555910790149937383830547332763671875
        },
        {
            "id": "4f468a14-fbea-44ec-a2b8-e4b3785c0362",
            "name": "Postgres Chat Memory",
            "type": "@n8n\/n8n-nodes-langchain.memoryPostgresChat",
            "position": [
                560,
                -460
            ],
            "parameters": {
                "sessionKey": "={{ $('Receive Message').item.json.message.chat.id }}",
                "sessionIdType": "customKey"
            },
            "credentials": {
                "postgres": {
                    "id": "tzLXHvhykxvYghPC",
                    "name": "bsde.ai Supabase (Session Pooler)"
                }
            },
            "typeVersion": 1.3000000000000000444089209850062616169452667236328125
        },
        {
            "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
        },
        {
            "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
        },
        {
            "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
        },
        {
            "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
        },
        {
            "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
        }
    ],
    "active": true,
    "pinData": [],
    "settings": {
        "callerPolicy": "workflowsFromSameOwner",
        "executionOrder": "v1"
    },
    "versionId": "e415eb18-1bb9-426b-b759-0ba269db1f8f",
    "connections": {
        "AI Agent": {
            "main": [
                [
                    {
                        "node": "Reply",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Aggregate": {
            "main": [
                [
                    {
                        "node": "AI Agent",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Receive Message": {
            "main": [
                [
                    {
                        "node": "Add to Queued Messages",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Wait 10 Seconds": {
            "main": [
                [
                    {
                        "node": "Get Queued Messages",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "OpenAI Chat Model": {
            "ai_languageModel": [
                [
                    {
                        "node": "AI Agent",
                        "type": "ai_languageModel",
                        "index": 0
                    }
                ]
            ]
        },
        "Sort by Message ID": {
            "main": [
                [
                    {
                        "node": "Check Most Recent Message",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Get Queued Messages": {
            "main": [
                [
                    {
                        "node": "Sort by Message ID",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Postgres Chat Memory": {
            "ai_memory": [
                [
                    {
                        "node": "AI Agent",
                        "type": "ai_memory",
                        "index": 0
                    }
                ]
            ]
        },
        "Add to Queued Messages": {
            "main": [
                [
                    {
                        "node": "Wait 10 Seconds",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Delete Queued Messages": {
            "main": [
                [
                    {
                        "node": "Aggregate",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        },
        "Check Most Recent Message": {
            "main": [
                [
                    {
                        "node": "Delete Queued Messages",
                        "type": "main",
                        "index": 0
                    }
                ],
                [
                    {
                        "node": "No Operation, do nothing",
                        "type": "main",
                        "index": 0
                    }
                ]
            ]
        }
    }
}
Back to Workflows

Related Workflows

Insert data into a new row for a table in Coda
View
Manual Debughelper Create Triggered
View
Code Respondtowebhook Process Webhook
View
Splitout Code Send Scheduled
View
Slack Stickynote Automate Webhook
View
Webhook Nocodb Create Webhook
View
Send updates about the position of the ISS every minute to a topic in Kafka
View
Stickynote Send Triggered
View
Splitout Filter Send Webhook
View
Splitout Code Automation Webhook
View