LinkedIn 게시물 생성 및 승인 자동화
고급
이것은AI, Marketing분야의자동화 워크플로우로, 18개의 노드를 포함합니다.주로 If, Set, Gmail, Switch, LinkedIn 등의 노드를 사용하며인공지능 기술을 결합하여 스마트 자동화를 구현합니다. OpenAI, Google 스프레드시트 및 이메일 승인 워크플로우를 기반으로 한 AI 생성 LinkedIn 게시물
사전 요구사항
- •Google 계정 및 Gmail API 인증 정보
- •LinkedIn API 인증 정보
- •대상 API의 인증 정보가 필요할 수 있음
- •Google Sheets API 인증 정보
- •OpenAI API Key
사용된 노드 (18)
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"id": "w9YVsuUtlNgXOEAQ",
"meta": {
"instanceId": "58a9e858b82757a75629d435ec0da2448ad5d9e906a9ce3b7dcbb64c90fda9fe",
"templateCredsSetupCompleted": true
},
"name": "LinkedIn Post Generation & Approval Automation",
"tags": [
{
"id": "3bzbXbpZW83y48aK",
"name": "content-approval",
"createdAt": "2025-05-13T18:45:19.225Z",
"updatedAt": "2025-05-13T18:45:19.225Z"
},
{
"id": "9SfWdyKRFVbPxrNL",
"name": "post-generator",
"createdAt": "2025-05-13T18:45:09.255Z",
"updatedAt": "2025-05-13T18:45:09.255Z"
},
{
"id": "VWnkUEKQKJB2WmbL",
"name": "linkedin",
"createdAt": "2025-05-13T18:45:04.175Z",
"updatedAt": "2025-05-13T18:45:04.175Z"
}
],
"nodes": [
{
"id": "d0f86395-aeec-4284-a2d5-26db2dfebd53",
"name": "이미지 가져오기",
"type": "n8n-nodes-base.httpRequest",
"position": [
1592,
2120
],
"parameters": {
"url": "={{ $('Get Data from Sheets').item.json.Image }}",
"options": {}
},
"typeVersion": 4.2,
"alwaysOutputData": true
},
{
"id": "b8ca88a6-aaf1-4191-8b75-9a63b746af77",
"name": "일정 트리거",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-260,
2595
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
},
{
"id": "8e4e294f-56d4-4317-aea8-ea258527f55a",
"name": "OpenAI 채팅 모델",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
268,
2815
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "7OVQwPA6RZRwFmwI",
"name": "OpenAI Account"
}
},
"typeVersion": 1.2
},
{
"id": "d262684e-7671-4602-ba77-4270441a69fb",
"name": "Google 스프레드시트에서 데이터 가져오기",
"type": "n8n-nodes-base.googleSheets",
"position": [
-40,
2595
],
"parameters": {
"options": {
"returnFirstMatch": true
},
"filtersUI": {
"values": [
{
"lookupValue": "Pending",
"lookupColumn": "Status"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1EAdLU9-l0ATGDa5_xwTwFO-rPhvZurM2BOSKjH2P-W8/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1EAdLU9-l0ATGDa5_xwTwFO-rPhvZurM2BOSKjH2P-W8",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1EAdLU9-l0ATGDa5_xwTwFO-rPhvZurM2BOSKjH2P-W8/edit?usp=drivesdk",
"cachedResultName": "LinkedIn Post Automation"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "Gs7mfT220sbLQ7PS",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "93d3e57f-a22d-4c04-9ccc-7ee655bedbdb",
"name": "게시물 콘텐츠 생성",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
180,
2595
],
"parameters": {
"text": "=# LinkedIn Post Generation\n\n## Post Description:\n{{ $json[\"Post Description\"] }}\n\n## Instructions:\n{{ $json[\"Instructions\"] }}\n\n---\n\n**Task:**\nUsing the information above, generate the content for a LinkedIn post:\n- Use the Description and Instructions to create a new post.\n- Ensure your output is positive, professional, clear, and follows all provided instructions and feedback.\n- Do not include any explanations, just the final post content only, ready to publish on LinkedIn.\n- Limit to 1300 characters.\n- If the user demands to keep the same post as the Post Descrioption (in the instructions), then keep the same post content as provided in the Post Description, and output it.",
"messages": {
"messageValues": [
{
"message": "=You are an expert social media and LinkedIn content writer.\n\nYou will be provided with:\n- A brief post description\n- Specific instructions from the user\n\nPlease follow these steps:\n\n1. Initial Creation:\nIf you are given a post description and instructions, write a polished, professionally worded LinkedIn post suitable for sharing. Strictly follow the instructions and ensure the message is engaging and succinct.\nIf instructed, add a call to action or particular phrase (for example, \"Connect with me\" at the bottom).\n\n2. Formatting:\nKeep the tone positive, inclusive, and professional.\nAdd relevant hashtags in small case.\nLimit the content to within 1300 characters.\nPlace the call to action or special instruction at the end if requested.\nOutput ONLY the final LinkedIn post content. Do NOT include any explanations, markdown, headings, or commentary—just the post text, ready to copy and share on LinkedIn."
}
]
},
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "6ea121f4-661c-4dd4-a0bc-7edb8a0b884a",
"name": "데이터 포맷팅 1",
"type": "n8n-nodes-base.set",
"position": [
556,
2595
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "bded6f56-99e2-4f1a-be41-27a8dd417844",
"name": "Post Content",
"type": "string",
"value": "={{ $json.text }}"
},
{
"id": "c222c42e-b639-4a74-a1b0-7a3e6e141d55",
"name": "Post Description",
"type": "string",
"value": "={{ $('Get Data from Sheets').item.json['Post Description'] }}"
},
{
"id": "14775ff7-e005-4a86-9623-c322365f7d3a",
"name": "Instructions",
"type": "string",
"value": "={{ $('Get Data from Sheets').item.json.Instructions }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "a00ec081-07c0-4f8a-9139-6606a65236ff",
"name": "콘텐츠 확인 요청 전송",
"type": "n8n-nodes-base.gmail",
"position": [
776,
2495
],
"webhookId": "29614d41-05c1-44af-93a6-4831a27f9331",
"parameters": {
"sendTo": "shindearyan179@gmail.com",
"message": "=Generated Post:\n{{ $json['Post Content'] }}\n\n----------\n\nPost Description:\n{{ $json['Post Description'] }}\n\n----------\n\nInstructions:\n{{ $json.Instructions }}",
"options": {},
"subject": "Approval for LinkedIn Post",
"operation": "sendAndWait",
"formFields": {
"values": [
{
"fieldType": "dropdown",
"fieldLabel": "Confirm Content?",
"fieldOptions": {
"values": [
{
"option": "Yes"
},
{
"option": "No"
},
{
"option": "Cancel"
}
]
},
"requiredField": true
},
{
"fieldType": "textarea",
"fieldLabel": "Any Changes?"
}
]
},
"responseType": "customForm"
},
"credentials": {
"gmailOAuth2": {
"id": "n47Kn2N5BwXYv6eA",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "5a1e8061-ef79-4974-888d-8670e60a1b0c",
"name": "콘텐츠 확인 로직",
"type": "n8n-nodes-base.switch",
"position": [
996,
2495
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "Yes",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "99ec185e-80ac-451d-bb69-662f84a7cf52",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data['Confirm Content?'] }}",
"rightValue": "Yes"
}
]
},
"renameOutput": true
},
{
"outputKey": "No",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "77031007-a912-4b9b-9cca-846c57ffaec8",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data['Confirm Content?'] }}",
"rightValue": "No"
}
]
},
"renameOutput": true
},
{
"outputKey": "Cancel",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "e94de530-6451-48aa-892c-924a9c41cfb0",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.data['Confirm Content?'] }}",
"rightValue": "Cancel"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "c139fda0-4be1-4ad7-bb28-802b7150365d",
"name": "게시물 콘텐츠 재생성",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
1216,
2670
],
"parameters": {
"text": "=Apply the modification requests on the following LinkedIn post. Besides applying the reqested modifications, return the same linkedin post.\n\nLinkedIn post:\n```\n{{ $('Data Formatting 1').item.json['Post Content'] }}\n```\n\nChange requests:\n{{ $('Send Content Confirmation').item.json.data['Any Changes?'] }}\n\n**Task:**\nUsing the information above, update the LinkedIn post content:\n- Do not include any explanations, just the final post content only (with all the change requests included in the post), ready to publish on LinkedIn.\n- Limit to 1300 characters.\n- If the user demands to keep the same post as the Post Description (in the instructions), then keep the same post content as provided in the Post Description, and output it.",
"promptType": "define"
},
"typeVersion": 1.6
},
{
"id": "b8587578-03a6-4975-8907-667628dc958a",
"name": "이미지 제공 시",
"type": "n8n-nodes-base.if",
"position": [
1294,
2220
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "9a78220d-35f5-48b6-9ce3-faecaac24b74",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $('Get Data from Sheets').item.json.Image }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "30bf76c8-8420-4d77-bc2b-8a1c27fbf36a",
"name": "이미지 포함 게시",
"type": "n8n-nodes-base.linkedIn",
"position": [
1812,
2120
],
"parameters": {
"text": "={{ $('Data Formatting 1').item.json['Post Content'] }}",
"person": "pM247vR8Se",
"additionalFields": {},
"shareMediaCategory": "IMAGE"
},
"credentials": {
"linkedInOAuth2Api": {
"id": "Fg8i5E17dzZcPtMH",
"name": "LinkedIn account 2"
}
},
"typeVersion": 1
},
{
"id": "62bf9597-3e38-45ec-853c-aa2d77c40bc2",
"name": "이미지 없이 게시",
"type": "n8n-nodes-base.linkedIn",
"position": [
1812,
2320
],
"parameters": {
"text": "={{ $('Data Formatting 1').item.json['Post Content'] }}",
"person": "pM247vR8Se",
"additionalFields": {}
},
"credentials": {
"linkedInOAuth2Api": {
"id": "Fg8i5E17dzZcPtMH",
"name": "LinkedIn account 2"
}
},
"typeVersion": 1
},
{
"id": "0ddd307d-5e54-42cf-b65a-25f111fb4bea",
"name": "Google 스프레드시트 업데이트",
"type": "n8n-nodes-base.googleSheets",
"position": [
2032,
2320
],
"parameters": {
"columns": {
"value": {
"Output": "={{ $json.urn }}",
"Status": "=Completed",
"Post Link": "={{ $json.urn }}",
"row_number": "={{ $('Get Data from Sheets').item.json.row_number }}"
},
"schema": [
{
"id": "Post Description",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Post Description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Instructions",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Instructions",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Image",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Output",
"type": "string",
"display": true,
"required": false,
"displayName": "Output",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Post Link",
"type": "string",
"display": true,
"required": false,
"displayName": "Post Link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1EAdLU9-l0ATGDa5_xwTwFO-rPhvZurM2BOSKjH2P-W8/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1EAdLU9-l0ATGDa5_xwTwFO-rPhvZurM2BOSKjH2P-W8",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1EAdLU9-l0ATGDa5_xwTwFO-rPhvZurM2BOSKjH2P-W8/edit?usp=drivesdk",
"cachedResultName": "LinkedIn Post Automation"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "Gs7mfT220sbLQ7PS",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "c4a55beb-8459-4faa-b072-51c500562ae3",
"name": "스티키 노트",
"type": "n8n-nodes-base.stickyNote",
"position": [
-780,
2480
],
"parameters": {
"width": 420,
"height": 380,
"content": "## 1. Schedule & Sheet Data Retrieval\n\nThis workflow starts automatically on a defined schedule (e.g., daily or hourly).\n\nIt retrieves the next Google Sheet row marked as ‘Pending’.\n\nThe sheet should include columns like:\n1. Post Description\n2. Instructions\n3. Image\n4. Status\n5. row_number (required for updates)\n\nEnsure your Google Sheets credentials are correctly configured."
},
"typeVersion": 1
},
{
"id": "09dade5b-e26a-4b97-9b8a-a5c807cff937",
"name": "스티키 노트1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-220,
3040
],
"parameters": {
"width": 420,
"height": 240,
"content": "## 2. AI-Powered Post Generation & Formatting\n\nUses OpenAI GPT to generate a LinkedIn post based on the sheet’s Post Description and Instructions.\n\nYou can modify the prompt if needed.\nThe generated post is then formatted along with relevant data for easy reference and consistency."
},
"typeVersion": 1
},
{
"id": "f373dfd9-f971-4925-8e74-15201c8a47c4",
"name": "스티키 노트2",
"type": "n8n-nodes-base.stickyNote",
"position": [
440,
3040
],
"parameters": {
"width": 440,
"height": 240,
"content": "## 3. Gmail Approval Workflow\n\nSends the formatted post to an approver via Gmail.\n\nThe approver can respond with:\n✅ Yes – Approve\n✏️ No – Request changes\n❌ Cancel – Abort the post\n\nSet Gmail credentials and recipient email in the node."
},
"typeVersion": 1
},
{
"id": "66d51a35-262e-469b-bcd8-aca3cf60452c",
"name": "스티키 노트3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1120,
3040
],
"parameters": {
"width": 440,
"height": 240,
"content": "## 4. Approval Handling & Regeneration\n\nHandles all approval responses:\n- If Yes, proceed to post.\n- If No, regenerate content based on the feedback and resend.\n- If Cancel, update the Google Sheet as Cancelled.\n\nThis ensures a complete review cycle before posting."
},
"typeVersion": 1
},
{
"id": "ad4023af-0e8b-4ec1-be1d-9313ec4f5ca7",
"name": "스티키 노트4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1800,
3040
],
"parameters": {
"width": 460,
"height": 320,
"content": "## 5. Image Check, Posting & Sheet Update\n\nChecks if an image URL is provided.\n- If present: Downloads the image and posts with it.\n- If not: Posts content without an image.\n\nAfter posting, it updates the Google Sheet with:\n- Status = Completed or Cancelled\n- LinkedIn post link/output\n\nUses row_number for precise sheet updates."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "65685909-274a-4d41-8f8a-fbba9442597b",
"connections": {
"d0f86395-aeec-4284-a2d5-26db2dfebd53": {
"main": [
[
{
"node": "30bf76c8-8420-4d77-bc2b-8a1c27fbf36a",
"type": "main",
"index": 0
}
]
]
},
"30bf76c8-8420-4d77-bc2b-8a1c27fbf36a": {
"main": [
[
{
"node": "0ddd307d-5e54-42cf-b65a-25f111fb4bea",
"type": "main",
"index": 0
}
]
]
},
"b8ca88a6-aaf1-4191-8b75-9a63b746af77": {
"main": [
[
{
"node": "d262684e-7671-4602-ba77-4270441a69fb",
"type": "main",
"index": 0
}
]
]
},
"6ea121f4-661c-4dd4-a0bc-7edb8a0b884a": {
"main": [
[
{
"node": "a00ec081-07c0-4f8a-9139-6606a65236ff",
"type": "main",
"index": 0
}
]
]
},
"b8587578-03a6-4975-8907-667628dc958a": {
"main": [
[
{
"node": "d0f86395-aeec-4284-a2d5-26db2dfebd53",
"type": "main",
"index": 0
}
],
[
{
"node": "62bf9597-3e38-45ec-853c-aa2d77c40bc2",
"type": "main",
"index": 0
}
]
]
},
"8e4e294f-56d4-4317-aea8-ea258527f55a": {
"ai_languageModel": [
[
{
"node": "93d3e57f-a22d-4c04-9ccc-7ee655bedbdb",
"type": "ai_languageModel",
"index": 0
},
{
"node": "c139fda0-4be1-4ad7-bb28-802b7150365d",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"62bf9597-3e38-45ec-853c-aa2d77c40bc2": {
"main": [
[
{
"node": "0ddd307d-5e54-42cf-b65a-25f111fb4bea",
"type": "main",
"index": 0
}
]
]
},
"d262684e-7671-4602-ba77-4270441a69fb": {
"main": [
[
{
"node": "93d3e57f-a22d-4c04-9ccc-7ee655bedbdb",
"type": "main",
"index": 0
}
]
]
},
"93d3e57f-a22d-4c04-9ccc-7ee655bedbdb": {
"main": [
[
{
"node": "6ea121f4-661c-4dd4-a0bc-7edb8a0b884a",
"type": "main",
"index": 0
}
]
]
},
"c139fda0-4be1-4ad7-bb28-802b7150365d": {
"main": [
[
{
"node": "6ea121f4-661c-4dd4-a0bc-7edb8a0b884a",
"type": "main",
"index": 0
}
]
]
},
"a00ec081-07c0-4f8a-9139-6606a65236ff": {
"main": [
[
{
"node": "5a1e8061-ef79-4974-888d-8670e60a1b0c",
"type": "main",
"index": 0
}
]
]
},
"5a1e8061-ef79-4974-888d-8670e60a1b0c": {
"main": [
[
{
"node": "b8587578-03a6-4975-8907-667628dc958a",
"type": "main",
"index": 0
}
],
[
{
"node": "c139fda0-4be1-4ad7-bb28-802b7150365d",
"type": "main",
"index": 0
}
],
[
{
"node": "0ddd307d-5e54-42cf-b65a-25f111fb4bea",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 인공지능, 마케팅
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
GPT-4o, WordPress, LinkedIn을 사용한 RSS 콘텐츠 자동 블로그 게시
GPT-4o, WordPress 및 LinkedIn을 사용한 RSS 콘텐츠 블로그 게시물 자동 발행
If
Set
Code
+
If
Set
Code
40 노드Immanuel
인공지능
AI, ElevenLabs, 다중 플랫폼을 사용하여 POV 비디오를 생성하고 승인
AI, ElevenLabs, 및 다중 플랫폼에서 POV 비디오를 생성하고 승인하기 (TikTok/IG/YT)
If
Set
Code
+
If
Set
Code
60 노드Immanuel
디자인
자동화 뉴스-브리핑 AI 에이전트 v13
AI 뉴스 연구 팀: 24/7 브리핑 자동화, Perplexity 인용 포함
Set
Code
Gmail
+
Set
Code
Gmail
37 노드Derek Cheung
제품
AI, ElevenLabs, PIAPI Shotstack/Creatomate를 사용하여 비디오 생성 및 YouTube에 업로드
AI, ElevenLabs, PIAPI Shotstack/Creatomate를 사용하여 비디오 생성 및 YouTube에 업로드
If
Set
Code
+
If
Set
Code
79 노드Immanuel
인공지능
OpenAI, Google Sheets, Jina AI 및 Slack을 활용한 AI 기반 정보 모니터링
AI 기반 정보 모니터링 워크플로우로 OpenAI, Google Sheets, Jina AI 및 Slack을 통합합니다
If
Set
Code
+
If
Set
Code
31 노드Dataki
영업
블로그 자동화 템플릿
Google 시트에서 블로그 게시물 작성 및 게시
If
Set
Code
+
If
Set
Code
35 노드Daniel Nolde
인공지능