8
n8n 한국어amn8n.com

Google RSS, Openrouter 및 Telegram을 통한 자동 주식 뉴스 알림

고급

이것은Crypto Trading, AI Summarization분야의자동화 워크플로우로, 22개의 노드를 포함합니다.주로 If, Code, Merge, JinaAi, Telegram 등의 노드를 사용하며. 基于Google RSS、Gemini및Telegram알림의자동화股票新闻提醒

사전 요구사항
  • Telegram Bot Token
  • Google Sheets API 인증 정보
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "zyj0hJZNNR3mKvEx",
  "name": "Automated Stock News Alerts via Google RSS, Openrouter & Telegram",
  "tags": [],
  "nodes": [
    {
      "id": "b4739068-769f-4638-83cf-94a7c611caad",
      "name": "시트에 행 추가 또는 업데이트",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2380,
        620
      ],
      "parameters": {
        "columns": {
          "value": {
            "ID": "={{ $('Merge').item.json.id }}",
            "URL": "={{ $json.realUrl }}",
            "Date": "={{ $('Merge').item.json.pubDate }}",
            "Title": "={{ $('Merge').item.json.title }}"
          },
          "schema": [
            {
              "id": "ID",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Summary",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "SentToTelegram",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "SentToTelegram",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "ID"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "109kj97ABR37XviIpxARCFviZwq8opOoe--rayOeFDSo"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "4d5abad5-44ac-4698-a178-f6da494d83d7",
      "name": "스티커 노트1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        860,
        140
      ],
      "parameters": {
        "color": 7,
        "width": 460,
        "height": 760,
        "content": "### ⏰ Scheduler\n\n**Function:**  \nThis node triggers the entire workflow at a predefined interval. It ensures that the system checks for new stock news regularly without manual intervention.\n\n**Configuration:**\n- **Mode:** Every X minutes\n- **Interval:** 15 minutes (default, can be customized based on user needs)\n\n**Notes:**\n- You can adjust the interval depending on how frequently you want to monitor news updates.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "8f3aeb9c-380e-4d91-a8e0-f2c856d360b5",
      "name": "스티커 노트7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "color": 6,
        "width": 780,
        "height": 1300,
        "content": "## 🎯 Purpose\nThis workflow helps you automatically monitor stock related news, extract the main content, summarize it using a LLM (via OpenRouter), and send real time alerts to Telegram and store them in Google Sheets.\n\n## ⚙️ How It Works\n### Trigger\n- A Cron node triggers the workflow every 15 minutes (adjustable).\n- RSS Feed node checks latest articles from Google Alerts RSS.\n- The workflow filters duplicates using Google Sheets as a log.\n- The article URL is sent to Jina AI Readability API to extract the main body text.\n- The content is summarized using a model from OpenRouter (e.g., Gemini, Claude, GPT-4).\n- You can customize the prompt to suit your tone and analysis needs.\n- The result is appended to a Google Sheets file.\n- Sends the title, summary, and reccomendation to Telegram chat.\n\n**🧾 Google Sheets Template**\nCreate a Google Sheet using this template: [Stock Alert](https://docs.google.com/spreadsheets/d/109kj97ABR37XviIpxARCFviZwq8opOoe--rayOeFDSo/edit?usp=sharing)\n\n## 🧰 Requirements\n- Telegram Bot + your Chat ID\n- OpenRouter account and API key\n- Jina AI account for content extraction\n- Google Account with access to Google Sheets\n- Google Alerts RSS feed\n\n## 🛠 Setup Instructions\n- Install required credentials:\n  - Add OpenRouter API key to n8n credentials.\n  - Add Telegram Bot Token and Chat ID.\n  - Add Google Sheets credentials.\n  - Add Jina AI credentials.\n- Create or copy the Google Sheet using the link above.\n- Go to Google Alerts, create alerts, and copy the RSS feed URL.\n- Replace placeholder API keys and URLs.\n- Adjust Telegram Chat ID.\n\n## 🔐 Security Note\nAll sensitive credentials (e.g., API keys, personal chat IDs) have been removed from this template. Please replace them using the n8n credentials manager before activating the workflow."
      },
      "typeVersion": 1
    },
    {
      "id": "f00e3efd-e11e-4340-adef-c87b01c4818c",
      "name": "URL 콘텐츠 읽기",
      "type": "n8n-nodes-base.jinaAi",
      "position": [
        2980,
        500
      ],
      "parameters": {
        "url": "={{ $('Get row(s) in sheet').item.json.URL }}",
        "options": {},
        "requestOptions": {}
      },
      "typeVersion": 1
    },
    {
      "id": "f86e1a17-48b9-4a3b-a428-b4e6edc27d6f",
      "name": "AI 에이전트",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        3300,
        500
      ],
      "parameters": {
        "text": "=Create a summary of up to 200 words from {{ $json.content }} Add a description of the affected stocks (stock code). Add a sentiment description (uptrend, downtrend, sideways, positive, negative or others). The writing format is as follows: Title\\nCategory\\nSummary\\nSentiment\\nReccomendation. Write in plain text without punctuation, use emoji to more interactive.",
        "options": {
          "systemMessage": "You are a professional analyst who has studied a lot about stock movements. Use the following news articles to see the company's fundamentals, sentiment, and future projections."
        },
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "b94dff41-913d-4e8b-9ea8-3fe9d36041ab",
      "name": "OpenRouter 채팅 모델",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        3300,
        700
      ],
      "parameters": {
        "model": "google/gemini-2.0-flash-exp:free",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "f4d18c3e-7ed8-44d8-b699-82c6923e642f",
      "name": "병합",
      "type": "n8n-nodes-base.merge",
      "position": [
        1960,
        620
      ],
      "parameters": {
        "numberInputs": 3
      },
      "typeVersion": 3.2
    },
    {
      "id": "552b48ff-8921-4878-8c65-4d1f9c63f6e0",
      "name": "시트에서 행 가져오기",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2580,
        620
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "109kj97ABR37XviIpxARCFviZwq8opOoe--rayOeFDSo"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "2dc342e9-9f0b-4f1e-8889-60b61bcb42f2",
      "name": "텍스트 메시지 보내기",
      "type": "n8n-nodes-base.telegram",
      "position": [
        3960,
        500
      ],
      "parameters": {
        "text": "={{ $json.Summary }}",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "f49aa596-c969-4c4f-b466-79f962c2a658",
      "name": "시트에 행 추가 또는 업데이트1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        3740,
        500
      ],
      "parameters": {
        "columns": {
          "value": {
            "URL": "={{ $('Read URL content').item.json.url }}",
            "Summary": "={{ $json.output }}",
            "SentToTelegram": "true"
          },
          "schema": [
            {
              "id": "ID",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Title",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Summary",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "SentToTelegram",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "SentToTelegram",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "URL"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "109kj97ABR37XviIpxARCFviZwq8opOoe--rayOeFDSo"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "966d4fb2-39e1-4e8f-a6bc-847f49e2f6f0",
      "name": "일정 트리거1",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        1020,
        620
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes",
              "minutesInterval": 15
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b9d23403-da7b-4c43-a6b4-aeaa38ac6e2d",
      "name": "작업 없음",
      "type": "n8n-nodes-base.noOp",
      "position": [
        2980,
        720
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "002d50e3-f1d5-4bcc-b342-7c94f9d22bf8",
      "name": "스티커 노트",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1420,
        140
      ],
      "parameters": {
        "color": 7,
        "width": 460,
        "height": 840,
        "content": "### 📡 RSS Feed (Google Alerts)\n\n**Function:**  \nThis node fetches the latest news articles from Google Alerts RSS feeds based on specific stock related keywords.\n\n**Configuration:**\n- **RSS Feed URL:** Generated from Google Alerts using chosen keywords (e.g., `IPO`, `stock acquisition`, `company merger`, or specific company names like `AAPL`, `NVDA`, etc.)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c17cce05-0f63-47ee-abdf-e5c016819766",
      "name": "스티커 노트2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1940,
        140
      ],
      "parameters": {
        "color": 7,
        "width": 560,
        "height": 840,
        "content": "### 🔗 Merge & Extract Real URL\n\n**Function:**  \nAfter collecting articles from multiple RSS Feed nodes, this step merges the data and **extracts the actual article URL**, since Google Alerts RSS provides redirect URLs (e.g., `https://www.google.com/url?...`).\n\n**Processing Steps:**\n- Use a **Merge** node to combine outputs from multiple RSS nodes.\n- Use a **Function** node to:\n  - Parse the `link` field from the RSS item.\n  - Extract the real URL from the `url` query parameter of Google's redirect link.\n- Save data to **Google Sheets**\n"
      },
      "typeVersion": 1
    },
    {
      "id": "134bf506-303f-45aa-a659-93c7a9c8252d",
      "name": "실제 URL 가져오기",
      "type": "n8n-nodes-base.code",
      "position": [
        2160,
        620
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "return {\n  realUrl: $json.link.includes(\"google.com/url\")\n    ? decodeURIComponent($json.link.match(/url=([^&]+)/)[1])\n    : $json.link\n};\n"
      },
      "typeVersion": 2
    },
    {
      "id": "6011ec34-cb71-4db6-b3a6-a8a190db78fc",
      "name": "조건문",
      "type": "n8n-nodes-base.if",
      "position": [
        2760,
        620
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "67a8680d-5aca-4e40-9ae7-f91925461807",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.Summary }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "4a05175a-00ef-42b7-a8f5-87d6d729313f",
      "name": "스티커 노트3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2560,
        140
      ],
      "parameters": {
        "color": 7,
        "width": 620,
        "height": 840,
        "content": "### 📄 Extract Content (Jina AI)\n\n**Function:**  \nThis step extracts the **main content** (article body) from the real URL using **Jina AI’s article reader API**.\n\n**Processing Steps:**\n- Use an **IF node** to check whether the article already contains extracted content.\n  - **If content exists:** Do nothing.\n  - **If content is empty or missing:** Continue to next step.\n- Use **Jina AI API** to extract the full article content from the `realUrl`.\n\n**Output:**\n- The full article text is stored in a field such as `extractedContent` or `fullText`.\n- This text will be passed to the summarization step."
      },
      "typeVersion": 1
    },
    {
      "id": "cdf4b5fd-8da9-49d4-a79b-cfb6bcf4dac3",
      "name": "스티커 노트4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3200,
        140
      ],
      "parameters": {
        "color": 7,
        "width": 440,
        "height": 840,
        "content": "### 🧠 Summarize & Analyze (LLM via OpenRouter)\n\n**Function:**  \nThis node uses a **Large Language Model (LLM)** via the **OpenRouter API** to summarize and analyze the extracted article content. The goal is to turn raw text into concise, actionable insights.\n\n- You can customize the **system message** and **user prompt** to suit your use case.\n- **Model**: Choose from a variety of models via OpenRouter (GPT-4, Claude, etc.).\n\n**Output:**\n- `summary`: A brief overview of the article.\n- `analysis`: Optional insight or investment angle.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f71646be-296c-47d0-9443-126c03405faa",
      "name": "스티커 노트5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3700,
        140
      ],
      "parameters": {
        "color": 7,
        "width": 440,
        "height": 840,
        "content": "### 🗂️ Save to Google Sheets and Send to Telegram\nThis step saves the results of the summarization and analysis into the existing **Google Sheets database** to maintain a structured log of processed news.\n\n### 📲 Send to Telegram\nDelivers the summarized news and analysis via **Telegram Bot API** for real-time alerts.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ce580e6b-e954-4cf0-a55b-f9e67be8a905",
      "name": "주식 인수",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        1580,
        440
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "d64cf706-d073-4d1a-a793-4ab66a32da28",
      "name": "주식 자사매입",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        1580,
        620
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "1a3e5030-0b82-4649-910f-bfc8d0a28866",
      "name": "NVDA 주식",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        1580,
        800
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.2
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "connections": {
    "6011ec34-cb71-4db6-b3a6-a8a190db78fc": {
      "main": [
        [
          {
            "node": "f00e3efd-e11e-4340-adef-c87b01c4818c",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "b9d23403-da7b-4c43-a6b4-aeaa38ac6e2d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f4d18c3e-7ed8-44d8-b699-82c6923e642f": {
      "main": [
        [
          {
            "node": "134bf506-303f-45aa-a659-93c7a9c8252d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f86e1a17-48b9-4a3b-a428-b4e6edc27d6f": {
      "main": [
        [
          {
            "node": "f49aa596-c969-4c4f-b466-79f962c2a658",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1a3e5030-0b82-4649-910f-bfc8d0a28866": {
      "main": [
        [
          {
            "node": "f4d18c3e-7ed8-44d8-b699-82c6923e642f",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "134bf506-303f-45aa-a659-93c7a9c8252d": {
      "main": [
        [
          {
            "node": "b4739068-769f-4638-83cf-94a7c611caad",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d64cf706-d073-4d1a-a793-4ab66a32da28": {
      "main": [
        [
          {
            "node": "f4d18c3e-7ed8-44d8-b699-82c6923e642f",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "f00e3efd-e11e-4340-adef-c87b01c4818c": {
      "main": [
        [
          {
            "node": "f86e1a17-48b9-4a3b-a428-b4e6edc27d6f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "966d4fb2-39e1-4e8f-a6bc-847f49e2f6f0": {
      "main": [
        [
          {
            "node": "1a3e5030-0b82-4649-910f-bfc8d0a28866",
            "type": "main",
            "index": 0
          },
          {
            "node": "d64cf706-d073-4d1a-a793-4ab66a32da28",
            "type": "main",
            "index": 0
          },
          {
            "node": "ce580e6b-e954-4cf0-a55b-f9e67be8a905",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ce580e6b-e954-4cf0-a55b-f9e67be8a905": {
      "main": [
        [
          {
            "node": "f4d18c3e-7ed8-44d8-b699-82c6923e642f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "552b48ff-8921-4878-8c65-4d1f9c63f6e0": {
      "main": [
        [
          {
            "node": "6011ec34-cb71-4db6-b3a6-a8a190db78fc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b94dff41-913d-4e8b-9ea8-3fe9d36041ab": {
      "ai_languageModel": [
        [
          {
            "node": "f86e1a17-48b9-4a3b-a428-b4e6edc27d6f",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "b4739068-769f-4638-83cf-94a7c611caad": {
      "main": [
        [
          {
            "node": "552b48ff-8921-4878-8c65-4d1f9c63f6e0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "f49aa596-c969-4c4f-b466-79f962c2a658": {
      "main": [
        [
          {
            "node": "2dc342e9-9f0b-4f1e-8889-60b61bcb42f2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

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

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

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

고급 - 암호화폐 거래, AI 요약

유료인가요?

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

관련 워크플로우 추천

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

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

저자
Budi SJ

Budi SJ

@budisj

I’m a Product Designer who also works as an Automation Developer. With a background in product design and systems thinking, I build user-centered workflows. My focus is on helping teams and businesses work more productively through impactful automation systems.

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34