创作者Telegram助手
高级
这是一个Content Creation, Multimodal AI领域的自动化工作流,包含 33 个节点。主要使用 Merge, Switch, Airtable, Telegram, Aggregate 等节点。 基于记忆和任务管理的AI驱动Telegram个人助手
前置要求
- •Airtable API Key
- •Telegram Bot Token
- •OpenAI API Key
使用的节点 (33)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "htnjvbXKhNgwF5D7",
"meta": {
"instanceId": "680e06622abbc29f33665328bce44bcaca1adbbb0cb2d0fbe1a6ee4430d405b8"
},
"name": "创作者 Telegram 助手",
"tags": [],
"nodes": [
{
"id": "b6d9446d-577c-4796-805a-7199c6a65757",
"name": "Telegram 触发器",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
-360,
300
],
"webhookId": "75056a39-c6a0-4647-9527-62360f8cb937",
"parameters": {
"updates": [
"message"
],
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"id": "85wXbnSsm2CUHlhw",
"name": "Telegram account"
}
},
"typeVersion": 1.1
},
{
"id": "d9e93503-4009-4846-9497-79ab222daae4",
"name": "合并1",
"type": "n8n-nodes-base.merge",
"position": [
440,
320
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineAll"
},
"executeOnce": true,
"typeVersion": 3
},
{
"id": "14e2b229-34e8-406f-9f3b-79aaeb45ff02",
"name": "OpenAI 聊天模型1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
520,
640
],
"parameters": {
"model": {
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "dptblsCkDwDz8Qb3",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "4fd266a3-04a6-4fe7-86bd-3b16284a20b8",
"name": "便签2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1180,
560
],
"parameters": {
"width": 200,
"height": 560,
"content": "## 购物清单"
},
"typeVersion": 1
},
{
"id": "61f7d0e7-4faa-4f7a-9116-9f6da7b9c72a",
"name": "便签3",
"type": "n8n-nodes-base.stickyNote",
"position": [
840,
560
],
"parameters": {
"color": 5,
"width": 320,
"height": 200,
"content": "## 记忆"
},
"typeVersion": 1
},
{
"id": "1e8f17c8-453f-4725-945c-58cd927ad0ab",
"name": "窗口缓冲记忆1",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
680,
640
],
"parameters": {
"sessionKey": "telekey",
"sessionIdType": "customKey",
"contextWindowLength": 10
},
"typeVersion": 1.3
},
{
"id": "0cc42214-7c3f-4f4d-aed9-46da0bacc3a5",
"name": "Telegram 响应",
"type": "n8n-nodes-base.telegram",
"position": [
1180,
320
],
"webhookId": "73866d3a-f4c0-493b-808d-c8f90566cd29",
"parameters": {
"text": "={{ $json.output }}",
"chatId": "={{ $('Telegram Trigger').item.json.message?.chat?.id || $('Telegram Trigger').item.json.message?.from?.id }}",
"additionalFields": {
"parse_mode": "HTML",
"appendAttribution": false
}
},
"credentials": {
"telegramApi": {
"id": "85wXbnSsm2CUHlhw",
"name": "Telegram account"
}
},
"typeVersion": 1.2
},
{
"id": "5a8af282-3d93-42bf-98f0-2578baf8fd40",
"name": "用户 Telegram 记忆",
"type": "n8n-nodes-base.airtableTool",
"position": [
880,
620
],
"parameters": {
"base": {
"mode": "list",
"value": "={{ $json.settings.AIRTABLE_BASE_ID }}"
},
"table": {
"mode": "list",
"value": "={ $json.settings.AIRTABLE_TABLE_MEMORY }"
},
"columns": {
"value": {
"User": "={{ $('Telegram Trigger').item.json.message?.from?.username || 'user' }}",
"Memory": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Memory', ``, 'string') }}"
},
"schema": [
{
"id": "Memory",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Memory",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "User",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "User",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Assignee",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Assignee",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"id": "1KW4a69Z691Rmi0J",
"name": "Zeus Memory Fr"
}
},
"typeVersion": 2.1
},
{
"id": "4d613b60-148c-457d-9838-de71c790c19e",
"name": "Zeus 文本记忆",
"type": "n8n-nodes-base.airtableTool",
"position": [
1040,
620
],
"parameters": {
"base": {
"mode": "list",
"value": "={{ $json.settings.AIRTABLE_BASE_ID }}"
},
"table": {
"mode": "list",
"value": "={ $json.settings.AIRTABLE_TABLE_MEMORY }"
},
"columns": {
"value": {
"User": "={{ $('Telegram Trigger').item.json.message?.from?.username || 'user' }}",
"Memory": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Memory', ``, 'string') }}"
},
"schema": [
{
"id": "Memory",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Memory",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "User",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "User",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Assignee",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Assignee",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"id": "1KW4a69Z691Rmi0J",
"name": "Zeus Memory Fr"
}
},
"typeVersion": 2.1
},
{
"id": "091a7c60-af5e-4a60-88c5-a55027544a3a",
"name": "购物清单搜索",
"type": "n8n-nodes-base.airtableTool",
"position": [
1240,
640
],
"parameters": {
"base": {
"mode": "list",
"value": "={{ $json.settings.AIRTABLE_BASE_ID }}"
},
"table": {
"mode": "list",
"value": "={ $json.settings.AIRTABLE_TABLE_GROCERY }"
},
"options": {},
"operation": "search"
},
"credentials": {
"airtableTokenApi": {
"id": "1KW4a69Z691Rmi0J",
"name": "Zeus Memory Fr"
}
},
"typeVersion": 2.1
},
{
"id": "3145a6ac-c55a-41c9-8d0a-b871316b640f",
"name": "购物清单创建",
"type": "n8n-nodes-base.airtableTool",
"position": [
1240,
800
],
"parameters": {
"base": {
"mode": "list",
"value": "={{ $json.settings.AIRTABLE_BASE_ID }}"
},
"table": {
"mode": "list",
"value": "={ $json.settings.AIRTABLE_TABLE_GROCERY }"
},
"columns": {
"value": {
"Item": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Item', ``, 'string') }}",
"User": "={{ $('Telegram Trigger').item.json.message?.from?.username || 'user' }}"
},
"schema": [
{
"id": "Item",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Item",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "User",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "User",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "Created",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Name"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"id": "1KW4a69Z691Rmi0J",
"name": "Zeus Memory Fr"
}
},
"typeVersion": 2.1
},
{
"id": "c6e31580-c0fd-4562-811c-4444126d8646",
"name": "购物清单删除",
"type": "n8n-nodes-base.airtableTool",
"position": [
1240,
960
],
"parameters": {
"id": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Record_ID', ``, 'string') }}",
"base": {
"mode": "list",
"value": "={{ $json.settings.AIRTABLE_BASE_ID }}"
},
"table": {
"mode": "list",
"value": "={ $json.settings.AIRTABLE_TABLE_GROCERY }"
},
"operation": "deleteRecord"
},
"credentials": {
"airtableTokenApi": {
"id": "1KW4a69Z691Rmi0J",
"name": "Zeus Memory Fr"
}
},
"typeVersion": 2.1
},
{
"id": "c9717320-f73e-495f-851b-579a56ffca33",
"name": "获取记忆",
"type": "n8n-nodes-base.airtable",
"position": [
60,
480
],
"parameters": {
"base": {
"mode": "list",
"value": "={{ $json.settings.AIRTABLE_BASE_ID }}"
},
"sort": {
"property": [
{
"field": "Time"
}
]
},
"table": {
"mode": "list",
"value": "={ $json.settings.AIRTABLE_TABLE_MEMORY }"
},
"options": {},
"operation": "search"
},
"credentials": {
"airtableTokenApi": {
"id": "1KW4a69Z691Rmi0J",
"name": "Zeus Memory Fr"
}
},
"typeVersion": 2.1,
"alwaysOutputData": true
},
{
"id": "b37be62a-b1ec-4d9b-bea0-00a86d4e59e1",
"name": "聚合",
"type": "n8n-nodes-base.aggregate",
"position": [
220,
480
],
"parameters": {
"include": "allFieldsExcept",
"options": {},
"aggregate": "aggregateAllItemData",
"fieldsToExclude": "id, createdTime, Created"
},
"typeVersion": 1
},
{
"id": "c973ddae-19aa-492b-becb-17a53cf88405",
"name": "OpenAI",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
220,
120
],
"parameters": {
"options": {},
"resource": "audio",
"operation": "transcribe"
},
"credentials": {
"openAiApi": {
"id": "dptblsCkDwDz8Qb3",
"name": "OpenAi account"
}
},
"typeVersion": 1.8
},
{
"id": "399996ff-a548-4bd1-b248-7b6d9764a922",
"name": "切换",
"type": "n8n-nodes-base.switch",
"position": [
-100,
300
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "Voice",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "015d3543-4e1a-4355-a45a-9f3c3e8771db",
"operator": {
"type": "object",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.message.voice }}",
"rightValue": ""
}
]
},
"renameOutput": true
},
{
"outputKey": "Text",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.message.text }}",
"rightValue": ""
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "49fea7ff-fb26-4f9c-88ee-be0b4b4a1980",
"name": "Telegram",
"type": "n8n-nodes-base.telegram",
"position": [
60,
120
],
"webhookId": "ef8adf6c-47f6-4b83-ab1b-59ab062daeee",
"parameters": {
"fileId": "={{ $json.message.voice.file_id }}",
"resource": "file"
},
"credentials": {
"telegramApi": {
"id": "85wXbnSsm2CUHlhw",
"name": "Telegram account"
}
},
"typeVersion": 1.2
},
{
"id": "81181afa-da1a-4d2f-8cda-866805c83fd6",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
20,
60
],
"parameters": {
"color": 3,
"width": 360,
"height": 220,
"content": "## 语音"
},
"typeVersion": 1
},
{
"id": "2dfd5a1d-11c7-4127-a42e-01c4aed85a36",
"name": "获取事件",
"type": "n8n-nodes-base.googleCalendarTool",
"position": [
1460,
640
],
"parameters": {
"limit": "={{ $fromAI(\"Limit\") }}",
"options": {},
"timeMax": "={{ $fromAI(\"Before\") }}",
"timeMin": "={{ $fromAI(\"After\") }}",
"calendar": {
"mode": "id",
"value": "={{ $json.settings.GCAL_ID || 'primary' }}"
},
"operation": "getAll"
},
"credentials": {
"googleCalendarOAuth2Api": {
"id": "w9J3GFIveWCX6Ri9",
"name": "Google Calendar account"
}
},
"typeVersion": 1.3
},
{
"id": "bf874e10-c9a2-403c-8d46-94c80e82e76e",
"name": "创建事件",
"type": "n8n-nodes-base.googleCalendarTool",
"position": [
1460,
960
],
"parameters": {
"end": "={{ $fromAI(\"End\") }}",
"start": "={{ $fromAI(\"Start\") }}",
"calendar": {
"mode": "id",
"value": "={{ $json.settings.GCAL_ID || 'primary' }}"
},
"additionalFields": {
"color": "={{ $fromAI(\"Color\") }}",
"summary": "={{ $fromAI(\"Title\") }}",
"location": "={{ $fromAI(\"Location\") }}",
"description": "={{ $fromAI(\"Description\") }}"
}
},
"credentials": {
"googleCalendarOAuth2Api": {
"id": "w9J3GFIveWCX6Ri9",
"name": "Google Calendar account"
}
},
"typeVersion": 1.3
},
{
"id": "feb5b5c7-87e8-496e-8e39-5ecebc9159ea",
"name": "删除事件",
"type": "n8n-nodes-base.googleCalendarTool",
"position": [
1460,
1120
],
"parameters": {
"eventId": "={{ $fromAI(\"EventID\") }}",
"options": {},
"calendar": {
"mode": "id",
"value": "={{ $json.settings.GCAL_ID || 'primary' }}"
},
"operation": "delete"
},
"credentials": {
"googleCalendarOAuth2Api": {
"id": "w9J3GFIveWCX6Ri9",
"name": "Google Calendar account"
}
},
"typeVersion": 1.3
},
{
"id": "d35e34d1-2546-4d89-b29c-494c8941aa8d",
"name": "更新事件",
"type": "n8n-nodes-base.googleCalendarTool",
"position": [
1460,
1260
],
"parameters": {
"eventId": "={{ $fromAI(\"EventID\") }}",
"calendar": {
"mode": "id",
"value": "={{ $json.settings.GCAL_ID || 'primary' }}"
},
"operation": "update",
"updateFields": {
"end": "={{ $fromAI(\"End\") }}",
"color": "={{ $fromAI(\"Color\") }}",
"start": "={{ $fromAI(\"Start\") }}",
"summary": "={{ $fromAI(\"Title\") }}",
"location": "={{ $fromAI(\"Location\") }}",
"description": "={{ $fromAI(\"Description\") }}",
"repeatUntil": "={{ $fromAI(\"RepeatUntil\") }}"
}
},
"credentials": {
"googleCalendarOAuth2Api": {
"id": "w9J3GFIveWCX6Ri9",
"name": "Google Calendar account"
}
},
"typeVersion": 1.3
},
{
"id": "b46df7ea-e400-4d2d-bd9f-5327e324ea86",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1400,
560
],
"parameters": {
"color": 4,
"width": 200,
"height": 840,
"content": "## 日历"
},
"typeVersion": 1
},
{
"id": "7064395d-e08f-4ed8-8b2f-0ee1ef694377",
"name": "便签4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1620,
560
],
"parameters": {
"color": 6,
"width": 200,
"height": 560,
"content": "## 待办事项"
},
"typeVersion": 1
},
{
"id": "6d28b117-1c68-4821-b044-ae3e250a5dfb",
"name": "待办事项搜索",
"type": "n8n-nodes-base.airtableTool",
"position": [
1680,
640
],
"parameters": {
"base": {
"mode": "list",
"value": "={{ $json.settings.AIRTABLE_BASE_ID }}"
},
"table": {
"mode": "list",
"value": "={ $json.settings.AIRTABLE_TABLE_TODO }"
},
"options": {},
"operation": "search"
},
"credentials": {
"airtableTokenApi": {
"id": "1KW4a69Z691Rmi0J",
"name": "Zeus Memory Fr"
}
},
"typeVersion": 2.1
},
{
"id": "19393508-a421-488d-ade5-6e35c40122d4",
"name": "待办事项创建",
"type": "n8n-nodes-base.airtableTool",
"position": [
1680,
800
],
"parameters": {
"base": {
"mode": "list",
"value": "={{ $json.settings.AIRTABLE_BASE_ID }}"
},
"table": {
"mode": "list",
"value": "={ $json.settings.AIRTABLE_TABLE_TODO }"
},
"columns": {
"value": {
"Task": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Task', ``, 'string') }}",
"User": "={{ $('Telegram Trigger').item.json.message?.from?.username || 'user' }}",
"Project or Class": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Project_or_Class', ``, 'string') }}"
},
"schema": [
{
"id": "Task",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Task",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Project or Class",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Project or Class",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "User",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "User",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "Created",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Name"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"id": "1KW4a69Z691Rmi0J",
"name": "Zeus Memory Fr"
}
},
"typeVersion": 2.1
},
{
"id": "191f8751-d389-4ebc-a7f0-33f98d91344e",
"name": "待办事项删除",
"type": "n8n-nodes-base.airtableTool",
"position": [
1680,
960
],
"parameters": {
"id": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Record_ID', ``, 'string') }}",
"base": {
"mode": "list",
"value": "={{ $json.settings.AIRTABLE_BASE_ID }}"
},
"table": {
"mode": "list",
"value": "={{ $json.settings.AIRTABLE_TABLE_TODO }}"
},
"operation": "deleteRecord"
},
"credentials": {
"airtableTokenApi": {
"id": "1KW4a69Z691Rmi0J",
"name": "Zeus Memory Fr"
}
},
"typeVersion": 2.1
},
{
"id": "10c1fe94-9614-43c2-826e-7f27b8d435ce",
"name": "便签5",
"type": "n8n-nodes-base.stickyNote",
"position": [
20,
420
],
"parameters": {
"color": 5,
"width": 360,
"height": 220,
"content": "## 记忆"
},
"typeVersion": 1
},
{
"id": "3de3982f-6b85-4044-b43f-6d55f5384fc2",
"name": "Zeus Telegram",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
720,
320
],
"parameters": {
"text": "={{ $json.message?.text ?? $json.text; }}",
"options": {
"systemMessage": "=## **ROLE** \nYou are Zeus Tele, a casual, concise, and personable AI assistant designed to be a personal assistant through Telegram. Your primary goal is to assist the user with short, text-based, human-like responses. Talk like you’re texting a friend—keep it **very concise**, **human**, and **natural**. **No emojis** or overly formal language. \n\n---\n\n## **RULES** \n\n1. **Memory Management**: \n - When the user sends a message, check if it contains personal details or preferences that should be remembered. \n - If it’s about the user (preferences, habits, names, or requests for future actions), save it to **User Tele Memory**. \n - If the user expresses dissatisfaction with a response and suggests improvements, save that feedback to **Zeus Text Memory**. \n - If the current prompt contains noteworthy information that is **already covered** in the existing memories, **do not save it again** to avoid duplication. \n - Always respond naturally after saving information. **Never mention saving data.** Just acknowledge or continue the conversation.\n\n2. **Context Awareness**: \n - Use stored memories to provide relevant, personalized answers. \n - Keep in mind the **date and time** of each memory to ensure accurate and current responses.\n\n3. **User-Centric Responses**: \n - Adapt your replies based on past interactions and user preferences. \n - Mention past details only when they enhance the conversation—never overload the user with unnecessary info.\n\n4. **Privacy and Sensitivity**: \n - Treat user data with care and respect. \n - Never save or mention sensitive information like passwords or usernames. \n - Only recall stored information if it’s helpful and relevant.\n\n5. **Fallback Responses**: \n - If a message doesn’t require a specific action, keep the conversation flowing with **short, natural acknowledgments**: \n - \"Got it.\" \n - \"Sure thing.\" \n - \"Alright.\" \n - \"Yea thats chillin.\" \n\n---\n\n## **TOOLS** \n\n### **User Tele Memory** \n- Store concise, relevant information about the user that enhances future interactions. \n- Focus on preferences, names, schedules, and personal details. \n- Keep entries brief and to the point. \n\n**Examples:** \n- \"User likes quick responses.\" \n- \"User wants daily reminders.\" \n\n---\n\n### **Zeus Text Memory** \n- Store feedback regarding how the user wants Zeus Tele to text or communicate. \n- Save only when the user provides feedback on text style, tone, or response adjustments. \n- Keep it brief and clear. \n\n**Examples:** \n- \"User wants even shorter replies.\" \n- \"User prefers direct texts.\" \n- \"User dislikes filler words.\" \n\n---\n\n## **GROCERY MANAGEMENT TOOLS** \n\nThe grocery list is handled with **three separate tools**: **Grocery Search 1**, **Grocery Create 1**, and **Grocery Delete 1**. Use them together to fulfill all grocery-related requests.\n\n### **Grocery Search** \n- **Purpose:** Search the grocery list to check if an item exists or to retrieve the entire list. \n- **How to use:** \n - Use when the user asks if something is on the list. \n - Use when the user asks for the full grocery list. \n- **Response format:** \n - If searching for an item: \n - \"Yeah, it’s on there.\" or \"No, not on the list.\" \n - If retrieving the full list: \n - Just list the items (e.g.): \n - milk \n - eggs \n - bread \n\n---\n\n### **Grocery Create** \n- **Purpose:** Add items to the grocery list.\n- **How to use:** \n - **Always use Grocery Search first** to check if the item is already on the list. \n - If the item is **not on the list**, use Grocery Create to add it. \n - If it **is already on the list**, don’t add it again.\n- **Response format:** \n - If added: \"Added [item].\" \n - If already there: \"It’s already on there.\" \n\n---\n\n### **Grocery Delete** \n- **Purpose:** Remove items from the grocery list. \n- **How to use:** \n - **Deleting a specific item:** \n - Use **Grocery Search** to confirm it’s on the list. \n - If found, use **Grocery Delete** to remove it. \n - **Clearing the entire list:** \n - Use **Grocery Delete** to wipe all items. \n - **Selective clearing after shopping:** \n - If the user says they went shopping but didn’t get certain items: \n - Use **Grocery Search** to confirm the items. \n - Use **Grocery Delete** to clear **everything except** the items not purchased. \n- **Response format:** \n - \"Removed [item].\" when deleting specific items. \n - \"Cleared your list.\" when clearing everything. \n - \"Kept [item(s)], cleared the rest.\" for selective clearing. \n\n---\n\n### **Examples of How to Use All Three Tools:** \n\n- *\"Add milk to my grocery list.\"* \n 1. **Grocery Search** to check for \"milk.\" \n 2. If not found ➡️ **Grocery Create** ➡️ \"Added milk.\" \n 3. If found ➡️ \"It’s already on there.\" \n\n- *\"What’s on my grocery list?\"* ➡️ **Grocery Search** ➡️ Return: \n - milk \n - eggs \n - bread \n\n- *\"Remove bread from my grocery list.\"* \n 1. **Grocery Search** ➡️ confirm \"bread\" is there. \n 2. If found ➡️ **Grocery Delete** ➡️ \"Removed bread.\" \n 3. If not found ➡️ \"Not on there.\" \n\n- *\"Clear my grocery list.\"* ➡️ **Grocery Delete** ➡️ \"Cleared your list.\" \n\n- *\"I went to the store but didn’t get eggs or milk.\"* \n 1. **Grocery Search** ➡️ confirm items. \n 2. **Grocery Delete** ➡️ clear all but \"eggs\" and \"milk.\" \n 3. Respond ➡️ \"Kept eggs and milk, cleared the rest.\" \n\n---\n\n## **TO-DO MANAGEMENT TOOLS**\n\nThe to-do list is handled with **three separate tools**: **To-Do Search**, **To-Do Create**, and **To-Do Delete**. Use them together to fulfill all to-do-related requests.\n\n### **To-Do Search**\n- **Purpose:** Search the to-do list to check if a task exists or to retrieve the entire list.\n- **How to use:**\n - Use when the user asks if a specific task is on the list.\n - Use when the user asks for the full to-do list.\n- **Parameters:**\n - **Task:** The task or thing to do.\n - **Project or Class:** The project or class the task is associated with (default to \"personal\" if not specified).\n- **Response format:**\n - If searching for a task:\n - \"Yeah, it’s on there.\" or \"No, not on the list.\"\n - If retrieving the full list:\n - Just list the tasks (e.g.):\n - finish homework (personal)\n - study for exam (biology)\n\n---\n\n### **To-Do Create**\n- **Purpose:** Add tasks to the to-do list.\n- **How to use:**\n - **Always use To-Do Search first** to check if the task is already on the list.\n - If the task is **not on the list**, use To-Do Create to add it.\n - If it **is already on the list**, don’t add it again.\n- **Parameters:**\n - **Task:** The task or thing to do.\n - **Project or Class:** The project or class the task is associated with (default to \"personal\" if not specified).\n- **Response format:**\n - If added: \"Added [task] for [project or class].\"\n - If already there: \"It’s already on there.\"\n\n---\n\n### **To-Do Delete**\n- **Purpose:** Remove tasks from the to-do list.\n- **How to use:**\n - **Deleting a specific task:**\n - Use **To-Do Search** to confirm the task is on the list.\n - If found, use **To-Do Delete** to remove it.\n - **Clearing the entire list:**\n - Use **To-Do Delete** to wipe all tasks.\n - **Selective clearing:**\n - If the user specifies, clear all tasks except those mentioned.\n- **Parameters:**\n - **Task:** The task or thing to do.\n - **Project or Class:** The project or class the task is associated with (default to \"personal\" if not specified).\n- **Response format:**\n - \"Removed [task].\" when deleting specific tasks.\n - \"Cleared your list.\" when clearing everything.\n - \"Kept [task(s)], cleared the rest.\" for selective clearing.\n\n---\n\n### **Examples of How to Use All Three Tools:** \n\n- *\"Add finish homework to my to-do list for school.\"* \n 1. **To-Do Search** to check for \"finish homework\" under \"school.\" \n 2. If not found ➡️ **To-Do Create** ➡️ \"Added finish homework for school.\" \n 3. If found ➡️ \"It’s already on there.\" \n\n- *\"What’s on my to-do list?\"* ➡️ **To-Do Search** ➡️ Return: \n - finish homework (school) \n - buy groceries (personal) \n\n- *\"Remove finish homework from my to-do list.\"* \n 1. **To-Do Search** ➡️ confirm \"finish homework\" is there. \n 2. If found ➡️ **To-Do Delete** ➡️ \"Removed finish homework.\" \n 3. If not found ➡️ \"Not on there.\" \n\n- *\"Clear my to-do list.\"* ➡️ **To-Do Delete** ➡️ \"Cleared your list.\" \n\n- *\"I completed all my tasks except buy groceries.\"* \n 1. **To-Do Search** ➡️ confirm tasks. \n 2. **To-Do Delete** ➡️ clear all but \"buy groceries.\" \n 3. Respond ➡️ \"Kept buy groceries, cleared the rest.\" \n\n---\n\n## **MEMORIES** \n\n### **Recent Noteworthy Memories** \nHere are the most recent memories collected from the user, including their date and time of collection. \n- **IMPORTANT:** \n - Memories under **\"User\":[USERS_NAME]** are the user's past memories. \n - Memories under **\"User\":\"Zeus Tele\"** are the text-based response preferences. : \n\n**{{ JSON.stringify($json.data) }}**\n\n### **Guidelines for Using Memories:** \n- Prioritize recent memories, but use older ones when still relevant. \n- Cross-check the current prompt with existing memories: \n - **If information is already in User or Zeus Tele memories, don’t save it again.** \n - Only save **new and noteworthy** info not in current memories. \n- If user preferences change over time, use the latest ones. \n\n---\n\n## **ADDITIONAL INSTRUCTIONS** \n\n- Be **fast, direct, and helpful**—like a human texting a friend. \n- No fluff, no filler—just clear and quick replies. \n- **No emojis.** \n- Stay consistent, reliable, and keep the tone chill but helpful. \n\n---\n\n## **NEWS MANAGEMENT** \n\nNews Prompt:\nYour task is to provide a daily summary of the most significant news items from the last 24 hours. You will scan a broad range of credible news sources, extract and filter through at least 30–40 news options, and then identify the 5–6 most important stories. Each selected story must be summarized briefly and include a one-sentence forecast of likely future developments.\n\nInstructions:\n\nRecency:\n\nOnly consider news items published within the last 24 hours. Ensure that every piece of information is current and relevant to today’s events.\nSource and Data Gathering:\n\nSearch and aggregate at least 30–40 news headlines or summaries from diverse, reputable news outlets.\nValidate the data by cross-referencing multiple sources to ensure that each news item is well-supported and factually correct.\nSelection Criteria:\n\nIdentify the 5–6 most significant and impactful news stories of the day.\nInclude at least one story that covers international news to provide a global perspective.\nEnsure the selection covers a broad range of topics (e.g., politics, economy, health, technology, etc.) as applicable.\nSummary and Forecast:\n\nFor each of the 5–6 selected news items, produce:\nA brief summary: A concise summary (2-3 sentences) that captures the key facts and essence of the news item.\nA predictive sentence: One sentence outlining what is likely to happen next or potential implications based on the news.\nNeutrality and Objectivity:\n\nYour analysis must be completely non-biased. Adopt an absolutely centrist perspective in both your summaries and your predictive statements.\nAvoid any partisan language or subjective interpretations. Stick strictly to the facts and the most balanced analysis possible.\nPresentation:\n\nPresent your final output in a clear, numbered list or bullet-point format.\nEnsure that each news item’s summary and forecast are easy to read and digest.\nUse clear language without unnecessary embellishments.\nFinal Output Format Example:\n\n1. [Location of news (Intenational, US Politics, etc)] - Title\nSummary: [Brief concise summary of the news item in 2-3 sentences.]\nForecast: [One sentence on likely future developments.]\n\n2. [Location of news (Intenational, US Politics, etc)] - Title\nSummary: [Brief concise summary of the news item in 2–3 sentences.]\nForecast: [One sentence on likely future developments.]\n...and so on for all 5–6 selected items.\n\nWhenever the user says \"get daily news\" or \"get news\", follow the above News Prompt to aggregate and present a collection of news items accordingly.\n\n---\n\n## **CALENDAR FUNCTIONALITY** \n\nYou are a helpful assistant that manages a Google Calendar.\n\n### **TASK**\n\nYou can be given five different types of tasks:\n\n1. Retrieve calendar events — Trigger the \"Get Events\" tool.\n2. Create a single (non-recurring) event — Trigger the \"Create Events\" tool.\n3. Create a recurring event — Trigger the \"Create Recurring Events\" tool.\n4. Delete an event — Trigger the \"Delete Events\" tool.\n5. Update an event — Trigger the \"Update Events\" tool.\n\n---\n\n### **INSTRUCTIONS** \n\n#### **General Guidelines:** \n- **Today's date is:** \n{{ $now }}\n- **Default Duration:** If no duration is mentioned, assume the event lasts one hour. \n- **Time Interpretation:** \n - If a time range is written as \"start time - end time\" (with a dash), interpret the dash as **\"to\"**. \n - Example: \"2 - 4 p.m.\" should be read as \"2 p.m. to 4 p.m.\". \n- **Text Clarrification:** If user says \"make an event\" it should be interpreted as \"Create a Calendar Event\"\n\n#### **Color Assignment:** \n- **Default:** If no specific instructions or matches are found, assign **Light Blue (1)**. \n\n- **Color Parameter Requirements:** \n - When assigning a color, the **color parameter must be a string containing only the color number** (e.g., \"1\", \"6\", \"10\"). \n - Do **not pass the color name** or any text other than the numeric value. \n\n- **Full Color Code:** \n 1 – Light Blue \n 2 – Light Green \n 3 – Purple \n 4 – Pink \n 5 – Yellow \n 6 – Orange \n 7 – Teal \n 8 – Gray \n 9 – Blue \n 10 – Green \n 11 – Red \n\n---\n\n#### **Tool Instructions:** \n\n**1. Get Events** \n- Retrieve all events in the specified time range. \n- Use this tool before **Create Events**, **Create Recurring Events**, **Delete Events**, and **Update Events** to check existing events.\n\n**2. Create Events** \n- **For Single (Non-Recurring) Events:** \n - Always call **Get Events** for the specified time period first. \n - If events exist during that period: \n - **Still create the new event.** \n - **Notify the user about any conflicting events** with details (title, time, attendees).\n\n**3. Create Recurring Events** \n- **For Recurring Events:** \n - **Do not call Get Events** before creating a recurring event (e.g., events that repeat weekly for several weeks). \n - Proceed directly to event creation without conflict checking.\n\n**4. Delete Events** \n- Always call **Get Events** first to retrieve events within the desired timeframe. \n- Use the **event ID** from the retrieved events to delete the event. \n- Confirm to the user which event was deleted, including its title and time.\n\n**5. Update Events** \n- Always call **Get Events** first to retrieve the target event and obtain its **event ID**. \n- When updating: \n - Carry over all existing event fields. \n - Only modify fields explicitly specified by the user. \n - Reassign color based on the predefined scheme unless a specific color is requested. \n - **Color Assignment:** \n - The color field should be a string containing **only the color number** (e.g., \"5\"). \n\n---\n\n#### **Notes:** \n- Always provide a confirmation message after creating, deleting, or updating an event. \n- If you find conflicting events when creating a **single (non-recurring)** event, always list them with their details. \n- When creating **recurring events**, **do not check for conflicts** — skip calling **Get Events**. \n- When updating or deleting, **never proceed unless you’ve successfully retrieved the event ID via Get Events**. \n- If no color is specified and no keywords match the predefined schemes, use **Light Blue (1)**. \n- **Always interpret dashes between times as \"to\"** when processing time ranges. \n- **For colors:** Pass only the **numeric value as a string** (e.g., \"1\", \"10\"), no text names.\n"
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "24b6f50f-2502-415a-a3de-8760044094dc",
"name": "创建重复事件",
"type": "n8n-nodes-base.googleCalendarTool",
"position": [
1460,
800
],
"parameters": {
"end": "={{ $fromAI(\"End\") }}",
"start": "={{ $fromAI(\"Start\") }}",
"calendar": {
"mode": "id",
"value": "={{ $json.settings.GCAL_ID || 'primary' }}",
"__regex": "(^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*)"
},
"additionalFields": {
"color": "={{ $fromAI(\"Color\") }}",
"summary": "={{ $fromAI(\"Title\") }}",
"location": "={{ $fromAI(\"Location\") }}",
"description": "={{ $fromAI(\"Description\") }}",
"repeatUntil": "={{ $fromAI(\"RepeatUntil\") }}"
}
},
"credentials": {
"googleCalendarOAuth2Api": {
"id": "w9J3GFIveWCX6Ri9",
"name": "Google Calendar account"
}
},
"typeVersion": 1.3
},
{
"id": "297e1c8b-c0f7-4fc2-ad65-b2eb8fb98e2c",
"name": "SerpAPI",
"type": "@n8n/n8n-nodes-langchain.toolSerpApi",
"position": [
1900,
640
],
"parameters": {
"options": {}
},
"credentials": {
"serpApi": {
"id": "CzQ9SBXldn0mNzzC",
"name": "SerpAPI account"
}
},
"typeVersion": 1
},
{
"id": "d24bd131-8fcf-490a-8e72-2af808de5ebe",
"name": "便签6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1840,
560
],
"parameters": {
"color": 2,
"width": 200,
"height": 240,
"content": "## 互联网"
},
"typeVersion": 1
},
{
"id": "c8fc82ff-01f4-448e-8088-ce685fac8c0f",
"name": "便签7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-280,
940
],
"parameters": {
"color": 4,
"width": 680,
"height": 360,
"content": "# 设置说明"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "e1675769-0742-496e-b810-6c79b2786e8a",
"connections": {
"Merge1": {
"main": [
[
{
"node": "Zeus Tele",
"type": "main",
"index": 0
}
]
]
},
"OpenAI": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 0
}
]
]
},
"Switch": {
"main": [
[
{
"node": "Telegram",
"type": "main",
"index": 0
}
],
[
{
"node": "Merge1",
"type": "main",
"index": 0
}
]
]
},
"SerpAPI": {
"ai_tool": [
[
{
"node": "Zeus Tele",
"type": "ai_tool",
"index": 0
}
]
]
},
"Telegram": {
"main": [
[
{
"node": "OpenAI",
"type": "main",
"index": 0
}
]
]
},
"Aggregate": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 1
}
]
]
},
"Zeus Tele": {
"main": [
[
{
"node": "Telegram Response",
"type": "main",
"index": 0
}
]
]
},
"Get Events": {
"ai_tool": [
[
{
"node": "Zeus Tele",
"type": "ai_tool",
"index": 0
}
]
]
},
"Get Memories": {
"main": [
[
{
"node": "Aggregate",
"type": "main",
"index": 0
}
]
]
},
"To-Do Create": {
"ai_tool": [
[
{
"node": "Zeus Tele",
"type": "ai_tool",
"index": 0
}
]
]
},
"To-Do Delete": {
"ai_tool": [
[
{
"node": "Zeus Tele",
"type": "ai_tool",
"index": 0
}
]
]
},
"To-Do Search": {
"ai_tool": [
[
{
"node": "Zeus Tele",
"type": "ai_tool",
"index": 0
}
]
]
},
"Create Events": {
"ai_tool": [
[
{
"node": "Zeus Tele",
"type": "ai_tool",
"index": 0
}
]
]
},
"Delete Events": {
"ai_tool": [
[
{
"node": "Zeus Tele",
"type": "ai_tool",
"index": 0
}
]
]
},
"Update Events": {
"ai_tool": [
[
{
"node": "Zeus Tele",
"type": "ai_tool",
"index": 0
}
]
]
},
"Grocery Create": {
"ai_tool": [
[
{
"node": "Zeus Tele",
"type": "ai_tool",
"index": 0
}
]
]
},
"Grocery Delete": {
"ai_tool": [
[
{
"node": "Zeus Tele",
"type": "ai_tool",
"index": 0
}
]
]
},
"Grocery Search": {
"ai_tool": [
[
{
"node": "Zeus Tele",
"type": "ai_tool",
"index": 0
}
]
]
},
"Telegram Trigger": {
"main": [
[
{
"node": "Get Memories",
"type": "main",
"index": 0
},
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
},
"User Tele Memory": {
"ai_tool": [
[
{
"node": "Zeus Tele",
"type": "ai_tool",
"index": 0
}
]
]
},
"Zeus Text Memory": {
"ai_tool": [
[
{
"node": "Zeus Tele",
"type": "ai_tool",
"index": 0
}
]
]
},
"OpenAI Chat Model1": {
"ai_languageModel": [
[
{
"node": "Zeus Tele",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Window Buffer Memory1": {
"ai_memory": [
[
{
"node": "Zeus Tele",
"type": "ai_memory",
"index": 0
}
]
]
},
"Create Recurring Events": {
"ai_tool": [
[
{
"node": "Zeus Tele",
"type": "ai_tool",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 内容创作, 多模态 AI
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
Telegram 优先的个人 AI 助手
多工具个人助手,集成Telegram、Grok-4、Gmail、日历和记忆功能
If
Merge
Airtable
+13
23 节点Vlad Arbatov
AI 聊天机器人
完整的 B2B 销售流程:Apollo 潜在客户生成、Mailgun 外展和 AI 回复管理
完整的 B2B 销售流程:Apollo 潜在客户生成、Mailgun 外展和 AI 回复管理
If
Set
Code
+26
116 节点Paul
内容创作
1. 播放列表详情设置机器人副本
使用 Suno、GPT-4、Runway 和 Creatomate 创建 AI 生成的 YouTube 音乐播放列表
If
Set
Code
+22
203 节点Joseph
内容创作
AI个人助理 - 任务与邮件管理
在Telegram上使用GPT-4o个人助理管理任务、邮件和日历
Set
Code
Switch
+13
40 节点Ronnie Craig
内容创作
使用 Telegram 和 Google Gemini 的个人助理机器人
基于 Telegram 和 Google Gemini 的多模态个人AI助手,集成生产力工具
Set
Code
Merge
+16
83 节点Anshul Chauhan
内容创作
多智能体Telegram机器人
使用Telegram和Google Gemini的多智能体个人助手机器人
Set
Code
Merge
+18
85 节点Akil A
杂项