8
n8n 한국어amn8n.com

소셜 미디어 모니터링

고급

이것은Market Research, AI Summarization분야의자동화 워크플로우로, 42개의 노드를 포함합니다.주로 Code, Merge, DataTable, GmailTool, HttpRequest 등의 노드를 사용하며. AnySite API와 GPT를 사용하여 플랫폼 간 브랜드 모니터링 및 분석

사전 요구사항
  • Google 계정 및 Gmail API 인증 정보
  • 대상 API의 인증 정보가 필요할 수 있음
  • OpenAI API Key
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 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 채팅 모델",
      "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 에이전트",
      "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": "모든 새 게시물의 post_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)는 사용자 직접 비용을 지불해야 할 수 있습니다.

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

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

저자
Andrey

Andrey

@kulia

CEO 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에서 보기

이 워크플로우 공유

카테고리

카테고리: 34