This workflow corresponds to n8n.io template #4365 — we link there as the canonical source.
This workflow follows the Agent → Chainllm recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"nodes": [
{
"id": "3017950d-52a5-4f51-a64d-7f223c01743e",
"name": "chatPrompt",
"type": "n8n-nodes-base.set",
"position": [
0,
-880
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "b3ce66e0-2b6f-4714-a672-59ef6e43ced9",
"name": "prompt",
"type": "string",
"value": "=1. Rules\n- Communicate formally, clearly, and respectfully at all times.\n- Be concise and precise, avoiding unnecessary details.\n- Maintain a positive, professional tone as a reliable and knowledgeable assistant.\n- Respect user boundaries and refrain from engaging in prohibited or inappropriate topics.\n- Keep the conversation engaging by encouraging user participation, but when requesting clarification or additional information, ask only one focused question at a time to avoid overwhelming the user. Avoid abrupt endings to the dialogue.\n- Follow user instructions precisely.\n- Do not include any additional text or explanations unless explicitly requested.\n\n2. Response instructions\n- Analyze the message and conversation history to maintain context and continuity.\n- If repetition is requested, return the message exactly as provided. Otherwise, respond clearly and appropriately based on intent and context.\n- If the message is vague, suggest an interpretation and ask for clarification while keeping the conversation active."
}
]
}
},
"typeVersion": 3.4
},
{
"id": "975f1ebd-9af9-4bc5-8cec-6c3be3d3a63d",
"name": "otherPrompt",
"type": "n8n-nodes-base.set",
"position": [
0,
-720
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "d78c64d5-3c9e-4ffd-875e-973eb3c4d20a",
"name": "prompt",
"type": "string",
"value": "=1. Rules\n- Communicate formally, clearly, and respectfully at all times.\n- Be concise and precise, avoiding unnecessary details.\n- Maintain a positive, professional tone as a reliable and knowledgeable assistant.\n- Respect user boundaries and refrain from engaging in prohibited or inappropriate topics.\n- Keep the conversation engaging by encouraging user participation, but when requesting clarification or additional information, ask only one focused question at a time to avoid overwhelming the user. Avoid abrupt endings to the dialogue.\n- Follow user instructions precisely.\n- Do not include any additional text or explanations unless explicitly requested.\n\n2. General Instructions\n- If a message is unclear or lacks details, respond with your best understanding as a suggestion, and politely ask the user to confirm or provide more details if it is not what they meant.\n- If the request is inappropriate or irrelevant, respond politely and clearly refuse, maintaining respect and professionalism, and invite a valid request.\n- Always follow the established rules to maintain professionalism and accuracy."
}
]
}
},
"typeVersion": 3.4
},
{
"id": "f297c8ce-7c7c-4011-9c36-e4993dbfd926",
"name": "generatePrompt",
"type": "n8n-nodes-base.set",
"position": [
0,
-1040
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "70c93816-7110-48e3-a105-568dd766bdf4",
"name": "prompt",
"type": "string",
"value": "=1. General instructions\nCreate a prompt that generates only one response with no comments and no line breaks. Based on the input provided, generate a detailed visual description of the request in a clear and coherent manner. Avoid using quotation marks, apostrophes, or any other punctuation marks.\n\n2. Visual specifications\n- Composition: maintain a balanced and harmonious layout where all elements (images, shapes, and text) work together seamlessly. Ensure that no part of the image feels overcrowded, and the design directs the viewer\u2019s attention naturally. Use a minimalistic approach, avoiding excessive detail or distractions.\n\n- Color palette: choose a color scheme that complements the overall theme and enhances the mood. The colors should be visually pleasing and work together harmoniously. Use no more than 3-4 main colors to maintain simplicity and coherence, ensuring they do not overpower the design.\n\n- Visual clarity: the image should be crisp and clear, with all elements legible and easy to interpret. Avoid blurry or pixelated visuals. Maintain sharp contrasts between key elements for emphasis and visual clarity.\n\n- Image size and resolution: the image should be sized to fit standard display requirements (e.g., social media, web posts). Ensure the resolution is high enough for clarity on both desktop and mobile devices. The image must maintain visual quality without losing sharpness or details when viewed on different screens.\n\n- Aesthetic appeal: aim for a design that is not only functional but also visually appealing. The overall style should be modern, clean, and aesthetically pleasing, with a consistent look that aligns with the intended mood or message. Ensure the design is pleasing to the eye, evoking the intended response from the viewer.\n\n- Visual balance: ensure the elements in the image are well-spaced, with no part feeling too heavy or too light. Create a natural flow of focus, guiding the viewer\u2019s eye through the composition without distraction."
}
]
}
},
"typeVersion": 3.4
},
{
"id": "51eb4b31-0099-4886-9dfd-dc9c02107562",
"name": "buildPrompt",
"type": "n8n-nodes-base.set",
"position": [
140,
-880
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "f435e1c3-6ff9-4e68-852c-0a39a5903ebe",
"name": "prompt",
"type": "string",
"value": "={{ $json.prompt }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "d9a263b3-9078-47e9-8146-abf62100af21",
"name": "ChatCore",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
280,
-880
],
"parameters": {
"text": "=Input from user: {{ $('sessionData').item.json.Mensaje }}\n\n{{ $json.prompt }}\n\nRespond only with the exact text requested, strictly following the instructions above. ",
"options": {
"systemMessage": "=You are a professional enterprise chatbot designed to assist users with clear, respectful, and accurate communication. You provide informative text responses and generate images only upon explicit user requests. Utilize available conversation history to maintain context and coherence. Adhere strictly to company rules to ensure appropriate and secure interactions.\n\nYou can chat with me to get answers and create custom images based on your instructions.\n\nPrioritize the most recent relevant message if multiple prior references exist. Always respond in Spanish when providing text-based chat replies. For image generation requests, respond in English. Keep responses as short as possible without compromising clarity or natural interaction. Do not force interaction with the user beyond what is necessary to respond clearly."
},
"promptType": "define"
},
"typeVersion": 1.9
},
{
"id": "67e27375-a9f9-45d7-8ea9-aad5d18996de",
"name": "GeminiModel",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
300,
-720
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.0-flash-001"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "58ab707f-00e3-4b9f-b598-af89cebf99ce",
"name": "inputProcessor",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
-460,
-880
],
"parameters": {
"text": "=1. Context\nYou are an intelligent assistant designed to analyze user requests accurately by considering both the current user input and prior conversation history (if available). Use this context to improve classification and response relevance. Only classify as \"generate\" if the request clearly meets all criteria. Never assume without certainty.\n\n2. General instructions\n- Use prior conversation history, if available, to interpret references, refinements, or corrections in the user\u2019s message. \n- Apply updates directly when a previous request is being modified (e.g., changing part of a generated image).\n- Maintain context continuity unless the user explicitly shifts the topic.\n- When evaluating intention, prioritize the most recent relevant message to avoid using outdated context.\n- If the message is vague, nonsensical, or overly brief (e.g., a single word), do not classify it as \"generate\". Even if image requests occurred earlier. Only proceed if the current input clearly meets all criteria. Default to \"other\" unless the message includes clear direction.\n\n3. User Request: \"{{ $('sessionData').item.json.Mensaje }}\"\n\n4. Conversation history:\n{{ $json.messages}}\n\n5. Intentions\nClassify the user's intention as exactly one of the following:\n- \"generate\": user requests the direct creation of new visual content (e.g., images or art) to be delivered. This includes implicit requests for physical or tangible objects (e.g., \"give me a pet\"), but only if the message contains clear intent or is supported by prior context. Single-word or vague inputs without clear directive or context should not be treated as generate.\n- \"chat\": user engages in meaningful conversational interaction, including requests to generate textual prompts, explanations, or dialogue that have clear context and intent.\n- \"other\": request does not fit into the above categories, or involves content that is restricted, inappropriate, irrelevant, nonsensical, or lacks clear context or intent distinct from conversational engagement.\n\n6. Data types\nWhen analyzing the user\u2019s message, determine whether a request for a physical or tangible object should be interpreted as a visual content request. In general, treat requests for tangible items as image generation unless the context explicitly suggests otherwise. For intangible content, respond with text unless the user clearly asks for an image.\n\nBased on the intention and content of the request, select exactly one data type to return:\n\n- \"text\": a textual response such as an answer, explanation, dialogue, or prompt text.\n- \"image\": a visual response explicitly or implicitly requested as image generation.\n\nAssign \"image\" as typeData only if the intention is \"generate\". In all other cases, including when the intention is \"other\", assign \"text\".\n\n7. Output format\nRespond only with a JSON object in this exact format, with no additional text or explanation: {\"intention\": \"value\", \"typeData\": \"value\"}",
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.6,
"alwaysOutputData": false
},
{
"id": "0123eef4-eb57-485a-ad01-66dc47b332f8",
"name": "GeminiModel1",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
-440,
-740
],
"parameters": {
"options": {},
"modelName": "models/gemini-2.0-flash"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "8853d1da-5ab6-44cf-8054-7267392c9eae",
"name": "structuredOutput",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-300,
-740
],
"parameters": {
"jsonSchemaExample": "{\n\t\"typeData\": \"text\",\n\t\"intention\": \"generate\"\n}"
},
"typeVersion": 1.2
},
{
"id": "b679111d-c640-4f59-8046-c37fa7f977e9",
"name": "contentType",
"type": "n8n-nodes-base.switch",
"position": [
580,
-800
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "=Imagen",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "24ab5811-2b6d-4f2f-8620-8697dadc2d4d",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $('intentHandler').item.json.output.typeData }}",
"rightValue": "image"
}
]
},
"renameOutput": true
},
{
"outputKey": "Texto",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "28759436-2f6a-4bb3-a9bf-924477241809",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $('intentHandler').item.json.output.typeData }}",
"rightValue": "text"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "8abd3463-8ecc-4086-9057-e7494b8b2d9d",
"name": "textCleaner",
"type": "n8n-nodes-base.code",
"position": [
820,
-980
],
"parameters": {
"jsCode": "let texto = $input.first().json.prompt.replace(/[\\n\\r\\t]/g, \" \") // Reemplaza saltos de l\u00ednea, retorno de carro y tabulaciones por espacio\n .replace(/['\"\\\\]/g, \"\") // Elimina comillas simples, dobles y barras invertidas\n .replace(/\\s+/g, \" \") // Reemplaza m\u00faltiples espacios por un solo espacio\n .trim(); // Elimina los espacios en blanco al inicio y al final\n\nreturn {\n text: texto\n}"
},
"typeVersion": 2
},
{
"id": "a11a2afc-71c4-4b3f-81ec-fb8cacc1d9f2",
"name": "imageGeneration",
"type": "n8n-nodes-base.httpRequest",
"position": [
940,
-980
],
"parameters": {
"url": "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash-exp-image-generation:generateContent",
"method": "POST",
"options": {},
"jsonBody": "={\n \"contents\": [\n {\n \"role\": \"user\",\n \"parts\": [\n {\n \"text\": \"{{ $json.text }}\"\n }\n ]\n }\n ],\n \"generationConfig\": {\n \"responseModalities\": [\"Text\", \"Image\"]\n }\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "googlePalmApi"
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "ccce85bc-79f7-43ed-b649-8b1533d774a5",
"name": "imageBuilder",
"type": "n8n-nodes-base.convertToFile",
"position": [
1060,
-980
],
"parameters": {
"options": {
"fileName": "generated_image.png"
},
"operation": "toBinary",
"sourceProperty": "candidates[0].content.parts[1].inlineData.data"
},
"typeVersion": 1.1
},
{
"id": "4dbbf4c4-4d78-42d3-bdbc-a35a584643ff",
"name": "sendImage",
"type": "n8n-nodes-base.telegram",
"position": [
1180,
-980
],
"parameters": {
"chatId": "={{ $('sessionData').item.json.sessionId }}",
"operation": "sendPhoto",
"binaryData": true,
"additionalFields": {
"fileName": "=generated_image.png"
}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "8e525ff1-f403-4f7a-a281-36fb18824168",
"name": "sendTextMessage",
"type": "n8n-nodes-base.telegram",
"position": [
1180,
-780
],
"parameters": {
"text": "={{ $('ChatCore').item.json.output }}",
"chatId": "={{ $('sessionData').item.json.sessionId }}",
"additionalFields": {
"parse_mode": "HTML",
"appendAttribution": false
}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "4e0fcbad-8b6b-4c39-80ac-6aed0f8cf0fd",
"name": "sessionData",
"type": "n8n-nodes-base.set",
"position": [
-980,
-880
],
"parameters": {
"values": {
"string": [
{
"name": "Mensaje",
"value": "={{ $('userInput').item.json.message.text }}"
},
{
"name": "sessionId",
"value": "={{ $('userInput').item.json.message.chat.id }}"
},
{
"name": "Lenguaje",
"value": "={{ $('userInput').item.json.message.from.language_code }}"
},
{
"name": "Username",
"value": "={{ $('userInput').item.json.message.chat.username }}"
}
]
},
"options": {},
"keepOnlySet": true
},
"typeVersion": 2
},
{
"id": "ea84ebc4-2932-4fd9-8771-b13a929b6ea5",
"name": "conversationStore",
"type": "@n8n/n8n-nodes-langchain.memoryManager",
"position": [
-860,
-880
],
"parameters": {
"options": {
"groupMessages": true
}
},
"typeVersion": 1.1
},
{
"id": "03420024-1474-4b55-a98a-e80e0826ccc7",
"name": "memoryRetriever",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
-820,
-740
],
"parameters": {
"sessionKey": "={{ $('sessionData').item.json.sessionId }}",
"sessionIdType": "customKey",
"contextWindowLength": 2
},
"typeVersion": 1.3
},
{
"id": "28f6a639-1c50-4754-a66c-772cc3a05083",
"name": "latestContext",
"type": "n8n-nodes-base.code",
"position": [
-580,
-880
],
"parameters": {
"jsCode": "const allItems = $input.all();\nconst lastItem = allItems[allItems.length - 1];\n\nif (lastItem && Array.isArray(lastItem.json.messages)) {\n const messages = lastItem.json.messages;\n const count = messages.length;\n\n if (count === 0) return [{ json: { message: \"\" } }];\n\n const extractFirstLine = (text) => {\n if (!text) return \"\";\n return text.split('\\n')[0].replace(/^Input from user:\\s*/, '');\n };\n\n const trimEndNewline = (text) => {\n if (!text) return \"\";\n return text.replace(/\\n+$/, '');\n };\n\n // Tomar los \u00faltimos dos o menos mensajes\n const selectedMessages = (count === 1) ? [messages[0]] : messages.slice(-1);\n\n // Construir el texto concatenado\n const combinedMessage = selectedMessages.map((msg, idx) => {\n return `Message ${idx + 1}:\\nhuman: ${extractFirstLine(msg.human)}\\nai: ${trimEndNewline(msg.ai)}`;\n }).join('\\n\\n');\n\n return [{ json: { messages: combinedMessage } }];\n}\n\nreturn [{ json: { messages: \"\" } }];"
},
"typeVersion": 2
},
{
"id": "14bae45a-aafa-407f-9761-62954acabbbd",
"name": "intentHandler",
"type": "n8n-nodes-base.switch",
"position": [
-180,
-880
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "generate",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "24ab5811-2b6d-4f2f-8620-8697dadc2d4d",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.output.intention }}",
"rightValue": "generate"
}
]
},
"renameOutput": true
},
{
"outputKey": "chat",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "28759436-2f6a-4bb3-a9bf-924477241809",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.output.intention }}",
"rightValue": "chat"
}
]
},
"renameOutput": true
},
{
"outputKey": "other",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "de4b6e87-950e-461c-869f-d27c73f8d763",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.output.intention }}",
"rightValue": "other"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "2f3d4931-9549-449b-8ff8-e27bf7b69e1f",
"name": "userInput",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
-1100,
-880
],
"parameters": {
"updates": [
"message"
],
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "357a258b-32a7-47c4-bcf1-f32cec025cba",
"name": "conversationMemory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
420,
-700
],
"parameters": {
"sessionKey": "={{ $('sessionData').item.json.sessionId }}",
"sessionIdType": "customKey",
"contextWindowLength": 10
},
"typeVersion": 1.3
},
{
"id": "f1dad098-8b9f-4160-91ab-1eb7185d51a2",
"name": "errorPreprocessor",
"type": "n8n-nodes-base.set",
"position": [
700,
-980
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "d11831d7-533b-4132-9849-612e093d6b32",
"name": "prompt",
"type": "string",
"value": "={{ $('ChatCore').item.json.output }} It is mandatory to add a description of the image you are going to make."
}
]
}
},
"typeVersion": 3.4
},
{
"id": "804fcbd3-cbc1-41d9-bbeb-40469545012f",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-860,
-1240
],
"parameters": {
"color": 4,
"width": 380,
"height": 680,
"content": "### 2. Memory and Conversational Context\n\nRetrieves the necessary context to properly infer intentions.\n\n- conversationStore: stores the entire conversation history.\n\n- memoryRetriever: extracts relevant information according to the current need.\n\n- latestContext: formats and prepares the context to be useful in response generation.\n"
},
"typeVersion": 1
},
{
"id": "4b4e8510-6b97-4b1d-afdb-916581aa539d",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1220,
-1240
],
"parameters": {
"color": 5,
"width": 340,
"height": 680,
"content": "### 1. Input and Session Management\n\nReceives messages from Telegram and manages the session to maintain context.\n\n- userInput: captures the user's message.\n\n- sessionData: saves and updates the session state.\n"
},
"typeVersion": 1
},
{
"id": "6b14b58f-2e17-4cfb-baf4-3318b3fd9533",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-460,
-1240
],
"parameters": {
"color": 6,
"width": 700,
"height": 680,
"content": "### 3. Intent Processing and Prompt Generation\nAnalyzes the intention and selects appropriate prompts according to the user's intention.\n\n- inputProcessor: detects intention and type of content to send.\n\n- intentHandler: redirects the flow based on the intention.\n\n- generatePrompt, chatPrompt, otherPrompt, buildPrompt: select the prompts for the response."
},
"typeVersion": 1
},
{
"id": "fa4cfc3f-cdaf-4184-b183-ca31b1aa1d86",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
260,
-1240
],
"parameters": {
"color": 3,
"width": 300,
"height": 680,
"content": "### 4. Core of Generation and Conversation Management\nGenerates responses using Google Gemini, integrating context for coherence.\n\n- ChatCore: orchestrates the generation and management of the conversation.\n\n- GeminiModel: creates the final response based on prompts.\n\n- conversationMemory: stores information to maintain coherence."
},
"typeVersion": 1
},
{
"id": "ce598ece-492b-4294-9aa4-ea0c6757edf2",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
580,
-1240
],
"parameters": {
"color": 7,
"width": 800,
"height": 680,
"content": "### 5. Content Classification and User Delivery\n\nDetermines the type of content and manages its delivery via Telegram.\n\n- contentType: defines the output format (text, image, etc.).\n\n- errorPreprocessor, textCleaner: clean and validate the content.\n\n- imageGeneration, imageBuilder: create visual content when necessary.\n\n- sendImage, sendTextMessage: send the content to the user."
},
"typeVersion": 1
}
],
"connections": {
"ChatCore": {
"main": [
[
{
"node": "contentType",
"type": "main",
"index": 0
}
]
]
},
"userInput": {
"main": [
[
{
"node": "sessionData",
"type": "main",
"index": 0
}
]
]
},
"chatPrompt": {
"main": [
[
{
"node": "buildPrompt",
"type": "main",
"index": 0
}
]
]
},
"GeminiModel": {
"ai_languageModel": [
[
{
"node": "ChatCore",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"buildPrompt": {
"main": [
[
{
"node": "ChatCore",
"type": "main",
"index": 0
}
]
]
},
"contentType": {
"main": [
[
{
"node": "errorPreprocessor",
"type": "main",
"index": 0
}
],
[
{
"node": "sendTextMessage",
"type": "main",
"index": 0
}
]
]
},
"otherPrompt": {
"main": [
[
{
"node": "buildPrompt",
"type": "main",
"index": 0
}
]
]
},
"sessionData": {
"main": [
[
{
"node": "conversationStore",
"type": "main",
"index": 0
}
]
]
},
"textCleaner": {
"main": [
[
{
"node": "imageGeneration",
"type": "main",
"index": 0
}
]
]
},
"GeminiModel1": {
"ai_languageModel": [
[
{
"node": "inputProcessor",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"imageBuilder": {
"main": [
[
{
"node": "sendImage",
"type": "main",
"index": 0
}
]
]
},
"intentHandler": {
"main": [
[
{
"node": "generatePrompt",
"type": "main",
"index": 0
}
],
[
{
"node": "chatPrompt",
"type": "main",
"index": 0
}
],
[
{
"node": "otherPrompt",
"type": "main",
"index": 0
}
]
]
},
"latestContext": {
"main": [
[
{
"node": "inputProcessor",
"type": "main",
"index": 0
}
]
]
},
"generatePrompt": {
"main": [
[
{
"node": "buildPrompt",
"type": "main",
"index": 0
}
]
]
},
"inputProcessor": {
"main": [
[
{
"node": "intentHandler",
"type": "main",
"index": 0
}
]
]
},
"imageGeneration": {
"main": [
[
{
"node": "imageBuilder",
"type": "main",
"index": 0
}
]
]
},
"memoryRetriever": {
"ai_memory": [
[
{
"node": "conversationStore",
"type": "ai_memory",
"index": 0
}
]
]
},
"sendTextMessage": {
"main": [
[]
]
},
"structuredOutput": {
"ai_outputParser": [
[
{
"node": "inputProcessor",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"conversationStore": {
"main": [
[
{
"node": "latestContext",
"type": "main",
"index": 0
}
]
]
},
"errorPreprocessor": {
"main": [
[
{
"node": "textCleaner",
"type": "main",
"index": 0
}
]
]
},
"conversationMemory": {
"ai_memory": [
[
{
"node": "ChatCore",
"type": "ai_memory",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googlePalmApitelegramApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Flexible and scalable chatbot template, designed mainly for Spanish conversations but capable of handling English and other languages. Integrates Google Gemini API for text and image generation, and Telegram for messaging. Supports multiple output types with potential for video,…
Source: https://n8n.io/workflows/4365/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow creates a multi-talented AI assistant named Simran that interacts with users via Telegram. It can handle text and voice messages, understand the user's intent, and perform various tasks.
Creators, marketers, and brands that want to turn a single product photo into premium motion clips, then optionally publish to Instagram/TikTok/YouTube via LATE. No editing skills required.
Product to Social Video (xCodeWraith Edition). Uses telegram, agentTool, telegramTrigger, httpRequest. Event-driven trigger; 83 nodes.
Digital marketers, content creators, social media managers, and businesses who want to use AI marketing automation for YouTube Shorts without spending hours on production. This AI workflow helps anyon
This automation is designed to help you generate AI-powered music tracks, cover art, and fully rendered music videos — all triggered from a simple Telegram chat and managed via Google Sheets.