OpenAIとGmailを使用した毎日のポジティブニュース要約
中級
これはPersonal Productivity, AI Summarization分野の自動化ワークフローで、9個のノードを含みます。主にIf, Cron, Gmail, OpenAi, RssFeedなどのノードを使用。 OpenAIとGmailを使用した毎日のポジティブなニュース要約
前提条件
- •Googleアカウント + Gmail API認証情報
- •OpenAI API Key
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"nodes": [
{
"name": "毎朝のトリガー (7 AM)",
"type": "n8n-nodes-base.cron",
"notes": {
"text": "### 1. Daily Morning Trigger (7 AM)\n\nThis `Cron` node triggers the workflow automatically every **day at 7:00 AM** (based on your n8n server's local time zone).\n\n**To change the schedule:** Adjust the 'Hour' and 'Minute' fields to your preferred time for receiving the news digest.",
"position": "right"
},
"position": [
240,
300
],
"parameters": {
"mode": "everyDay",
"value": {
"hour": [
7
],
"minute": [
0
]
},
"options": {}
},
"typeVersion": 1,
"id": "-7-AM--0"
},
{
"name": "ポジティブニュースの取得 (RSS)",
"type": "n8n-nodes-base.rssFeed",
"notes": {
"text": "### 2. Fetch Positive News (RSS)\n\nThis `RSS Feed` node fetches the latest articles from the Good News Network, a reliable source for positive stories.\n\n**Setup:**\n1. **URL:** Pre-filled with `https://www.goodnewsnetwork.org/feed/`.\n2. **To add more sources:** You can add more `RSS Feed` nodes in parallel and then use an `Item Lists` node set to 'Merge Items' to combine their outputs before the 'Prepare for AI' node.",
"position": "right"
},
"position": [
480,
300
],
"parameters": {
"url": "https://www.goodnewsnetwork.org/feed/",
"options": {}
},
"typeVersion": 1,
"id": "-RSS--1"
},
{
"name": "AI処理の準備",
"type": "n8n-nodes-base.function",
"notes": {
"text": "### 3. Prepare for AI\n\nThis `Function` node formats the news articles' titles and descriptions into a single `articleText` field, which is easier for the AI to process.\n\nIt also preserves the original title, description, and link for the final summary.\n\n**No configuration needed**; it automatically processes the RSS feed items.",
"position": "right"
},
"position": [
720,
300
],
"parameters": {
"options": {},
"function": "const preparedItems = [];\n\nfor (const item of items) {\n const title = item.json.title || 'No Title';\n const description = item.json.contentSnippet || item.json.description || 'No Description';\n const link = item.json.link || '#';\n\n preparedItems.push({\n json: {\n originalTitle: title,\n originalDescription: description,\n originalLink: link,\n articleText: `Title: ${title}\\nDescription: ${description}`\n }\n });\n}\n\nreturn preparedItems;"
},
"typeVersion": 1,
"id": "AI--2"
},
{
"name": "AI: ポジティブニュースの要約",
"type": "n8n-nodes-base.openAi",
"notes": {
"text": "### 4. AI: Summarize Positive News\n\nThis `OpenAI` node is the core of the 'positive news' filtering and summarization.\n\n**Setup:**\n1. **OpenAI Credential:** Click 'Credentials' and select 'New Credential'. Provide your OpenAI API Key (starts with `sk-`). Save it.\n2. **Model:** `gpt-3.5-turbo` is pre-selected. For higher quality summaries and better sentiment discernment, consider `gpt-4o` (may incur higher costs).\n3. **Prompts:** The 'System' prompt guides the AI to only summarize positive/neutral-to-positive articles and output 'SKIP' otherwise.\n\n**Output:** The AI's summary or the word 'SKIP'.",
"position": "right"
},
"position": [
960,
300
],
"parameters": {
"model": "gpt-3.5-turbo",
"options": {},
"messages": [
{
"role": "system",
"content": "You are a news summarizer focused only on positive and uplifting news. Read the provided article text. If it is clearly positive or neutral-to-positive, summarize its core message in 2-3 concise sentences, focusing on the positive aspects. If it is negative, neutral, or not news (e.g., ads), output the single word 'SKIP'."
},
{
"role": "user",
"content": "Article:\n{{ $json.articleText }}"
}
]
},
"credentials": {
"openAiApi": {
"id": "YOUR_OPENAI_CREDENTIAL_ID",
"resolve": false
}
},
"typeVersion": 1,
"id": "AI--3"
},
{
"name": "ポジティブ要約のフィルタリングと準備",
"type": "n8n-nodes-base.function",
"notes": {
"text": "### 5. Filter & Prepare Positive Summaries\n\nThis `Function` node filters out any items where the AI responded with 'SKIP' (meaning the news was not positive enough).\n\nFor the remaining items, it prepares a clean object containing the original title, link, and the AI-generated positive summary.\n\n**No configuration needed**; it automatically processes the AI output.",
"position": "right"
},
"position": [
1200,
300
],
"parameters": {
"options": {},
"function": "const positiveSummaries = [];\n\nfor (const item of items) {\n const aiResponse = item.json.choices[0].message.content.trim();\n\n if (aiResponse.toUpperCase() !== 'SKIP') {\n positiveSummaries.push({\n json: {\n originalTitle: item.json.originalTitle,\n originalLink: item.json.originalLink,\n summary: aiResponse\n }\n });\n }\n}\n\nreturn positiveSummaries;"
},
"typeVersion": 1,
"id": "--4"
},
{
"name": "ポジティブニュースが見つかった場合",
"type": "n8n-nodes-base.if",
"notes": {
"text": "### 6. If Positive News Found\n\nThis `If` node checks if any positive news articles were actually found and summarized after filtering.\n\n* **'True' branch:** If positive news exists, the workflow proceeds to format and send the email.\n* **'False' branch:** If no positive news was found for the day, the workflow will still send an email, but with a message indicating no positive news was found (handled by the 'Format No Positive News Message' node).\n\n**No configuration needed**; it checks if the array of items is not empty.",
"position": "right"
},
"position": [
1440,
300
],
"parameters": {
"conditions": [
{
"value1": "={{ $json.length }}",
"value2": "0",
"operation": "notEqual"
}
]
},
"typeVersion": 1,
"id": "--5"
},
{
"name": "ポジティブニュースメールのフォーマット",
"type": "n8n-nodes-base.function",
"notes": {
"text": "### 7. Format Positive News Email\n\nThis `Function` node compiles all the positive news summaries into a single, formatted email body.\n\n**Customization:**\n* You can customize the greeting, closing, and the way each news item is presented.\n* The email body is formatted using Markdown for bolding and line breaks, which Gmail supports.\n\n**No configuration needed** if your previous node's output matches expectations.",
"position": "right"
},
"position": [
1680,
220
],
"parameters": {
"options": {},
"function": "let emailBody = \"\";\n\nemailBody += \"Good morning! Here's your daily dose of positive news:\\n\\n\";\n\nfor (const item of items) {\n emailBody += `**${item.json.originalTitle}**\\n` +\n `${item.json.summary}\\n` +\n `Read more: ${item.json.originalLink}\\n\\n---\\n\\n`;\n}\n\nemailBody += \"Have a wonderful day!\\n\\nThis digest was brought to you by n8n.\";\n\nreturn [{ json: { emailSubject: \"☀️ Your Daily Positive News Digest!\", emailBody: emailBody } }];"
},
"typeVersion": 1,
"id": "--6"
},
{
"name": "ポジティブニュースなしメッセージのフォーマット",
"type": "n8n-nodes-base.function",
"notes": {
"text": "### 7. Format No Positive News Message\n\nThis `Function` node creates a fallback message for your email if the workflow doesn't find any positive news articles after filtering.\n\n**No configuration needed**; it provides a default message when there's no positive news.",
"position": "right"
},
"position": [
1680,
380
],
"parameters": {
"options": {},
"function": "return [{ json: { emailSubject: \"☁️ Daily Positive News Digest: No Positive News Today\", emailBody: \"Good morning!\\n\\nUnfortunately, I couldn't find any predominantly positive news articles for your digest today.\\n\\nStay positive, and check back tomorrow!\\n\\nThis digest was brought to you by n8n.\" } }];"
},
"typeVersion": 1,
"id": "--7"
},
{
"name": "毎日ダイジェストメールの送信",
"type": "n8n-nodes-base.gmail",
"notes": {
"text": "### 8. Send Daily Digest Email\n\nThis `Gmail` node sends the final email digest (either with positive news or the 'no news found' message) to your mailbox.\n\n**Setup:**\n1. **Gmail Credential:** Select your Gmail API credential.\n2. **From Email:** Enter your Gmail address (must match the authenticated account).\n3. **To Email:** **IMPORTANT: Change `YOUR_RECIPIENT_EMAIL@example.com` to your actual email address!**\n4. **Subject & Text:** These fields pull the formatted subject and body from the previous 'Format' nodes.\n\n**Test this node by running the workflow** to ensure you receive the email.",
"position": "right"
},
"position": [
1920,
300
],
"parameters": {
"text": "={{ $json.emailBody }}",
"options": {},
"subject": "={{ $json.emailSubject }}",
"toEmail": "YOUR_RECIPIENT_EMAIL@example.com",
"fromEmail": "YOUR_GMAIL_EMAIL@gmail.com"
},
"credentials": {
"gmailApi": {
"id": "YOUR_GMAIL_CREDENTIAL_ID",
"resolve": false
}
},
"typeVersion": 2,
"id": "--8"
}
],
"pinData": {},
"version": 1,
"connections": {
"AI--2": {
"main": [
[
{
"node": "AI--3",
"type": "main"
}
]
]
},
"--5": {
"main": [
[
{
"node": "--6",
"type": "main"
}
],
[
{
"node": "--7",
"type": "main"
}
]
]
},
"-RSS--1": {
"main": [
[
{
"node": "AI--2",
"type": "main"
}
]
]
},
"--6": {
"main": [
[
{
"node": "--8",
"type": "main"
}
]
]
},
"AI--3": {
"main": [
[
{
"node": "--4",
"type": "main"
}
]
]
},
"-7-AM--0": {
"main": [
[
{
"node": "-RSS--1",
"type": "main"
}
]
]
},
"--7": {
"main": [
[
{
"node": "--8",
"type": "main"
}
]
]
},
"--4": {
"main": [
[
{
"node": "--5",
"type": "main"
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
中級 - 個人の生産性, AI要約
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
GmailとGPTを使って毎日のメール要約を自動送信
GmailとGPTを使って毎日のメール要約を自動送信し、午後に送信する
Cron
Gmail
Open Ai
+
Cron
Gmail
Open Ai
6 ノードPiotr Sobolewski
個人の生産性
企業のオンラインイメージ監視ツール
AI感情分析とマルチプラットフォーム追跡を使用した毎日の企業のオンラインイメージ監視
Set
Cron
Gmail
+
Set
Cron
Gmail
17 ノードPiotr Sobolewski
市場調査
マルチプラットフォームゲーム割引追踪の自動化
Deko Deals と Gmail アラートを使用したマルチプラットフォームゲーム割引の自動追跡
If
Cron
Gmail
+
If
Cron
Gmail
11 ノードPiotr Sobolewski
個人の生産性
自動ウェブクローラー:仕事の細分化/製品モニタリングとTelegramアラート
自動化された Web クローラー: セグメント化されたジョブ/製品の監視と Telegram アラート
If
Cron
Function
+
If
Cron
Function
6 ノードPiotr Sobolewski
市場調査
自動家計簿システム:領収書を同期、キャッシュフローを予測し、月次レポートを生成
Gmail・Google Sheets・GPT-4oを使った月次レポート自動生成 financial tracker
If
Set
Cron
+
If
Set
Cron
17 ノードShelly-Ann Davy
請求書処理
ワークデイログ記録
AI作業時間表ジェネレーター - Gmail、カレンダー、GitHubをGoogleスプレッドシートに統合
If
Set
Code
+
If
Set
Code
31 ノードLuka Zivkovic
個人の生産性
ワークフロー情報
難易度
中級
ノード数9
カテゴリー2
ノードタイプ6
作成者
Piotr Sobolewski
@piotrsobolewskiAI PhD with 7 years experience as a game dev CEO, currently teaching, helping others and building something new.
外部リンク
n8n.ioで表示 →
このワークフローを共有