This workflow corresponds to n8n.io template #15933 — we link there as the canonical source.
This workflow follows the Agent → Anthropic Chat 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 →
{
"id": "dlBqer09ignAG5Gv",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Manage and remind tasks via Telegram with Anthropic AI and n8n tables",
"tags": [],
"nodes": [
{
"id": "f63ecee6-4687-4e39-9bea-5e5cc5c45e62",
"name": "Overview",
"type": "n8n-nodes-base.stickyNote",
"position": [
-496,
-64
],
"parameters": {
"width": 760,
"height": 548,
"content": "## AI-Powered Task Reminder Bot via Telegram\n\n**Who's it for:** Anyone who wants a conversational personal task manager inside Telegram \u2014 powered by Anthropic AI \u2014 with automatic daily reminders and smart recurring task handling.\n\n### How it works\n1. **Chat with your bot:** Send a message to your Telegram bot in plain language \u2014 add tasks, update due dates, set priorities, or delete tasks. The AI understands context and asks for confirmation before destructive actions.\n2. **Authorization check:** Only your configured Telegram user ID can interact with the bot. Anyone else gets a rejection message.\n3. **Daily reminders:** At 9am, 2pm, and 6pm the bot automatically sends a summary of your pending tasks.\n4. **Midnight maintenance:** At 1am, any recurring tasks with a past due date are silently rolled forward to their next occurrence.\n5. **Task storage:** All tasks are stored in an n8n Data Table with fields: `taskname`, `duedate`, `Priority`, `Notes`, and `Recurrence`.\n\n### Setup\n1. Connect your **Telegram Bot** credentials (create a bot via @BotFather on Telegram).\n2. Connect your **Anthropic API** credentials.\n3. In **Check Authorized User** \u2192 set the comparison value to your Telegram User ID (find it via @userinfobot).\n4. In **Send AI Response to User** \u2192 replace `YOUR_TELEGRAM_CHAT_ID` with your Telegram Chat ID.\n5. Create a **Tasks** Data Table in your n8n project with columns: `taskname` (text), `duedate` (date), `Priority` (text), `Notes` (text), `Recurrence` (text).\n6. Re-link all four Data Table tool nodes to your new table, then activate the workflow."
},
"typeVersion": 1
},
{
"id": "c7e60a32-ac41-4c31-a4bd-2bf83b8bb6c6",
"name": "Section - Telegram Chat",
"type": "n8n-nodes-base.stickyNote",
"position": [
432,
144
],
"parameters": {
"color": 7,
"width": 1352,
"height": 348,
"content": "## \ud83d\udcac Telegram Chat Interface\n\nReceives incoming messages from your bot, verifies the sender matches your authorized Telegram user ID, and routes to the AI Agent or sends a rejection."
},
"typeVersion": 1
},
{
"id": "810c6b69-e7a2-4fcb-bfeb-1590089fd940",
"name": "Section - Scheduled Triggers",
"type": "n8n-nodes-base.stickyNote",
"position": [
-272,
624
],
"parameters": {
"color": 7,
"width": 512,
"height": 944,
"content": "## \u23f0 Scheduled Triggers\n\nFour schedule triggers drive proactive bot behavior:\n- **9am / 2pm / 6pm** \u2192 sends a pending task summary.\n- **1am** \u2192 silently updates overdue recurring task dates."
},
"typeVersion": 1
},
{
"id": "9ca8badb-d9b0-44a4-bdb7-6fcb7c238d46",
"name": "Section - AI Agent",
"type": "n8n-nodes-base.stickyNote",
"position": [
640,
576
],
"parameters": {
"color": 7,
"width": 1120,
"height": 800,
"content": "## \ud83e\udd16 AI Agent\n\nClaude processes all inputs \u2014 chat messages and scheduled prompts. It reads and writes tasks via the Data Table tools, tracks conversation history with window memory, and always responds via Telegram."
},
"typeVersion": 1
},
{
"id": "1bbfa30b-230c-4c2c-8a22-53be3f11ccdd",
"name": "Section - Task Tools",
"type": "n8n-nodes-base.stickyNote",
"position": [
1104,
1504
],
"parameters": {
"color": 7,
"width": 1052,
"height": 384,
"content": "## \ud83d\uddc4\ufe0f Task Database Tools\n\nCRUD tools connected to the AI Agent. The agent automatically calls these based on the user's request \u2014 no manual wiring needed per action."
},
"typeVersion": 1
},
{
"id": "70b41532-3c3f-4c25-9222-9052f81aad7c",
"name": "Warning - Set User ID",
"type": "n8n-nodes-base.stickyNote",
"position": [
1504,
288
],
"parameters": {
"color": 2,
"content": "\u26a0\ufe0f **Set your Telegram User ID here.**\n\nChange the right-hand value from `0` to your actual Telegram user ID. Get it by messaging @userinfobot on Telegram."
},
"typeVersion": 1
},
{
"id": "26f17f1c-3b94-40a6-8e60-465b8fa9ec50",
"name": "Telegram Trigger",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
576,
304
],
"parameters": {
"updates": [
"message"
],
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "a1f8b323-94ec-41f3-8f35-347c78c42ab1",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
976,
848
],
"parameters": {
"text": "={{ $json.message.text }}\n\n{{ $json.Reminder }}",
"options": {
"systemMessage": "You are a helpful personal assistant who takes input and provides useful answers via telegram. On an regular basis, you are also supposed to provide an update of the pending tasks from the tasks table. You have access to multiple tools. \n\nAlways provide an output via Telegram, even if there is an error. \n\nWhen a task's due date is in the past, update its due date to today. Do this without asking the user. \n\nBefore deleting or updating any task, always ask the user to confirm first. For deletions say: 'Are you sure you want to delete [taskname]? Reply yes to confirm.' For updates say: 'Are you sure you want to update [taskname] with [changes]? Reply yes to confirm.' Only proceed with the action after the user replies with yes."
},
"promptType": "define"
},
"typeVersion": 3.1
},
{
"id": "bdcd07e7-0326-49d4-823e-33a9e695d789",
"name": "Anthropic Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
848,
1056
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "claude-sonnet-4-5-20250929",
"cachedResultName": "Claude Sonnet 4.5"
},
"options": {}
},
"credentials": {
"anthropicApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "8a41927d-e15b-4652-8db7-03f5fefc3804",
"name": "Date & Time",
"type": "n8n-nodes-base.dateTimeTool",
"position": [
1584,
992
],
"parameters": {
"options": {},
"includeTime": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Include_Current_Time', ``, 'boolean') }}",
"outputFieldName": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Output_Field_Name', ``, 'string') }}"
},
"typeVersion": 2
},
{
"id": "9b5175f8-35cc-4266-83fe-88f4494b19e3",
"name": "Simple Memory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
992,
1216
],
"parameters": {
"sessionKey": "=={{ $('Telegram Trigger').item.json.message.chat.id }}",
"sessionIdType": "customKey"
},
"typeVersion": 1.4
},
{
"id": "50c050f4-2e76-4435-ae93-b1714fc05246",
"name": "Send AI Response to User",
"type": "n8n-nodes-base.telegram",
"position": [
1264,
304
],
"parameters": {
"text": "={{ $json.output }}",
"chatId": "YOUR_TELEGRAM_CHAT_ID",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "b8457435-304f-477d-8765-0af6798d93a7",
"name": "Insert row in Data table",
"type": "n8n-nodes-base.dataTableTool",
"position": [
1488,
1728
],
"parameters": {
"columns": {
"value": {
"Notes": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Notes', `Any additional context, details, or information about the task. This is a free text field and can contain anything relevant to the task.`, 'string') }}",
"duedate": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('duedate', `The current due date of the task, in ISO format YYYY-MM-DD. This is a date, NOT a task name`, 'string') }}",
"Priority": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Priority', `The priority level of the task. Must be one of: high, medium, or low. This is a text string, NOT a date or task name.`, 'string') }}",
"taskname": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('taskname', `The exact task name to insert. This is a text string, NOT a date.`, 'string') }}",
"Recurrence": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Recurrence', `When setting recurrence, only use the values: none, daily, weekly, or monthly. Never use any other value.`, 'string') }}"
},
"schema": [
{
"id": "taskname",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "taskname",
"defaultMatch": false
},
{
"id": "duedate",
"type": "dateTime",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "duedate",
"defaultMatch": false
},
{
"id": "Priority",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Priority",
"defaultMatch": false
},
{
"id": "Notes",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Notes",
"defaultMatch": false
},
{
"id": "Recurrence",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Recurrence",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultName": "Tasks"
}
},
"typeVersion": 1.1
},
{
"id": "e8aac274-809f-40eb-98c0-39e3d79af0a8",
"name": "Get row(s) in Data table",
"type": "n8n-nodes-base.dataTableTool",
"position": [
1664,
1728
],
"parameters": {
"orderBy": true,
"operation": "get",
"returnAll": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Return_All', ``, 'boolean') }}",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultName": "Tasks"
},
"orderByColumn": "id",
"orderByDirection": "ASC"
},
"typeVersion": 1.1
},
{
"id": "45537815-baf1-4467-bf42-c323dab56488",
"name": "Delete row(s) in Data table",
"type": "n8n-nodes-base.dataTableTool",
"position": [
1856,
1616
],
"parameters": {
"filters": {
"conditions": [
{
"keyName": "taskname",
"keyValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('conditions0_Value', ``, 'string') }}"
}
]
},
"options": {},
"matchType": "allConditions",
"operation": "deleteRows",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultName": "Tasks"
}
},
"typeVersion": 1.1
},
{
"id": "bde9b5d6-fe12-4716-9c60-ef6b0186a857",
"name": "9am",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-128,
816
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 9
}
]
}
},
"typeVersion": 1.3
},
{
"id": "59cc52df-3565-443f-9957-0a18ca7ba093",
"name": "2pm",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-128,
1008
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 14
}
]
}
},
"typeVersion": 1.3
},
{
"id": "c66ff8dd-db1b-4ce0-8e79-10402f3ca00f",
"name": "6pm",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-128,
1184
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 18
}
]
}
},
"typeVersion": 1.3
},
{
"id": "c7e2e780-c8df-4d37-a251-2f074c8eab18",
"name": "Check Authorized User",
"type": "n8n-nodes-base.if",
"position": [
752,
736
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "18dcaa33-36af-4b16-94db-66a94ee8aba5",
"operator": {
"type": "number",
"operation": "equals"
},
"leftValue": "={{ $json.message.from.id }}",
"rightValue": 0
}
]
}
},
"typeVersion": 2.3
},
{
"id": "134dde20-6de0-44c0-be43-c189f21590bc",
"name": "Send Unauthorized Access Message",
"type": "n8n-nodes-base.telegram",
"position": [
896,
304
],
"parameters": {
"text": "Not authorized to use this bot.",
"chatId": "={{ $('Telegram Trigger').item.json.message.chat.id }}",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "4b53f310-f2c8-4499-829c-9b9e6b5bbf54",
"name": "Update row(s) in Data table",
"type": "n8n-nodes-base.dataTableTool",
"position": [
1264,
1712
],
"parameters": {
"columns": {
"value": {
"Notes": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Notes', `Any additional context, details, or information about the task. This is a free text field and can contain anything relevant to the task.`, 'string') }}",
"duedate": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('duedate', `The current due date of the task to find, in ISO format YYYY-MM-DD. This is a date, NOT a task name`, 'string') }}",
"Priority": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Priority', `The priority level of the task. Must be one of: high, medium, or low. This is a text string, NOT a date or task name.`, 'string') }}",
"taskname": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('taskname', `The exact task name to find and update. This is a text string, NOT a date.`, 'string') }}",
"Recurrence": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Recurrence', `When setting recurrence, only use the values: none, daily, weekly, or monthly. Never use any other value.`, 'string') }}"
},
"schema": [
{
"id": "taskname",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "taskname",
"defaultMatch": false
},
{
"id": "duedate",
"type": "dateTime",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "duedate",
"defaultMatch": false
},
{
"id": "Priority",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Priority",
"defaultMatch": false
},
{
"id": "Notes",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Notes",
"defaultMatch": false
},
{
"id": "Recurrence",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Recurrence",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"filters": {
"conditions": [
{
"keyName": "taskname",
"keyValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('conditions0_Value', ``, 'string') }}"
}
]
},
"options": {},
"matchType": "allConditions",
"operation": "update",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultName": "Tasks"
}
},
"typeVersion": 1.1
},
{
"id": "a214935a-db87-4798-9db0-be1982d8e45b",
"name": "1am",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-144,
1408
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 1
}
]
}
},
"typeVersion": 1.3
},
{
"id": "4ef0b93f-067b-42ee-a473-3c6a9c5616d4",
"name": "Daily Reminder",
"type": "n8n-nodes-base.set",
"position": [
416,
976
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "33d27a32-ac1f-4dca-bc6c-a7db9298e071",
"name": "Reminder",
"type": "string",
"value": "provide an update of the pending tasks from the tasks table"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "7f8535fc-14a8-48df-a765-5afdb8d1fbd1",
"name": "Date Update",
"type": "n8n-nodes-base.set",
"position": [
448,
1328
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "12e829f0-bf32-4040-a713-f4bf64663ffa",
"name": "Reminder",
"type": "string",
"value": "When a task's due date is in the past, update its due date to today. Do this without asking the user. "
}
]
}
},
"typeVersion": 3.4
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"executionOrder": "v1"
},
"versionId": "8abf5115-a8af-4605-a236-2adc62688563",
"connections": {
"1am": {
"main": [
[
{
"node": "Date Update",
"type": "main",
"index": 0
}
]
]
},
"2pm": {
"main": [
[
{
"node": "Daily Reminder",
"type": "main",
"index": 0
}
]
]
},
"6pm": {
"main": [
[
{
"node": "Daily Reminder",
"type": "main",
"index": 0
}
]
]
},
"9am": {
"main": [
[
{
"node": "Daily Reminder",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Send AI Response to User",
"type": "main",
"index": 0
}
]
]
},
"Date & Time": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Date Update": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Simple Memory": {
"ai_memory": [
[
{
"node": "AI Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Daily Reminder": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Telegram Trigger": {
"main": [
[
{
"node": "Check Authorized User",
"type": "main",
"index": 0
}
]
]
},
"Anthropic Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Check Authorized User": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
],
[
{
"node": "Send Unauthorized Access Message",
"type": "main",
"index": 0
}
]
]
},
"Get row(s) in Data table": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Insert row in Data table": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Delete row(s) in Data table": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Update row(s) in Data table": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
}
}
}
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.
anthropicApitelegramApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow turns Telegram into a personal task manager by using Anthropic Claude to create, update, list, and delete tasks stored in an n8n Data Table, while also sending scheduled daily task summaries and automatically rolling forward overdue recurring tasks. Triggers when a…
Source: https://n8n.io/workflows/15933/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This is a base template for anyone trying to develop a telegram AI Agent. This base allows for multiple inputs (Voice, Picture, Video, and Text inputs) to be processed by an AI model of their choosing
Personal Assistant. Uses memoryBufferWindow, agent, agentTool, httpRequestTool. Event-driven trigger; 77 nodes.
A comprehensive n8n workflow demonstrating advanced AI agent orchestration, stateful conversation management, and multi-modal input processing for nutrition tracking applications.
Template Carnaval - time instagram. Uses toolWorkflow, lmChatOpenAi, memoryBufferWindow, agent. Event-driven trigger; 56 nodes.
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.