ソーシャルメディアモニタリング
上級
これはMarket Research, AI Summarization分野の自動化ワークフローで、42個のノードを含みます。主にCode, Merge, DataTable, GmailTool, HttpRequestなどのノードを使用。 AnySite APIとGPTを使用したマルチプラットフォームブランドモニタリング&分析
前提条件
- •Googleアカウント + Gmail API認証情報
- •ターゲットAPIの認証情報が必要な場合あり
- •OpenAI API Key
使用ノード (42)
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"id": "gauteMKS8RC8zIGb",
"meta": {
"instanceId": "9bce59fa408e249dab636faffc5a13e5aa1a2e4af3383a551051e8bd22b2a1b9",
"templateCredsSetupCompleted": true
},
"name": "Social Media Monitoring",
"tags": [],
"nodes": [
{
"id": "7167c958-e821-4082-a13e-eda76c27c0be",
"name": "ワークフロー実行時",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-1840,
432
],
"parameters": {},
"typeVersion": 1
},
{
"id": "c26d107c-d1b4-40ae-b983-a66a7b9f81c8",
"name": "マージ",
"type": "n8n-nodes-base.merge",
"position": [
864,
448
],
"parameters": {
"numberInputs": 4
},
"typeVersion": 3.2
},
{
"id": "e83df4cd-aaa2-4536-be7e-350aa0414f0e",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1232,
768
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o",
"cachedResultName": "gpt-4o"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "DzKhX3E7SSLddnv4",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "3009f7cc-fee2-48d4-b886-a81aaaad393e",
"name": "AnySite Reddit投稿取得",
"type": "n8n-nodes-base.httpRequest",
"position": [
48,
112
],
"parameters": {
"url": "https://api.anysite.io/api/reddit/posts",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "timeout",
"value": "300"
},
{
"name": "post_url",
"value": "={{ $json.url }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "access-token"
}
]
}
},
"retryOnFail": true,
"typeVersion": 4.3
},
{
"id": "7d5e9846-8979-48d8-8e2f-7e1bfc752297",
"name": "AnySite Reddit投稿検索",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1200,
160
],
"parameters": {
"url": "https://api.anysite.io/api/reddit/search/posts",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "timeout",
"value": "300"
},
{
"name": "query",
"value": "={{ $json.word }}"
},
{
"name": "sort",
"value": "relevance"
},
{
"name": "count",
"value": "2"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "access-token"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "c00051fb-d3a3-4100-8c1f-4c60c06cf130",
"name": "AnySite Reddit投稿コメント取得",
"type": "n8n-nodes-base.httpRequest",
"position": [
48,
304
],
"parameters": {
"url": "https://api.anysite.io/api/reddit/posts/comments",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "timeout",
"value": "300"
},
{
"name": "post_url",
"value": "={{ $json.url }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "access-token"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "a422b95c-2f44-4652-b420-46a15a3f3d86",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1328,
480
],
"parameters": {
"text": "=Список post_id: {{ $json.post_ids_str }}",
"options": {
"systemMessage": "=\n\nYou are a social media intelligence analyst inside an n8n workflow. Your job: given post_ids and/or pre-fetched posts plus user-defined keywords, you must retrieve records for each post_id from the internal database if needed, normalize and analyze them, generate a concise yet exhaustive report, and send that report by email using the provided email tool. Do not browse the web. Do not invent data.\n\nTools\n\nYou will be provided one or more tools. Prefer these canonical names if available; otherwise use whichever exact email tool is exposed to you in this runtime:\n\t•\tsend_email\n\n\t•\tfetch_posts_by_ids \nReturns an array of Post objects.\n\nIf a tool is unavailable, skip it and proceed with what you have; record any missing post_ids in missing_ids.\n\nInput (user message JSON)\n\n{\n \"post_ids\": [\"...\"], // required if \"posts\" is absent\n \"keywords\": [\"rocket\",\"anysite\"], // required (one or more)\n \"time_range\": {\"from\":\"ISO\",\"to\":\"ISO\"}, // optional\n \"language\": \"en\", // report language; default \"en\"\n \"time_zone\": \"Europe/Amsterdam\", // default \"Europe/Amsterdam\"\n \"email_to\": \"user@example.com\", // required to send the email\n \"context\": {\"brand\":\"...\",\"campaign\":\"...\",\"notes\":\"...\"}, // optional\n \"posts\": [ { ... } ] // optional: full post objects already provided\n}\n\nData handling\n\t•\tIf posts present → use directly.\n\t•\tIf only post_ids → call fetch_posts_by_ids. Record any misses in missing_ids.\n\t•\tAnalyze only provided/returned data. No external calls.\n\nExpected post fields (may vary)\n\ntype, title, text, url, created_at (Unix or ISO), comment_count, vote_count/like_count/repost_count, platform-specific (subreddit_*, comments (array or JSON string), post_id, word, etc.).\n\nNormalization\n\t1.\tConvert created_at to ISO8601 localized to time_zone (default Europe/Amsterdam).\n\t2.\tParse comments if JSON string → array.\n\t3.\tDeduplicate by post_id or url.\n\t4.\tInfer platform from type.\n\t5.\tDetect post language; if different from report language, include a brief 1–2 line translation.\n\t6.\tMap each post to matched keyword(s): from word and actual matches in title/text.\n\t7.\tDisambiguate keyword senses with confidence:\n\t•\trocket → space/launch, brands (e.g., Rocket Mortgage), games/memes, autos (e.g., BRABUS Rocket), food (arugula), fashion/other.\n\t•\tanysite → product/brand vs generic phrase “any site”.\n\nPer-post analytics\n\nFor every post compute:\n\t•\tengagement_proxy: sum of available counters (comment_count + vote_count/like_count/repost_count). If parsed comments array exists, you may add its length. Missing counters → 0.\n\t•\trecency_hours: hours since created_at to now.\n\t•\tkeyword_match_strength: \"strong\" (title/exact), \"medium\" (body), \"weak\" (comments/tags), \"meta\" (only via word).\n\t•\tsentiment: positive / neutral / negative + 1-sentence rationale.\n\t•\tentities: notable brands/people/products/places if inferable.\n\t•\trisks: toxicity, misinformation/rumors, controversy, compliance issues.\n\t•\tdrivers: short notes on what likely drove engagement (e.g., striking media, controversy, timing, celebrity/brand mention).\n\t•\tconfidence: high / medium / low based on data completeness, clarity, and sense disambiguation.\n\nAggregations (deeper detail)\n\t•\tTotals: count of posts; split by platform.\n\t•\tBy keyword: count and share (% of total), plus average engagement_proxy and sentiment mix per keyword.\n\t•\tSenses distribution per keyword (counts, shares, example posts).\n\t•\tPlatform breakdown: per platform totals, median and 75th-percentile engagement (approximate via sorted ranks), top topics.\n\t•\tTrend narrative over time_range: textual description of spikes/dips (hourly/daily as appropriate).\n\t•\tTopic clusters/themes: derive 3–7 themes using simple keyword co-occurrence (e.g., {“space/test/launch”}, {“auto/brabus/edition”}, {“security/telemetry/ads”}); list 1–2 representative posts per theme.\n\t•\tInfluential accounts/authors: where author info is available, rank by contribution to engagement.\n\t•\tRisks & watchouts: consolidated list across posts with brief why-it-matters.\n\t•\tRecommended actions: prioritized, actionable next steps (max per limits.max_actions), with impact/effort tags.\n\t•\tConfidence & data quality: summarize coverage, missing counters, inferred senses.\n\nReport composition (rich)\n\t•\tSubject: Social Media Report • {YYYY-MM-DD} • {keywords} • {posts_count}\n\t•\tHTML body (inline CSS; no external assets). Include these sections in order:\n\t1.\tHeader\n\t•\tTitle, date, time window, time zone, optional context (brand/campaign).\n\t2.\tExecutive summary (5–9 bullets)\n\t•\tKey shifts, top themes, standout posts, immediate risks, recommended next actions (1–3).\n\t3.\tKey metrics (KPI grid + table)\n\t•\tTotals, by-platform split, by-keyword split (counts, shares, avg engagement, sentiment mix).\n\t•\tUse simple CSS bars (e.g., <div style=\"background:#eee\"><div style=\"width:XX%\"></div></div>) to visualize shares.\n\t4.\tKeyword senses\n\t•\tTable of senses per keyword with counts, examples, and confidence notes.\n\t5.\tTrends & themes\n\t•\tShort narrative of volume/engagement over time.\n\t•\t3–7 themes/clusters with 1–2 representative links each.\n\t6.\tTop posts\n\t•\tUp to limits.max_top_posts overall and up to limits.top_posts_per_platform per platform.\n\t•\tFor each: platform, title/summary, link, localized timestamp, engagement_proxy, sentiment, matched keyword(s) & sense, 1–2 brief quotes/comments, drivers, risks (if any).\n\t7.\tPlatform insights\n\t•\tPer-platform highlights: what content resonated, posting times, tone/style patterns.\n\t8.\tRisks & watchouts\n\t•\tBullet list (≤ limits.max_risks) with brief mitigation ideas.\n\t9.\tRecommended actions\n\t•\tPrioritized list with Impact / Effort tags (e.g., High/Low), owner suggestion if inferable from context.\n\t10.\tMethodology & limitations\n\t•\tData source (workflow), missing counters treated as 0, heuristic senses, no external sources, confidence statement.\n\t•\tPlain text: same flow as HTML in clean Markdown/ASCII.\n\nHTML tips (email-safe)\n\t•\tInline CSS only; no external fonts/images/JS.\n\t•\tUse simple tables and <div> bars for shares.\n\t•\tKeep quotes ≤2 lines; truncate long text with ellipsis.\n\nCSV attachments (if supported by tool)\n\nAttach up to four CSVs:\n\t1.\tsummary.csv: keyword,count,share,avg_engagement,positive,neutral,negative\n\t2.\tposts.csv: platform,created_at,url,engagement_proxy,sentiment,keyword,sense,match_strength\n\t3.\ttop_comments.csv: platform,post_url,author,created_at,excerpt\n\t4.\tentities.csv: entity,type,frequency,example_post_url\n\nQuality & constraints\n\t•\tNo fabricated data. Missing counters → 0 (note in methodology).\n\t•\tAbsolute timestamps with time_zone.\n\t•\tKeep paragraphs tight and scannable.\n\t•\tLanguage = language (default \"en\").\n\nError handling\n\t•\tIf email_to missing → do not send; respond with status \"error\" and reason.\n\t•\tIf email tool fails → return \"error\" with the tool’s message.\n\nFinal action — you MUST send the email\n\t1.\tBuild subject, html, text per spec (depth per depth:\n\t•\tstandard: sections 1–3, 6, 10\n\t•\textended (default): all sections except 7 (optional)\n\t•\tmax: include all sections with fuller detail within limits)\n\t2.\tCall the email tool with:\n\t•\tto = email_to\n\t•\tsubject, html, text\n\t•\tattachments if supported\n\t3.\tAfter sending, reply with a single compact JSON acknowledgment (do not echo the full HTML):\n\nReturn exactly one JSON object:\n\n{\n \"status\": \"sent\" | \"error\",\n \"to\": \"string\",\n \"subject\": \"string\",\n \"totals\": {\n \"posts\": 0,\n \"platforms\": {\"reddit\":0,\"x\":0,\"linkedin\":0,\"instagram\":0},\n \"by_keyword\": [{\"keyword\":\"...\",\"count\":0,\"share\":0.0}],\n \"time_window\": {\"from\":\"ISO\",\"to\":\"ISO\",\"time_zone\":\"Europe/Amsterdam\"}\n },\n \"missing_ids\": [\"...\"],\n \"notes\": [\"...\"] // e.g., \"Engagement counters missing on some platforms; treated as 0.\"\n}\n\nPre-send checklist\n\t•\tSubject has date, keywords, post count.\n\t•\tHTML uses inline CSS only.\n\t•\tTotals match analyzed posts.\n\t•\tTime zone consistent.\n\t•\temail_to present and non-empty.\n\n\n⸻\n\nMinimal HTML skeleton you can adapt\n\n<html>\n <body style=\"font-family: Arial, sans-serif; color:#111; line-height:1.5; margin:0; padding:24px;\">\n <h1 style=\"margin:0 0 8px;\">Social Media Report</h1>\n <p style=\"margin:0 0 16px; color:#555;\">Date: {{DATE}} • Window: {{FROM}} — {{TO}} ({{TZ}})</p>\n {{#if CONTEXT}}<p style=\"margin:0 0 16px; color:#555;\">Context: {{CONTEXT}}</p>{{/if}}\n\n <h2 style=\"margin:24px 0 8px;\">Executive summary</h2>\n <ul style=\"margin:0 0 16px; padding-left:20px;\">{{BULLETS}}</ul>\n\n <h2 style=\"margin:24px 0 8px;\">Key metrics</h2>\n <table cellpadding=\"6\" cellspacing=\"0\" border=\"0\" style=\"border-collapse:collapse; width:100%; font-size:14px;\">\n <thead><tr><th align=\"left\" style=\"border-bottom:1px solid #ddd;\">Metric</th><th align=\"left\" style=\"border-bottom:1px solid #ddd;\">Value</th></tr></thead>\n <tbody>\n {{KPI_ROWS}}\n </tbody>\n </table>\n\n <h2 style=\"margin:24px 0 8px;\">By keyword</h2>\n {{KEYWORD_ROWS}} <!-- Include share bars like: -->\n <!--\n <div style=\"margin:6px 0;\">\n <strong>rocket</strong> — 65% (13 posts)\n <div style=\"background:#eee; height:8px; width:100%; border-radius:4px;\">\n <div style=\"background:#444; height:8px; width:65%; border-radius:4px;\"></div>\n </div>\n </div>\n -->\n\n <h2 style=\"margin:24px 0 8px;\">Keyword senses</h2>\n {{SENSE_TABLE}}\n\n <h2 style=\"margin:24px 0 8px;\">Trends & themes</h2>\n <p style=\"margin:0 0 8px;\">{{TREND_NARRATIVE}}</p>\n <ul style=\"margin:0 0 16px; padding-left:20px;\">{{THEME_BULLETS}}</ul>\n\n <h2 style=\"margin:24px 0 8px;\">Top posts</h2>\n {{TOP_POST_CARDS}}\n\n <h2 style=\"margin:24px 0 8px;\">Platform insights</h2>\n {{PLATFORM_SECTIONS}}\n\n <h2 style=\"margin:24px 0 8px;\">Risks & watchouts</h2>\n <ul style=\"margin:0 0 16px; padding-left:20px;\">{{RISK_BULLETS}}</ul>\n\n <h2 style=\"margin:24px 0 8px;\">Recommended actions</h2>\n <ol style=\"margin:0 0 16px; padding-left:20px;\">{{ACTION_ITEMS}}</ol>\n\n <h2 style=\"margin:24px 0 8px;\">Methodology & limitations</h2>\n <p style=\"margin:0; color:#555;\">Data analyzed exactly as provided by the workflow (no external sources). Missing counters treated as 0. Keyword senses and themes inferred heuristically. Confidence: {{CONFIDENCE}}.</p>\n </body>\n</html>\n\nRemember: analyze only provided data, send the email yourself via the tool, then return the compact JSON acknowledgment."
},
"promptType": "define"
},
"typeVersion": 3
},
{
"id": "fe4be382-803a-4829-8fcb-9b492861ae3b",
"name": "単語リスト取得",
"type": "n8n-nodes-base.dataTable",
"position": [
-1600,
544
],
"parameters": {
"operation": "get",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "VrIDpq4HXFQBRTU7",
"cachedResultUrl": "/projects/KcvI5ipbOFN8ryQN/datatables/VrIDpq4HXFQBRTU7",
"cachedResultName": "Brand Monitoring Words"
}
},
"typeVersion": 1
},
{
"id": "e9b7166d-312a-4dd0-8afa-c40e0d13069b",
"name": "AnySite LinkedIn投稿検索",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1200,
400
],
"parameters": {
"url": "https://api.anysite.io/api/linkedin/search/posts",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "keywords",
"value": "={{ $json.word }}"
},
{
"name": "count",
"value": "2"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "access-token"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "aa8c0794-6012-40ae-894e-a5972d1db244",
"name": "AnySite LinkedIn投稿コメント取得",
"type": "n8n-nodes-base.httpRequest",
"position": [
48,
544
],
"parameters": {
"url": "https://api.anysite.io/api/linkedin/post/comments",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "timeout",
"value": "300"
},
{
"name": "urn",
"value": "=urn:li:activity:{{ $json.post_id }}"
},
{
"name": "sort",
"value": "recent"
},
{
"name": "count",
"value": "30"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "access-token"
}
]
}
},
"retryOnFail": true,
"typeVersion": 4.3,
"alwaysOutputData": true
},
{
"id": "64714aa4-379b-43f5-9ce8-625ea769abde",
"name": "AnySite Instagram投稿検索",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1200,
624
],
"parameters": {
"url": "https://api.anysite.io/api/twitter/search/posts",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "query",
"value": "={{ $json.word }}"
},
{
"name": "count",
"value": "2"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "access-token"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "cfd2abac-84f3-49cf-8be0-887be12a46a5",
"name": "AnySite X投稿検索",
"type": "n8n-nodes-base.httpRequest",
"position": [
-1200,
848
],
"parameters": {
"url": "https://api.anysite.io/api/instagram/search/posts",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "timeout",
"value": "300"
},
{
"name": "query",
"value": "={{ $json.word }}"
},
{
"name": "count",
"value": "2"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "access-token"
}
]
}
},
"typeVersion": 4.3
},
{
"id": "67395f5a-9712-4a44-91c2-c38b44d23a28",
"name": "LinkedIn投稿存在チェック1",
"type": "n8n-nodes-base.dataTable",
"position": [
-592,
400
],
"parameters": {
"filters": {
"conditions": [
{
"keyName": "post_id",
"keyValue": "={{ $json.urn.value }}"
}
]
},
"operation": "rowNotExists",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "B9xklN5LC5Yv67oC",
"cachedResultUrl": "/projects/KcvI5ipbOFN8ryQN/datatables/B9xklN5LC5Yv67oC",
"cachedResultName": "Brand Motitoring Posts"
}
},
"typeVersion": 1
},
{
"id": "ed0c57df-bc57-40bc-b220-7bfeaeaa8365",
"name": "Reddit投稿存在チェック",
"type": "n8n-nodes-base.dataTable",
"position": [
-592,
160
],
"parameters": {
"filters": {
"conditions": [
{
"keyName": "post_id",
"keyValue": "={{ $json.id }}"
}
]
},
"operation": "rowNotExists",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "B9xklN5LC5Yv67oC",
"cachedResultUrl": "/projects/KcvI5ipbOFN8ryQN/datatables/B9xklN5LC5Yv67oC",
"cachedResultName": "Brand Motitoring Posts"
}
},
"typeVersion": 1
},
{
"id": "6b7d65ec-3ac2-4ee5-a5e6-4049952c8d47",
"name": "X投稿存在チェック3",
"type": "n8n-nodes-base.dataTable",
"position": [
-592,
848
],
"parameters": {
"filters": {
"conditions": [
{
"keyName": "post_id",
"keyValue": "={{ $json.id }}"
}
]
},
"operation": "rowNotExists",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "B9xklN5LC5Yv67oC",
"cachedResultUrl": "/projects/KcvI5ipbOFN8ryQN/datatables/B9xklN5LC5Yv67oC",
"cachedResultName": "Brand Motitoring Posts"
}
},
"typeVersion": 1
},
{
"id": "85f7b4f1-9191-4397-a296-d45e15c371e2",
"name": "Instagram投稿存在チェック2",
"type": "n8n-nodes-base.dataTable",
"position": [
-592,
624
],
"parameters": {
"filters": {
"conditions": [
{
"keyName": "post_id",
"keyValue": "={{ $json.id }}"
}
]
},
"operation": "rowNotExists",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "B9xklN5LC5Yv67oC",
"cachedResultUrl": "/projects/KcvI5ipbOFN8ryQN/datatables/B9xklN5LC5Yv67oC",
"cachedResultName": "Brand Motitoring Posts"
}
},
"typeVersion": 1
},
{
"id": "cfb6bc47-eb96-4f0a-91c4-2916ae51da44",
"name": "Reddit投稿挿入",
"type": "n8n-nodes-base.dataTable",
"position": [
-368,
160
],
"parameters": {
"columns": {
"value": {
"url": "={{ $json.url }}",
"type": "={{ $json['@type'] }}",
"word": "={{ $('Get word\\'s list').item.json.word }}",
"title": "={{ $json.title }}",
"post_id": "={{ $json.id }}",
"created_at": "={{ $json.created_at }}",
"vote_count": "={{ $json.vote_count }}",
"subreddit_id": "={{ $json.subreddit.id }}",
"comment_count": "={{ $json.comment_count }}",
"subreddit_url": "={{ $json.subreddit.url }}",
"subreddit_alias": "={{ $json.subreddit.alias }}",
"subreddit_description": "={{ $json.subreddit.description }}",
"subreddit_member_count": "={{ $json.subreddit.member_count }}"
},
"schema": [
{
"id": "type",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "type",
"defaultMatch": false
},
{
"id": "title",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "title",
"defaultMatch": false
},
{
"id": "url",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "url",
"defaultMatch": false
},
{
"id": "created_at",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "created_at",
"defaultMatch": false
},
{
"id": "subreddit_id",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "subreddit_id",
"defaultMatch": false
},
{
"id": "subreddit_alias",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "subreddit_alias",
"defaultMatch": false
},
{
"id": "subreddit_url",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "subreddit_url",
"defaultMatch": false
},
{
"id": "subreddit_description",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "subreddit_description",
"defaultMatch": false
},
{
"id": "comment_count",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "comment_count",
"defaultMatch": false
},
{
"id": "vote_count",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "vote_count",
"defaultMatch": false
},
{
"id": "text",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "text",
"defaultMatch": false
},
{
"id": "comments",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "comments",
"defaultMatch": false
},
{
"id": "subreddit_member_count",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "subreddit_member_count",
"defaultMatch": false
},
{
"id": "post_id",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "post_id",
"defaultMatch": false
},
{
"id": "word",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "word",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "B9xklN5LC5Yv67oC",
"cachedResultUrl": "/projects/KcvI5ipbOFN8ryQN/datatables/B9xklN5LC5Yv67oC",
"cachedResultName": "Brand Motitoring"
}
},
"typeVersion": 1
},
{
"id": "161c4a0f-5b7e-463b-8731-8b9f4569562c",
"name": "LinkedIn投稿挿入",
"type": "n8n-nodes-base.dataTable",
"position": [
-368,
400
],
"parameters": {
"columns": {
"value": {
"url": "={{ $json.url }}",
"text": "={{ $json.text }}",
"type": "={{ $json['@type'] }}",
"word": "={{ $('Get word\\'s list').item.json.word }}",
"post_id": "={{ $json.urn.value }}",
"created_at": "={{ $json.created_at }}",
"vote_count": "={{ $json.reactions[0].count }}",
"comment_count": "={{ $json.comment_count }}"
},
"schema": [
{
"id": "type",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "type",
"defaultMatch": false
},
{
"id": "title",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "title",
"defaultMatch": false
},
{
"id": "url",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "url",
"defaultMatch": false
},
{
"id": "created_at",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "created_at",
"defaultMatch": false
},
{
"id": "subreddit_id",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_id",
"defaultMatch": false
},
{
"id": "subreddit_alias",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_alias",
"defaultMatch": false
},
{
"id": "subreddit_url",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_url",
"defaultMatch": false
},
{
"id": "subreddit_description",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_description",
"defaultMatch": false
},
{
"id": "comment_count",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "comment_count",
"defaultMatch": false
},
{
"id": "vote_count",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "vote_count",
"defaultMatch": false
},
{
"id": "text",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "text",
"defaultMatch": false
},
{
"id": "comments",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "comments",
"defaultMatch": false
},
{
"id": "subreddit_member_count",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_member_count",
"defaultMatch": false
},
{
"id": "post_id",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "post_id",
"defaultMatch": false
},
{
"id": "word",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "word",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "B9xklN5LC5Yv67oC",
"cachedResultUrl": "/projects/KcvI5ipbOFN8ryQN/datatables/B9xklN5LC5Yv67oC",
"cachedResultName": "Brand Motitoring"
}
},
"typeVersion": 1
},
{
"id": "13d26f5f-7303-4ae7-b6ae-4b3d59952b7a",
"name": "Instagram投稿挿入",
"type": "n8n-nodes-base.dataTable",
"position": [
-368,
624
],
"parameters": {
"columns": {
"value": {
"url": "={{ $json.url }}",
"text": "={{ $json.text }}",
"type": "={{ $json[\"@type\"] }}",
"word": "={{ $('Get word\\'s list').item.json.word }}",
"post_id": "={{ $json.id }}",
"created_at": "={{ $json.created_at }}",
"vote_count": "={{ $json.retweet_count }}",
"comment_count": "={{ $json.reply_count }}"
},
"schema": [
{
"id": "type",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "type",
"defaultMatch": false
},
{
"id": "title",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "title",
"defaultMatch": false
},
{
"id": "url",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "url",
"defaultMatch": false
},
{
"id": "created_at",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "created_at",
"defaultMatch": false
},
{
"id": "subreddit_id",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_id",
"defaultMatch": false
},
{
"id": "subreddit_alias",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_alias",
"defaultMatch": false
},
{
"id": "subreddit_url",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_url",
"defaultMatch": false
},
{
"id": "subreddit_description",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_description",
"defaultMatch": false
},
{
"id": "comment_count",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "comment_count",
"defaultMatch": false
},
{
"id": "vote_count",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "vote_count",
"defaultMatch": false
},
{
"id": "text",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "text",
"defaultMatch": false
},
{
"id": "comments",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "comments",
"defaultMatch": false
},
{
"id": "subreddit_member_count",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_member_count",
"defaultMatch": false
},
{
"id": "post_id",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "post_id",
"defaultMatch": false
},
{
"id": "word",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "word",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "B9xklN5LC5Yv67oC",
"cachedResultUrl": "/projects/KcvI5ipbOFN8ryQN/datatables/B9xklN5LC5Yv67oC",
"cachedResultName": "Brand Motitoring"
}
},
"typeVersion": 1
},
{
"id": "c5a56796-dd48-440a-923f-7fd3a4ffc434",
"name": "X投稿挿入",
"type": "n8n-nodes-base.dataTable",
"position": [
-368,
848
],
"parameters": {
"columns": {
"value": {
"url": "={{ $json.url }}",
"text": "={{ $json.text }}",
"type": "={{ $json[\"@type\"] }}",
"word": "={{ $('Get word\\'s list').item.json.word }}",
"post_id": "={{ $json.id }}",
"created_at": "={{ $json.created_at }}",
"vote_count": "={{ $json.like_count }}",
"comment_count": "={{ $json.comment_count }}"
},
"schema": [
{
"id": "type",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "type",
"defaultMatch": false
},
{
"id": "title",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "title",
"defaultMatch": false
},
{
"id": "url",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "url",
"defaultMatch": false
},
{
"id": "created_at",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "created_at",
"defaultMatch": false
},
{
"id": "subreddit_id",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_id",
"defaultMatch": false
},
{
"id": "subreddit_alias",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_alias",
"defaultMatch": false
},
{
"id": "subreddit_url",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_url",
"defaultMatch": false
},
{
"id": "subreddit_description",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_description",
"defaultMatch": false
},
{
"id": "comment_count",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "comment_count",
"defaultMatch": false
},
{
"id": "vote_count",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "vote_count",
"defaultMatch": false
},
{
"id": "text",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "text",
"defaultMatch": false
},
{
"id": "comments",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "comments",
"defaultMatch": false
},
{
"id": "subreddit_member_count",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_member_count",
"defaultMatch": false
},
{
"id": "post_id",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "post_id",
"defaultMatch": false
},
{
"id": "word",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "word",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "B9xklN5LC5Yv67oC",
"cachedResultUrl": "/projects/KcvI5ipbOFN8ryQN/datatables/B9xklN5LC5Yv67oC",
"cachedResultName": "Brand Motitoring"
}
},
"typeVersion": 1
},
{
"id": "11713917-d244-4d96-abfc-160f67143a01",
"name": "Reddit投稿詳細更新",
"type": "n8n-nodes-base.dataTable",
"position": [
256,
32
],
"parameters": {
"columns": {
"value": {
"text": "={{ $json.text }}"
},
"schema": [
{
"id": "type",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "type",
"defaultMatch": false
},
{
"id": "title",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "title",
"defaultMatch": false
},
{
"id": "url",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "url",
"defaultMatch": false
},
{
"id": "created_at",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "created_at",
"defaultMatch": false
},
{
"id": "subreddit_id",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_id",
"defaultMatch": false
},
{
"id": "subreddit_alias",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_alias",
"defaultMatch": false
},
{
"id": "subreddit_url",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_url",
"defaultMatch": false
},
{
"id": "subreddit_description",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_description",
"defaultMatch": false
},
{
"id": "comment_count",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "comment_count",
"defaultMatch": false
},
{
"id": "vote_count",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "vote_count",
"defaultMatch": false
},
{
"id": "text",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "text",
"defaultMatch": false
},
{
"id": "comments",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "comments",
"defaultMatch": false
},
{
"id": "subreddit_member_count",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_member_count",
"defaultMatch": false
},
{
"id": "post_id",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "post_id",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"filters": {
"conditions": [
{
"keyName": "post_id",
"keyValue": "={{ $json.id }}"
}
]
},
"options": {},
"operation": "update",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "B9xklN5LC5Yv67oC",
"cachedResultUrl": "/projects/KcvI5ipbOFN8ryQN/datatables/B9xklN5LC5Yv67oC",
"cachedResultName": "Brand Motitoring Posts"
}
},
"typeVersion": 1
},
{
"id": "36dfff36-e33d-4d00-a7d8-003fc99825ca",
"name": "コメント文字列変換",
"type": "n8n-nodes-base.code",
"position": [
256,
224
],
"parameters": {
"jsCode": "const MAX_LEN = 0; \n\nfunction toArrayMaybe(json) {\n if (Array.isArray(json)) return json;\n if (Array.isArray(json?.comments)) return json.comments;\n if (typeof json === 'string') {\n try {\n const parsed = JSON.parse(json);\n if (Array.isArray(parsed)) return parsed;\n if (Array.isArray(parsed?.comments)) return parsed.comments;\n } catch (_) {}\n }\n if (typeof json?.data === 'string') {\n try {\n const parsed = JSON.parse(json.data);\n if (Array.isArray(parsed)) return parsed;\n } catch (_) {}\n }\n return null;\n}\n\nfunction getIncomingComments(items) {\n const looksLikeSingleComment =\n items.length > 1 ||\n (items[0]?.json && items[0].json['@type'] === '@reddit_comment');\n if (looksLikeSingleComment) {\n return items\n .map(i => i.json)\n .filter(v => v && typeof v === 'object');\n }\n const payload = items[0]?.json;\n const arr = toArrayMaybe(payload);\n if (arr) return arr;\n return [];\n}\n\nfunction formatDate(unix) {\n if (!unix && unix !== 0) return null;\n const date = new Date(unix * 1000);\n return date.toLocaleString('ru-RU', {\n year: 'numeric', month: '2-digit', day: '2-digit',\n hour: '2-digit', minute: '2-digit', second: '2-digit'\n });\n}\n\nfunction transformComment(comment) {\n if (!comment || comment.is_deleted || !comment.text) return null;\n return {\n author: comment.author?.name || '[deleted]',\n created_at_unix: comment.created_at,\n created_at: formatDate(comment.created_at),\n text: comment.text,\n replies: (comment.replies || [])\n .map(transformComment)\n .filter(Boolean),\n };\n}\n\nfunction stringifySafe(obj) {\n const s = JSON.stringify(obj);\n if (MAX_LEN > 0 && s.length > MAX_LEN) {\n return s.slice(0, MAX_LEN - 3) + '...';\n }\n return s;\n}\n\nconst allComments = getIncomingComments(items);\n\nconst topLevel = allComments.filter(\n c => c && typeof c.parent_id === 'string' && c.parent_id.startsWith('t3_')\n);\n\nconst byPost = {};\nfor (const c of topLevel) {\n const postId = c.parent_id;\n const t = transformComment(c);\n if (!t) continue;\n if (!byPost[postId]) byPost[postId] = [];\n byPost[postId].push(t);\n}\n\nconst out = Object.entries(byPost).map(([post_id, comments]) => {\n return {\n json: {\n post_id,\n comments_count: comments.length,\n comments_json: stringifySafe(comments)\n }\n };\n});\n\nreturn out.length ? out : [{ json: { post_id: null, comments_count: 0, comments_json: '[]' } }];"
},
"typeVersion": 2
},
{
"id": "29671c8b-fd0b-4970-9324-5e43072f1158",
"name": "Reddit投稿コメント更新",
"type": "n8n-nodes-base.dataTable",
"position": [
448,
224
],
"parameters": {
"columns": {
"value": {
"comments": "={{ $json.comments_json }}"
},
"schema": [
{
"id": "type",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "type",
"defaultMatch": false
},
{
"id": "title",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "title",
"defaultMatch": false
},
{
"id": "url",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "url",
"defaultMatch": false
},
{
"id": "created_at",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "created_at",
"defaultMatch": false
},
{
"id": "subreddit_id",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_id",
"defaultMatch": false
},
{
"id": "subreddit_alias",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_alias",
"defaultMatch": false
},
{
"id": "subreddit_url",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_url",
"defaultMatch": false
},
{
"id": "subreddit_description",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_description",
"defaultMatch": false
},
{
"id": "comment_count",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "comment_count",
"defaultMatch": false
},
{
"id": "vote_count",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "vote_count",
"defaultMatch": false
},
{
"id": "text",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "text",
"defaultMatch": false
},
{
"id": "comments",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "comments",
"defaultMatch": false
},
{
"id": "subreddit_member_count",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_member_count",
"defaultMatch": false
},
{
"id": "post_id",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "post_id",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"filters": {
"conditions": [
{
"keyName": "post_id",
"keyValue": "={{ $json.post_id }}"
}
]
},
"options": {},
"operation": "update",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "B9xklN5LC5Yv67oC",
"cachedResultUrl": "/projects/KcvI5ipbOFN8ryQN/datatables/B9xklN5LC5Yv67oC",
"cachedResultName": "Brand Motitoring Posts"
}
},
"typeVersion": 1
},
{
"id": "5d0d8f1b-d5f3-47b5-91ef-1a8dc8a2fbad",
"name": "LNコメント文字列変換",
"type": "n8n-nodes-base.code",
"position": [
256,
496
],
"parameters": {
"jsCode": "const MAX_LEN = 0;\n\nfunction toArrayMaybe(json) {\n if (Array.isArray(json)) return json;\n if (Array.isArray(json?.comments)) return json.comments;\n if (typeof json === 'string') {\n try {\n const parsed = JSON.parse(json);\n if (Array.isArray(parsed)) return parsed;\n if (Array.isArray(parsed?.comments)) return parsed.comments;\n } catch (_) {}\n }\n if (typeof json?.data === 'string') {\n try {\n const parsed = JSON.parse(json.data);\n if (Array.isArray(parsed)) return parsed;\n } catch (_) {}\n }\n return null;\n}\n\nfunction getIncoming(items) {\n const looksLikeFlat =\n items.length > 1 ||\n (items[0]?.json && String(items[0].json['@type'] || '').includes('@linkedin_post_comment'));\n if (looksLikeFlat) {\n return items.map(i => i.json).filter(v => v && typeof v === 'object');\n }\n const payload = items[0]?.json;\n const arr = toArrayMaybe(payload);\n if (arr) return arr;\n return [];\n}\n\nfunction formatDateSmart(ts) {\n if (ts == null) return null;\n const isMs = Math.abs(ts) > 1e12;\n const d = new Date((isMs ? ts : ts * 1000));\n return d.toLocaleString('ru-RU', {\n year: 'numeric', month: '2-digit', day: '2-digit',\n hour: '2-digit', minute: '2-digit', second: '2-digit'\n });\n}\n\nfunction extractPostIdFromUrnValue(val) {\n if (typeof val !== 'string') return null;\n const m = val.match(/(?:activity|ugcPost):(\\d+)/);\n return m ? m[1] : null;\n}\n\nfunction extractPostIdAny(c) {\n let id = extractPostIdFromUrnValue(c?.urn?.value);\n if (id) return id;\n id = extractPostIdFromUrnValue(c?.parent?.value);\n if (id) return id;\n id = extractPostIdFromUrnValue(c?.url);\n if (id) return id;\n try {\n const decoded = decodeURIComponent(c?.url || '');\n id = extractPostIdFromUrnValue(decoded);\n if (id) return id;\n } catch (_) {}\n return null;\n}\n\nfunction stringifySafe(obj) {\n const s = JSON.stringify(obj);\n if (MAX_LEN > 0 && s.length > MAX_LEN) return s.slice(0, MAX_LEN - 3) + '...';\n return s;\n}\n\nfunction transformLinkedInComment(c) {\n if (!c || !c.text) return null;\n const post_id = extractPostIdAny(c) || 'unknown_post';\n const created_at_raw = c.created_at ?? null;\n return {\n post_id,\n author: c.author?.name || '[unknown]',\n author_url: c.author?.url || null,\n text: c.text,\n created_at_raw,\n created_at: formatDateSmart(created_at_raw),\n reactions: Array.isArray(c.reactions) ? c.reactions : null,\n is_commenter_post_author: !!c.is_commenter_post_author,\n replies: [],\n };\n}\n\nconst raw = getIncoming(items);\nconst normalized = raw.map(transformLinkedInComment).filter(Boolean);\n\nconst byPost = {};\nfor (const t of normalized) {\n const key = t.post_id || 'unknown_post';\n if (!byPost[key]) byPost[key] = [];\n byPost[key].push({\n author: t.author,\n author_url: t.author_url,\n text: t.text,\n created_at_raw: t.created_at_raw,\n created_at: t.created_at,\n reactions: t.reactions,\n is_commenter_post_author: t.is_commenter_post_author,\n replies: t.replies,\n });\n}\n\nconst out = Object.entries(byPost).map(([post_id, comments]) => ({\n json: {\n post_id,\n comments_count: comments.length,\n comments_json: stringifySafe(comments)\n }\n}));\n\nreturn out.length ? out : [{ json: { post_id: null, comments_count: 0, comments_json: '[]' } }];"
},
"typeVersion": 2,
"alwaysOutputData": true
},
{
"id": "f210b1c2-546e-4480-86d5-41d5805e424d",
"name": "LNコメント更新",
"type": "n8n-nodes-base.dataTable",
"position": [
448,
496
],
"parameters": {
"columns": {
"value": {
"comments": "={{ $json.comments_json }}"
},
"schema": [
{
"id": "type",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "type",
"defaultMatch": false
},
{
"id": "title",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "title",
"defaultMatch": false
},
{
"id": "url",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "url",
"defaultMatch": false
},
{
"id": "created_at",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "created_at",
"defaultMatch": false
},
{
"id": "subreddit_id",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_id",
"defaultMatch": false
},
{
"id": "subreddit_alias",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_alias",
"defaultMatch": false
},
{
"id": "subreddit_url",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_url",
"defaultMatch": false
},
{
"id": "subreddit_description",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_description",
"defaultMatch": false
},
{
"id": "comment_count",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "comment_count",
"defaultMatch": false
},
{
"id": "vote_count",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "vote_count",
"defaultMatch": false
},
{
"id": "text",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "text",
"defaultMatch": false
},
{
"id": "comments",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "comments",
"defaultMatch": false
},
{
"id": "subreddit_member_count",
"type": "number",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "subreddit_member_count",
"defaultMatch": false
},
{
"id": "post_id",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "post_id",
"defaultMatch": false
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"filters": {
"conditions": [
{
"keyName": "post_id",
"keyValue": "={{ $json.post_id }}"
}
]
},
"options": {},
"operation": "update",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "B9xklN5LC5Yv67oC",
"cachedResultUrl": "/projects/KcvI5ipbOFN8ryQN/datatables/B9xklN5LC5Yv67oC",
"cachedResultName": "Brand Motitoring Posts"
}
},
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "6435b75f-d22f-491d-b4ac-f5cf04019f32",
"name": "新規投稿ID一括取得",
"type": "n8n-nodes-base.code",
"position": [
1072,
480
],
"parameters": {
"jsCode": "const FILTER_TYPES = null;\nconst MAX_LEN = 0;\n\nfunction toArrayMaybe(json) {\n if (Array.isArray(json)) return json;\n if (typeof json === 'string') {\n try {\n const parsed = JSON.parse(json);\n if (Array.isArray(parsed)) return parsed;\n } catch (_) {}\n }\n if (Array.isArray(json?.data)) return json.data;\n if (typeof json?.data === 'string') {\n try {\n const parsed = JSON.parse(json.data);\n if (Array.isArray(parsed)) return parsed;\n } catch (_) {}\n }\n return null;\n}\n\nfunction getIncoming(items) {\n if (items.length > 1 && items.every(i => i?.json && typeof i.json === 'object')) {\n return items.map(i => i.json);\n }\n const payload = items[0]?.json;\n const arr = toArrayMaybe(payload);\n if (arr) return arr;\n if (payload && typeof payload === 'object') return [payload];\n return [];\n}\n\nfunction cutIfNeeded(str) {\n if (MAX_LEN > 0 && str.length > MAX_LEN) {\n return str.slice(0, MAX_LEN - 3) + '...';\n }\n return str;\n}\n\nconst posts = getIncoming(items);\n\nconst filtered = Array.isArray(FILTER_TYPES)\n ? posts.filter(p => FILTER_TYPES.includes(p.type))\n : posts;\n\nconst idsUnique = Array.from(\n new Set(\n filtered\n .map(p => String(p.post_id ?? '').trim())\n .filter(v => v.length > 0)\n )\n);\n\nconst post_ids_str = cutIfNeeded(idsUnique.join(','));\n\nreturn [{\n json: {\n total: idsUnique.length,\n post_ids: idsUnique,\n post_ids_str\n }\n}];"
},
"typeVersion": 2
},
{
"id": "9c4d669b-a88b-40cb-a6fc-1da404260ec9",
"name": "スケジュールトリガー",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1840,
640
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 1
}
]
}
},
"typeVersion": 1.2
},
{
"id": "703ab5b6-b4e9-4e85-920d-49daaba5e7a8",
"name": "Gmailメッセージ送信",
"type": "n8n-nodes-base.gmailTool",
"position": [
1568,
768
],
"webhookId": "879f2106-41e2-4eca-958f-60aa6d960e10",
"parameters": {
"sendTo": "kulikov.andrey.a@gmail.com",
"message": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Message', ``, 'string') }}",
"options": {},
"subject": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Subject', ``, 'string') }}"
},
"credentials": {
"gmailOAuth2": {
"id": "naiF674gkuvb8Iql",
"name": "Andrew"
}
},
"typeVersion": 2.1
},
{
"id": "378a44d5-100d-49f3-8c00-4057ddab5e48",
"name": "投稿情報取得",
"type": "n8n-nodes-base.dataTableTool",
"position": [
1424,
768
],
"parameters": {
"filters": {
"conditions": [
{
"keyName": "post_id",
"keyValue": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('conditions0_Value', `post_id`, 'string') }}"
}
]
},
"operation": "get",
"dataTableId": {
"__rl": true,
"mode": "list",
"value": "B9xklN5LC5Yv67oC",
"cachedResultUrl": "/projects/KcvI5ipbOFN8ryQN/datatables/B9xklN5LC5Yv67oC",
"cachedResultName": "Brand Motitoring Posts"
}
},
"typeVersion": 1
},
{
"id": "ccb9423f-734a-456a-a688-a4976bc29bb1",
"name": "概要",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2496,
-480
],
"parameters": {
"color": 4,
"width": 500,
"height": 1360,
"content": "## Social Media Monitoring Workflow with AnySite.io\n\n## Who's it for\nMarketing teams, brand managers, PR specialists, and customer success teams who need real-time brand monitoring across multiple social media platforms for sentiment analysis, crisis management, and competitive intelligence.\n\n## How it works\n1. Schedule trigger runs daily/hourly to monitor brand mentions\n2. Searches across Reddit, LinkedIn, Instagram, and X/Twitter simultaneously\n3. Checks database to avoid duplicate processing\n4. Fetches full post details and comments for new mentions\n5. AI Agent analyzes sentiment and context using GPT-4\n6. Sends email alerts for important mentions via Gmail\n7. Stores all data in PostgreSQL for historical analysis\n\n## Requirements\n- AnySite.io API account with access tokens\n- OpenAI API key (GPT-4 recommended)\n- PostgreSQL database for post tracking\n- Gmail account for notifications\n- n8n self-hosted or cloud instance\n\n## How to set up\n1. **Update AnySite credentials**:\n - Add your access-token to all AnySite HTTP nodes\n2. **Configure search keywords**:\n - Update \"Get word's list\" node with your brand terms\n3. **Set up PostgreSQL**:\n - Create posts table with required schema\n4. **Configure Gmail**:\n - Connect Gmail OAuth for notifications\n5. **Adjust schedule**:\n - Set monitoring frequency in Schedule Trigger\n6. **Test with manual trigger first**\n\n## How to customize\n- **Add platforms**: Create new search nodes with AnySite API endpoints\n- **Modify analysis**: Update AI Agent prompts for specific insights\n- **Change alerts**: Replace Gmail with Slack, Discord, or webhook\n- **Add filters**: Insert IF nodes to filter by sentiment/reach\n- **Historical reports**: Add scheduled aggregation nodes\n- **Export data**: Connect to BI tools or data warehouses\n\n## Built with AnySite.io\nThis workflow uses AnySite.io APIs for reliable, scalable social media data extraction."
},
"typeVersion": 1
},
{
"id": "2b0a2f31-fbe4-4d49-b044-d9aae1be017c",
"name": "AnySite.io帰属表示",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2496,
944
],
"parameters": {
"color": 5,
"width": 504,
"height": 376,
"content": "## 🚀 Built with AnySite.io\n\n**Created by:** Andrew Kulikov\n**Company:** AnySite.io\n**Workflow Version:** 1.0\n**Last Updated:** October 2025\n\n**Learn more:** [anysite.io](https://anysite.io)\n**API Docs:** [docs.anysite.io](https://docs.anysite.io)\n**Contact:** andrew@anysite.io"
},
"typeVersion": 1
},
{
"id": "42b7955d-b080-4f22-b1bf-228bb4df1d77",
"name": "カスタマイズガイド",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1984,
-496
],
"parameters": {
"color": 5,
"width": 700,
"height": 340,
"content": "💚 **How to Customize Your Monitoring:**\n\n**Add platforms:**\n- Use AnySite.io APIs for TikTok, YouTube, Facebook\n- Copy existing search node structure\n\n**Modify alerts:**\n- Replace Gmail with Slack, Discord, MS Teams\n- Add webhooks to your CRM/ticketing system\n\n**Change analysis:**\n- Edit AI Agent system prompt for specific insights\n- Add sentiment scores, urgency levels, action items\n\n**Schedule frequency:**\n- Real-time: Every 15 minutes\n- Standard: Hourly\n- Daily digest: Once per day\n\n**Filter results:**\n- Add IF nodes to filter by engagement/sentiment\n- Create priority tiers for different keywords"
},
"typeVersion": 1
},
{
"id": "116079d0-8561-4d28-9785-a577e3128ff3",
"name": "トリガーと設定",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1952,
-96
],
"parameters": {
"color": 7,
"width": 680,
"height": 440,
"content": "## 1. Triggers & Keywords Setup\n[Learn about Schedule Triggers](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/)\n\nWorkflow can be triggered by:\n• Schedule Trigger - Automated monitoring (hourly/daily)\n• Manual Trigger - On-demand execution for testing\n\n**Get word's list** node:\n- Define brand keywords to monitor\n- Supports multiple search terms\n- Each term searches across all platforms\n\n💡 Pro tip: Use brand name variations, product names, and common misspellings"
},
"typeVersion": 1
},
{
"id": "c4812c10-83fa-455f-94e8-f0767d6e6fde",
"name": "テストガイド",
"type": "n8n-nodes-base.stickyNote",
"position": [
1712,
288
],
"parameters": {
"color": 7,
"width": 680,
"height": 476,
"content": "## 🧪 Testing Your Workflow\n\n**Initial Test:**\n1. Use Manual Trigger first (not Schedule)\n2. Add 1-2 test keywords in \"Get word's list\"\n3. Execute and verify each stage completes\n4. Check database for inserted records\n5. Verify email notification arrives\n\n**Validate each stage:**\n✅ All 4 platform searches return results\n✅ Database checks work (duplicates prevented)\n✅ Post details fetched correctly\n✅ AI analysis runs without errors\n✅ Email formatted properly\n\n**Common issues:**\n- Missing access-token → Check all HTTP nodes\n- Database errors → Verify schema and connection\n- No email → Check Gmail OAuth and recipient"
},
"typeVersion": 1
},
{
"id": "c53449ea-7e0f-42fd-b5ef-be1d1365dfb6",
"name": "クロスプラットフォーム検索",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1248,
-432
],
"parameters": {
"color": 7,
"width": 424,
"height": 536,
"content": "## 2. Cross-Platform Search Phase\n[AnySite.io Platform APIs](https://anysite.io/docs)\n\nParallel searches across:\n• **Reddit** - Posts and discussions\n• **LinkedIn** - Professional posts\n• **Instagram** - Visual content\n• **X/Twitter** - Real-time conversations\n\nEach platform search:\n- Uses AnySite.io optimized APIs\n- Returns top 2 most relevant posts\n- Includes metadata (author, timestamp, engagement)\n- Sorts by relevance for best matches\n\n⚡ All searches run in parallel for speed"
},
"typeVersion": 1
},
{
"id": "f6b05865-e713-4be4-8804-084ed7c674bc",
"name": "重複チェック",
"type": "n8n-nodes-base.stickyNote",
"position": [
-640,
-432
],
"parameters": {
"color": 7,
"width": 472,
"height": 520,
"content": "## 3. Database Deduplication\n[PostgreSQL Integration](https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.postgres/)\n\nFor each found post:\n• Checks if post_id exists in database\n• Prevents duplicate processing\n• Saves API calls and AI analysis costs\n\n**If post doesn't exist:**\n→ Proceeds to Insert and Analysis\n\n**If post exists:**\n→ Skips to next post\n\nThis ensures:\n- No duplicate alerts\n- Efficient resource usage\n- Clean historical data"
},
"typeVersion": 1
},
{
"id": "22c9055f-d2c1-4295-b0d1-81ee4a6fd172",
"name": "データ抽出",
"type": "n8n-nodes-base.stickyNote",
"position": [
-32,
-432
],
"parameters": {
"color": 7,
"width": 504,
"height": 456,
"content": "## 4. Platform-Specific Data Extraction\n[AnySite.io APIs](https://anysite.io)\n\nFor new posts, fetches complete data:\n\n**Reddit:**\n- Post details (title, author, score, timestamp)\n- All comments and replies\n\n**LinkedIn:**\n- Post content and engagement metrics\n- Comments and reactions\n\n**Updates database with:**\n- Full post text\n- Comment threads (as formatted strings)\n- Metadata for analysis\n\nThis rich context enables accurate AI sentiment analysis."
},
"typeVersion": 1
},
{
"id": "512d331c-3530-4f53-b53a-484cc045909b",
"name": "セットアップ要件 - AI & Gmail",
"type": "n8n-nodes-base.stickyNote",
"position": [
896,
-528
],
"parameters": {
"color": 3,
"width": 504,
"height": 404,
"content": "## ⚠️ SETUP REQUIRED (3/3)\n\n**OpenAI Configuration:**\n- Add OpenAI API credentials\n- Recommended: GPT-4o for best results\n- Configure in \"OpenAI Chat Model\" node\n\n**Gmail Setup:**\n- Connect Gmail OAuth credentials\n- Configure recipient in \"Send a message in Gmail\" tool\n- Customize email template in AI Agent prompt\n\n**Test checklist:**\n✅ AnySite tokens work\n✅ Database connection active\n✅ AI Agent can query posts\n✅ Gmail sends notifications"
},
"typeVersion": 1
},
{
"id": "c3acde67-cfe6-48a8-b550-9dcbe47a4c56",
"name": "AI分析とアラート",
"type": "n8n-nodes-base.stickyNote",
"position": [
880,
-64
],
"parameters": {
"color": 7,
"width": 776,
"height": 424,
"content": "## 5. Intelligent Analysis & Notifications\n[AI Agent Documentation](https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/)\n\n**AI Agent with Tools:**\n1. **Get Posts Info** - Retrieves all new posts from database\n2. **GPT-4 Analysis** - Analyzes sentiment, urgency, context\n3. **Send Gmail** - Sends alerts for important mentions\n\nThe AI Agent autonomously:\n• Fetches unprocessed posts\n• Analyzes sentiment (positive/negative/neutral)\n• Identifies urgent issues or opportunities\n• Prioritizes alerts by importance\n• Sends formatted email summaries\n\n🎯 Customizable prompts for industry-specific insights"
},
"typeVersion": 1
},
{
"id": "a8534447-9446-4cc0-b571-d3b3716636c6",
"name": "モニタリングベストプラクティス",
"type": "n8n-nodes-base.stickyNote",
"position": [
976,
976
],
"parameters": {
"color": 5,
"width": 680,
"height": 320,
"content": "## 📊 Monitoring Best Practices\n\n**Keyword Strategy:**\n• Brand name + common variations\n• Product names and SKUs\n• Competitor mentions\n• Industry hashtags\n• Crisis-related terms\n\n**Alert Prioritization:**\n🔴 High Priority:\n- Negative sentiment + high engagement\n- Crisis keywords detected\n- Competitor comparisons\n\n🟡 Medium Priority:\n- Questions from users\n- Feature requests\n- Neutral discussions\n\n🟢 Low Priority:\n- Positive mentions\n- General discussions\n\n**Performance Tips:**\n- Monitor 5-10 core keywords\n- Adjust search count per platform\n- Archive old data periodically\n- Set up separate workflows for high-volume terms"
},
"typeVersion": 1
},
{
"id": "89ec745b-cdc6-48c7-9fa9-db19b24528d9",
"name": "セットアップ要件 - AnySite",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1248,
-944
],
"parameters": {
"color": 3,
"width": 408,
"height": 468,
"content": "## ⚠️ SETUP REQUIRED (1/3)\n\n**AnySite.io API Configuration**\n\nAll HTTP Request nodes need your access token:\n1. Find all nodes starting with \"AnySite...\"\n2. Open each node settings\n3. In Headers → access-token\n4. Replace with your actual token\n\n📝 Nodes to update:\n- AnySite Search Reddit Posts\n- AnySite Search LinkedIn Posts\n- AnySite Search Instagram Posts\n- AnySite Search X Posts\n- AnySite Get Reddit Post\n- AnySite Get Reddit Post Comment\n- AnySite Get LinkedIn Post Comments\n\n[Get your API token at anysite.io](https://anysite.io/api-keys)"
},
"typeVersion": 1
},
{
"id": "0c451224-8fed-4d31-a633-e7702b258232",
"name": "セットアップ要件 - データベース",
"type": "n8n-nodes-base.stickyNote",
"position": [
-656,
-1472
],
"parameters": {
"color": 3,
"width": 440,
"height": 932,
"content": "## ⚠️ SETUP REQUIRED (2/3)\n\n**Data Tables Setup**\n\n#### 📋 Brand Monitoring Words\n| Field | Type | Description |\n|-------|------|-------------|\n| `word` | string | Keyword or brand name to track |\n\n#### 📊 Brand Monitoring Posts\n| Field | Type | Description |\n|-------|------|-------------|\n| `type` | string | Platform type (reddit, linkedin, x, instagram) |\n| `title` | string | Post title or caption |\n| `url` | string | Post URL |\n| `created_at` | string | Creation date/time |\n| `subreddit_id` | string | (Reddit only) Subreddit ID |\n| `subreddit_alias` | string | (Reddit only) Subreddit alias |\n| `subreddit_url` | string | (Reddit only) Subreddit URL |\n| `subreddit_description` | string | (Reddit only) Subreddit description |\n| `comment_count` | number | Number of comments |\n| `vote_count` | number | Votes, likes, or reactions count |\n| `subreddit_member_count` | number | (Reddit only) Subreddit member count |\n| `post_id` | string | Unique post identifier |\n| `text` | string | Post content text |\n| `comments` | string | Serialized comments (JSON string) |\n| `word` | string | Keyword that triggered capture |\n\n\nUpdate connection in nodes:\n- If post does not exist (checks)\n- Insert post nodes\n- Update post nodes\n- Get post_id for all new posts"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "5c7235c1-3745-48c2-9e8b-0734cf64afe3",
"connections": {
"c26d107c-d1b4-40ae-b983-a66a7b9f81c8": {
"main": [
[
{
"node": "6435b75f-d22f-491d-b4ac-f5cf04019f32",
"type": "main",
"index": 0
}
]
]
},
"c5a56796-dd48-440a-923f-7fd3a4ffc434": {
"main": [
[
{
"node": "c26d107c-d1b4-40ae-b983-a66a7b9f81c8",
"type": "main",
"index": 3
}
]
]
},
"378a44d5-100d-49f3-8c00-4057ddab5e48": {
"ai_tool": [
[
{
"node": "a422b95c-2f44-4652-b420-46a15a3f3d86",
"type": "ai_tool",
"index": 0
}
]
]
},
"fe4be382-803a-4829-8fcb-9b492861ae3b": {
"main": [
[
{
"node": "7d5e9846-8979-48d8-8e2f-7e1bfc752297",
"type": "main",
"index": 0
},
{
"node": "e9b7166d-312a-4dd0-8afa-c40e0d13069b",
"type": "main",
"index": 0
},
{
"node": "64714aa4-379b-43f5-9ce8-625ea769abde",
"type": "main",
"index": 0
},
{
"node": "cfd2abac-84f3-49cf-8be0-887be12a46a5",
"type": "main",
"index": 0
}
]
]
},
"9c4d669b-a88b-40cb-a6fc-1da404260ec9": {
"main": [
[
{
"node": "fe4be382-803a-4829-8fcb-9b492861ae3b",
"type": "main",
"index": 0
}
]
]
},
"e83df4cd-aaa2-4536-be7e-350aa0414f0e": {
"ai_languageModel": [
[
{
"node": "a422b95c-2f44-4652-b420-46a15a3f3d86",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"f210b1c2-546e-4480-86d5-41d5805e424d": {
"main": [
[]
]
},
"cfb6bc47-eb96-4f0a-91c4-2916ae51da44": {
"main": [
[
{
"node": "c00051fb-d3a3-4100-8c1f-4c60c06cf130",
"type": "main",
"index": 0
},
{
"node": "3009f7cc-fee2-48d4-b886-a81aaaad393e",
"type": "main",
"index": 0
}
]
]
},
"13d26f5f-7303-4ae7-b6ae-4b3d59952b7a": {
"main": [
[
{
"node": "c26d107c-d1b4-40ae-b983-a66a7b9f81c8",
"type": "main",
"index": 2
}
]
]
},
"161c4a0f-5b7e-463b-8731-8b9f4569562c": {
"main": [
[
{
"node": "aa8c0794-6012-40ae-894e-a5972d1db244",
"type": "main",
"index": 0
},
{
"node": "c26d107c-d1b4-40ae-b983-a66a7b9f81c8",
"type": "main",
"index": 1
}
]
]
},
"cfd2abac-84f3-49cf-8be0-887be12a46a5": {
"main": [
[
{
"node": "6b7d65ec-3ac2-4ee5-a5e6-4049952c8d47",
"type": "main",
"index": 0
}
]
]
},
"3009f7cc-fee2-48d4-b886-a81aaaad393e": {
"main": [
[
{
"node": "11713917-d244-4d96-abfc-160f67143a01",
"type": "main",
"index": 0
}
]
]
},
"703ab5b6-b4e9-4e85-920d-49daaba5e7a8": {
"ai_tool": [
[
{
"node": "a422b95c-2f44-4652-b420-46a15a3f3d86",
"type": "ai_tool",
"index": 0
}
]
]
},
"6b7d65ec-3ac2-4ee5-a5e6-4049952c8d47": {
"main": [
[
{
"node": "c5a56796-dd48-440a-923f-7fd3a4ffc434",
"type": "main",
"index": 0
}
]
]
},
"11713917-d244-4d96-abfc-160f67143a01": {
"main": [
[
{
"node": "c26d107c-d1b4-40ae-b983-a66a7b9f81c8",
"type": "main",
"index": 0
}
]
]
},
"7d5e9846-8979-48d8-8e2f-7e1bfc752297": {
"main": [
[
{
"node": "ed0c57df-bc57-40bc-b220-7bfeaeaa8365",
"type": "main",
"index": 0
}
]
]
},
"29671c8b-fd0b-4970-9324-5e43072f1158": {
"main": [
[]
]
},
"e9b7166d-312a-4dd0-8afa-c40e0d13069b": {
"main": [
[
{
"node": "67395f5a-9712-4a44-91c2-c38b44d23a28",
"type": "main",
"index": 0
}
]
]
},
"6435b75f-d22f-491d-b4ac-f5cf04019f32": {
"main": [
[
{
"node": "a422b95c-2f44-4652-b420-46a15a3f3d86",
"type": "main",
"index": 0
}
]
]
},
"ed0c57df-bc57-40bc-b220-7bfeaeaa8365": {
"main": [
[
{
"node": "cfb6bc47-eb96-4f0a-91c4-2916ae51da44",
"type": "main",
"index": 0
}
]
]
},
"64714aa4-379b-43f5-9ce8-625ea769abde": {
"main": [
[
{
"node": "85f7b4f1-9191-4397-a296-d45e15c371e2",
"type": "main",
"index": 0
}
]
]
},
"36dfff36-e33d-4d00-a7d8-003fc99825ca": {
"main": [
[
{
"node": "29671c8b-fd0b-4970-9324-5e43072f1158",
"type": "main",
"index": 0
}
]
]
},
"c00051fb-d3a3-4100-8c1f-4c60c06cf130": {
"main": [
[
{
"node": "36dfff36-e33d-4d00-a7d8-003fc99825ca",
"type": "main",
"index": 0
}
]
]
},
"67395f5a-9712-4a44-91c2-c38b44d23a28": {
"main": [
[
{
"node": "161c4a0f-5b7e-463b-8731-8b9f4569562c",
"type": "main",
"index": 0
}
]
]
},
"5d0d8f1b-d5f3-47b5-91ef-1a8dc8a2fbad": {
"main": [
[
{
"node": "f210b1c2-546e-4480-86d5-41d5805e424d",
"type": "main",
"index": 0
}
]
]
},
"85f7b4f1-9191-4397-a296-d45e15c371e2": {
"main": [
[
{
"node": "13d26f5f-7303-4ae7-b6ae-4b3d59952b7a",
"type": "main",
"index": 0
}
]
]
},
"aa8c0794-6012-40ae-894e-a5972d1db244": {
"main": [
[
{
"node": "5d0d8f1b-d5f3-47b5-91ef-1a8dc8a2fbad",
"type": "main",
"index": 0
}
]
]
},
"7167c958-e821-4082-a13e-eda76c27c0be": {
"main": [
[
{
"node": "fe4be382-803a-4829-8fcb-9b492861ae3b",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
上級 - 市場調査, AI要約
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
地政学のニュースフラッシュアラート
地政学のニューススナップをAIスコアリングとTelegramアラートでフィルタリング
If
Code
Merge
+
If
Code
Merge
30 ノードDev Dutta
市場調査
GPT-4インサイトとSlackを使用した週次SEOレポートの自動配信
GPT-4洞察とSlackを使って週次のSEOレポートを自動化
Set
Code
Merge
+
Set
Code
Merge
42 ノードMarcelo Abreu
市場調査
GPT-4専門家による包括のなSEO审计(検索最適化診断)—Analytics、Search Console、PageSpeedを使用
GPT-4 専門家による Analytics、Search Console、PageSpeed を使用した包括のな SEO 監査
Set
Code
Merge
+
Set
Code
Merge
38 ノードJimmy Gay
市場調査
AI によるフィルタリングされた個別化学習コンテンツアggregator
GPT-4.1-mini と Google Sheets を使って Reddit および RSS から学習コンテンツをフィルタリング
Set
Code
Merge
+
Set
Code
Merge
18 ノードhigashiyama
市場調査
SlackとAsanaを使用した仮想Scラムマスター
OpenAI、Slack、Asanaを統合したAIベースのScラムマスターアシスタント
Set
Code
Html
+
Set
Code
Html
35 ノードŁukasz
プロジェクト管理
AIを使用してウイルスのなYouTube動画を検出し、メールレポートを送信
AIを使ってウイルスのなYouTube動画を検出し、メールレポートを送信する
Set
Code
Sort
+
Set
Code
Sort
26 ノードgclbck
その他
ワークフロー情報
難易度
上級
ノード数42
カテゴリー2
ノードタイプ11
作成者
Andrey
@kuliaCEO of AnySite.io | Agent-first web scraping APIs for LinkedIn, Instagram, Twitter & Reddit. Try our n8n nodes for reliable, self-healing data extraction. DM for custom integrations.
外部リンク
n8n.ioで表示 →
このワークフローを共有