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 と 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
内部Wiki
Slackプロジェクト更新RAGエージェント
GPTとPineconeベクターRAG文脈を使ってSlackメッセージに自動返信
Slack
Slack Trigger
Agent
+
Slack
Slack Trigger
Agent
11 ノードAutomate With Marc
AI RAG検索拡張
Dream 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で表示 →
このワークフローを共有