GmailメールをGemini 2.5 Pro AIで分類して自動のにタグ付け
中級
これはMiscellaneous, AI Summarization, Multimodal AI分野の自動化ワークフローで、9個のノードを含みます。主にSet, Code, Gmail, Aggregate, GmailTriggerなどのノードを使用。 Gemini 2.5 Pro AIによる分類を使用してGmailのメールを自動のにタグ付け
前提条件
- •Googleアカウント + Gmail API認証情報
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"meta": {
"instanceId": "58a9e858b82757a75629d435ec0da2448ad5d9e906a9ce3b7dcbb64c90fda9fe",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "f5583750-3712-45ab-b80d-e6ef59e1e6dd",
"name": "Gmail トリガー",
"type": "n8n-nodes-base.gmailTrigger",
"position": [
-384,
-80
],
"parameters": {
"filters": {
"readStatus": "unread"
},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
}
},
"credentials": {
"gmailOAuth2": {
"id": "DMM81jCjgMwmkeIf",
"name": "N8N Automations Google Credential"
}
},
"typeVersion": 1.3
},
{
"id": "39fb0933-4c78-4209-aa47-4bc2b76aac83",
"name": "メッセージをモデルへ送信",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
416,
-80
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/gemini-2.5-pro",
"cachedResultName": "models/gemini-2.5-pro"
},
"options": {
"systemMessage": "=You are an email classifier assistant.\nOnly respond with the most suitable existing Gmail label for this email from the following list: {{ $json.labelList }}.\nNever invent a label—not in the list. Respond with multiple matching label names which are seperated with single comma's make sure every labels are seperated using a comma, and nothing else."
},
"messages": {
"values": [
{
"content": "=Below is a new email.\nSubject: {{ $('Gmail Trigger').item.json.Subject }}\nBody: {{ $('Gmail Trigger').item.json.snippet }}\nWhich Gmail label does this email belong to?"
}
]
}
},
"credentials": {
"googlePalmApi": {
"id": "GrbWNcmNxQFQaJje",
"name": "Gemini API n8n-automation"
}
},
"typeVersion": 1
},
{
"id": "4a2fcba6-5e5e-4fea-8a87-94f774a18e54",
"name": "メッセージにラベルを追加",
"type": "n8n-nodes-base.gmail",
"position": [
976,
-80
],
"webhookId": "fe713b17-a055-40d5-9e3d-1ef22940d963",
"parameters": {
"labelIds": "={{ $json.labelIds }}",
"messageId": "={{ $('Gmail Trigger').item.json.id }}",
"operation": "addLabels"
},
"credentials": {
"gmailOAuth2": {
"id": "DMM81jCjgMwmkeIf",
"name": "N8N Automations Google Credential"
}
},
"typeVersion": 2.1
},
{
"id": "4838c10e-bda2-4d72-ad5e-f50090ec4f9d",
"name": "複数のラベルを取得",
"type": "n8n-nodes-base.gmail",
"position": [
-176,
-80
],
"webhookId": "4d911551-faee-4329-a67a-9a2ee147088a",
"parameters": {
"resource": "label",
"returnAll": true
},
"credentials": {
"gmailOAuth2": {
"id": "DMM81jCjgMwmkeIf",
"name": "N8N Automations Google Credential"
}
},
"typeVersion": 2.1
},
{
"id": "310a8233-f123-473b-90ad-0df5417c66e1",
"name": "フィールドを編集",
"type": "n8n-nodes-base.set",
"position": [
240,
-80
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "9628092d-b702-4543-a3ab-e225641f4b21",
"name": "labelList",
"type": "string",
"value": "={{ $json.labels.map(item => item.name).join(', ') }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "3c2c6444-2a70-414e-92fc-df97b3d2ca27",
"name": "集約",
"type": "n8n-nodes-base.aggregate",
"position": [
32,
-80
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "labels"
},
"typeVersion": 1
},
{
"id": "5d4dea5a-6117-416a-bbf3-5c9595e479dd",
"name": "コード",
"type": "n8n-nodes-base.code",
"position": [
768,
-80
],
"parameters": {
"jsCode": "// Get all input items (your AI output should be in items[0], and label map in items[0].json.labels)\nconst items = $input.all();\n\n// 1. Parse comma-separated label names returned by the AI node\nlet resultLabels = items[0].json.content.parts[0].text\n .split(\",\")\n .map((label) => label.trim())\n .filter((label) => label.length > 0);\n\n// 2. Get the label mapping array from aggregate node (should be in items[0].json.labels)\nconst labelObjects = $('Aggregate').first().json.labels || [];\nconsole.log(\"LABEL\", labelObjects);\n\n// 3. Map label names to IDs using the mapping array\nconst labelIds = resultLabels\n .map((lName) => {\n const match = labelObjects.find((obj) => obj.name === lName);\n return match ? match.id : null;\n })\n .filter(Boolean); // remove nulls\n\n// 4. Output as n8n expects\nreturn [\n {\n json: {\n labelIds,\n },\n },\n];\n"
},
"typeVersion": 2
},
{
"id": "2691c250-40e4-41b8-9b5e-f553cd842a2f",
"name": "付箋",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1008,
-256
],
"parameters": {
"width": 496,
"height": 480,
"content": "## 📨 AI Gmail Auto-Labeler: How it Works\n\n#### Trigger:\nWatches for new unread emails.\n\n#### Label Sync:\nFetches all your current Gmail labels (label name + ID).\n\n#### AI Classification:\nSends each new email’s subject & body to Gemini AI,\nPrompt: “Which Gmail label(s) does this email belong to?”\nAI only uses labels from your real account list.\n\n#### Label Name → ID Mapping:\nMaps AI-predicted Gmail label names to their label IDs.\n\n#### Label Application:\nAutomatically assigns one or more valid labels to each new email."
},
"typeVersion": 1
},
{
"id": "0409c111-441c-4ff5-99e6-39098ca775a8",
"name": "付箋1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1248,
-192
],
"parameters": {
"width": 464,
"height": 336,
"content": "## 🛠️ How to Use\n- Connect your Gmail and Gemini API credentials.\n- Customize your allowed Gmail labels in your mailbox (no need to update nodes).\n- AI will NEVER suggest a label not present in your Gmail.\n- Works best if label names are clear and differ from system labels.\n- Monitors for unread emails only (edit trigger if you want all).\n- AI can assign multiple labels (comma-separated, mapped automatically).\n- Everything is dynamic and needs no manual updating of label lists for new labels.\n- You may add filters or extra conditions as desired before/after AI classification."
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"5d4dea5a-6117-416a-bbf3-5c9595e479dd": {
"main": [
[
{
"node": "4a2fcba6-5e5e-4fea-8a87-94f774a18e54",
"type": "main",
"index": 0
}
]
]
},
"3c2c6444-2a70-414e-92fc-df97b3d2ca27": {
"main": [
[
{
"node": "310a8233-f123-473b-90ad-0df5417c66e1",
"type": "main",
"index": 0
}
]
]
},
"310a8233-f123-473b-90ad-0df5417c66e1": {
"main": [
[
{
"node": "39fb0933-4c78-4209-aa47-4bc2b76aac83",
"type": "main",
"index": 0
}
]
]
},
"f5583750-3712-45ab-b80d-e6ef59e1e6dd": {
"main": [
[
{
"node": "4838c10e-bda2-4d72-ad5e-f50090ec4f9d",
"type": "main",
"index": 0
}
]
]
},
"4838c10e-bda2-4d72-ad5e-f50090ec4f9d": {
"main": [
[
{
"node": "3c2c6444-2a70-414e-92fc-df97b3d2ca27",
"type": "main",
"index": 0
}
]
]
},
"39fb0933-4c78-4209-aa47-4bc2b76aac83": {
"main": [
[
{
"node": "5d4dea5a-6117-416a-bbf3-5c9595e479dd",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
中級 - その他, AI要約, マルチモーダルAI
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
Gemini、Tavily および人間の審査を使用して SEO 最適化された WordPress ブログを生成
Gemini、Tavily、そして人間の審査を使ってSEO最適化されたWordPressブログを生成する
If
Set
Code
+
If
Set
Code
38 ノードAryan Shinde
コンテンツ作成
Gemini、Slack、Notionを使ってニュース速報からAI要約を作成
Gemini、Slack、Notionを使ってニュース速報からAI情報要約を作成
Set
Code
Gmail
+
Set
Code
Gmail
19 ノードHarry Siggins
その他
AIを使用してウイルスのなYouTube動画を検出し、メールレポートを送信
AIを使ってウイルスのなYouTube動画を検出し、メールレポートを送信する
Set
Code
Sort
+
Set
Code
Sort
26 ノードgclbck
その他
自動メールラベラー
AI駆動型のスマートGmailラベル管理とDiscord通知
Set
Code
Gmail
+
Set
Code
Gmail
27 ノードAlbert Ho
AI要約
競合他社コンテンツギャップ分析ツール:構題マッピングの自動化
Gemini AI、Apify、Google Sheetsを使用して競合企業のコンテンツギャップを分析
If
Set
Code
+
If
Set
Code
30 ノードMychel Garzon
その他
クライアントフィードバックサイクルアナライザー
AI、GoogleスプレッドシートとSlackで顧客フィードバックを自動分類
Code
Gmail
Slack
+
Code
Gmail
Slack
11 ノードWeblineIndia
その他