Slack+Bitly URL 생성기
고급
이것은Social Media, AI Chatbot분야의자동화 워크플로우로, 19개의 노드를 포함합니다.주로 If, Slack, BitlyTool, GoogleSheets, SlackTrigger 등의 노드를 사용하며. GPT-4o-mini와 Google Sheets 로그를 사용하여 Slack에서 UTM 태그가 달린 Bitly 링크 생성
사전 요구사항
- •Slack Bot Token 또는 Webhook URL
- •Google Sheets API 인증 정보
- •OpenAI API Key
사용된 노드 (19)
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"id": "lA4rExuNmuRPablT",
"meta": {
"instanceId": "16d5a69b6a4f4733c8f669903729902650204c895b060993271b9227d7b0b3e8",
"templateCredsSetupCompleted": true
},
"name": "Slack+Bitly URL Generator",
"tags": [],
"nodes": [
{
"id": "b2e9fe85-89de-4a63-8d2e-e9fda55abd84",
"name": "Slack 트리거",
"type": "n8n-nodes-base.slackTrigger",
"position": [
-500,
-20
],
"parameters": {
"options": {
"resolveIds": true
},
"trigger": [
"app_mention"
],
"channelId": {
"__rl": true,
"mode": "id",
"value": "[REDACTED]"
}
},
"typeVersion": 1
},
{
"id": "ecf35ac1-0495-48fe-b1b6-17b3b4750ab6",
"name": "AI 에이전트",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-160,
-20
],
"parameters": {
"text": "={{ $json.text }}",
"options": {
"systemMessage": "You are a bitly URL creator agent. Your job is to:\n1. Extract, infer and categorize *accurately*:\na. Target URL (The URL that the user wants to be shortened with Bitly)\nb. utm_source\nc. utm_medium\nd. utm_campaign\ne. utm_term (only when applicable)\nf. utm_content (only when applicable)\n\n2. After inferring the relevant information, you will need to standardize it such that it follows the utm naming best practices, namely:\n- The utm naming should all be in lower case and connected with underscore _ if it's more than one word, e.g: christmas_day\n- You might get user input in short form, example \"IG\" or \"LI\" or \"fb\" and these should all be converted to \"instagram\", \"linkedin\", \"facebook\", instead of \"facebook.com\"\n- for utm_medium, choose from the following list: social, community, labs, video, cpc, email, referral, organic, banner, affiliate, tools\n\n3. When you have all the information, create a Bitly Shortened Link using the Bitly Tool\n\nAsk questions where necessary to obtain the full information. Do not make up facts/hallucinate, prioritize accuracy in your inference.\n\nOn successful Bitly Link creation, an ideal response format would be:\n\"Here is your shortened Bitly link for the URL:\n[Insert Generated Bitly URL Link]\nThis link includes the following UTM parameters:\n- Target URL: (Insert the original Target URL)\n- utm_source: (Insert utm_source)\n- utm_medium: (Insert utm_medium)\n- utm_campaign: (Insert utm_campaign)\n- utm_term: (Insert utm_term if applicable, if not insert \"empty\")\n- utm_content: (Insert utm_content if applicable, if not insert \"empty\")"
},
"promptType": "define"
},
"typeVersion": 2
},
{
"id": "75abb766-85fb-440b-87d5-102af89b626a",
"name": "OpenAI 채팅 모델",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-220,
200
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "6c85565a-30d6-4259-9976-ac7b42bf327d",
"name": "심플 메모리",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
-60,
200
],
"parameters": {
"sessionKey": "={{ $('Slack Trigger').item.json.channel }}",
"sessionIdType": "customKey",
"contextWindowLength": 10
},
"typeVersion": 1.3
},
{
"id": "e7f9c4d6-dcee-49ea-b36e-bf66ecf387f2",
"name": "Bitly",
"type": "n8n-nodes-base.bitlyTool",
"position": [
60,
200
],
"parameters": {
"longUrl": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Long_URL', ``, 'string') }}",
"additionalFields": {
"domain": "[REDACTED]"
}
},
"typeVersion": 1
},
{
"id": "5c28ce3e-740d-496c-a8bd-0d31c43d03a5",
"name": "Google 시트",
"type": "n8n-nodes-base.googleSheets",
"position": [
1280,
-20
],
"parameters": {
"columns": {
"value": {
"URL": "={{ $json.output['Target URL'] }}",
"Date": "={{ $today }}",
"Notes": "Executed by n8n workflow",
"Owner": "={{ $json.output.User }}",
"Status": "Done",
"UTM ID": "={{ $json.output.utm_campaign }}",
"UTM Term": "={{ $json.output.utm_term }}",
"Bitly URL": "={{ $json.output['Bitly URL Link'] }}",
"UTM Medium": "={{ $json.output.utm_medium }}",
"UTM Source": "={{ $json.output.utm_source }}",
"UTM Content": "={{ $json.output.utm_content }}",
"UTM Campaign": "={{ $json.output.utm_campaign }}",
"Title on Bitly (Campaign)": "={{ $json.output.utm_campaign }}"
},
"schema": [
{
"id": "URL",
"type": "string",
"display": true,
"required": false,
"displayName": "URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Title on Bitly (Campaign)",
"type": "string",
"display": true,
"required": false,
"displayName": "Title on Bitly (Campaign)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "UTM Source",
"type": "string",
"display": true,
"required": false,
"displayName": "UTM Source",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "UTM Medium",
"type": "string",
"display": true,
"required": false,
"displayName": "UTM Medium",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "UTM Campaign",
"type": "string",
"display": true,
"required": false,
"displayName": "UTM Campaign",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "UTM Term",
"type": "string",
"display": true,
"required": false,
"displayName": "UTM Term",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "UTM Content",
"type": "string",
"display": true,
"required": false,
"displayName": "UTM Content",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Owner",
"type": "string",
"display": true,
"required": false,
"displayName": "Owner",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Bitly URL",
"type": "string",
"display": true,
"required": false,
"displayName": "Bitly URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date",
"type": "string",
"display": true,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "UTM ID",
"type": "string",
"display": true,
"required": false,
"displayName": "UTM ID",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "[REDACTED]/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "[REDACTED]"
}
},
"typeVersion": 4.6
},
{
"id": "a08c2e8b-f14d-435e-9c32-94c116ec0859",
"name": "정보 추출기",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
640,
-20
],
"parameters": {
"text": "={{ $('Slack Response').item.json.message.text }}",
"options": {},
"attributes": {
"attributes": [
{
"name": "Bitly URL Link",
"description": "Bitly URL Link Generated, usually right after \"Here is your shortened Bitly link for the URL:\""
},
{
"name": "utm_campaign",
"required": true,
"description": "utm_campaign name"
},
{
"name": "utm_source",
"required": true,
"description": "utm_source name"
},
{
"name": "utm_medium",
"required": true,
"description": "utm_medium name"
},
{
"name": "utm_term",
"required": true,
"description": "utm_term name"
},
{
"name": "utm_content",
"required": true,
"description": "utm_content name"
},
{
"name": "Target URL",
"required": true,
"description": "Original Target URL Link"
},
{
"name": "User",
"required": true,
"description": "={{ $json.real_name }}"
}
]
}
},
"typeVersion": 1.1
},
{
"id": "65622ec6-62ee-4b78-9aba-adf822d21053",
"name": "OpenAI 채팅 모델1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
680,
220
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"typeVersion": 1.2
},
{
"id": "2eba9bbb-6f16-4599-8123-4e4ae8e822de",
"name": "Slack - 사용자 이름 가져오기",
"type": "n8n-nodes-base.slack",
"position": [
460,
-20
],
"parameters": {
"user": {
"__rl": true,
"mode": "id",
"value": "={{ $('Slack Trigger').item.json.user }}"
},
"resource": "user",
"operation": "getProfile"
},
"typeVersion": 2.3
},
{
"id": "637b896a-7343-44cd-842b-868938d2ea6c",
"name": "Slack 응답",
"type": "n8n-nodes-base.slack",
"position": [
280,
-20
],
"parameters": {
"text": "={{ $json.output }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "[REDACTED]"
},
"otherOptions": {
"thread_ts": {
"replyValues": {
"thread_ts": "={{ $('Slack Trigger').item.json.ts }}"
}
},
"includeLinkToWorkflow": false
}
},
"typeVersion": 2.3
},
{
"id": "000f70ec-b076-4cd9-9ce1-9e0bebe5ebe4",
"name": "조건문",
"type": "n8n-nodes-base.if",
"position": [
1000,
-20
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "fa53297e-b196-4e52-a4dd-8843d2e7dd55",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.output['Bitly URL Link'] }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "802cc2e4-0cce-49e4-b0f8-dd8bd9a145de",
"name": "중단 및 오류",
"type": "n8n-nodes-base.stopAndError",
"position": [
1280,
160
],
"parameters": {
"errorMessage": "Workflow has stopped intentionally because Bitly URL Link does not exist or not generated"
},
"typeVersion": 1
},
{
"id": "1a960b7a-9919-40f1-b3dc-9856a71d8f9a",
"name": "스티키 노트",
"type": "n8n-nodes-base.stickyNote",
"position": [
1180,
-220
],
"parameters": {
"width": 340,
"height": 760,
"content": "Update Log"
},
"typeVersion": 1
},
{
"id": "80e31a88-409e-4b31-a9b4-931f0abc1f67",
"name": "스티키 노트1",
"type": "n8n-nodes-base.stickyNote",
"position": [
940,
-220
],
"parameters": {
"width": 220,
"height": 760,
"content": "If Node"
},
"typeVersion": 1
},
{
"id": "67d49e4c-ca9d-4d3e-8a63-7e2800fe0ede",
"name": "스티키 노트2",
"type": "n8n-nodes-base.stickyNote",
"position": [
620,
-220
],
"parameters": {
"width": 300,
"height": 760,
"content": "Information Extractor"
},
"typeVersion": 1
},
{
"id": "06e5401c-1f90-47a6-ab53-96419dc90ecf",
"name": "스티키 노트3",
"type": "n8n-nodes-base.stickyNote",
"position": [
240,
-220
],
"parameters": {
"width": 360,
"height": 760,
"content": "Slack Response & Fetch User Name"
},
"typeVersion": 1
},
{
"id": "9b178240-66da-4896-aa40-ae76dc9c4ffa",
"name": "스티키 노트4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-580,
-220
],
"parameters": {
"width": 280,
"height": 760,
"content": "Slack Trigger"
},
"typeVersion": 1
},
{
"id": "78381b0c-2fab-4912-9995-f54a93b60e86",
"name": "스티키 노트5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-280,
-220
],
"parameters": {
"width": 500,
"height": 760,
"content": "Bitly AI Agent"
},
"typeVersion": 1
},
{
"id": "2dd5433a-8a46-4e6c-80c2-cc3823972d91",
"name": "스티키 노트6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1440,
-220
],
"parameters": {
"width": 820,
"height": 1320,
"content": "🔗 Slack + Bitly UTM Generator — Powered by OpenAI\nDescription:\n\nThis no-code n8n workflow transforms how marketing teams generate Bitly links with UTM parameters — directly from Slack. Powered by AI and fully automated, this system extracts relevant campaign data from a Slack message, creates a clean Bitly shortlink with UTM tags, and logs everything to a Google Sheet for tracking and reporting.\n\nPerfect for growth marketers, content teams, and anyone tired of manually building UTM-tagged links.\n\nIf you like to follow step-by-step build of workflows like these, check out:\nhttps://www.youtube.com/@Automatewithmarc\n\n⚙️ How It Works\n🟢 Slack Trigger\nThe workflow starts when a user mentions the bot in a Slack channel (e.g., @BitlyBot link this for IG campaign).\n\n🧠 AI Agent (LangChain)\n\nUses GPT-4o-mini to infer UTM values (e.g., utm_source, utm_medium, utm_campaign)\n\nNormalizes short forms like \"IG\" to \"instagram\"\n\nFollows UTM naming conventions (e.g., lowercase, underscore-separated)\n\n🔍 Information Extractor\nPulls cleanly structured UTM data from the AI response to prep for Bitly.\n\n🔗 Bitly Tool Node\nGenerates a short link using the inferred target URL + UTM values.\n\n📋 Google Sheets Logger\nAutomatically appends the full details (Bitly link, UTM parameters, campaign owner) to a Google Sheet for easy access.\n\n📢 Slack Response\nReplies in-thread with the new Bitly link and campaign details, formatted clearly for the user.\n\n🛑 Error Handling\nIf Bitly link generation fails, the workflow gracefully stops with an error message.\n\n🔧 Tools & Services Used\nSlack (Trigger + Response)\n\nLangChain AI Agent (with GPT-4o-mini)\n\nBitly (via Bitly Tool Node)\n\nGoogle Sheets (auto-log generated links)\n\nOpenAI GPT-4o-mini (Language model for prompt understanding)\n\n💡 Use Cases\n🔗 Instantly create UTM-tagged links for campaigns\n\n📊 Maintain a central Bitly + UTM link database in Google Sheets\n\n🧠 Use AI to reduce manual tagging and formatting errors\n\n🤝 Empower your team to request links via Slack, no forms needed\n\n✅ Setup Instructions\nSlack:\nSet up a Slack bot and connect it using Slack Trigger and Slack response nodes.\nBitly API:\nGenerate a Bitly access token and set up credentials in the Bitly node.\nOpenAI / LangChain:\nConnect your GPT-4o or GPT-4 API key to the OpenAI Chat Model nodes.\nGoogle Sheets:\nUse OAuth2 credentials to connect to your Google Sheet.\nMake sure the sheet has matching columns for UTM parameters (sample headers included in the node schema).\n\n\n"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "723ac1de-6498-4074-98a5-d9e325835454",
"connections": {
"000f70ec-b076-4cd9-9ce1-9e0bebe5ebe4": {
"main": [
[
{
"node": "5c28ce3e-740d-496c-a8bd-0d31c43d03a5",
"type": "main",
"index": 0
}
],
[
{
"node": "802cc2e4-0cce-49e4-b0f8-dd8bd9a145de",
"type": "main",
"index": 0
}
]
]
},
"e7f9c4d6-dcee-49ea-b36e-bf66ecf387f2": {
"ai_tool": [
[
{
"node": "ecf35ac1-0495-48fe-b1b6-17b3b4750ab6",
"type": "ai_tool",
"index": 0
}
]
]
},
"ecf35ac1-0495-48fe-b1b6-17b3b4750ab6": {
"main": [
[
{
"node": "637b896a-7343-44cd-842b-868938d2ea6c",
"type": "main",
"index": 0
}
]
]
},
"6c85565a-30d6-4259-9976-ac7b42bf327d": {
"ai_memory": [
[
{
"node": "ecf35ac1-0495-48fe-b1b6-17b3b4750ab6",
"type": "ai_memory",
"index": 0
}
]
]
},
"b2e9fe85-89de-4a63-8d2e-e9fda55abd84": {
"main": [
[
{
"node": "ecf35ac1-0495-48fe-b1b6-17b3b4750ab6",
"type": "main",
"index": 0
}
]
]
},
"637b896a-7343-44cd-842b-868938d2ea6c": {
"main": [
[
{
"node": "2eba9bbb-6f16-4599-8123-4e4ae8e822de",
"type": "main",
"index": 0
}
]
]
},
"75abb766-85fb-440b-87d5-102af89b626a": {
"ai_languageModel": [
[
{
"node": "ecf35ac1-0495-48fe-b1b6-17b3b4750ab6",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"65622ec6-62ee-4b78-9aba-adf822d21053": {
"ai_languageModel": [
[
{
"node": "a08c2e8b-f14d-435e-9c32-94c116ec0859",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"a08c2e8b-f14d-435e-9c32-94c116ec0859": {
"main": [
[
{
"node": "000f70ec-b076-4cd9-9ce1-9e0bebe5ebe4",
"type": "main",
"index": 0
}
]
]
},
"2eba9bbb-6f16-4599-8123-4e4ae8e822de": {
"main": [
[
{
"node": "a08c2e8b-f14d-435e-9c32-94c116ec0859",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 소셜 미디어, AI 챗봇
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
Nano banana + 자동 게시
Nano Banana 및 GPT-5 제목 생성을 통한 이미지 편집 및 Instagram 게시 자동화
If
Wait
Http Request
+
If
Wait
Http Request
20 노드Automate With Marc
소셜 미디어
Slack - AI가 대신 일하기
GPT 및 Google Docs RAG를 사용하여 Slack 메시지 자동 응답
Slack
Slack Trigger
Google Docs Tool
+
Slack
Slack Trigger
Google Docs Tool
10 노드Automate With Marc
내부 위키
Slack 프로젝트 업데이트 RAG 에이전트
GPT와 Pinecone 벡터 RAG 컨텍스트를 사용하여 Slack 메시지에 자동 응답
Slack
Slack Trigger
Agent
+
Slack
Slack Trigger
Agent
11 노드Automate With Marc
AI RAG
드림 100 연구 에이전트
사용하여 Perplexity AI 연구와 Google Sheets를 통해 Dream 100 잠재 고객 목록 생성
If
Set
Slack
+
If
Set
Slack
29 노드Brandon True
기타
조합형 이미지를 비디오로 변환하는 도구
Telegram, GPT-4.1, Seedance/Veo3 통합을 통해 이미지에서 비디오 생성
If
Wait
Telegram
+
If
Wait
Telegram
22 노드Automate With Marc
콘텐츠 제작
소셜 미디어 팩토리
AI 기반 소셜 미디어 콘텐츠 생성기, 다중 플랫폼 게시 및 승인 지원
If
Set
Gmail
+
If
Set
Gmail
48 노드Taiki
소셜 미디어
워크플로우 정보
난이도
고급
노드 수19
카테고리2
노드 유형11
저자
Automate With Marc
@marconiAutomating Start-Up and Business processes. Helping non-techies understand and leverage Agentic AI with easy to understand step-by-step tutorials. Check out my educational content: https://www.youtube.com/@Automatewithmarc
외부 링크
n8n.io에서 보기 →
이 워크플로우 공유