8
n8n 한국어amn8n.com

Bluesky에서 주제 생성

고급

이것은Marketing분야의자동화 워크플로우로, 20개의 노드를 포함합니다.주로 Set, Code, Wait, HttpRequest, SplitInBatches 등의 노드를 사용하며. Bluesky에서 주제를 만들기

사전 요구사항
  • 대상 API의 인증 정보가 필요할 수 있음

카테고리

워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "7ZIG5xxEACMBgj4Z",
  "meta": {
    "instanceId": "1b1e85a338c6ce950207b3b471d43405c7b292e6b980ee5b66c1a9e5af2a50f8"
  },
  "name": "Create Threads on Bluesky",
  "tags": [
    {
      "id": "f3JGorUk16BX0hZI",
      "name": "Bluesky",
      "createdAt": "2025-01-19T09:37:40.989Z",
      "updatedAt": "2025-01-19T09:37:40.989Z"
    },
    {
      "id": "hTHZamkzaTBmF3yo",
      "name": "Template",
      "createdAt": "2025-01-16T04:45:44.377Z",
      "updatedAt": "2025-01-16T04:45:44.377Z"
    }
  ],
  "nodes": [
    {
      "id": "5fea442d-80e7-4e9c-9214-12fa8bc98a71",
      "name": "Bluesky 세션 생성",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -2160,
        540
      ],
      "parameters": {
        "url": "https://bsky.social/xrpc/com.atproto.server.createSession",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "identifier",
              "value": "={{ $json.BlueskyHandle }}"
            },
            {
              "name": "password",
              "value": "={{ $json.BlueskyAppPassword }}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "8339e67d-87f8-48a5-a9c9-48d90d9baf49",
      "name": "답글 생성",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1200,
        540
      ],
      "parameters": {
        "url": "https://bsky.social/xrpc/com.atproto.repo.createRecord",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ $('Create Reply Text').item.json.toJsonString() }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $('Create Bluesky Session').item.json.accessJwt}}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "16fa4a6c-ab93-4ea1-9a9b-2f9e9804e25a",
      "name": "매일 오전 9시 실행",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -2640,
        540
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "7c06e67d-a524-457b-a6ce-955aab353352",
      "name": "Bluesky 자격 증명 설정",
      "type": "n8n-nodes-base.set",
      "position": [
        -2380,
        540
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "ec07f538-0164-40c5-a199-45e2a8a4604a",
              "name": "BlueskyHandle",
              "type": "string",
              "value": "[enter your bluesky handle here]"
            },
            {
              "id": "463e906c-c49b-41e0-9176-04bd2c175d0b",
              "name": "BlueskyAppPassword",
              "type": "string",
              "value": "[enter your app password here]"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "156da8f4-5cc7-4a58-9a6c-75b1bd6df4cd",
      "name": "스티커 메모",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2440,
        340
      ],
      "parameters": {
        "color": 3,
        "width": 440,
        "height": 360,
        "content": "## Bluesky Authentication\nSet your Bluesky social link and also your App Password."
      },
      "typeVersion": 1
    },
    {
      "id": "2bd742a8-3955-4452-95c8-9c9a7b8071e2",
      "name": "스티커 메모1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1960,
        340
      ],
      "parameters": {
        "color": 4,
        "width": 440,
        "height": 360,
        "content": "## Initial Post [A]\nWhen the first post is created two identifiers are returned:\n- URI (an at:// link to the post)\n- CID (a content-hash of the post)"
      },
      "typeVersion": 1
    },
    {
      "id": "e6e258e8-e4a7-4e33-bd7c-40dd4eb8842f",
      "name": "스티커 메모2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1480,
        340
      ],
      "parameters": {
        "color": 5,
        "width": 460,
        "height": 360,
        "content": "## First Reply Post [B]\nHere we set the 'ROOT' and the 'PARENT' values.\n\nWe use both URI and CID as ROOT and PARENT, as this is the first child of the root post (Initial Post [A]).\n\nWe receive a new URI and CID in return."
      },
      "typeVersion": 1
    },
    {
      "id": "8e3808d3-ec7d-4f46-89b7-9b27350801de",
      "name": "스티커 메모3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2440,
        740
      ],
      "parameters": {
        "width": 440,
        "height": 380,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Sibling Post [C]\nSet 'ROOT' using URI/CID from the root post (Initial Post [A]).\n\nFor the PARENT, we use the URI and CID returned by the preceeding post (First Reply Post [B])."
      },
      "typeVersion": 1
    },
    {
      "id": "0b9d8329-2dde-4b3b-bd9e-42d5aa367225",
      "name": "답글 텍스트 생성",
      "type": "n8n-nodes-base.code",
      "position": [
        -1420,
        540
      ],
      "parameters": {
        "jsCode": "// Create the reply text\nconst replyText = \"[reply post - hidden]\";\n\n// Calculate timestamp 1 second from now\nconst futureDate = new Date(Date.now() + 1000);\n\n// Create the reply post object\nconst replyPostData = {\n    repo: $('Set Bluesky Credentials').first().json.BlueskyHandle,\n    collection: \"app.bsky.feed.post\",\n    record: {\n        \"$type\": \"app.bsky.feed.post\",\n        text: replyText,\n        reply: {\n            root: {\n                cid: $('Create Initial Post').first().json.cid,\n                uri: $('Create Initial Post').first().json.uri\n            },\n            parent: {\n                cid: $('Create Initial Post').first().json.cid,\n                uri: $('Create Initial Post').first().json.uri\n            }\n        },\n        createdAt: futureDate.toISOString()\n    }\n};\n\nreturn replyPostData;"
      },
      "typeVersion": 2
    },
    {
      "id": "abfbef84-1b94-4ec4-ae96-345d0ea888ce",
      "name": "하위 항목 텍스트 생성",
      "type": "n8n-nodes-base.code",
      "position": [
        -2380,
        780
      ],
      "parameters": {
        "jsCode": "// Create the sibling text\nconst siblingText = \"[first sibling - hidden]\";\n\n// Calculate timestamp 2 seconds from now\nconst futureDate = new Date(Date.now() + 2000);\n\n// Create the sibling post object\nconst siblingPostData = {\n    repo: $('Set Bluesky Credentials').first().json.BlueskyHandle,\n    collection: \"app.bsky.feed.post\",\n    record: {\n        \"$type\": \"app.bsky.feed.post\",\n        text: siblingText,\n        reply: {\n            root: {\n                cid: $('Create Initial Post').first().json.cid,\n                uri: $('Create Initial Post').first().json.uri\n            },\n            parent: {\n                cid: $('Create Reply').first().json.cid,\n                uri: $('Create Reply').first().json.uri\n            }\n        },\n        createdAt: futureDate.toISOString()\n    }\n};\n\nreturn siblingPostData;"
      },
      "typeVersion": 2
    },
    {
      "id": "f554f5bc-bd81-4b09-887b-6c4167e8f5f1",
      "name": "하위 항목 생성",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -2160,
        780
      ],
      "parameters": {
        "url": "https://bsky.social/xrpc/com.atproto.repo.createRecord",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ $('Create Sibling Text').item.json.toJsonString() }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $('Create Bluesky Session').item.json.accessJwt}}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "7a7025fe-4b35-44db-8974-2bc81c59eead",
      "name": "스티커 메모5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2700,
        340
      ],
      "parameters": {
        "color": 7,
        "width": 220,
        "height": 360,
        "content": "## Trigger"
      },
      "typeVersion": 1
    },
    {
      "id": "097767bc-fbb2-4e71-af68-b87d354b796e",
      "name": "스티커 메모6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1960,
        740
      ],
      "parameters": {
        "color": 6,
        "width": 940,
        "height": 380,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Sibling Posts using Loop node [D]\nHere we set the 'ROOT' using both URI and CID from the root post (Initial Post [A]), and for all future siblings.\n\nFor the PARENT, we use the URI and CID returned by the preceeding post.\nSo the first loop iteration gets it from the 'Create Sibling' node, and after that from the 'Create Post' node."
      },
      "typeVersion": 1
    },
    {
      "id": "5f8e88ef-0f56-4d81-921f-17dbfea41eec",
      "name": "게시물 루프",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -1720,
        780
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "449a0269-61cb-477c-b315-943daada65ba",
      "name": "초기 게시물 생성",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1680,
        540
      ],
      "parameters": {
        "url": "https://bsky.social/xrpc/com.atproto.repo.createRecord",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ $('Create Post Text').item.json.toJsonString() }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $('Create Bluesky Session').item.json.accessJwt}}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "e29aa109-2b11-44c7-9a85-b5199ef4923c",
      "name": "게시물 생성",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1360,
        780
      ],
      "parameters": {
        "url": "https://bsky.social/xrpc/com.atproto.repo.createRecord",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ $('Create Sibling Text (Loop)').item.json.toJsonString() }}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "=Bearer {{ $('Create Bluesky Session').item.json.accessJwt}}"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "51c05a08-797b-448b-b291-753be14d7c78",
      "name": "대기",
      "type": "n8n-nodes-base.wait",
      "position": [
        -1200,
        780
      ],
      "webhookId": "0414c5a9-938c-427d-98a2-1295eb02380d",
      "parameters": {
        "amount": 2
      },
      "typeVersion": 1.1
    },
    {
      "id": "b9f1bd23-e8f2-472b-ab61-05e85ffece12",
      "name": "게시물 텍스트 생성",
      "type": "n8n-nodes-base.code",
      "position": [
        -1900,
        540
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "// Create the initial post text\nconst postText = \"[initial post - visible]\";\n\n// Create the parent post object\nconst postData = {\n    repo: $('Set Bluesky Credentials').first().json.BlueskyHandle,\n    collection: \"app.bsky.feed.post\",\n    record: {\n        $type: \"app.bsky.feed.post\",\n        text: postText,\n        createdAt: $now\n    }\n};\n\nreturn postData;"
      },
      "typeVersion": 2
    },
    {
      "id": "6c1e26df-564e-4b49-8aff-bc6e5bedcbb8",
      "name": "하위 항목 배열 생성",
      "type": "n8n-nodes-base.code",
      "position": [
        -1900,
        780
      ],
      "parameters": {
        "jsCode": "const items = [\n    { id: 2, name: '[sibling two - hidden]' },\n    { id: 3, name: '[sibling three - hidden]' },\n    { id: 4, name: '[sibling four - hidden]' },\n    { id: 5, name: '[sibling five - hidden]' },\n    { id: 6, name: '[sibling six - hidden]' },\n    { id: 7, name: '[sibling seven - hidden]' },\n    { id: 8, name: '[sibling eight - hidden]' },\n    { id: 9, name: '[sibling nine - visible]' },\n    { id: 10, name: '[sibling ten - visible]' }\n];\n\nreturn items;"
      },
      "typeVersion": 2
    },
    {
      "id": "5a91aff4-1b9d-4c69-beed-fa906c2a133b",
      "name": "하위 항목 텍스트 생성 (루프)",
      "type": "n8n-nodes-base.code",
      "position": [
        -1540,
        780
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "// Create the sibling text\nconst siblingText = `[${$json.name}]`;\n\n// For the first iteration, use the parent IDs from Create Sibling node\n// For subsequent iterations, use the Create Post node\nconst isFirstIteration = $runIndex === 0;\nconst cid = isFirstIteration \n    ? $('Create Sibling').first().json.cid \n    : $('Create Post').first().json.cid;\nconst uri = isFirstIteration \n    ? $('Create Sibling').first().json.uri \n    : $('Create Post').first().json.uri;\n\n// Calculate timestamp 2 seconds from now\nconst futureDate = new Date(Date.now() + 2000);\n\n// Create the sibling post object\nconst siblingPostData = {\n    repo: $('Set Bluesky Credentials').first().json.BlueskyHandle,\n    collection: \"app.bsky.feed.post\",\n    record: {\n        \"$type\": \"app.bsky.feed.post\",\n        text: siblingText,\n        reply: {\n            root: {\n                cid: $('Create Initial Post').first().json.cid,\n                uri: $('Create Initial Post').first().json.uri\n            },\n            parent: {\n                cid: cid,\n                uri: uri\n            }\n        },\n        createdAt: futureDate.toISOString()\n    }\n};\n\nreturn siblingPostData;"
      },
      "typeVersion": 2
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "d0c40145-fbf4-46b5-9df0-5b5c9c896d9c",
  "connections": {
    "51c05a08-797b-448b-b291-753be14d7c78": {
      "main": [
        [
          {
            "node": "5f8e88ef-0f56-4d81-921f-17dbfea41eec",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5f8e88ef-0f56-4d81-921f-17dbfea41eec": {
      "main": [
        [],
        [
          {
            "node": "5a91aff4-1b9d-4c69-beed-fa906c2a133b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e29aa109-2b11-44c7-9a85-b5199ef4923c": {
      "main": [
        [
          {
            "node": "51c05a08-797b-448b-b291-753be14d7c78",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8339e67d-87f8-48a5-a9c9-48d90d9baf49": {
      "main": [
        [
          {
            "node": "abfbef84-1b94-4ec4-ae96-345d0ea888ce",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f554f5bc-bd81-4b09-887b-6c4167e8f5f1": {
      "main": [
        [
          {
            "node": "6c1e26df-564e-4b49-8aff-bc6e5bedcbb8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b9f1bd23-e8f2-472b-ab61-05e85ffece12": {
      "main": [
        [
          {
            "node": "449a0269-61cb-477c-b315-943daada65ba",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0b9d8329-2dde-4b3b-bd9e-42d5aa367225": {
      "main": [
        [
          {
            "node": "8339e67d-87f8-48a5-a9c9-48d90d9baf49",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "16fa4a6c-ab93-4ea1-9a9b-2f9e9804e25a": {
      "main": [
        [
          {
            "node": "7c06e67d-a524-457b-a6ce-955aab353352",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "449a0269-61cb-477c-b315-943daada65ba": {
      "main": [
        [
          {
            "node": "0b9d8329-2dde-4b3b-bd9e-42d5aa367225",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "abfbef84-1b94-4ec4-ae96-345d0ea888ce": {
      "main": [
        [
          {
            "node": "f554f5bc-bd81-4b09-887b-6c4167e8f5f1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6c1e26df-564e-4b49-8aff-bc6e5bedcbb8": {
      "main": [
        [
          {
            "node": "5f8e88ef-0f56-4d81-921f-17dbfea41eec",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5fea442d-80e7-4e9c-9214-12fa8bc98a71": {
      "main": [
        [
          {
            "node": "b9f1bd23-e8f2-472b-ab61-05e85ffece12",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7c06e67d-a524-457b-a6ce-955aab353352": {
      "main": [
        [
          {
            "node": "5fea442d-80e7-4e9c-9214-12fa8bc98a71",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5a91aff4-1b9d-4c69-beed-fa906c2a133b": {
      "main": [
        [
          {
            "node": "e29aa109-2b11-44c7-9a85-b5199ef4923c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

고급 - 마케팅

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
고급
노드 수20
카테고리1
노드 유형7
난이도 설명

고급 사용자를 위한 16+개 노드의 복잡한 워크플로우

저자
Gareth B. Davies

Gareth B. Davies

@garethbdavies

API/AI/Automation Coach with 30 years experience helping teams build sustainable, efficient processes and systems. Join my Automate 30 for 30 live cohort and course to reclaim your time.

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34