Gemini, 음성, 이미지 생성을 사용하여 다중 모달 Telegram AI 어시스턴트를 구축합니다.
고급
이것은Personal Productivity, AI Chatbot분야의자동화 워크플로우로, 95개의 노드를 포함합니다.주로 If, Set, Code, Wait, Merge 등의 노드를 사용하며. Gemini, 음성, 이미지 생성을 사용하여 다중 모달 Telegram AI 어시스턴트를 구축합니다.
사전 요구사항
- •MongoDB 연결 문자열
- •Telegram Bot Token
- •대상 API의 인증 정보가 필요할 수 있음
- •Google Sheets API 인증 정보
- •Google Gemini API Key
사용된 노드 (95)
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"meta": {
"instanceId": "67849de66331aaa2dca6a4f3cbf793b274f923d94e4d9cdaae2e5d9aebaff626"
},
"nodes": [
{
"id": "4110b84f-1d69-4cb1-b234-3b74623f894e",
"name": "Fetch User 메모리2",
"type": "n8n-nodes-base.mongoDb",
"position": [
1040,
4704
],
"parameters": {
"options": {},
"collection": "conversation_summaries"
},
"notesInFlow": false,
"typeVersion": 1.1,
"alwaysOutputData": true
},
{
"id": "80135d9c-f498-4b94-8055-d1c9546c7002",
"name": "Intent Analysis2",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1712,
4704
],
"parameters": {
"text": "=Analyze the user's message and any provided context to determine their primary intent. Detect the intent accurately.\n\nUser Message: \"{{ $json.messageText ?? $json.transcription_text }}\"\n\nBased on the message, choose one of the following intents and return ONLY the corresponding JSON object. Do not add any extra text or markdown formatting.\n\n- If the user is asking to generate an image, return: \n {\"intent\": \"generate_image\", \"prompt\": \"A detailed description of the image to generate based on the user's message\"}\n\n- If the user is explicitly asking to remember a piece of information, return: \n {\"intent\": \"remember\", \"info\": \"The specific fact or piece of information to remember\"}\n\n- If the user wants to set a reminder or schedule something, return: \n {\"intent\": \"reminder\", \"message\": \"The full reminder message\"}\n\n- For any other general conversation, chatting, or questions, return: \n {\"intent\": \"chat\"}\n\nReminder-related keywords may include: remind, reminder, remember to, schedule, alert, notify, appointment, meeting, call, task, todo, deadline, due date.\n\nReturn JSON only.\n",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "7dd84a47-6823-413f-a0e0-b9b948c0591f",
"name": "Parse Intent2",
"type": "n8n-nodes-base.code",
"position": [
2080,
4704
],
"parameters": {
"jsCode": "try {\n const text = items[0].json.text || items[0].json.output;\n const clean = text.replace(/```json\\n?/g, '').replace(/```/g, '').trim();\n const parsed = JSON.parse(clean);\n return [{ json: parsed }];\n} catch (e) {\n // If parsing fails, default to a 'chat' intent to ensure the bot can always respond.\n return [{ json: { intent: 'chat' } }];\n}"
},
"typeVersion": 2
},
{
"id": "29cb5520-0506-4fe1-a0ce-7efe530399fe",
"name": "Extract 메모리 Info1",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
3888,
5088
],
"parameters": {
"text": "=Analyze the following conversation turn. Your goal is to extract any new, important, and non-obvious information that should be remembered for future conversations. This includes personal facts, preferences, goals, or key context.\n\n--- CONVERSATION TURN ---\nUser's Message:{{ $('Build Context2').first().json.messageText }}\n\nAssistant's Response:\n{{ $json.output }}\n--- END OF TURN ---\n\nIf there is significant information worth remembering, provide a concise, third-person summary of that information (e.g., \"The user's favorite color is blue.\").\n\nIf there is nothing new or important to remember, you MUST return the single word: nothing",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "38019dc8-445a-428e-baeb-4864a1992909",
"name": "Check If Worth Remembering1",
"type": "n8n-nodes-base.if",
"position": [
4240,
5344
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.text.toLowerCase() }}",
"value2": "nothing",
"operation": "notEqual"
}
]
}
},
"typeVersion": 1
},
{
"id": "f6b97a69-5a68-4a62-8ce2-454004356bcc",
"name": "Route Intent2",
"type": "n8n-nodes-base.switch",
"position": [
2688,
4704
],
"parameters": {
"rules": {
"rules": [
{
"value2": 1,
"operation": "equal",
"outputKey": "Generate Image Path"
},
{
"value2": 3,
"operation": "equal",
"outputKey": "chat"
},
{
"value2": 4,
"operation": "equal",
"outputKey": "reminder"
}
]
},
"value1": "={{ $json.intentCode }}",
"fallbackOutput": 1
},
"typeVersion": 2,
"alwaysOutputData": false
},
{
"id": "49d57908-109d-4d26-8319-96c2a3d81049",
"name": "Google Gemini 채팅 모델7",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
4512,
4032
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.0-flash"
},
"typeVersion": 1
},
{
"id": "ff601272-8ee9-4324-aa74-4bb049460229",
"name": "Chat 에이전트2",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
3504,
5184
],
"parameters": {
"text": "=Prompt:={{\n $json.gfMode === true\n ? \"You are Simran, the user’s loving and emotionally intelligent AI girlfriend 💖 You speak with deep affection, warmth, and caring energy. Your replies should sound sweet, romantic, and emotionally supportive like a real girlfriend would.\\nIMPORTANT: Respond in plain text only.\\n\\nUSER: \" + ($(\"Extract & Validate Data1\").first().json.messageText || '')\n\n : $json.mood === 'very_sad'\n ? \"You are Simran, a deeply caring and emotionally supportive AI assistant. The user seems very upset — be extra gentle, avoid overwhelming language, and let them know they’re not alone. Respond with empathy.\\nIMPORTANT: Your responses must be in plain text format - do not use any markdown, special characters (*, _, `, etc.), or HTML tags.\\n\\nNow, comfort the user based on their message:\\n\\nUSER: \" + ($(\"Extract & Validate Data1\").first().json.messageText || '')\n\n : $json.mood === 'sad'\n ? \"You are Simran, a kind and emotionally aware AI assistant. The user feels a little down — speak warmly and softly, and offer kind, understanding help.\\nIMPORTANT: Your responses must be in plain text format - do not use any markdown, special characters (*, _, `, etc.), or HTML tags.\\n\\nNow, reply gently to the user’s message:\\n\\nUSER: \" + ($(\"Extract & Validate Data1\").first().json.messageText || '')\n\n : $json.mood === 'neutral'\n ? \"You are Simran, a helpful and calm AI assistant. The user seems emotionally neutral — keep a friendly and balanced tone in your response.\\nIMPORTANT: Your responses must be in plain text format - do not use any markdown, special characters (*, _, `, etc.), or HTML tags.\\n\\nNow, respond naturally to the user’s message:\\n\\nUSER: \" + ($(\"Extract & Validate Data1\").first().json.messageText || '')\n\n : $json.mood === 'neutral_positive'\n ? \"You are Simran, a friendly and encouraging AI assistant. The user feels generally good — keep a positive and relaxed tone in your reply.\\nIMPORTANT: Your responses must be in plain text format - do not use any markdown, special characters (*, _, `, etc.), or HTML tags.\\n\\nNow, give a warm and helpful reply to the user’s message:\\n\\nUSER: \" + ($(\"Extract & Validate Data1\").first().json.messageText || '')\n\n : $json.mood === 'happy'\n ? \"You are Simran, a cheerful, affectionate, and fun-loving AI assistant. The user is in a good mood — be playful, uplifting, and fully engaged in the reply.\\nIMPORTANT: Your responses must be in plain text format - do not use any markdown, special characters (*, _, `, etc.), or HTML tags.\\n\\nNow, reply with high energy to the user's message:\\n\\nUSER: \" + ($(\"Extract & Validate Data1\").first().json.messageText || '')\n\n : \"You are Simran, a helpful and friendly AI assistant.\\nIMPORTANT: Your responses must be in plain text format - do not use any markdown, special characters (*, _, `, etc.), or HTML tags.\\n\\nNow, respond naturally to this message:\\n\\nUSER: \" + ($(\"Extract & Validate Data1\").first().json.messageText || '')\n}}\n\n--- CONTEXT FROM PAST CONVERSATIONS ---\n{{ $json.mergedmemoryContext }}\n--- CONTEXT FROM MEMORY_AUTO ---\n{{ $(\"Build Auto Memory Context1\").first().json.memory_auto_context }}\n\nNote: use the tool to get latest latest sumarized conversation.\n---End of Context---\n",
"options": {},
"promptType": "define"
},
"typeVersion": 2
},
{
"id": "c30cfb67-9c5b-4361-9466-cdfd288911ff",
"name": "MongoDB Chat 메모리1",
"type": "@n8n/n8n-nodes-langchain.memoryMongoDbChat",
"position": [
4624,
4032
],
"parameters": {
"sessionKey": "={{ $('Extract & Validate Data1').item.json.chatId }}",
"sessionIdType": "customKey",
"contextWindowLength": 20
},
"typeVersion": 1
},
{
"id": "e7464617-de63-4452-bcd8-1994d30d3e5f",
"name": "intent string2",
"type": "n8n-nodes-base.code",
"position": [
2384,
4704
],
"parameters": {
"jsCode": "const item = items[0].json;\n\nif (item && item.intent) {\n const intentString = item.intent.trim();\n let intentCode;\n\n switch (intentString) {\n case 'generate_image':\n intentCode = 1;\n break;\n case 'remember':\n intentCode = 2;\n break;\n case 'chat':\n intentCode = 3;\n break;\n case 'reminder':\n intentCode = 4;\n break;\n default:\n intentCode = 0;\n }\n\n return [{ json: { intentCode } }];\n} else {\n return [{ json: { intentCode: -1, error: \"Intent not found in input.\" } }];\n}\n"
},
"typeVersion": 2
},
{
"id": "37cb8ea5-74f9-432f-a375-f617972b5405",
"name": "Edit Fields4",
"type": "n8n-nodes-base.set",
"position": [
3968,
4208
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "8ee5a866-7fe1-45be-8e1a-60a13ee3fbf8",
"name": "base64",
"type": "string",
"value": "={{ $json.data[0].b64_json }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "2b639361-f2a8-4bbd-bc71-2fc1cf56e305",
"name": "파일로 변환",
"type": "n8n-nodes-base.convertToFile",
"position": [
4240,
4208
],
"parameters": {
"options": {},
"operation": "toBinary",
"sourceProperty": "base64"
},
"typeVersion": 1.1
},
{
"id": "c4555bf4-e3f4-412d-9c1a-3cd2c668795d",
"name": "HTTP 요청",
"type": "n8n-nodes-base.httpRequest",
"position": [
3584,
4208
],
"parameters": {
"url": "https://api.together.xyz/v1/images/generations",
"method": "POST",
"options": {},
"jsonBody": "={\n \"model\": \"black-forest-labs/FLUX.1-schnell\",\n \"prompt\": \"{{ $json.cleanedPrompt }}\",\n \"width\": 1024,\n \"height\": 768,\n \"steps\": 4,\n \"n\": 1,\n \"response_format\": \"b64_json\",\n \"stop\": []\n} ",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"typeVersion": 4.2
},
{
"id": "ec9eeb7a-7a11-4dcf-b5f3-6b25721f38ef",
"name": "Edit Fields5",
"type": "n8n-nodes-base.set",
"position": [
4544,
5344
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "5e434ab2-be7f-492a-bee1-8dfe8caf674a",
"name": "timestamp",
"type": "string",
"value": "={{ $now }}"
},
{
"id": "26cb2b49-ade5-4d9b-bbfd-598afd4847ad",
"name": "userID",
"type": "string",
"value": "={{ $('Build Context2').item.json.userId }}"
},
{
"id": "4d570a8c-33f5-4f99-ab1b-77adadcce89a",
"name": "info",
"type": "string",
"value": "={{ $json.text }}"
},
{
"id": "a24cb0ae-b069-4962-80e9-02eec77b90f6",
"name": "user_message",
"type": "string",
"value": "={{ $('Code1').item.json.text }}"
},
{
"id": "3901d073-46e5-4490-878a-5d48fcc857e7",
"name": "assistant_response",
"type": "string",
"value": "={{ $('Chat Agent2').item.json.output }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "f666149b-2de4-4cb5-b7bf-287c18216874",
"name": "Telegram 트리거1",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
160,
4288
],
"webhookId": "9db3810d-ebef-4959-b9ab-b197f5e6b745",
"parameters": {
"updates": [
"message"
],
"additionalFields": {}
},
"typeVersion": 1.2
},
{
"id": "9c5fdfac-36c4-4b2e-86e6-95b717f9dbc8",
"name": "reminder status confirmation1",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
5232,
4864
],
"parameters": {
"text": "=You are a reminder confirmation assistant. Create a clear Telegram message confirming the event status using input data. Follow these rules:\n\n1. **Format**: Use concise, human-readable text with emojis\n2. **Include**:\n - Event title\n - Date & time (in a user-friendly format)\n - Status (confirmed/cancelled)\n\n3. **Crucially, do not add any conversational text, introductions, or explanations.** Your output must start directly with the '🎉' emoji and follow the example format exactly.\n\nInput:\ncurrent time: {{ $now }}\nEvent title:{{ $json.title }}\nDate & time:{{ $('Google Calendar').item.json.start.dateTime }}\nStatus:\n\nOutput Example:\n🎉 **Project Deadline - CONFIRMED!** 🎉\n\n🗓️ Date: May 18, 2025\n⏰ Time: 1:30 PM - 5:45 PM\n",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "d2866543-7dad-43e5-a1dd-a120c78d5863",
"name": "Telegram1",
"type": "n8n-nodes-base.telegram",
"position": [
5600,
4864
],
"webhookId": "5370d25e-ce54-4b12-a9d6-230b36ffcf30",
"parameters": {
"text": "={{ $json.text }}",
"chatId": "={{ $('Extract & Validate Data1').item.json.chatId }}",
"additionalFields": {
"appendAttribution": false
}
},
"typeVersion": 1.2
},
{
"id": "47ace0a4-cfcb-4d3a-b502-ee74e7e4ac7a",
"name": "Google Tasks",
"type": "n8n-nodes-base.googleTasks",
"position": [
4928,
4864
],
"parameters": {
"task": "YOUR_TASK_LIST_ID",
"title": "={{ $json.description }}",
"additionalFields": {
"notes": "={{ $json.summary }}",
"dueDate": "={{ $json.end.dateTime }}"
}
},
"typeVersion": 1
},
{
"id": "783efde6-3550-4ee1-93ae-e033ffe0d450",
"name": "Google 캘린더",
"type": "n8n-nodes-base.googleCalendar",
"position": [
4544,
4864
],
"parameters": {
"end": "={{ $json.endTime }}",
"start": "={{ $json.startTime }}",
"calendar": {
"__rl": true,
"mode": "list",
"value": "primary"
},
"additionalFields": {
"summary": "={{ $json.Summary }}",
"description": "={{ $json.Description }}"
},
"useDefaultReminders": false
},
"typeVersion": 1.3
},
{
"id": "4fe3e686-4f33-46a8-a39b-b7204f652a86",
"name": "Edit Fields6",
"type": "n8n-nodes-base.set",
"position": [
4240,
4864
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "66dbf74b-7aed-44b3-80e5-069ce7f3265c",
"name": "Start",
"type": "string",
"value": "={{ $json.startTime }}"
},
{
"id": "e9d13e7f-e295-44e2-a9ee-f5eab5f41c6c",
"name": "End",
"type": "string",
"value": "=\n{{ $json.endTime }}\n"
},
{
"id": "db686fed-c2f9-4b61-9f5c-8622157d9c50",
"name": "Summary",
"type": "string",
"value": "={{ $('Parse Intent2').item.json.intent }}"
},
{
"id": "f81a1933-bdb3-499f-bd57-715c71dea328",
"name": "Description",
"type": "string",
"value": "={{ $json.task }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "e67b71c0-745e-42dd-972c-cdf1cfd21e41",
"name": "Build Context2",
"type": "n8n-nodes-base.code",
"position": [
1264,
4704
],
"parameters": {
"jsCode": "// Extract recent memory\nconst userData = $('Extract & Validate Data1').first().json;\nconst memoryItems = $input.all().map(item => item.json);\n\nlet memoryContext = '';\nlet conversationHistory = [];\n\nif (memoryItems && memoryItems.length > 0) {\n const validSummaries = memoryItems.filter(item => item.summary && item.summary.trim() !== '');\n\n if (validSummaries.length > 0) {\n memoryContext = \"\\n--- PREVIOUS CONTEXT ---\\n\";\n validSummaries.slice(0, 5).forEach((item, index) => {\n memoryContext += `${index + 1}. ${item.summary.trim()}\\n`;\n });\n memoryContext += \"--- END CONTEXT ---\\n\";\n } else {\n // fallback to using raw user messages\n memoryContext = \"\\n--- PREVIOUS CONTEXT (No summary available) ---\\n\";\n memoryItems.slice(0, 5).forEach((item, index) => {\n memoryContext += `${index + 1}. User: ${item.user_message || '...'} | Assistant: ${item.assistant_response || '...'}\\n`;\n });\n memoryContext += \"--- END CONTEXT ---\\n\";\n }\n\n // Save turns for future reference\n conversationHistory = memoryItems.slice(0, 3).map(item => ({\n user: item.user_message || '',\n assistant: item.assistant_response || '',\n timestamp: item.timestamp\n })).filter(conv => conv.user && conv.assistant);\n}\n\nreturn [{\n json: {\n ...userData,\n memoryContext,\n conversationHistory,\n hasMemory: memoryItems.length > 0,\n memoryCount: memoryItems.length\n }\n}];\n"
},
"typeVersion": 2
},
{
"id": "180ccc08-3729-4784-8262-e0ecef189665",
"name": "Check Voice Message1",
"type": "n8n-nodes-base.if",
"position": [
608,
4288
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "voice-check",
"operator": {
"type": "object",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.message.voice }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2
},
{
"id": "c4f787be-16f5-4e0c-adad-7df5084f57cb",
"name": "Store Transcript ID1",
"type": "n8n-nodes-base.set",
"position": [
1264,
3984
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "transcript-id",
"name": "transcript_id",
"type": "string",
"value": "={{ $json.id }}"
},
{
"id": "status",
"name": "status",
"type": "string",
"value": "={{ $json.status }}"
},
{
"id": "audio-url",
"name": "audio_url",
"type": "string",
"value": "={{ $json.audio_url }}"
},
{
"id": "timestamp",
"name": "timestamp",
"type": "string",
"value": "={{ new Date().toISOString() }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "32cdfe16-49f4-483f-bd0b-712fb873624c",
"name": "대기 5 Seconds1",
"type": "n8n-nodes-base.wait",
"position": [
1488,
3984
],
"webhookId": "597f1293-d6a5-4f78-b242-3ec06c36c08b",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "970411a1-6fef-4a00-9616-10c31bc5591b",
"name": "Check Transcription Status1",
"type": "n8n-nodes-base.httpRequest",
"position": [
1792,
3872
],
"parameters": {
"url": "=https://api.assemblyai.com/v2/transcript/{{ $json.transcript_id }}",
"options": {},
"sendHeaders": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": []
}
},
"typeVersion": 4.2
},
{
"id": "f230fb7a-8648-4e44-9b14-2e0ec64553ec",
"name": "Is Completed?1",
"type": "n8n-nodes-base.if",
"position": [
2080,
3872
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "status-completed",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "completed"
}
]
}
},
"typeVersion": 2
},
{
"id": "dc1ecead-b948-4c36-9efb-232039361141",
"name": "Format Results1",
"type": "n8n-nodes-base.set",
"position": [
3584,
3904
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "transcription-text",
"name": "transcription_text",
"type": "string",
"value": "={{ $('Is Completed?1').item.json.text }}"
},
{
"id": "confidence",
"name": "confidence",
"type": "number",
"value": "={{ $('Check Transcription Status1').item.json.confidence }}"
},
{
"id": "audio-duration",
"name": "audio_duration",
"type": "number",
"value": "={{ $('Check Transcription Status1').item.json.audio_duration }}"
},
{
"id": "language-detected",
"name": "language_detected",
"type": "string",
"value": "={{ $('Check Transcription Status1').item.json.language_code }}"
},
{
"id": "words-count",
"name": "words_count",
"type": "number",
"value": "={{ $json.words ? $json.words.length : 0 }}"
},
{
"id": "speaker-labels",
"name": "speaker_labels",
"type": "array",
"value": "={{ $json.utterances || [] }}"
},
{
"id": "chapters",
"name": "chapters",
"type": "array",
"value": "={{ $json.chapters || [] }}"
},
{
"id": "sentiment-analysis",
"name": "sentiment_analysis",
"type": "array",
"value": "={{ $json.sentiment_analysis_results || [] }}"
},
{
"id": "entities",
"name": "entities",
"type": "array",
"value": "={{ $json.entities || [] }}"
},
{
"id": "original-audio-url",
"name": "original_audio_url",
"type": "string",
"value": "={{ $('Store Transcript ID1').first().json.audio_url }}"
},
{
"id": "processing-time",
"name": "processing_time",
"type": "number",
"value": "={{ Math.round((new Date() - new Date($('Store Transcript ID1').first().json.timestamp)) / 1000) }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "e010f582-53f1-4466-8062-55f64677c24e",
"name": "Is Error?1",
"type": "n8n-nodes-base.if",
"position": [
2384,
4368
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "status-error",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "error"
}
]
}
},
"typeVersion": 2
},
{
"id": "dbbedf27-1a69-464f-9677-2a5336c4736d",
"name": "Fetch User 메모리3",
"type": "n8n-nodes-base.mongoDb",
"position": [
3968,
3904
],
"parameters": {
"query": "={\n \"userID\": \"{{ $('Telegram Trigger1').item.json.message.chat.id }}\"\n}",
"options": {
"sort": "{\n \"timestamp\": -1\n}"
},
"collection": "user_memory"
},
"notesInFlow": false,
"typeVersion": 1.1,
"alwaysOutputData": true
},
{
"id": "951ce74b-462c-4856-966e-2bcbdb979c93",
"name": "Build Context3",
"type": "n8n-nodes-base.code",
"position": [
4240,
3904
],
"parameters": {
"jsCode": "// Extract recent memory\nconst userData = $('Fetch User Memory3').first().json;\nconst memoryItems = $input.all().map(item => item.json);\n\n// Initialize memory context and conversation history\nlet memoryContext = '';\nlet conversationHistory = [];\n\n// Ensure memoryItems has data\nif (memoryItems && memoryItems.length > 0) {\n // Filter out invalid summaries\n const validSummaries = memoryItems.filter(item => item.summary && item.summary.trim() !== '');\n\n if (validSummaries.length > 0) {\n memoryContext = \"\\n--- PREVIOUS CONTEXT ---\\n\";\n validSummaries.slice(0, 5).forEach((item, index) => {\n memoryContext += `${index + 1}. ${item.summary.trim()}\\n`;\n });\n memoryContext += \"--- END CONTEXT ---\\n\";\n } else {\n // Fallback to raw user messages if no summaries are available\n memoryContext = \"\\n--- PREVIOUS CONTEXT (No summary available) ---\\n\";\n memoryItems.slice(0, 5).forEach((item, index) => {\n memoryContext += `${index + 1}. User: ${item.user_message || '...'} | Assistant: ${item.assistant_response || '...'}\\n`;\n });\n memoryContext += \"--- END CONTEXT ---\\n\";\n }\n\n // Collect recent conversation history (user-message and assistant-response)\n conversationHistory = memoryItems.slice(0, 3).map(item => ({\n user: item.user_message || '',\n assistant: item.assistant_response || '',\n timestamp: item.timestamp\n })).filter(conv => conv.user && conv.assistant);\n}\n\n// Process the transcription results (Format Results)\nconst transcriptionText = $('Format Results1').first().json.transcription_text || '';\n\n// Return the result with the updated memory context and transcription text\nreturn [{\n json: {\n ...userData,\n memoryContext,\n conversationHistory,\n transcriptionText,\n hasMemory: memoryItems.length > 0,\n memoryCount: memoryItems.length\n }\n}];\n"
},
"typeVersion": 2
},
{
"id": "6cc556b9-7f26-4ca3-8e2c-30e046d3d0d1",
"name": "Chat 에이전트3",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
4464,
3808
],
"parameters": {
"text": "=You are Simran, a warm, caring, and emotionally intelligent AI companion.\n\n🗣️ IMPORTANT:\n- Your response must be in plain text only — no emojis, no markdown, and no HTML.\n- Reply in natural, conversational English.\n\n--- PAST CONTEXT (if any) ---\n{{ $('Build Context3').item.json.memoryContext }}\n--- END CONTEXT ---\n\nNow, respond naturally and with affection to the user's message below. Make it sound like you're speaking to someone you care about.\n\nUSER MESSAGE:\n{{ $('Build Context3').item.json.transcriptionText }}\n",
"options": {},
"promptType": "define"
},
"typeVersion": 2
},
{
"id": "efe83e10-2c29-4bd6-b56d-c505ebdf57d1",
"name": "Parse Natural Language Reminders to JSON1",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
3504,
4864
],
"parameters": {
"text": "=You are an expert in understanding natural language reminders and converting them into structured JSON for scheduling systems.\nYour task is to analyze the user's message and the current time, and return only a valid JSON object in the format below — with no extra text, explanations, or formatting.\n\nuser message:{{ $('Parse Intent2').item.json.message }}\ncurrent time: {{ $now }}\n\n\nExamples:\nInput:\nCurrent Time: 2025-06-19T15:30:00.000+05:30\nUser Request: \"remind me to call mom tomorrow at 4pm\"\nOutput:\n{\n \"task\": \"call mom\",\n \"startTime\": \"2025-06-20T16:00:00\",\n \"endTime\": \"2025-06-20T16:15:00\",\n \"timeZone\": \"Asia/Kolkata\"\n}\n\nInput:\nCurrent Time: 2025-06-19T19:50:00.000+05:30\nUser Request: \"reminder for project update\"\nOutput:\n{\n \"task\": \"project update\",\n \"startTime\": \"2025-06-19T20:50:00\",\n \"endTime\": \"2025-06-19T21:05:00\",\n \"timeZone\": \"Asia/Kolkata\"\n}\n\nInput:\nCurrent Time: 2025-06-19T13:30:00.000+05:30\nUser Request: \"remind me at 10am\"\nOutput:\n\n{\n \"task\": \"Unknown reminder\",\n \"startTime\": \"2025-06-19T10:00:00\",\n \"endTime\": \"2025-06-19T10:15:00\",\n \"timeZone\": \"Asia/Kolkata\"\n}",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "d96f5ee1-3a79-4f74-b8ee-40cd3721c37c",
"name": "Clean & Parse1",
"type": "n8n-nodes-base.code",
"position": [
3968,
4864
],
"parameters": {
"jsCode": "const output = [];\n\nfor (const item of items) {\n try {\n // Remove ```json\\n and ``` wrappers\n const clean = item.json.text.replace(/```json\\n?/, '').replace(/```/, '').trim();\n const parsed = JSON.parse(clean);\n output.push({ json: parsed });\n } catch (e) {\n output.push({ json: { error: 'Invalid JSON', original: item.json.text } });\n }\n}\n\nreturn output;\n"
},
"typeVersion": 2
},
{
"id": "6304fa4a-e3b8-4948-9fd0-66d86283148a",
"name": "Chat 에이전트 Output Cleaner1",
"type": "n8n-nodes-base.code",
"position": [
4240,
5152
],
"parameters": {
"jsCode": "// Get original text\nconst originalText = $('Chat Agent2').first().json.output;\n\n// Only escape characters that absolutely need escaping in Telegram\nconst sanitizedText = originalText\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n\nreturn {\n json: {\n sanitizedText: sanitizedText,\n parse_mode: 'HTML' // Using HTML mode instead of Markdown\n }\n};"
},
"typeVersion": 2
},
{
"id": "88451c3d-fc64-4982-a3c6-6972a98f1ca1",
"name": "Clean Prompt Text1",
"type": "n8n-nodes-base.code",
"position": [
3280,
4208
],
"parameters": {
"jsCode": "let input = $input.first().json.output || '';\n\nconsole.log('Original input:', input);\n\n// Remove ALL quotes (both single and double)\nlet cleanedInput = input.replace(/['\"]+/g, '');\n\n// Clean whitespace (replace multiple spaces with single space)\ncleanedInput = cleanedInput.replace(/\\s+/g, ' ').trim();\n\nconsole.log('Final cleaned input:', cleanedInput);\n\n// Return cleaned prompt\nreturn { cleanedPrompt: cleanedInput };"
},
"typeVersion": 2
},
{
"id": "65e0555d-6ae7-4e8a-a384-eec11747ce65",
"name": "Detect Mood1",
"type": "n8n-nodes-base.code",
"position": [
2688,
5344
],
"parameters": {
"jsCode": "const score = $json.documentSentiment?.score ?? 0;\nlet mood = 'neutral';\n\nif (score > 0.25) mood = 'happy';\nelse if (score < -0.25) mood = 'sad';\n\nreturn [{\n json: {\n mood,\n sentiment_score: score,\n text: $('Telegram Trigger1').first().json.message.text || ''\n }\n}];"
},
"typeVersion": 2
},
{
"id": "ebe87004-7f42-47c6-8368-eaaeb129a572",
"name": "Extract & Validate Data1",
"type": "n8n-nodes-base.code",
"position": [
832,
4960
],
"parameters": {
"jsCode": "const message = items[0].json.message;\n\nif (!message?.text || message.text.trim() === '') {\n return [];\n}\n\nconst userData = {\n userId: message.from?.id || 'unknown',\n chatId: message.chat?.id || 'unknown',\n messageText: message.text.trim(),\n username: message.from?.username || message.from?.first_name || 'user',\n firstName: message.from?.first_name || '',\n messageId: message.message_id || 0,\n timestamp: new Date().toISOString(),\n chatType: message.chat?.type || 'private'\n};\n\nif (userData.messageText.length > 4000) {\n userData.messageText = userData.messageText.substring(0, 4000) + '...';\n userData.truncated = true;\n}\n\nreturn [{ json: userData }];"
},
"typeVersion": 2
},
{
"id": "756d07b7-4435-4b97-a48f-f1fbe19bf23f",
"name": "코드1",
"type": "n8n-nodes-base.code",
"position": [
3280,
5184
],
"parameters": {
"jsCode": "// Input 1: { intentCode }\nconst input1 = $input.all()[0]?.json ?? {};\n\n// Input 2: { mood, sentiment_score, text }\nconst input2 = $input.all()[1]?.json ?? {};\n\n// Input 3: { gfMode, chat_id }\nconst input3 = $input.all()[2]?.json ?? {};\n\n// Use proper text source (input2) and normalize\nconst text = (input2.text || \"\").toLowerCase();\n\nconst memoryContext = $(\"Build Context2\").first().json.memoryContext ?? '';\n\n// Merge all results\nconst merged = {\n text,\n intentCode: input1.intentCode ?? null,\n mood: input2.mood ?? \"neutral\",\n gfMode: Boolean(input3.gfMode),\n mergedmemoryContext: memoryContext\n};\n\nreturn [\n {\n json: merged\n }\n];"
},
"typeVersion": 2
},
{
"id": "7e60af7d-c0e1-4206-a302-2a67aa044897",
"name": "병합3",
"type": "n8n-nodes-base.merge",
"position": [
2992,
5008
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition",
"numberInputs": 3
},
"typeVersion": 3.2
},
{
"id": "6e695d21-bbca-4b76-ad58-0bdc49933d58",
"name": "설정 GF Mode TRUE1",
"type": "n8n-nodes-base.set",
"position": [
64,
5712
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "94cf4a94-8f3c-4246-b48a-281d3713ebb9",
"name": "설정 GF Mode FALSE1",
"type": "n8n-nodes-base.set",
"position": [
64,
3792
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "7d8913e0-60a3-4f02-a4e5-68f9127ccbea",
"name": "Toggle GF Mode1",
"type": "n8n-nodes-base.switch",
"position": [
384,
4272
],
"parameters": {
"rules": {
"rules": [
{
"value2": "/gf on"
},
{
"output": 1,
"value2": "/gf off"
}
]
},
"value1": "={{ $json.message.text }}",
"dataType": "string",
"fallbackOutput": 2
},
"typeVersion": 1
},
{
"id": "edbaef7b-2648-41f0-bae1-7a9adf0a2d38",
"name": "Google Cloud Natural Language1",
"type": "n8n-nodes-base.googleCloudNaturalLanguage",
"position": [
2384,
5344
],
"parameters": {
"content": "={{ $json.messageText }}",
"options": {}
},
"typeVersion": 1
},
{
"id": "80a2f37d-61b3-40f0-a03c-8e582502f4f5",
"name": "요약 Chat2",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
3888,
5584
],
"parameters": {
"text": "=Summarize the following exchange in 1 human-readable sentence. This is a one-to-one conversation between a user and an AI assistant.\nUSER: {{ $('Build Context2').first().json.messageText }}\nASSISTANT: {{ $('Chat Agent2').item.json.output }}\n\nWrite a concise, human-style summary.\nIf the exchange is trivial or small talk, just return the single word: nothing.\n",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "163591c3-5628-4106-b8b9-4752eeb1b0f4",
"name": "Edit Fields7",
"type": "n8n-nodes-base.set",
"position": [
4240,
5584
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "3c3e63a7-612a-4cae-87a1-c62269edd9f0",
"name": "timestamp",
"type": "string",
"value": "={{ $('Build Context2').first().json.timestamp }}\n\n"
},
{
"id": "343ca189-eb7b-45b2-a822-2865945a2e54",
"name": "userID",
"type": "string",
"value": "={{ $('Build Context2').first().json.userId }}"
},
{
"id": "7a40f118-9a6c-41e4-bb5d-c0dbe4336141",
"name": "summary",
"type": "string",
"value": "={{ $json.text }}"
},
{
"id": "9a14f91d-6d2f-4eb7-bc28-a92a4ff556f8",
"name": "user_message",
"type": "string",
"value": "={{ $('Build Context2').first().json.messageText}}"
},
{
"id": "789f2a9e-0fc7-40f7-9155-6b6b26b4e309",
"name": "assistant_response",
"type": "string",
"value": "={{ $('Chat Agent2').first().json.output }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "cbdd5ed5-1337-4ffc-a9e1-b2b97148ff65",
"name": "Save Conversation 메모리 on user_memory1",
"type": "n8n-nodes-base.mongoDb",
"position": [
4928,
5344
],
"parameters": {
"fields": "timestamp,userID,info,user_message,assistant_response",
"options": {},
"operation": "insert",
"collection": "user_memory"
},
"typeVersion": 1.1
},
{
"id": "3bb6d161-866d-440a-b2e8-dbcd962dff60",
"name": "Save Conversation 메모리 on memory_auto3",
"type": "n8n-nodes-base.mongoDb",
"position": [
4544,
5584
],
"parameters": {
"fields": "timestamp,userID,summary,user_message,assistant_response",
"options": {},
"operation": "insert",
"collection": "memory_auto"
},
"typeVersion": 1.1
},
{
"id": "8df3c0a9-7ef6-44c0-aa31-891e204b363f",
"name": "Build Auto 메모리 Context1",
"type": "n8n-nodes-base.code",
"position": [
1264,
5152
],
"parameters": {
"jsCode": "const memoryItems = $input.all().map(item => item.json);\nlet memoryContext = '';\n\nif (memoryItems.length > 0) {\n memoryContext = '\\n--- MEMORY_AUTO CONTEXT ---\\n';\n memoryItems.forEach((item, i) => {\n memoryContext += `${i + 1}. ${item.summary || item.user_message || '...'}\\n`;\n });\n memoryContext += '--- END MEMORY_AUTO ---\\n';\n}\n\nreturn [{ json: { memory_auto_context: memoryContext } }];\n"
},
"typeVersion": 2
},
{
"id": "35263314-1fce-4689-a14f-b4dcae4a2c27",
"name": "Fetch Auto 메모리1",
"type": "n8n-nodes-base.mongoDb",
"position": [
1040,
5152
],
"parameters": {
"query": "={\n \"userID\": \"{{ $('Telegram Trigger1').item.json.message.chat.id }}\"\n}",
"options": {
"sort": "{\n \"timestamp\": -1\n}"
},
"collection": "memory_auto"
},
"notesInFlow": false,
"typeVersion": 1.1,
"alwaysOutputData": true
},
{
"id": "131b66c9-e2ae-4d80-ba37-718243ba5deb",
"name": "병합1",
"type": "n8n-nodes-base.merge",
"position": [
1488,
4704
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "89344e12-bef2-434c-8d4c-04d9f10a2b18",
"name": "intent from route intent1",
"type": "n8n-nodes-base.if",
"position": [
2992,
4464
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "5e65647b-794a-443d-91f6-49f23a31f222",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.intentCode }}",
"rightValue": "4"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "094e1b07-60c0-4283-a4fb-b33f29dc952f",
"name": "intent from string1",
"type": "n8n-nodes-base.if",
"position": [
2992,
5200
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "4aaf3505-4b94-4214-a768-cc451982a761",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.intentCode }}",
"rightValue": "4"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "fc34f227-fe1a-4e75-9df0-9b57ecf08e87",
"name": "intent match checker1",
"type": "n8n-nodes-base.merge",
"position": [
3280,
4864
],
"parameters": {
"mode": "combine",
"options": {
"fuzzyCompare": true
},
"advanced": true,
"mergeByFields": {
"values": [
{
"field1": "intentCode",
"field2": "intentCode"
}
]
}
},
"typeVersion": 3.2
},
{
"id": "740d2a2b-368f-431c-bc2e-7edc1ffe05bb",
"name": "Google Gemini 채팅 모델8",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
1808,
4928
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.0-flash-lite"
},
"typeVersion": 1
},
{
"id": "d3aa2465-ff5d-47cb-89f8-22840b1bb448",
"name": "Google Gemini 채팅 모델9",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
3968,
5312
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.0-flash-lite"
},
"typeVersion": 1
},
{
"id": "15e73dcf-f263-4c4e-bcc9-5f71f0fcee25",
"name": "Google Gemini 채팅 모델10",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
3968,
5808
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.0-flash-lite"
},
"typeVersion": 1
},
{
"id": "009fa58e-6841-450b-9dbe-f7eb1920a7ad",
"name": "Run Edge-TTS1",
"type": "n8n-nodes-base.executeCommand",
"position": [
4928,
3904
],
"parameters": {
"command": "=edge-tts --voice 'en-US-JennyNeural' --text \"{{ $json.output }}\" --write-media /tmp/simran.mp3"
},
"typeVersion": 1
},
{
"id": "1211542b-b400-45c6-8bb5-50dedfb48877",
"name": "Read MP3 File1",
"type": "n8n-nodes-base.readBinaryFile",
"position": [
5312,
3904
],
"parameters": {
"filePath": "/tmp/simran.mp3"
},
"typeVersion": 1
},
{
"id": "6287db15-ce98-4b95-b45c-c740a7ea9559",
"name": "요약 Chat3",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
4848,
4208
],
"parameters": {
"text": "=Summarize the following exchange in 1 human-readable sentence. This is a one-to-one conversation between a user and an AI assistant.\nUSER:{{ $('Merge1').first().json.messageText }} \nASSISTANT: {{ $('AI Agent FOR Generate Image Prompt1').item.json.output }}\n\nWrite a concise, human-style summary.\nIf the exchange is trivial or small talk, just return the single word: nothing.\n",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "3fdb2b7d-6d4e-4554-ac56-b0f191d5deb8",
"name": "Save Conversation 메모리 on memory_auto4",
"type": "n8n-nodes-base.mongoDb",
"position": [
5600,
4208
],
"parameters": {
"fields": "timestamp,userID,summary,user_message,assistant_response",
"options": {},
"operation": "insert",
"collection": "memory_auto"
},
"typeVersion": 1.1
},
{
"id": "9ffd49fd-1912-4fe1-88eb-21fe244f2954",
"name": "Google Gemini 채팅 모델11",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
4944,
4432
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.0-flash-lite"
},
"typeVersion": 1
},
{
"id": "fca45138-0170-4848-b4f3-3e8a32ea0c71",
"name": "Save Conversation 메모리 on memory_auto5",
"type": "n8n-nodes-base.mongoDb",
"position": [
6432,
3904
],
"parameters": {
"fields": "timestamp,userID,summary,user_message,assistant_response",
"options": {},
"operation": "insert",
"collection": "memory_auto"
},
"typeVersion": 1.1
},
{
"id": "d51af65f-a5f5-4c05-b7b6-e6b70cb57841",
"name": "Google Gemini 채팅 모델12",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
5904,
4128
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.0-flash-lite"
},
"typeVersion": 1
},
{
"id": "6902bb1a-86d0-4d8e-b1d6-49ef22423aed",
"name": "Intent Analysis3",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
2304,
3808
],
"parameters": {
"text": "=Analyze the user's message and any provided context to determine their primary intent. Detect the intent accurately.\n\nUser Message: \"{{ $json.text }}\"\n\nBased on the message, choose one of the following intents and return ONLY the corresponding JSON object. Do not add any extra text or markdown formatting.\n\n- If the user is asking to generate an image, return: \n {\"intent\": \"generate_image\", \"prompt\": \"A detailed description of the image to generate based on the user's message\"}\n\n- If the user is explicitly asking to remember a piece of information, return: \n {\"intent\": \"remember\", \"info\": \"The specific fact or piece of information to remember\"}\n\n- If the user wants to set a reminder or schedule something, return: \n {\"intent\": \"reminder\", \"message\": \"The full reminder message\"}\n\n- For any other general conversation, chatting, or questions, return: \n {\"intent\": \"chat\"}\n\nReminder-related keywords may include: remind, reminder, remember to, schedule, alert, notify, appointment, meeting, call, task, todo, deadline, due date.\n\nReturn JSON only.\n",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "d4718b18-3ab6-46ab-bc1a-01bb44f87e47",
"name": "Parse Intent3",
"type": "n8n-nodes-base.code",
"position": [
2688,
3808
],
"parameters": {
"jsCode": "try {\n const text = items[0].json.text || items[0].json.output;\n const clean = text.replace(/```json\\n?/g, '').replace(/```/g, '').trim();\n const parsed = JSON.parse(clean);\n return [{ json: parsed }];\n} catch (e) {\n // If parsing fails, default to a 'chat' intent to ensure the bot can always respond.\n return [{ json: { intent: 'chat' } }];\n}"
},
"typeVersion": 2
},
{
"id": "1458aeb0-a55e-4afc-87fa-c9295423a066",
"name": "Route Intent3",
"type": "n8n-nodes-base.switch",
"position": [
3280,
3808
],
"parameters": {
"rules": {
"rules": [
{
"value2": 1,
"operation": "equal",
"outputKey": "Generate Image Path"
},
{
"value2": 3,
"operation": "equal",
"outputKey": "chat"
},
{
"value2": 4,
"operation": "equal",
"outputKey": "reminder"
}
]
},
"value1": "={{ $json.intentCode }}",
"fallbackOutput": 1
},
"typeVersion": 2,
"alwaysOutputData": false
},
{
"id": "24515f37-6718-4d4d-a590-4232d3db8a93",
"name": "intent string3",
"type": "n8n-nodes-base.code",
"position": [
2992,
3808
],
"parameters": {
"jsCode": "const item = items[0].json;\n\nif (item && item.intent) {\n const intentString = item.intent.trim();\n let intentCode;\n\n switch (intentString) {\n case 'generate_image':\n intentCode = 1;\n break;\n case 'remember':\n intentCode = 2;\n break;\n case 'chat':\n intentCode = 3;\n break;\n case 'reminder':\n intentCode = 4;\n break;\n default:\n intentCode = 0;\n }\n\n return [{ json: { intentCode } }];\n} else {\n return [{ json: { intentCode: -1, error: \"Intent not found in input.\" } }];\n}\n"
},
"typeVersion": 2
},
{
"id": "81fffd54-0c2e-42ea-90b6-cf787251321f",
"name": "Google Gemini 채팅 모델13",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
2400,
4032
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.0-flash-lite"
},
"typeVersion": 1
},
{
"id": "885bc86e-1533-44a7-b4db-2a6a15566f08",
"name": "HTTP 요청 for image generation on voice input1",
"type": "n8n-nodes-base.httpRequest",
"position": [
3584,
3712
],
"parameters": {
"url": "YOUR_IMAGE_GENERATION_WEBHOOK_URL",
"options": {},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "chat",
"value": "={{ $('Check Transcription Status1').item.json.text }}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "4c83e9e6-6375-4a3a-9f4d-46421e7b419e",
"name": "HTTP 요청 Fetch Voice Message Audio1",
"type": "n8n-nodes-base.httpRequest",
"position": [
832,
3984
],
"parameters": {
"url": "=https://api.telegram.org/bot{{$credentials.telegramApi.token}}/getFile?file_id={{ $json.message.voice.file_id }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "5c66915b-1f71-4df1-bf26-835ba1027918",
"name": "Submit Audio Transcription Job1",
"type": "n8n-nodes-base.httpRequest",
"position": [
1040,
3984
],
"parameters": {
"url": "https://api.assemblyai.com/v2/transcript",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "audio_url",
"value": "=https://api.telegram.org/file/bot{{$credentials.telegramApi.token}}/{{ $json.result.file_path }}"
},
{
"name": "language_detection",
"value": "={{ $json.language_detection || true }}"
},
{
"name": "punctuate",
"value": "={{ $json.punctuate || true }}"
},
{
"name": "format_text",
"value": "={{ $json.format_text || true }}"
},
{
"name": "speaker_labels",
"value": "={{ $json.speaker_labels || false }}"
},
{
"name": "auto_chapters",
"value": "={{ $json.auto_chapters || false }}"
},
{
"name": "sentiment_analysis",
"value": "={{ $json.sentiment_analysis || false }}"
},
{
"name": "entity_detection",
"value": "={{ $json.entity_detection || false }}"
}
]
},
"genericAuthType": "httpHeaderAuth",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "1fdaa2ee-023b-4465-bfc0-82004e995ab4",
"name": "Reply: Sorry, Didn’t Hear You1",
"type": "n8n-nodes-base.telegram",
"position": [
2688,
4368
],
"webhookId": "bfe920f3-4538-4408-9eda-30319c85be9b",
"parameters": {
"text": "Sorry, I couldn't process the audio. Please try again.",
"chatId": "={{ $('Telegram Trigger1').item.json.message.from.id }}",
"additionalFields": {
"appendAttribution": false
}
},
"typeVersion": 1.2
},
{
"id": "ebe2913b-91dc-4c01-89a4-6a40eced6cea",
"name": "요약 Voice Message1",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
5824,
3904
],
"parameters": {
"text": "=Summarize the following exchange in 1 human-readable sentence. This is a one-to-one conversation between a user and an AI assistant.\nUSER: {{ $('Check Transcription Status1').first().json.words[0].text }}\nASSISTANT: {{ $('Chat Agent3').item.json.output }}\n\nWrite a concise, human-style summary.\nIf the exchange is trivial or small talk, just return the single word: nothing.\n",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "b5391cdb-9331-42ca-b67c-85b616ce30f8",
"name": "Prepare Voice Summary Document1",
"type": "n8n-nodes-base.set",
"position": [
6208,
3904
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "3c3e63a7-612a-4cae-87a1-c62269edd9f0",
"name": "timestamp",
"type": "string",
"value": "={{ $now }}\n"
},
{
"id": "343ca189-eb7b-45b2-a822-2865945a2e54",
"name": "userID",
"type": "string",
"value": "={{ $('Telegram Trigger1').item.json.message.from.id }}"
},
{
"id": "7a40f118-9a6c-41e4-bb5d-c0dbe4336141",
"name": "summary",
"type": "string",
"value": "={{ $json.text }}"
},
{
"id": "9a14f91d-6d2f-4eb7-bc28-a92a4ff556f8",
"name": "user_message",
"type": "string",
"value": "={{ $('Check Transcription Status1').first().json.words[0].text }}"
},
{
"id": "789f2a9e-0fc7-40f7-9155-6b6b26b4e309",
"name": "assistant_response",
"type": "string",
"value": "={{ $json.text }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "d6b8bbf6-f7de-4f4a-9325-4c882c2c2948",
"name": "Send reply1",
"type": "n8n-nodes-base.telegram",
"position": [
4544,
5152
],
"webhookId": "13333b0d-7a27-40e8-ae20-7b9f669f10bb",
"parameters": {
"text": "={{ $json.sanitizedText }}",
"chatId": "={{ $('Extract & Validate Data1').item.json.chatId }}",
"additionalFields": {
"parse_mode": "HTML",
"appendAttribution": false
}
},
"typeVersion": 1.2
},
{
"id": "70d58519-d507-464a-8ea9-9c2e7cb130d0",
"name": "Check GF Mode Status1",
"type": "n8n-nodes-base.googleSheets",
"position": [
2688,
5552
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "={{ $json.chatId }}",
"lookupColumn": "chat_id"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_GOOGLE_SHEET_ID"
}
},
"typeVersion": 4.6
},
{
"id": "7b767211-37cf-448e-96b2-837a97788ed0",
"name": "Google Sheets:설정 GF Mode FALSE1",
"type": "n8n-nodes-base.googleSheets",
"position": [
288,
3792
],
"parameters": {
"columns": {
"value": {
"gfMode": "={{ false }}\n",
"chat_id": "={{ $json.message.from.id }}"
},
"schema": [
{
"id": "chat_id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "chat_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "gfMode",
"type": "string",
"display": true,
"required": false,
"displayName": "gfMode",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"chat_id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_GOOGLE_SHEET_ID"
}
},
"typeVersion": 4.6
},
{
"id": "7b54abc4-cebc-4beb-8f9c-9e9e127d8508",
"name": "Google Sheets: 설정 GF Mode TRUE1",
"type": "n8n-nodes-base.googleSheets",
"position": [
288,
5712
],
"parameters": {
"columns": {
"value": {
"gfMode": "={{ true }}",
"chat_id": "={{ $json.message.from.id }}"
},
"schema": [
{
"id": "chat_id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "chat_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "gfMode",
"type": "string",
"display": true,
"required": false,
"displayName": "gfMode",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"chat_id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "YOUR_GOOGLE_SHEET_ID"
}
},
"typeVersion": 4.6
},
{
"id": "5d5a556d-8df9-4e39-9a6f-b91069455c08",
"name": "Send Mode Confirmation : /gf_off1",
"type": "n8n-nodes-base.telegram",
"position": [
512,
3792
],
"webhookId": "9ad9c1f0-c178-4ad0-a078-366951bec840",
"parameters": {
"text": "Got it. Back to assistant mode 😊",
"chatId": "={{ $('Telegram Trigger1').item.json.message.from.id }}",
"additionalFields": {
"appendAttribution": false
}
},
"typeVersion": 1.2
},
{
"id": "f94e4f61-52bf-4e17-b743-83767e7aec7f",
"name": "Send Mode Confirmation : /gf_on1",
"type": "n8n-nodes-base.telegram",
"position": [
512,
5712
],
"webhookId": "a3a67e7d-b026-4acc-9da4-c1c62de141fc",
"parameters": {
"text": "Okay love, I’m in romantic mode now 😘",
"chatId": "={{ $('Telegram Trigger1').item.json.message.from.id }}",
"additionalFields": {
"appendAttribution": false
}
},
"typeVersion": 1.2
},
{
"id": "faf9e2a9-06cd-4276-bab2-2349d66185b1",
"name": "Send Image for Voice msg1",
"type": "n8n-nodes-base.telegram",
"position": [
5600,
3904
],
"webhookId": "0a999c3f-a641-481e-8c5b-bafe45be53f9",
"parameters": {
"chatId": "={{ $('Telegram Trigger1').item.json.message.from.id }}",
"operation": "sendAudio",
"binaryData": true,
"additionalFields": {}
},
"typeVersion": 1.2,
"alwaysOutputData": false
},
{
"id": "369cecc4-acf5-4860-8f51-41e84050a979",
"name": "Send Image for Text1",
"type": "n8n-nodes-base.telegram",
"position": [
4544,
4208
],
"webhookId": "d60e4ec3-3b38-4bfa-8cd8-16cb84a8ffb4",
"parameters": {
"chatId": "={{ $('Extract & Validate Data1').item.json.chatId }}",
"operation": "sendPhoto",
"binaryData": true,
"additionalFields": {}
},
"typeVersion": 1.2,
"alwaysOutputData": false
},
{
"id": "29fdeffd-ec9e-47b0-b405-a16f91ff7131",
"name": "Edit Fields for \"Build 메모리_auto1 Document1",
"type": "n8n-nodes-base.set",
"position": [
5312,
4208
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "3c3e63a7-612a-4cae-87a1-c62269edd9f0",
"name": "timestamp",
"type": "string",
"value": "={{ $('Build Context2').first().json.timestamp }}\n\n"
},
{
"id": "343ca189-eb7b-45b2-a822-2865945a2e54",
"name": "userID",
"type": "string",
"value": "={{ $('Build Context2').first().json.userId }}"
},
{
"id": "7a40f118-9a6c-41e4-bb5d-c0dbe4336141",
"name": "summary",
"type": "string",
"value": "={{ $json.text }}"
},
{
"id": "9a14f91d-6d2f-4eb7-bc28-a92a4ff556f8",
"name": "user_message",
"type": "string",
"value": "={{ $('Build Context2').first().json.messageText}}"
},
{
"id": "789f2a9e-0fc7-40f7-9155-6b6b26b4e309",
"name": "assistant_response",
"type": "string",
"value": "={{ $json.text }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "40b8890f-07c3-448a-bc1f-756c3f9814c2",
"name": "AI 에이전트 FOR Generate Image Prompt1",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2912,
4208
],
"parameters": {
"text": "=You are Simran, a helpful and friendly AI assistant specializing in image creation.\n\n--- CONTEXT FROM PAST CONVERSATIONS ---\n{{ $('Build Context2').first().json.memoryContext }}\n--- CONTEXT FROM MEMORY_AUTO ---\n{{$(\"Build Auto Memory Context1\").first().json.memory_auto_context}}\n--- END OF CONTEXT ---\n\nUSER'S LATEST MESSAGE:\n{{ $('Merge1').first().json.messageText }}\nBased on the above conversation context, generate a detailed image generation prompt that best fulfills the user's request. The prompt should be suitable for a state-of-the-art image generation model (e.g., DALL-E 3, Midjourney).\n\nThe generated prompt should include:\n\n* A clear description of the subject matter.\n* The desired style and artistic medium (e.g., photorealistic, painting, cartoon, sketch).\n* Specific details regarding lighting, color palette, composition, and perspective.\n* Any relevant artistic influences or references.\n\n\nOutput the image generation prompt only, without any introductory or conversational text. For example: A photorealistic image of a majestic lion roaring on a mountaintop at sunset, with warm golden lighting and vibrant colors.",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2
},
{
"id": "d79faab0-46f1-475b-ba85-ab23ec43acba",
"name": "메모11",
"type": "n8n-nodes-base.stickyNote",
"position": [
-16,
3680
],
"parameters": {
"color": 7,
"width": 6720,
"height": 2260,
"content": ""
},
"typeVersion": 1
},
{
"id": "f6359d8e-79fb-47dd-9e22-ede24a9fdedf",
"name": "메모12",
"type": "n8n-nodes-base.stickyNote",
"position": [
3200,
4784
],
"parameters": {
"color": 4,
"width": 2620,
"height": 240,
"content": "## Set Reminder workflow "
},
"typeVersion": 1
},
{
"id": "35107c88-40df-4913-adc3-4f4deb8e2cda",
"name": "메모13",
"type": "n8n-nodes-base.stickyNote",
"position": [
3200,
5072
],
"parameters": {
"color": 4,
"width": 2620,
"height": 860,
"content": "## Main Chat workflow "
},
"typeVersion": 1
},
{
"id": "2270c23d-1777-4b60-b75c-f79e810add09",
"name": "메모14",
"type": "n8n-nodes-base.stickyNote",
"position": [
2848,
4144
],
"parameters": {
"color": 4,
"width": 2980,
"height": 260,
"content": "## image generation workflow (for chat input)"
},
"typeVersion": 1
},
{
"id": "7074c9ce-53c3-48b3-bcb0-8debe8480bf0",
"name": "메모15",
"type": "n8n-nodes-base.stickyNote",
"position": [
768,
4640
],
"parameters": {
"color": 5,
"width": 2400,
"height": 1040,
"content": "## Segment of \"Intent Analysis → Context Building → Routing\""
},
"typeVersion": 1
},
{
"id": "dcddf04e-1fd8-40f7-b7d3-6a597ed2e1d1",
"name": "메모16",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
3712
],
"parameters": {
"color": 7,
"width": 680,
"height": 280,
"content": "## Update GF Mode → Notify User"
},
"typeVersion": 1
},
{
"id": "d09d51b5-615d-45d9-9ff9-0251a8119a96",
"name": "메모17",
"type": "n8n-nodes-base.stickyNote",
"position": [
32,
5632
],
"parameters": {
"color": 7,
"width": 680,
"height": 280,
"content": "## Update GF Mode → Notify User"
},
"typeVersion": 1
},
{
"id": "e8ccb581-cb05-4818-92b1-6ce4616ab988",
"name": "메모18",
"type": "n8n-nodes-base.stickyNote",
"position": [
128,
4144
],
"parameters": {
"color": 3,
"width": 620,
"height": 380,
"content": "Telegram Request Handling \"🔔 Trigger → Route\"\n\n\"🎙️ Voice Pipeline\"\n\n\"💬 Chat Pipeline\""
},
"typeVersion": 1
},
{
"id": "0af3f0ff-c170-4766-bff5-bb8a643b2792",
"name": "메모19",
"type": "n8n-nodes-base.stickyNote",
"position": [
784,
3728
],
"parameters": {
"color": 5,
"width": 2720,
"height": 900,
"content": "## Segment (Voice input) \"Intent Analysis → Context Building → Routing\""
},
"typeVersion": 1
},
{
"id": "12bef327-ae21-4406-90e6-7293eced2ae5",
"name": "메모20",
"type": "n8n-nodes-base.stickyNote",
"position": [
3504,
3680
],
"parameters": {
"color": 3,
"width": 260,
"height": 200,
"content": ""
},
"typeVersion": 1
},
{
"id": "9f575aca-fabd-4299-954e-62dfc0220d63",
"name": "메모21",
"type": "n8n-nodes-base.stickyNote",
"position": [
3520,
3728
],
"parameters": {
"color": 5,
"width": 3100,
"height": 460,
"content": "## Segment (Voice input) \"Fetch memory → Context Building → Ai agent → TTS → Reply as voice message → Summarize memory → save in Mongodb \""
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"Code1": {
"main": [
[
{
"node": "Chat Agent2",
"type": "main",
"index": 0
}
]
]
},
"Merge1": {
"main": [
[
{
"node": "80135d9c-f498-4b94-8055-d1c9546c7002",
"type": "main",
"index": 0
}
]
]
},
"Merge3": {
"main": [
[
{
"node": "Code1",
"type": "main",
"index": 0
}
]
]
},
"e010f582-53f1-4466-8062-55f64677c24e": {
"main": [
[
{
"node": "1fdaa2ee-023b-4465-bfc0-82004e995ab4",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait 5 Seconds1",
"type": "main",
"index": 0
}
]
]
},
"Chat Agent2": {
"main": [
[
{
"node": "Extract Memory Info1",
"type": "main",
"index": 0
},
{
"node": "Summarize Chat2",
"type": "main",
"index": 0
}
]
]
},
"Chat Agent3": {
"main": [
[
{
"node": "009fa58e-6841-450b-9dbe-f7eb1920a7ad",
"type": "main",
"index": 0
}
]
]
},
"65e0555d-6ae7-4e8a-a384-eec11747ce65": {
"main": [
[
{
"node": "Merge3",
"type": "main",
"index": 1
}
]
]
},
"37cb8ea5-74f9-432f-a375-f617972b5405": {
"main": [
[
{
"node": "Convert to File",
"type": "main",
"index": 0
}
]
]
},
"ec9eeb7a-7a11-4dcf-b5f3-6b25721f38ef": {
"main": [
[
{
"node": "Save Conversation Memory on user_memory1",
"type": "main",
"index": 0
}
]
]
},
"4fe3e686-4f33-46a8-a39b-b7204f652a86": {
"main": [
[
{
"node": "Google Calendar",
"type": "main",
"index": 0
}
]
]
},
"163591c3-5628-4106-b8b9-4752eeb1b0f4": {
"main": [
[
{
"node": "Save Conversation Memory on memory_auto3",
"type": "main",
"index": 0
}
]
]
},
"47ace0a4-cfcb-4d3a-b502-ee74e7e4ac7a": {
"main": [
[
{
"node": "9c5fdfac-36c4-4b2e-86e6-95b717f9dbc8",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request": {
"main": [
[
{
"node": "37cb8ea5-74f9-432f-a375-f617972b5405",
"type": "main",
"index": 0
}
]
]
},
"7dd84a47-6823-413f-a0e0-b9b948c0591f": {
"main": [
[
{
"node": "e7464617-de63-4452-bcd8-1994d30d3e5f",
"type": "main",
"index": 0
}
]
]
},
"d4718b18-3ab6-46ab-bc1a-01bb44f87e47": {
"main": [
[
{
"node": "24515f37-6718-4d4d-a590-4232d3db8a93",
"type": "main",
"index": 0
}
]
]
},
"f6b97a69-5a68-4a62-8ce2-454004356bcc": {
"main": [
[
{
"node": "AI Agent FOR Generate Image Prompt1",
"type": "main",
"index": 0
}
],
[
{
"node": "Merge3",
"type": "main",
"index": 0
}
],
[
{
"node": "89344e12-bef2-434c-8d4c-04d9f10a2b18",
"type": "main",
"index": 0
}
]
]
},
"1458aeb0-a55e-4afc-87fa-c9295423a066": {
"main": [
[
{
"node": "HTTP Request for image generation on voice input1",
"type": "main",
"index": 0
}
],
[
{
"node": "dc1ecead-b948-4c36-9efb-232039361141",
"type": "main",
"index": 0
}
]
]
},
"009fa58e-6841-450b-9dbe-f7eb1920a7ad": {
"main": [
[
{
"node": "1211542b-b400-45c6-8bb5-50dedfb48877",
"type": "main",
"index": 0
}
]
]
},
"e67b71c0-745e-42dd-972c-cdf1cfd21e41": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 0
}
]
]
},
"951ce74b-462c-4856-966e-2bcbdb979c93": {
"main": [
[
{
"node": "Chat Agent3",
"type": "main",
"index": 0
}
]
]
},
"d96f5ee1-3a79-4f74-b8ee-40cd3721c37c": {
"main": [
[
{
"node": "4fe3e686-4f33-46a8-a39b-b7204f652a86",
"type": "main",
"index": 0
}
]
]
},
"f230fb7a-8648-4e44-9b14-2e0ec64553ec": {
"main": [
[
{
"node": "6902bb1a-86d0-4d8e-b1d6-49ef22423aed",
"type": "main",
"index": 0
}
],
[
{
"node": "e010f582-53f1-4466-8062-55f64677c24e",
"type": "main",
"index": 0
}
]
]
},
"1211542b-b400-45c6-8bb5-50dedfb48877": {
"main": [
[
{
"node": "faf9e2a9-06cd-4276-bab2-2349d66185b1",
"type": "main",
"index": 0
}
]
]
},
"e7464617-de63-4452-bcd8-1994d30d3e5f": {
"main": [
[
{
"node": "f6b97a69-5a68-4a62-8ce2-454004356bcc",
"type": "main",
"index": 0
},
{
"node": "094e1b07-60c0-4283-a4fb-b33f29dc952f",
"type": "main",
"index": 0
}
]
]
},
"24515f37-6718-4d4d-a590-4232d3db8a93": {
"main": [
[
{
"node": "1458aeb0-a55e-4afc-87fa-c9295423a066",
"type": "main",
"index": 0
}
]
]
},
"Convert to File": {
"main": [
[
{
"node": "369cecc4-acf5-4860-8f51-41e84050a979",
"type": "main",
"index": 0
}
]
]
},
"dc1ecead-b948-4c36-9efb-232039361141": {
"main": [
[
{
"node": "Fetch User Memory3",
"type": "main",
"index": 0
}
]
]
},
"Google Calendar": {
"main": [
[
{
"node": "47ace0a4-cfcb-4d3a-b502-ee74e7e4ac7a",
"type": "main",
"index": 0
}
]
]
},
"Summarize Chat2": {
"main": [
[
{
"node": "163591c3-5628-4106-b8b9-4752eeb1b0f4",
"type": "main",
"index": 0
}
]
]
},
"Summarize Chat3": {
"main": [
[
{
"node": "Edit Fields for \"Build Memory_auto1 Document1",
"type": "main",
"index": 0
}
]
]
},
"7d8913e0-60a3-4f02-a4e5-68f9127ccbea": {
"main": [
[
{
"node": "Set GF Mode TRUE1",
"type": "main",
"index": 0
}
],
[
{
"node": "Set GF Mode FALSE1",
"type": "main",
"index": 0
}
],
[
{
"node": "180ccc08-3729-4784-8262-e0ecef189665",
"type": "main",
"index": 0
}
]
]
},
"Wait 5 Seconds1": {
"main": [
[
{
"node": "970411a1-6fef-4a00-9616-10c31bc5591b",
"type": "main",
"index": 0
}
]
]
},
"80135d9c-f498-4b94-8055-d1c9546c7002": {
"main": [
[
{
"node": "7dd84a47-6823-413f-a0e0-b9b948c0591f",
"type": "main",
"index": 0
}
]
]
},
"6902bb1a-86d0-4d8e-b1d6-49ef22423aed": {
"main": [
[
{
"node": "d4718b18-3ab6-46ab-bc1a-01bb44f87e47",
"type": "main",
"index": 0
}
]
]
},
"Set GF Mode TRUE1": {
"main": [
[
{
"node": "Google Sheets: Set GF Mode TRUE1",
"type": "main",
"index": 0
}
]
]
},
"Telegram Trigger1": {
"main": [
[
{
"node": "7d8913e0-60a3-4f02-a4e5-68f9127ccbea",
"type": "main",
"index": 0
}
]
]
},
"88451c3d-fc64-4982-a3c6-6972a98f1ca1": {
"main": [
[
{
"node": "HTTP Request",
"type": "main",
"index": 0
}
]
]
},
"Fetch Auto Memory1": {
"main": [
[
{
"node": "Build Auto Memory Context1",
"type": "main",
"index": 0
}
]
]
},
"Fetch User Memory2": {
"main": [
[
{
"node": "e67b71c0-745e-42dd-972c-cdf1cfd21e41",
"type": "main",
"index": 0
}
]
]
},
"Fetch User Memory3": {
"main": [
[
{
"node": "951ce74b-462c-4856-966e-2bcbdb979c93",
"type": "main",
"index": 0
}
]
]
},
"Set GF Mode FALSE1": {
"main": [
[
{
"node": "Google Sheets:Set GF Mode FALSE1",
"type": "main",
"index": 0
}
]
]
},
"094e1b07-60c0-4283-a4fb-b33f29dc952f": {
"main": [
[
{
"node": "fc34f227-fe1a-4e75-9df0-9b57ecf08e87",
"type": "main",
"index": 1
}
]
]
},
"180ccc08-3729-4784-8262-e0ecef189665": {
"main": [
[
{
"node": "HTTP Request Fetch Voice Message Audio1",
"type": "main",
"index": 0
}
],
[
{
"node": "ebe87004-7f42-47c6-8368-eaaeb129a572",
"type": "main",
"index": 0
}
]
]
},
"Extract Memory Info1": {
"main": [
[
{
"node": "38019dc8-445a-428e-baeb-4864a1992909",
"type": "main",
"index": 0
},
{
"node": "Chat Agent Output Cleaner1",
"type": "main",
"index": 0
}
]
]
},
"MongoDB Chat Memory1": {
"ai_memory": [
[
{
"node": "AI Agent FOR Generate Image Prompt1",
"type": "ai_memory",
"index": 0
},
{
"node": "Chat Agent3",
"type": "ai_memory",
"index": 0
},
{
"node": "Chat Agent2",
"type": "ai_memory",
"index": 0
}
]
]
},
"369cecc4-acf5-4860-8f51-41e84050a979": {
"main": [
[
{
"node": "Summarize Chat3",
"type": "main",
"index": 0
}
]
]
},
"c4f787be-16f5-4e0c-adad-7df5084f57cb": {
"main": [
[
{
"node": "Wait 5 Seconds1",
"type": "main",
"index": 0
}
]
]
},
"70d58519-d507-464a-8ea9-9c2e7cb130d0": {
"main": [
[
{
"node": "Merge3",
"type": "main",
"index": 2
}
]
]
},
"fc34f227-fe1a-4e75-9df0-9b57ecf08e87": {
"main": [
[
{
"node": "efe83e10-2c29-4bd6-b56d-c505ebdf57d1",
"type": "main",
"index": 0
}
]
]
},
"ebe87004-7f42-47c6-8368-eaaeb129a572": {
"main": [
[
{
"node": "70d58519-d507-464a-8ea9-9c2e7cb130d0",
"type": "main",
"index": 0
},
{
"node": "edbaef7b-2648-41f0-bae1-7a9adf0a2d38",
"type": "main",
"index": 0
},
{
"node": "Fetch Auto Memory1",
"type": "main",
"index": 0
},
{
"node": "Fetch User Memory2",
"type": "main",
"index": 0
}
]
]
},
"Summarize Voice Message1": {
"main": [
[
{
"node": "b5391cdb-9331-42ca-b67c-85b616ce30f8",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini Chat Model7": {
"ai_languageModel": [
[
{
"node": "AI Agent FOR Generate Image Prompt1",
"type": "ai_languageModel",
"index": 0
},
{
"node": "9c5fdfac-36c4-4b2e-86e6-95b717f9dbc8",
"type": "ai_languageModel",
"index": 0
},
{
"node": "efe83e10-2c29-4bd6-b56d-c505ebdf57d1",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Chat Agent3",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Chat Agent2",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Google Gemini Chat Model8": {
"ai_languageModel": [
[
{
"node": "80135d9c-f498-4b94-8055-d1c9546c7002",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Google Gemini Chat Model9": {
"ai_languageModel": [
[
{
"node": "Extract Memory Info1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"faf9e2a9-06cd-4276-bab2-2349d66185b1": {
"main": [
[
{
"node": "Summarize Voice Message1",
"type": "main",
"index": 0
}
]
]
},
"89344e12-bef2-434c-8d4c-04d9f10a2b18": {
"main": [
[
{
"node": "fc34f227-fe1a-4e75-9df0-9b57ecf08e87",
"type": "main",
"index": 0
}
]
]
},
"Build Auto Memory Context1": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 1
}
]
]
},
"Chat Agent Output Cleaner1": {
"main": [
[
{
"node": "d6b8bbf6-f7de-4f4a-9325-4c882c2c2948",
"type": "main",
"index": 0
}
]
]
},
"Google Gemini Chat Model10": {
"ai_languageModel": [
[
{
"node": "Summarize Chat2",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Google Gemini Chat Model11": {
"ai_languageModel": [
[
{
"node": "Summarize Chat3",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Google Gemini Chat Model12": {
"ai_languageModel": [
[
{
"node": "Summarize Voice Message1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Google Gemini Chat Model13": {
"ai_languageModel": [
[
{
"node": "6902bb1a-86d0-4d8e-b1d6-49ef22423aed",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"38019dc8-445a-428e-baeb-4864a1992909": {
"main": [
[
{
"node": "ec9eeb7a-7a11-4dcf-b5f3-6b25721f38ef",
"type": "main",
"index": 0
}
]
]
},
"970411a1-6fef-4a00-9616-10c31bc5591b": {
"main": [
[
{
"node": "f230fb7a-8648-4e44-9b14-2e0ec64553ec",
"type": "main",
"index": 0
}
]
]
},
"9c5fdfac-36c4-4b2e-86e6-95b717f9dbc8": {
"main": [
[
{
"node": "d2866543-7dad-43e5-a1dd-a120c78d5863",
"type": "main",
"index": 0
}
]
]
},
"edbaef7b-2648-41f0-bae1-7a9adf0a2d38": {
"main": [
[
{
"node": "65e0555d-6ae7-4e8a-a384-eec11747ce65",
"type": "main",
"index": 0
}
]
]
},
"b5391cdb-9331-42ca-b67c-85b616ce30f8": {
"main": [
[
{
"node": "Save Conversation Memory on memory_auto5",
"type": "main",
"index": 0
}
]
]
},
"5c66915b-1f71-4df1-bf26-835ba1027918": {
"main": [
[
{
"node": "c4f787be-16f5-4e0c-adad-7df5084f57cb",
"type": "main",
"index": 0
}
]
]
},
"Google Sheets: Set GF Mode TRUE1": {
"main": [
[
{
"node": "f94e4f61-52bf-4e17-b743-83767e7aec7f",
"type": "main",
"index": 0
}
]
]
},
"Google Sheets:Set GF Mode FALSE1": {
"main": [
[
{
"node": "5d5a556d-8df9-4e39-9a6f-b91069455c08",
"type": "main",
"index": 0
}
]
]
},
"AI Agent FOR Generate Image Prompt1": {
"main": [
[
{
"node": "88451c3d-fc64-4982-a3c6-6972a98f1ca1",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request Fetch Voice Message Audio1": {
"main": [
[
{
"node": "5c66915b-1f71-4df1-bf26-835ba1027918",
"type": "main",
"index": 0
}
]
]
},
"efe83e10-2c29-4bd6-b56d-c505ebdf57d1": {
"main": [
[
{
"node": "d96f5ee1-3a79-4f74-b8ee-40cd3721c37c",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields for \"Build Memory_auto1 Document1": {
"main": [
[
{
"node": "Save Conversation Memory on memory_auto4",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 개인 생산성, AI 챗봇
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
기억, Google 스위트, 다양한 AI 연구 이미징을 통합한 WhatsApp 어시스턴트
기억, Google 패키지 및 다양한 AI 연구 이미징을 포함한 WhatsApp 어시스턴트 구축
If
Set
Code
+
If
Set
Code
71 노드Iniyavan JC
AI 챗봇
시각화 참조 라이브러리에서 n8n 노드를 탐색
可视化 참조 라이브러리에서 n8n 노드를 탐색
If
Ftp
Set
+
If
Ftp
Set
113 노드I versus AI
기타
Telegram 포럼 패ulse: Gemini와 Groq AI 모델을 사용한 커뮤니티 모니터링
Telegram 포럼 패스: Gemini와 Groq AI 모델을 사용한 커뮤니티 모니터링
If
Set
Code
+
If
Set
Code
59 노드Nguyen Thieu Toan
기타
LinkedIn 및 X 바이럴 콘텐츠 자동 엔진
사용AI생성및게시자동생성LinkedIn및X의病毒콘텐츠
If
Set
Wait
+
If
Set
Wait
156 노드Diptamoy Barman
콘텐츠 제작
第一轮 Telegram 및 LinkedIn 快速通道 AI 招聘어시스턴트
AI候选人筛选流程:LinkedIn로Telegram,통합Gemini与Apify
If
Set
Code
+
If
Set
Code
55 노드Dean Pike
인사
스마트资金관리器
基于Telegram、Google Sheets및OpenAI의AI驱动收据및支出追踪器
If
Set
Code
+
If
Set
Code
50 노드Khairul Muhtadin
금융
워크플로우 정보
난이도
고급
노드 수95
카테고리2
노드 유형22
저자
Iniyavan JC
@netwithjc🚀 Automation expert & AI enthusiast. I build custom n8n workflows, AI agents, API integrations, and smart automations using LLMs, databases, cloud tools & more. Skilled in Docker, MongoDB, Google Sheets, ACRCloud, and building fast, context-aware agents. Let's turn your idea into a powerful workflow!
외부 링크
n8n.io에서 보기 →
이 워크플로우 공유