8
n8n 中文网amn8n.com

使用 JinaAI 和 Gemini-GPT 将文章转换为 Bluesky 线程帖子

高级

这是一个AI Summarization, Multimodal AI领域的自动化工作流,包含 21 个节点。主要使用 If, Set, Code, Wait, JinaAi 等节点。 使用 JinaAI 和 Gemini/GPT 将文章转换为 Bluesky 线程帖子

前置要求
  • Telegram Bot Token
  • OpenAI API Key
  • Google Gemini API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "meta": {
    "instanceId": "a5fd400c6ce3e6fce31bb31916a9cfa04e30e08115d80423a7e69507457fa5bb",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "3209ae09-810e-4b97-84fa-7a6a55c2bc51",
      "name": "Gemini",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        672,
        448
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "id": "1j4LpZni96FuQhiY",
          "name": "DevUratelier"
        }
      },
      "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": {
          "id": "wMptX8gmJ4XyHZcj",
          "name": "khaisastudio"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "388e2b67-29a7-449d-9adf-3efb4040d4f3",
      "name": "Telegram Input Trigger",
      "type": "n8n-nodes-base.telegramTrigger",
      "position": [
        0,
        0
      ],
      "webhookId": "0356d21b-18e9-4b55-88b5-e417446d7a7d",
      "parameters": {
        "updates": [
          "message"
        ],
        "additionalFields": {}
      },
      "credentials": {
        "telegramApi": {
          "id": "9Dco5JlAC7OO3zas",
          "name": "Khaisa Develompen Bot"
        }
      },
      "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": {
          "id": "2WpVyhvkXlQ9CB1x",
          "name": "AI for Motu"
        }
      },
      "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—create intrigue without lying.\n\nUse curiosity-driven hooks such as:\n\n\"This changes everything about…\"\n\n\"Most people don’t realize that…\"\n\nA bold but truthful statement.\n\nPose questions or statements that leave a knowledge gap people want to fill.\n\nKeep it authentic—never 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—only 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": {
          "id": "wMptX8gmJ4XyHZcj",
          "name": "khaisastudio"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "d19235e2-1afb-432d-a67c-54e2be4b4196",
      "name": "Wait Before Next Reply",
      "type": "n8n-nodes-base.wait",
      "position": [
        2368,
        320
      ],
      "webhookId": "7eedbf8e-f9d5-4e57-9460-731adb238217",
      "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
      ],
      "webhookId": "7eedbf8e-f9d5-4e57-9460-731adb238217",
      "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": "## 📌 How to Get Credentials\n\n- **Telegram Bot** → Create a bot via [@BotFather](https://t.me/botfather), copy the *API Token*.  \n- **JinaAI** → Sign up at [jina.ai](https://jina.ai), get your *API Key* from the dashboard.  \n- **Google Gemini** → Enable the API at [Google AI Studio](https://makersuite.google.com/), generate an *API Key*.  \n- **Bluesky** → 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 → check URL is valid & accessible.  \n- If Gemini times out → reduce prompt size or simplify input.  \n- If Bluesky rejects post → 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": {
          "id": "4CbQgQZVTRffRYMp",
          "name": "Khaisa: aiformotu"
        }
      },
      "typeVersion": 1.2
    }
  ],
  "pinData": {},
  "connections": {
    "3209ae09-810e-4b97-84fa-7a6a55c2bc51": {
      "ai_languageModel": [
        [
          {
            "node": "d3a5a132-8ae6-4c8c-bb6c-f010b7ed2b7e",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "9ab04e86-e205-4771-ade5-854fa6f1aa07": {
      "main": [
        [
          {
            "node": "f25c81e6-e51d-49c0-88b5-8a6b5c05c549",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a291587b-eb4d-43e6-b167-37249a0d9fc1": {
      "main": [
        [
          {
            "node": "696904d2-25f1-4ae2-9a30-c97ee39109dd",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "64fe0144-f553-442a-9c74-e61fcb0e2a0c": {
      "main": [
        [
          {
            "node": "b168e57e-5af2-48dd-8442-8bf09b46a2fa",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7bb36ded-ac68-4b04-803d-de3606a01bd1": {
      "main": [
        [
          {
            "node": "a291587b-eb4d-43e6-b167-37249a0d9fc1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ffd5f23b-9692-46f8-bbbf-3d636541a3c6": {
      "main": [
        [
          {
            "node": "64fe0144-f553-442a-9c74-e61fcb0e2a0c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a7846af1-bfd9-480d-bfcf-822b1b0c3954": {
      "main": [
        [
          {
            "node": "d19235e2-1afb-432d-a67c-54e2be4b4196",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "42f0a200-6ab7-4b14-a106-96d3cd5c53d6": {
      "main": [
        [
          {
            "node": "ccfde7ea-492e-4e60-8512-99a9975d08a2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "388e2b67-29a7-449d-9adf-3efb4040d4f3": {
      "main": [
        [
          {
            "node": "64fe0144-f553-442a-9c74-e61fcb0e2a0c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d19235e2-1afb-432d-a67c-54e2be4b4196": {
      "main": [
        [
          {
            "node": "42f0a200-6ab7-4b14-a106-96d3cd5c53d6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "696904d2-25f1-4ae2-9a30-c97ee39109dd": {
      "main": [
        [
          {
            "node": "ccfde7ea-492e-4e60-8512-99a9975d08a2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ccfde7ea-492e-4e60-8512-99a9975d08a2": {
      "main": [
        [],
        [
          {
            "node": "daa3032f-45c7-425f-87b8-5e9f813152c2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "daa3032f-45c7-425f-87b8-5e9f813152c2": {
      "main": [
        [
          {
            "node": "9ab04e86-e205-4771-ade5-854fa6f1aa07",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "a7846af1-bfd9-480d-bfcf-822b1b0c3954",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d3a5a132-8ae6-4c8c-bb6c-f010b7ed2b7e": {
      "main": [
        [
          {
            "node": "7bb36ded-ac68-4b04-803d-de3606a01bd1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b168e57e-5af2-48dd-8442-8bf09b46a2fa": {
      "main": [
        [
          {
            "node": "d3a5a132-8ae6-4c8c-bb6c-f010b7ed2b7e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2ca69e66-0349-48c5-a631-148a1852c831": {
      "main": [
        [
          {
            "node": "64fe0144-f553-442a-9c74-e61fcb0e2a0c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f25c81e6-e51d-49c0-88b5-8a6b5c05c549": {
      "main": [
        [
          {
            "node": "42f0a200-6ab7-4b14-a106-96d3cd5c53d6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c83fb2d3-d1e9-4adf-b194-0c0fcb33c698": {
      "main": [
        [
          {
            "node": "64fe0144-f553-442a-9c74-e61fcb0e2a0c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

高级 - AI 摘要总结, 多模态 AI

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量21
分类2
节点类型14
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

外部链接
在 n8n.io 查看

分享此工作流

分类

分类: 34