8
n8n 한국어amn8n.com

Slack 및 Linear을 사용한 고객 지원 채널 및 작업 시스템

고급

이것은Support, AI분야의자동화 워크플로우로, 19개의 노드를 포함합니다.주로 If, Set, Merge, Slack, Linear 등의 노드를 사용하며인공지능 기술을 결합하여 스마트 자동화를 구현합니다. Slack과 Linear을 사용한 고객 지원 채널 및 티켓 시스템

사전 요구사항
  • Slack Bot Token 또는 Webhook URL
  • OpenAI API Key

카테고리

워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "meta": {
    "instanceId": "26ba763460b97c249b82942b23b6384876dfeb9327513332e743c5f6219c2b8e"
  },
  "nodes": [
    {
      "id": "2b3112a9-046e-4aae-8fcc-95bddf3bb02e",
      "name": "Slack",
      "type": "n8n-nodes-base.slack",
      "position": [
        828,
        327
      ],
      "parameters": {
        "limit": 10,
        "query": "in:#n8n-tickets has::ticket:",
        "options": {},
        "operation": "search"
      },
      "credentials": {
        "slackApi": {
          "id": "VfK3js0YdqBdQLGP",
          "name": "Slack account"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "65fd6821-4d19-436c-81d9-9bdb0f5efddd",
      "name": "OpenAI 채팅 모델",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1920,
        480
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "8gccIjcuf3gvaoEr",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "85125704-7363-40de-af84-f267f8c7e919",
      "name": "구조화 출력 파서",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        2100,
        480
      ],
      "parameters": {
        "jsonSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"title\": { \"type\": \"string\" },\n    \"summary\": { \"type\": \"string\" },\n    \"ideas\": {\n      \"type\": \"array\",\n      \"items\": { \"type\": \"string\" }\n    },\n    \"priority\": { \"type\": \"string\" }\n  }\n}"
      },
      "typeVersion": 1.1
    },
    {
      "id": "eda8851a-1929-4f2f-9149-627c0fe62fbc",
      "name": "일정 트리거",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        628,
        327
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ad0d56b5-5caf-4fc0-bdbb-4e6207e4eb03",
      "name": "스티커 노트",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        580,
        112.87898199907983
      ],
      "parameters": {
        "color": 7,
        "width": 432.4578914269739,
        "height": 427.09547550768553,
        "content": "## 1. Query Slack for Messages \n[Read more about the Slack Trigger](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.slack)\n\nSlack API search uses the same search syntax found in the app. Here, we'll use it to filter the latest messages with the ticket emoji within our designated channel called #n8n-tickets. "
      },
      "typeVersion": 1
    },
    {
      "id": "d4ebe5b3-6d9a-4547-8af8-0985206c4ca4",
      "name": "스티커 노트1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1040,
        180.44851541532478
      ],
      "parameters": {
        "color": 7,
        "width": 711.6907825442045,
        "height": 632.7258798316449,
        "content": "## 2. Decide If We Need to Create a New Ticket \n[Read more about using Linear](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.linear)\n\nFor generated issues, we add the message id to the description of the message so that we can check them at this point in the workflow to avoid duplicates."
      },
      "typeVersion": 1
    },
    {
      "id": "b2920271-6698-47a4-8cac-ea4cec7b47d6",
      "name": "값 가져오기",
      "type": "n8n-nodes-base.set",
      "position": [
        1100,
        360
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "={\n  \"id\": \"#{{ $json.permalink.split('/').last() }}\",\n  \"type\": \"{{ $json.type }}\",\n  \"title\": \"__NOT_SET__\",\n  \"channel\": \"{{ $json.channel.name }}\",\n  \"user\": \"{{ $json.username }} ({{ $json.user }})\",\n  \"ts\": \"{{ $json.ts }}\",\n  \"permalink\": \"{{ $json.permalink }}\",\n  \"message\": \"{{ $json.text.replaceAll('\"','\\\\\"').replaceAll('\\n', '\\\\n') }}\"\n}"
      },
      "typeVersion": 3.3
    },
    {
      "id": "c4a4db2a-5d1c-4726-8c98-aef57fdcfaa6",
      "name": "새 티켓 생성?",
      "type": "n8n-nodes-base.if",
      "position": [
        1600,
        360
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "c11109b6-ee45-4b52-adc3-4be5fe420202",
              "operator": {
                "type": "boolean",
                "operation": "false",
                "singleValue": true
              },
              "leftValue": "={{ Boolean(($json.hashes ?? []).includes($json.id)) }}",
              "rightValue": "=false"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "46acb0de-1df1-4116-8aaf-704ec6644d7c",
      "name": "스티커 노트2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1780,
        80
      ],
      "parameters": {
        "color": 7,
        "width": 530.6864600881105,
        "height": 578.3950618708791,
        "content": "## 3. Use AI to Generate Ticket Contents\n[Read more about using Basic LLM Chain](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm)\n\nFor this demo, we've instructed the AI to do the following:\n* Generate a descriptive title of the issue\n* Summarise the user message into an actionable request.\n* Determine a prority based on tone and context of the user message. \n* Can offer possible fixes through use of tools or RAG. (not implemented)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "503d4ae7-9d5b-4dab-94a2-da28bc0e49da",
      "name": "스티커 노트6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        200,
        120
      ],
      "parameters": {
        "width": 359.6648027457353,
        "height": 400.4748439127683,
        "content": "## Try It Out!\n### This workflow does the following:\n* Monitors a Slack channel for new user messages asking for assistance\n* Only user messages which are tagged with the ticket(🎫) emoji are processed.\n* Linear is first checked to see if a ticket was created for the user message.\n* User messages are sent to ChatGPT to generate title, description and priority.\n* Support ticket is created in Linear.\n\n### Need Help?\nJoin the [Discord](https://discord.com/invite/XPKeKXeB7d) or ask in the [Forum](https://community.n8n.io/)!\n\nHappy Hacking!"
      },
      "typeVersion": 1
    },
    {
      "id": "11e423a4-36b6-4ecd-8bf7-58a7d4a1aa9a",
      "name": "기존 이슈 조회",
      "type": "n8n-nodes-base.linear",
      "position": [
        1260,
        360
      ],
      "parameters": {
        "operation": "getAll"
      },
      "credentials": {
        "linearApi": {
          "id": "Nn0F7T9FtvRUtEbe",
          "name": "Linear account"
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "413fde96-346a-468e-80b7-d465bd8add14",
      "name": "ChatGPT를 사용한 티켓 생성",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        1920,
        320
      ],
      "parameters": {
        "text": "=The \"user issue\" is enclosed by 3 backticks:\n```\n{{ $('Get Values').item.json.message }}\n```\nYou will complete the following 4 tasks:\n1. Generate a title intended for a support ticket based on the user issue only. Be descriptive but use no more than 10 words.\n2. Summarise the user issue only by identifying the key expectations and steps that were taken to reach the conclusion.\n3. Offer at most 3 suggestions to debug or resolve the user issue only. ignore the previous issues for this task.\n4. Identify the urgency of the user issue only and denote the priority as one of \"low\", \"medium\", \"high\" or \"urgent\". If you cannot determine the urgency of the issue, then assign the \"low\" priority. Also consider that requests which require action either today or tomorrow should be prioritised as \"high\".",
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.4
    },
    {
      "id": "66aecf53-6e8a-4ee8-88c3-be6b7d8d0527",
      "name": "스티커 노트3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2340,
        206
      ],
      "parameters": {
        "color": 7,
        "width": 374.7406065828194,
        "height": 352.3865785298774,
        "content": "## 4. Create New Ticket in Linear\n[Read more about using Linear](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.linear)\n\nWith our ticket contents generated, we can now create our ticket in Linear for support to handle.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f7898b7b-f60a-4315-a870-8c8ec4ad848f",
      "name": "티켓 생성",
      "type": "n8n-nodes-base.linear",
      "position": [
        2480,
        380
      ],
      "parameters": {
        "title": "={{ $json.output.title }}",
        "teamId": "1c721608-321d-4132-ac32-6e92d04bb487",
        "additionalFields": {
          "stateId": "92962324-3d1f-4cf8-993b-0c982cc95245",
          "priorityId": "={{ { 'urgent': 1, 'high': 2, 'medium': 3, 'low': 4 }[$json.output.priority.toLowerCase()] ?? 0 }}",
          "description": "=## {{ $json.output.summary }}\n\n### Suggestions\n{{ $json.output.ideas.map(idea => '* ' + idea).join('\\n') }}\n\n## Original Message\n{{ $('Get Values').item.json[\"user\"] }} asks:\n> {{ $('Get Values').item.json[\"message\"] }}\n\n### Metadata\nchannel: {{ $('Get Values').item.json.channel }}\nts: {{ $('Get Values').item.json.ts }}\npermalink: {{ $('Get Values').item.json.permalink }}\nhash: {{ $('Get Values').item.json.id }}\n"
        }
      },
      "credentials": {
        "linearApi": {
          "id": "Nn0F7T9FtvRUtEbe",
          "name": "Linear account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0b706c12-6ce0-41af-ad4b-9d98d7d03a41",
      "name": "병합",
      "type": "n8n-nodes-base.merge",
      "position": [
        1440,
        360
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combinationMode": "multiplex"
      },
      "typeVersion": 2.1
    },
    {
      "id": "d5b30127-f237-459d-860a-2589e3b54fb8",
      "name": "해시값만 가져오기",
      "type": "n8n-nodes-base.set",
      "position": [
        1260,
        640
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "9b0e8527-ea17-4b1e-ba62-287111f4b37e",
              "name": "hashes",
              "type": "array",
              "value": "={{ $json.descriptions.map(desc => desc.match(/hash\\:\\s([\\w#]+)/i)[1]) }}"
            }
          ]
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "9de103e1-b6a4-4454-b1b9-73eff730fcb6",
      "name": "설명 수집",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        1260,
        500
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "renameField": true,
              "outputFieldName": "descriptions",
              "fieldToAggregate": "description"
            }
          ]
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "af34916f-7888-4d41-aee6-752b78e88c0c",
      "name": "스티커 노트4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        780,
        300
      ],
      "parameters": {
        "width": 204.96868508214473,
        "height": 296.735132421306,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n🚨**Required**\n* Set the Slack channel to monitor here."
      },
      "typeVersion": 1
    },
    {
      "id": "58ab44f7-5fe5-4804-8bf1-36f351d86528",
      "name": "스티커 노트5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2440,
        360
      ],
      "parameters": {
        "width": 183.49787916474958,
        "height": 296.735132421306,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n🚨**Required**\n* Set the Linear Team Name or ID here."
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "0b706c12-6ce0-41af-ad4b-9d98d7d03a41": {
      "main": [
        [
          {
            "node": "c4a4db2a-5d1c-4726-8c98-aef57fdcfaa6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2b3112a9-046e-4aae-8fcc-95bddf3bb02e": {
      "main": [
        [
          {
            "node": "b2920271-6698-47a4-8cac-ea4cec7b47d6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b2920271-6698-47a4-8cac-ea4cec7b47d6": {
      "main": [
        [
          {
            "node": "0b706c12-6ce0-41af-ad4b-9d98d7d03a41",
            "type": "main",
            "index": 0
          },
          {
            "node": "11e423a4-36b6-4ecd-8bf7-58a7d4a1aa9a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d5b30127-f237-459d-860a-2589e3b54fb8": {
      "main": [
        [
          {
            "node": "0b706c12-6ce0-41af-ad4b-9d98d7d03a41",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "eda8851a-1929-4f2f-9149-627c0fe62fbc": {
      "main": [
        [
          {
            "node": "2b3112a9-046e-4aae-8fcc-95bddf3bb02e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "65fd6821-4d19-436c-81d9-9bdb0f5efddd": {
      "ai_languageModel": [
        [
          {
            "node": "413fde96-346a-468e-80b7-d465bd8add14",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "c4a4db2a-5d1c-4726-8c98-aef57fdcfaa6": {
      "main": [
        [
          {
            "node": "413fde96-346a-468e-80b7-d465bd8add14",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "11e423a4-36b6-4ecd-8bf7-58a7d4a1aa9a": {
      "main": [
        [
          {
            "node": "9de103e1-b6a4-4454-b1b9-73eff730fcb6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9de103e1-b6a4-4454-b1b9-73eff730fcb6": {
      "main": [
        [
          {
            "node": "d5b30127-f237-459d-860a-2589e3b54fb8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "85125704-7363-40de-af84-f267f8c7e919": {
      "ai_outputParser": [
        [
          {
            "node": "413fde96-346a-468e-80b7-d465bd8add14",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "413fde96-346a-468e-80b7-d465bd8add14": {
      "main": [
        [
          {
            "node": "f7898b7b-f60a-4315-a870-8c8ec4ad848f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

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

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

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

고급 - 지원, 인공지능

유료인가요?

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

워크플로우 정보
난이도
고급
노드 수19
카테고리2
노드 유형11
난이도 설명

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

저자
Jimleuk

Jimleuk

@jimleuk

Freelance consultant based in the UK specialising in AI-powered automations. I work with select clients tackling their most challenging projects. For business enquiries, send me an email at hello@jimle.uk LinkedIn: https://www.linkedin.com/in/jimleuk/ X/Twitter: https://x.com/jimle_uk

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34