8
n8n 한국어amn8n.com

Gmail에서 Slack으로: AI 평점의 Upwork 작업 알림, OpenRouter 사용

중급

이것은Personal Productivity, AI Summarization분야의자동화 워크플로우로, 14개의 노드를 포함합니다.주로 Set, Gmail, Slack, Filter, Markdown 등의 노드를 사용하며. Gmail에서 Slack으로: AI 평점의 Upwork 작업 알림, OpenRouter 사용

사전 요구사항
  • Google 계정 및 Gmail API 인증 정보
  • Slack Bot Token 또는 Webhook URL
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "meta": {
    "instanceId": "9192ad8880fb52b25f18408be81eae9d996a6784a1da3c68d52d3b7ef01d482b",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "0dc258f0-4d50-4bbf-9063-b252f597c245",
      "name": "마크다운으로 변환",
      "type": "n8n-nodes-base.markdown",
      "position": [
        440,
        -20
      ],
      "parameters": {
        "html": "={{ $('Get Filtered Messages').item.json.textAsHtml }}",
        "options": {},
        "destinationKey": "markdown"
      },
      "typeVersion": 1
    },
    {
      "id": "fced2dd2-720f-4534-a459-94f6cd13314b",
      "name": "OpenRouter 채팅 모델",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        748,
        200
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "id": "muXopBcyQsze8BOD",
          "name": "OpenRouter | Paper Jam"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4b04a2bf-29a6-42f6-8e72-c264f092780e",
      "name": "읽음으로 표시",
      "type": "n8n-nodes-base.gmail",
      "position": [
        220,
        -20
      ],
      "webhookId": "212c90ed-2d69-4f54-9f96-7009214490d7",
      "parameters": {
        "messageId": "={{ $json.id }}",
        "operation": "markAsRead"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "dZkZW7tKXuK6yfDP",
          "name": "Gmail | Paper Jam"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "5c208e16-c987-4bf0-b3f6-27d560b3ce5e",
      "name": "필터링된 메시지 가져오기",
      "type": "n8n-nodes-base.gmailTrigger",
      "position": [
        0,
        -20
      ],
      "parameters": {
        "simple": false,
        "filters": {
          "q": "from:(donotreply@upwork.com) subject:(New job:)"
        },
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyX",
              "unit": "minutes",
              "value": 10
            }
          ]
        }
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "dZkZW7tKXuK6yfDP",
          "name": "Gmail | Paper Jam"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "6674d03e-91ca-4c6b-8091-b956920e7d9a",
      "name": "Slack 알림 보내기",
      "type": "n8n-nodes-base.slack",
      "position": [
        1860,
        -20
      ],
      "webhookId": "f0b47490-d6ac-40ce-9f4f-8c115d6ef51b",
      "parameters": {
        "text": "=🚨 *New Upwork Job Opportunity!*\n----\n\n*{{ $json.job.jobName.toUpperCase() }}*\n_{{ $json.job.descriptionSnippet }}..._\n\n🗺️ {{ $json.job.country }}\n{{ $json.output.paymentVerified ? \"✅ Payment verified\" : \"❌ Payment not verified\"  }}\n🕧 {{ $json.job.jobType }} | {{ $json.job.price }}\n🏷️ {{ $json.job.tags.map(tag => `\\`${tag}\\``).join(', ') }}\n⭐ {{ $json.job.clientRating }}\n💰 {{ $json.job.amountSpent }}\n🏆 {{ $json.job.experienceLevel }}\n📆 Posted {{ $json.job.postedAt }}\n\n----\n*AI EVALUATION*\nScore: *{{ $json.evaluation.score }}*\n_{{ $json.evaluation.reasoning }}_\n---\n\n_View this job:_ {{ $json.job.jobDetailUrl }}\n\n",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C090EHUFGEN",
          "cachedResultName": "testing"
        },
        "otherOptions": {
          "includeLinkToWorkflow": false
        }
      },
      "credentials": {
        "slackApi": {
          "id": "awboaOk6Kh1kQZ7N",
          "name": "Slack | Paper Jam"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "0b9a8a79-3639-4a83-ac4d-9bbd22adef5e",
      "name": "OpenRouter 채팅 모델1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        1124,
        200
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "id": "muXopBcyQsze8BOD",
          "name": "OpenRouter | Paper Jam"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e282e1a2-70c7-40ca-a394-33e33976f855",
      "name": "필드 편집",
      "type": "n8n-nodes-base.set",
      "position": [
        1440,
        -20
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "43e777e8-2442-4cc9-8b58-65f1e8f591e5",
              "name": "evaluation",
              "type": "object",
              "value": "={{ $json.output }}"
            },
            {
              "id": "a2c26763-047f-4360-984a-272b88fe3bcc",
              "name": "job",
              "type": "object",
              "value": "={{ $('Job Data Extractor').item.json.output }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "37767da3-90bc-42c5-8fe4-a8d45be89cf3",
      "name": "스티커 메모",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -60,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 660,
        "height": 460,
        "content": "## Fetch and format emails\n\nHere we use a Gmail search query to find all Upwork job alerts, and format the message body for LLM analysis. An Upwork Freelancer Plus subscription is required in order to receive job alerts.\n\nIMPORTANT: We're polling Gmail for new messages every 10 minutes. This will use a workflow execution each time. You may want to adjust this frequency based on the amount of workflow executions you want to use."
      },
      "typeVersion": 1
    },
    {
      "id": "96107c5a-8311-4836-a51e-09ce43994892",
      "name": "스티커 메모1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        640,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 320,
        "height": 460,
        "content": "## Extract data from job\n\nPull out job information like country, price, etc."
      },
      "typeVersion": 1
    },
    {
      "id": "a8e422da-0984-4090-abde-eb2344dc2b28",
      "name": "스티커 메모2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1000,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 340,
        "height": 460,
        "content": "## Score the skillset match\n\nREQUIRED: Replace the placeholder text in the prompt between the <my_profile> tags with your own freelancer profile. Be as detailed as possible to achieve the best results."
      },
      "typeVersion": 1
    },
    {
      "id": "51b4e572-fe95-41ca-8ef1-e6638d6cbe8c",
      "name": "점수별 필터링",
      "type": "n8n-nodes-base.filter",
      "position": [
        1640,
        -20
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "ab20e70f-c9e3-4873-ab6a-e975dffefa35",
              "operator": {
                "type": "number",
                "operation": "gte"
              },
              "leftValue": "={{ $json.evaluation.score }}",
              "rightValue": 7
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "bf621b43-05bd-47c2-bd29-4484400dff62",
      "name": "기회 점수 매기기",
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "position": [
        1040,
        -20
      ],
      "parameters": {
        "text": "=**Situation**\nYou are an expert job matching analyst specializing in freelance opportunities. You'll evaluate the compatibility between my professional profile (skills, experience, and preferences) and Upwork job listings to determine how well we match.\n\n**Task**\nAnalyze the provided Upwork job details against my skills and preferences, then generate a comprehensive match score on a scale of 1-10, where 10 indicates an exceptional match and 1 indicates a poor fit.\n\n**Objective**\nHelp me identify the most suitable job opportunities that align with my capabilities and preferences, saving me time by focusing only on highly compatible positions.\n\n**Knowledge**\n- The job information includes: job name, job type (hourly/fixed), price range, description snippet, country, payment verification status, client rating, amount spent, relevant tags, posting date, and required experience level\n- The description snippet provides limited information about the job requirements\n- Primary matching factors: job name, description snippet, and tags\n- Secondary matching factors: experience level, job type, and payment amount\n- My skills and preferences will be provided in my request\n\nWhen analyzing the match:\n1. Evaluate technical skill alignment based on job name, description snippet, and tags first and foremost\n2. Consider experience level requirements\n3. Factor in my stated job type preferences (hourly vs. fixed), if provided\n4. Account for payment range alignment with my expectations, if provided\n5. Assess if the job description suggests requirements outside my capabilities\n6. Consider any specific preferences I've mentioned (location, industry, etc.)\n\nYou must provide a nuanced, honest assessment of the match quality rather than inflating scores. For each match score, provide brief but specific reasoning explaining why the score was assigned, highlighting both strengths and potential misalignments.\n\n<my_profile>\nREPLACE THIS WITH YOUR PROFILE. BELOW IS AN EXAMPLE PROFILE.\nI’m a seasoned web designer with over 8 years of experience crafting modern, user-friendly websites for startups, agencies, and global brands. My work spans across responsive design, UI/UX optimization, and full website redesigns that prioritize both aesthetic appeal and functional performance. I’m highly proficient with tools like Figma, Adobe XD, Webflow, WordPress, and Shopify, and I frequently collaborate with developers to ensure seamless handoff using platforms like Zeplin or Storybook. Whether you’re looking to improve conversions, refresh your brand’s digital presence, or build something entirely new, I bring a strong design eye, clear communication, and a results-driven approach to every project.\n\nI have a slight preference for hourly projects with a rate about $30/hour. \n</my_profile>\n\n<job>\n{{ JSON.stringify($json.output, null, 2) }}\n</job>",
        "options": {},
        "schemaType": "manual",
        "inputSchema": "{\n\t\"type\": \"object\",\n    \"additionalProperties\": false,\n    \"required\": [\n      \"score\",\n      \"reasoning\"\n    ],\n\t\"properties\": {\n        \"score\": {\n          \"type\": \"integer\",\n          \"minimum\": 1,\n          \"maximum\": 10\n        },\n        \"reasoning\": {\n          \"type\": \"string\"\n        }\n\t}\n}"
      },
      "typeVersion": 1.2
    },
    {
      "id": "f768b4e4-3eba-41b1-a6aa-c34c14dead7c",
      "name": "스티커 메모3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1380,
        -240
      ],
      "parameters": {
        "color": 7,
        "width": 620,
        "height": 460,
        "content": "## Send filtered notifications to Slack\n\nHere we only send notifications for jobs that have a match score of 7 or greater, but you can filter the notifications however you'd like. Be sure to select a channel from your workspace in the Slack node."
      },
      "typeVersion": 1
    },
    {
      "id": "ffbe5e44-4e6d-4b88-92cd-042a47fdc77c",
      "name": "작업 데이터 추출기",
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "position": [
        660,
        -20
      ],
      "parameters": {
        "text": "=Below is a job alert email received from Upwork. Please extract the requested information in valid JSON format.\n\nSubject: {{ $('Get Filtered Messages').item.json.subject }}\nBody: {{ $json.markdown }}",
        "options": {},
        "schemaType": "manual",
        "inputSchema": "{\n\t\"type\": \"object\",\n    \"additionalProperties\": false,\n    \"required\": [\n      \"jobName\",\n      \"jobType\", \n      \"jobDetailUrl\", \n      \"price\", \n      \"descriptionSnippet\", \n      \"country\", \n      \"paymentVerified\",\n      \"clientRating\",\n      \"amountSpent\",\n      \"tags\",\n      \"postedAt\",\n      \"experienceLevel\"\n    ],\n\t\"properties\": {\n        \"jobName\": {\n          \"type\": \"string\"\n        },\n\t\t\"jobType\": {\n\t\t\t\"enum\": [\"Hourly\", \"Fixed\"]\n\t\t},\n        \"price\": {\n          \"type\": \"string\"\n        },\n        \"jobDetailUrl\": {\n          \"type\": \"string\"\n        },\n        \"descriptionSnippet\": {\n          \"type\": \"string\",\n          \"description\": \"The description of the job before the 'more' link\"\n        },\n      \"country\": {\n        \"type\": \"string\"\n      },\n      \"paymentVerified\": {\n        \"type\": \"boolean\"\n      },\n      \"clientRating\": {\n        \"type\": \"number\"\n      },\n      \"amountSpent\": {\n        \"type\": \"string\"\n      },\n      \"tags\": {\n        \"type\": \"array\",\n        \"description\": \"List of categories with a link typically found below the country. Just include the tag name, not the url.\",\n        \"items\": {\n          \"type\": \"string\"\n        }\n      },\n      \"postedAt\": {\n        \"type\": \"string\"\n      },\n      \"experienceLevel\": {\n        \"enum\": [\"Entry\", \"Intermediate\", \"Expert\"]\n      }\n\t}\n}"
      },
      "typeVersion": 1.2
    }
  ],
  "pinData": {},
  "connections": {
    "e282e1a2-70c7-40ca-a394-33e33976f855": {
      "main": [
        [
          {
            "node": "51b4e572-fe95-41ca-8ef1-e6638d6cbe8c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4b04a2bf-29a6-42f6-8e72-c264f092780e": {
      "main": [
        [
          {
            "node": "0dc258f0-4d50-4bbf-9063-b252f597c245",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "51b4e572-fe95-41ca-8ef1-e6638d6cbe8c": {
      "main": [
        [
          {
            "node": "6674d03e-91ca-4c6b-8091-b956920e7d9a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ffbe5e44-4e6d-4b88-92cd-042a47fdc77c": {
      "main": [
        [
          {
            "node": "bf621b43-05bd-47c2-bd29-4484400dff62",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bf621b43-05bd-47c2-bd29-4484400dff62": {
      "main": [
        [
          {
            "node": "e282e1a2-70c7-40ca-a394-33e33976f855",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0dc258f0-4d50-4bbf-9063-b252f597c245": {
      "main": [
        [
          {
            "node": "ffbe5e44-4e6d-4b88-92cd-042a47fdc77c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5c208e16-c987-4bf0-b3f6-27d560b3ce5e": {
      "main": [
        [
          {
            "node": "4b04a2bf-29a6-42f6-8e72-c264f092780e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fced2dd2-720f-4534-a459-94f6cd13314b": {
      "ai_languageModel": [
        [
          {
            "node": "ffbe5e44-4e6d-4b88-92cd-042a47fdc77c",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "0b9a8a79-3639-4a83-ac4d-9bbd22adef5e": {
      "ai_languageModel": [
        [
          {
            "node": "bf621b43-05bd-47c2-bd29-4484400dff62",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

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

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

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

중급 - 개인 생산성, AI 요약

유료인가요?

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

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

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

저자
James Francis

James Francis

@paperjam

👋 Hi, I'm James. I run an AI automation agency focused on building small, focused workflows that have a direct and measurable impact on business growth or optimization.

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34