This workflow corresponds to n8n.io template #7755 — we link there as the canonical source.
This workflow follows the Chainllm → Google Gemini Chat recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "3209ae09-810e-4b97-84fa-7a6a55c2bc51",
"name": "Gemini",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
672,
448
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "9ab04e86-e205-4771-ade5-854fa6f1aa07",
"name": "Create a post",
"type": "n8n-nodes-bluesky-enhanced.bluesky",
"position": [
2144,
128
],
"parameters": {
"postText": "={{ $json.data }}"
},
"credentials": {
"blueskyApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "388e2b67-29a7-449d-9adf-3efb4040d4f3",
"name": "Telegram Input Trigger",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
0,
0
],
"parameters": {
"updates": [
"message"
],
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "ffd5f23b-9692-46f8-bbbf-3d636541a3c6",
"name": "RSS Feed - AI Trends",
"type": "n8n-nodes-base.rssFeedReadTrigger",
"position": [
0,
576
],
"parameters": {
"feedUrl": "https://www.aitrends.com/feed/",
"pollTimes": {
"item": [
{
"hour": 0
}
]
}
},
"typeVersion": 1
},
{
"id": "c83fb2d3-d1e9-4adf-b194-0c0fcb33c698",
"name": "RSS Feed - Machine Learning Mastery",
"type": "n8n-nodes-base.rssFeedReadTrigger",
"position": [
0,
384
],
"parameters": {
"feedUrl": "https://machinelearningmastery.com/blog/feed/",
"pollTimes": {
"item": [
{
"hour": 18
}
]
}
},
"typeVersion": 1
},
{
"id": "2ca69e66-0349-48c5-a631-148a1852c831",
"name": "RSS Feed - Technology Review",
"type": "n8n-nodes-base.rssFeedReadTrigger",
"position": [
0,
192
],
"parameters": {
"feedUrl": "https://www.technologyreview.com/feed/",
"pollTimes": {
"item": [
{
"hour": 22
}
]
}
},
"typeVersion": 1
},
{
"id": "64fe0144-f553-442a-9c74-e61fcb0e2a0c",
"name": "Prepare Input URL",
"type": "n8n-nodes-base.set",
"position": [
224,
288
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "5f28758b-5440-44da-af94-0a3c7f53db32",
"name": "inputUrl",
"type": "string",
"value": "={{ $json.link || $json.message.text }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "b168e57e-5af2-48dd-8442-8bf09b46a2fa",
"name": "Extract Web Content (JinaAI)",
"type": "n8n-nodes-base.jinaAi",
"position": [
448,
288
],
"parameters": {
"url": "={{ $json.inputUrl }}",
"options": {},
"requestOptions": {}
},
"credentials": {
"jinaAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "d3a5a132-8ae6-4c8c-bb6c-f010b7ed2b7e",
"name": "Transform Content to Thread",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
672,
288
],
"parameters": {
"text": "=Title: {{ $json.title }}\nDescription: {{ $json.description }}\n\nContent: {{ $json.content }}",
"batching": {},
"messages": {
"messageValues": [
{
"message": "=You are a social media strategist crafting high-performing Threads posts.\nYour mission: take the input content and turn it into a captivating, scroll-stopping Threads thread. Follow these principles:\n\n1. Hook Like a Pro\nOpen with a post that makes people stop scrolling\u2014create intrigue without lying.\n\nUse curiosity-driven hooks such as:\n\n\"This changes everything about\u2026\"\n\n\"Most people don\u2019t realize that\u2026\"\n\nA bold but truthful statement.\n\nPose questions or statements that leave a knowledge gap people want to fill.\n\nKeep it authentic\u2014never trick your audience.\n\n2. Make It Flow\nBreak the content into short, clear, and connected posts.\n\nEvery post should push the reader to the next one.\n\nKeep language simple and conversational (unless technical accuracy is critical).\n\n3. Engage Without Overdoing It\nUse humor lightly\u2014only if it fits naturally.\n\nAvoid emojis unless they genuinely enhance the point.\n\nKeep the core message intact while optimizing for retention and shareability.\n\n4. Exact Output Rules\nFormat:\nNever use a dash or em dash, consider substituting it with other punctuation like commas or rephrase the sentence to eliminate the interruption entirely\n\nWrap the entire thread in [THREADSTART] and [THREADEND].\n\nSeparate each post with -cutthread-.\nA post is maximum of 300 character\n\n\nExample:\n\n[THREADSTART]\nFirst post content here\n-cutthread-\nSecond post content here\n-cutthread-\nThird post content here\n-cutthread-\nlastpost must be:\n\"Read more on: {{ $('Prepare Input URL').item.json.inputUrl }}\n\nGet AI automation to make life easier on https://khaisa.studio\"\n[THREADEND]\n\n\n\nOutput only the transformed thread. No greetings, explanations, or meta-notes.\n"
}
]
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "a7846af1-bfd9-480d-bfcf-822b1b0c3954",
"name": "Reply with Next Post",
"type": "n8n-nodes-bluesky-enhanced.bluesky",
"position": [
2144,
320
],
"parameters": {
"cid": "={{ $('Store Post URI and CID').first(0, $runIndex).json.cid }}",
"uri": "={{ $('Store Post URI and CID').first(0, $runIndex).json.uri }}",
"operation": "reply",
"replyText": "={{ $json.data }}"
},
"credentials": {
"blueskyApi": {
"name": "<your credential>"
}
},
"typeVersion": 2
},
{
"id": "d19235e2-1afb-432d-a67c-54e2be4b4196",
"name": "Wait Before Next Reply",
"type": "n8n-nodes-base.wait",
"position": [
2368,
320
],
"parameters": {
"amount": 10
},
"typeVersion": 1.1
},
{
"id": "f25c81e6-e51d-49c0-88b5-8a6b5c05c549",
"name": "Wait Before Next Post (Initial)",
"type": "n8n-nodes-base.wait",
"position": [
2368,
128
],
"parameters": {
"amount": 10
},
"typeVersion": 1.1
},
{
"id": "42f0a200-6ab7-4b14-a106-96d3cd5c53d6",
"name": "Store Post URI and CID",
"type": "n8n-nodes-base.set",
"position": [
2592,
320
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "917b7937-db3d-4cc8-974d-d294e99f6b2f",
"name": "uri",
"type": "string",
"value": "={{ $json.uri }}"
},
{
"id": "94914b8d-8def-4bcf-8882-6423c878b347",
"name": "cid",
"type": "string",
"value": "={{ $json.cid }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "daa3032f-45c7-425f-87b8-5e9f813152c2",
"name": "Check First Post Condition",
"type": "n8n-nodes-base.if",
"position": [
1920,
224
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "233a4b45-8983-42a1-9c18-5922cebc69ee",
"operator": {
"type": "number",
"operation": "lt"
},
"leftValue": "={{ $runIndex }}",
"rightValue": 1
}
]
}
},
"executeOnce": false,
"typeVersion": 2.2,
"alwaysOutputData": false
},
{
"id": "696904d2-25f1-4ae2-9a30-c97ee39109dd",
"name": "Split Thread into Posts",
"type": "n8n-nodes-base.splitOut",
"position": [
1472,
288
],
"parameters": {
"options": {},
"fieldToSplitOut": "data"
},
"typeVersion": 1
},
{
"id": "a291587b-eb4d-43e6-b167-37249a0d9fc1",
"name": "Clean Thread Text",
"type": "n8n-nodes-base.code",
"position": [
1248,
288
],
"parameters": {
"jsCode": "// Mengambil teks dari input menggunakan sintaks yang Anda tentukan.\nconst fullText = $input.first().json.data\n\n// Regex untuk mengekstrak blok thread.\nconst regex = /\\[THREADSTART\\]([\\s\\S]*?)\\[THREADEND\\]/;\nconst match = fullText.match(regex);\n\n// Variabel untuk menampung hasil akhir.\nlet finalArray = [];\n\n// Jika blok thread ditemukan, proses isinya.\nif (match && match[1]) {\n const contentBlock = match[1];\n\n // Pisahkan string menjadi array, lalu bersihkan setiap elemen.\n finalArray = contentBlock\n .split('-cutthread-')\n .map(thread => thread.trim())\n .filter(thread => thread.length > 0);\n}\n\n// Kembalikan satu item baru dengan format yang Anda inginkan.\n// Stuktur { json: { ... } } adalah format standar n8n untuk item.\nreturn [{\n json: {\n data: finalArray\n }\n}];"
},
"typeVersion": 2
},
{
"id": "7bb36ded-ac68-4b04-803d-de3606a01bd1",
"name": "Prepare Thread Data",
"type": "n8n-nodes-base.set",
"position": [
1024,
288
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "4b70d452-77d7-4880-86a1-efa589defdec",
"name": "data",
"type": "string",
"value": "={{ $json.text }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "ccfde7ea-492e-4e60-8512-99a9975d08a2",
"name": "Loop Through Thread Posts",
"type": "n8n-nodes-base.splitInBatches",
"position": [
1696,
288
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "e45bae01-92bb-492d-b57d-5cd946bb39b3",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
192,
608
],
"parameters": {
"width": 528,
"height": 208,
"content": "## \ud83d\udccc How to Get Credentials\n\n- **Telegram Bot** \u2192 Create a bot via [@BotFather](https://t.me/botfather), copy the *API Token*. \n- **JinaAI** \u2192 Sign up at [jina.ai](https://jina.ai), get your *API Key* from the dashboard. \n- **Google Gemini** \u2192 Enable the API at [Google AI Studio](https://makersuite.google.com/), generate an *API Key*. \n- **Bluesky** \u2192 Log in at [Bluesky](https://bsky.app), create an *App Password* in settings. \n"
},
"typeVersion": 1
},
{
"id": "ce910a82-f680-4712-be9b-430dfffafb7b",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
768,
608
],
"parameters": {
"width": 528,
"height": 208,
"content": "## Error Handling\n\n- If JinaAI fails \u2192 check URL is valid & accessible. \n- If Gemini times out \u2192 reduce prompt size or simplify input. \n- If Bluesky rejects post \u2192 check App Password validity or rate limits. \n- Always test with a small sample before running full automation. \n"
},
"typeVersion": 1
},
{
"id": "d7bb0bac-1edc-4e23-aa24-0bd58624aa43",
"name": "Alt",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
816,
448
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
}
],
"connections": {
"Gemini": {
"ai_languageModel": [
[
{
"node": "Transform Content to Thread",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Create a post": {
"main": [
[
{
"node": "Wait Before Next Post (Initial)",
"type": "main",
"index": 0
}
]
]
},
"Clean Thread Text": {
"main": [
[
{
"node": "Split Thread into Posts",
"type": "main",
"index": 0
}
]
]
},
"Prepare Input URL": {
"main": [
[
{
"node": "Extract Web Content (JinaAI)",
"type": "main",
"index": 0
}
]
]
},
"Prepare Thread Data": {
"main": [
[
{
"node": "Clean Thread Text",
"type": "main",
"index": 0
}
]
]
},
"RSS Feed - AI Trends": {
"main": [
[
{
"node": "Prepare Input URL",
"type": "main",
"index": 0
}
]
]
},
"Reply with Next Post": {
"main": [
[
{
"node": "Wait Before Next Reply",
"type": "main",
"index": 0
}
]
]
},
"Store Post URI and CID": {
"main": [
[
{
"node": "Loop Through Thread Posts",
"type": "main",
"index": 0
}
]
]
},
"Telegram Input Trigger": {
"main": [
[
{
"node": "Prepare Input URL",
"type": "main",
"index": 0
}
]
]
},
"Wait Before Next Reply": {
"main": [
[
{
"node": "Store Post URI and CID",
"type": "main",
"index": 0
}
]
]
},
"Split Thread into Posts": {
"main": [
[
{
"node": "Loop Through Thread Posts",
"type": "main",
"index": 0
}
]
]
},
"Loop Through Thread Posts": {
"main": [
[],
[
{
"node": "Check First Post Condition",
"type": "main",
"index": 0
}
]
]
},
"Check First Post Condition": {
"main": [
[
{
"node": "Create a post",
"type": "main",
"index": 0
}
],
[
{
"node": "Reply with Next Post",
"type": "main",
"index": 0
}
]
]
},
"Transform Content to Thread": {
"main": [
[
{
"node": "Prepare Thread Data",
"type": "main",
"index": 0
}
]
]
},
"Extract Web Content (JinaAI)": {
"main": [
[
{
"node": "Transform Content to Thread",
"type": "main",
"index": 0
}
]
]
},
"RSS Feed - Technology Review": {
"main": [
[
{
"node": "Prepare Input URL",
"type": "main",
"index": 0
}
]
]
},
"Wait Before Next Post (Initial)": {
"main": [
[
{
"node": "Store Post URI and CID",
"type": "main",
"index": 0
}
]
]
},
"RSS Feed - Machine Learning Mastery": {
"main": [
[
{
"node": "Prepare Input URL",
"type": "main",
"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.
blueskyApigooglePalmApijinaAiApiopenAiApitelegramApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
Source: https://n8n.io/workflows/7755/ — 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.
A Telegram bot that converts natural-language work descriptions into detailed cost estimates using AI parsing, vector search, and the open-source DDC CWICR database with 55,000+ construction work item
Ultimate Blogblizt is a powerhouse workflow that solves the tedious task of crafting and publishing SEO-optimized tech blog posts. It integrates AI models (OpenAI, Google Gemini), WordPress, and multi
BlogBlitz is a powerful workflow that automates the creation and publishing of SEO-optimized blog posts to WordPress, saving you hours of manual content creation. Triggered on a schedule or via Telegr
Tired of sifting through endless articles to stay updated on Artificial Intelligence? This workflow transforms you into an intelligence analyst by automatically fetching the latest AI news, using Goog
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.