AutomationFlowsAI & RAG › Dark Web Forum Post Tracker

Dark Web Forum Post Tracker

Original n8n title: Darkweb Get Forum Posts

darkweb-get-forum-posts. Uses outputParserStructured, toolThink, httpRequest, discord. Scheduled trigger; 32 nodes.

Cron / scheduled trigger★★★★★ complexityAI-powered32 nodesOutput Parser StructuredTool ThinkHTTP RequestDiscordSupabaseAgentMcp Client ToolOpenAI Chat
AI & RAG Trigger: Cron / scheduled Nodes: 32 Complexity: ★★★★★ AI nodes: yes Added:

This workflow follows the Agent → Discord recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "darkweb-get-forum-posts",
  "nodes": [
    {
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"task_status\": {\n      \"type\": \"string\",\n      \"enum\": [\"success\", \"failed\"],\n      \"description\": \"Status of the forum parsing task\"\n    },\n    \"failed_cause\": {\n      \"type\": \"string\",\n      \"enum\": [\"login_needed\", \"bot_captcha\", \"page_unreachable\"],\n      \"description\": \"Reason for task failure (only present when task_status is 'failed')\"\n    },\n    \"error_details\": {\n      \"type\": \"string\",\n      \"description\": \"Additional details about the error (optional for failed tasks)\"\n    },\n    \"forum_posts\": {\n      \"type\": \"array\",\n      \"description\": \"Array of forum threads extracted from the forum page (only present when task_status is 'success')\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"post_title\": {\n            \"type\": \"string\",\n            \"description\": \"The title/subject of the forum thread as displayed on the forum, with pagination indicators removed\"\n          },\n          \"post_link\": {\n            \"type\": \"string\",\n            \"description\": \"Complete URL to the thread, constructed as base forum URL + thread path\"\n          },\n          \"post_author_name\": {\n            \"type\": \"string\",\n            \"description\": \"Username of the thread creator/original poster\"\n          },\n          \"post_author_link\": {\n            \"type\": \"string\",\n            \"description\": \"Profile URL of the thread author, constructed as base forum URL + '/User-' + username\"\n          },\n          \"post_date\": {\n            \"type\": \"string\",\n            \"format\": \"date-time\",\n            \"description\": \"Original post creation timestamp in ISO 8601 format (e.g., '2023-11-17T17:14:00+02:00'), converted from forum's raw date format\"\n          },\n          \"last_post_date\": {\n            \"type\": \"string\",\n            \"format\": \"date-time\",\n            \"description\": \"Last activity timestamp in ISO 8601 format (e.g., '2025-07-24T18:43:00+02:00'), converted from relative time format using current_timestamp as reference\"\n          },\n          \"last_post_author\": {\n            \"type\": \"string\",\n            \"description\": \"Username of the last person to post/reply in the thread\"\n          },\n          \"last_post_author_link\": {\n            \"type\": \"string\",\n            \"description\": \"Profile URL of the last activity author, constructed as base forum URL + '/User-' + username\"\n          }\n        },\n        \"required\": [\n          \"post_title\",\n          \"post_link\", \n          \"post_author_name\",\n          \"post_author_link\",\n          \"post_date\",\n          \"last_post_date\",\n          \"last_post_author\",\n          \"last_post_author_link\"\n        ],\n        \"additionalProperties\": false\n      }\n    }\n  },\n  \"required\": [\"task_status\"],\n  \"if\": {\n    \"properties\": {\n      \"task_status\": {\n        \"const\": \"success\"\n      }\n    }\n  },\n  \"then\": {\n    \"required\": [\"forum_posts\"],\n    \"not\": {\"required\": [\"failed_cause\"]}\n  },\n  \"else\": {\n    \"if\": {\n      \"properties\": {\n        \"task_status\": {\"const\": \"failed\"}\n      }\n    },\n    \"then\": {\n      \"required\": [\"failed_cause\"],\n      \"not\": {\"required\": [\"forum_posts\"]}\n    }\n  },\n  \"additionalProperties\": false\n}",
        "autoFix": true
      },
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "typeVersion": 1.2,
      "position": [
        -896,
        208
      ],
      "id": "0fce51c7-b98f-40e6-a92a-a02243851f2f",
      "name": "\u7ed3\u6784\u5316\u8f93\u51fa\u89e3\u6790\u5668"
    },
    {
      "parameters": {
        "description": "=## \u4f7f\u7528\u601d\u8003(Think)\u5de5\u5177\n\n\u5728\u63a5\u6536\u5230\u5de5\u5177\u7ed3\u679c\u540e\u91c7\u53d6\u4efb\u4f55\u64cd\u4f5c\u6216\u54cd\u5e94\u4e4b\u524d\uff0c\u8bf7\u4f7f\u7528\u601d\u8003\u5de5\u5177\u4f5c\u4e3a\u8349\u7a3f\u672c\u6765\uff1a\n- \u5217\u51fa\u9002\u7528\u4e8e\u5f53\u524d\u8bba\u575b\u63d0\u53d6\u8bf7\u6c42\u7684\u5177\u4f53\u89c4\u5219\n- \u68c0\u67e5\u5bfc\u822a\u548c\u6570\u636e\u8bbf\u95ee\u662f\u5426\u6210\u529f\n- \u9a8c\u8bc1\u63d0\u53d6\u7684\u6570\u636e\u662f\u5426\u771f\u5b9e\uff08\u800c\u975e\u4f2a\u9020/\u793a\u4f8b\u6570\u636e\uff09\n- \u6839\u636e\u5b9e\u9645\u7ed3\u679c\u89c4\u5212\u6b63\u786e\u7684\u54cd\u5e94\u72b6\u6001\n\n\u4ee5\u4e0b\u662f\u5728\u601d\u8003\u5de5\u5177\u4e2d\u8fed\u4ee3\u7684\u793a\u4f8b\uff1a\n\n<think_tool_example_1>\nDarkForums.io \u7684\u8bba\u575b\u9875\u9762\u63d0\u53d6\u8bf7\u6c42\n- \u9a8c\u8bc1\u89c4\u5219\uff1a\n  * \u5fc5\u987b\u6210\u529f\u5bfc\u822a\u5230\u5b9e\u9645URL\n  * \u5fc5\u987b\u6355\u83b7\u771f\u5b9e\u7684\u6d4f\u89c8\u5668\u5feb\u7167\n  * \u5fc5\u987b\u4ec5\u4ece\u5feb\u7167\u4e2d\u63d0\u53d6\u771f\u5b9e\u7684\u5e16\u5b50\u6570\u636e\n  * \u7edd\u4e0d\u751f\u6210\u4f2a\u9020/\u793a\u4f8b\u6570\u636e\n- \u72b6\u6001\u786e\u5b9a\uff1a\n  * \u5982\u679c\u5bfc\u822a\u5931\u8d25 \u2192 \"page_unreachable\"\n  * \u5982\u679c\u68c0\u6d4b\u5230 CAPTCHA/DDoS-Guard \u2192 \"bot_captcha\"\n  * \u5982\u679c\u91cd\u5b9a\u5411\u5230\u767b\u5f55 \u2192 \"login_needed\"\n  * \u5982\u679c\u63d0\u53d6\u5230\u771f\u5b9e\u6570\u636e \u2192 \"success\" \n- \u8ba1\u5212\uff1a\u5bfc\u822a \u2192 \u5feb\u7167 \u2192 \u9a8c\u8bc1\u771f\u5b9e\u5185\u5bb9 \u2192 \u4ec5\u63d0\u53d6\u771f\u5b9e\u6570\u636e\n</think_tool_example_1>\n\n<think_tool_example_2>\n\u6d4f\u89c8\u5668\u5bfc\u822a\u5df2\u5b8c\u6210\uff0c\u6b63\u5728\u68c0\u67e5\u5feb\u7167\u7ed3\u679c\n- \u5bfc\u822a\u72b6\u6001\uff1a\u2705 \u6210\u529f - \u65e0\u8d85\u65f6\u6216\u9519\u8bef\n- \u5feb\u7167\u5185\u5bb9\u5206\u6790\uff1a\n  * \u9875\u9762\u663e\u793a\uff1a\u5177\u6709\u5e16\u5b50\u5217\u8868\u7684\u771f\u5b9e\u8bba\u575b\u5e03\u5c40\n  * \u5e16\u5b50\u6807\u9898\u53ef\u89c1\uff1a\"Morocco PMMP Database\", \"Twitter Leak 200M\"\n  * \u4f5c\u8005\u53ef\u89c1\uff1a\"B4baYega\", \"Lucifer\" \n  * \u771f\u5b9e\u65e5\u671f\uff1a\"1 minute ago\", \"40 minutes ago\"\n- \u6570\u636e\u9a8c\u8bc1\uff1a\n  * \u6240\u6709\u5e16\u5b50\u6570\u636e\u5747\u6765\u81ea\u5b9e\u9645\u5feb\u7167 \u2705\n  * \u6ca1\u6709\u50cf \"Username\" \u6216 \"Example\" \u8fd9\u6837\u7684\u4f2a\u9020\u7528\u6237\u540d \u2705\n  * URL \u662f\u771f\u5b9e\u7684\u8bba\u575b\u8def\u5f84 \u2705\n- \u8ba1\u5212\uff1a\u63d0\u53d6\u771f\u5b9e\u6570\u636e\u5e76\u8fd4\u56de\u5305\u542b\u5b9e\u9645\u8bba\u575b\u5e16\u5b50\u7684\u6210\u529f\u72b6\u6001\n</think_tool_example_2>\n\n<think_tool_example_3>\n\u6d4f\u89c8\u5668\u5bfc\u822a\u5c1d\u8bd5\u7ed3\u679c\n- \u5bfc\u822a\u72b6\u6001\uff1a\u274c \u5931\u8d25 - 30\u79d2\u540e\u8fde\u63a5\u8d85\u65f6\n- \u9519\u8bef\u8be6\u60c5\uff1a\"net::ERR_TIMED_OUT\"\n- \u5feb\u7167\u7ed3\u679c\uff1a\u672a\u6355\u83b7\u53ef\u7528\u5185\u5bb9\n- \u53ef\u7528\u6570\u636e\uff1a\u65e0 - \u65e0\u6cd5\u63d0\u53d6\u4efb\u4f55\u5185\u5bb9\n- \u89c4\u5219\u68c0\u67e5\uff1a\n  * \u65e0\u6cd5\u751f\u6210\u4f2a\u9020\u6570\u636e \u2705\n  * \u5fc5\u987b\u62a5\u544a\u5bfc\u822a\u5931\u8d25 \u2705\n- \u8ba1\u5212\uff1a\u8fd4\u56de\u5931\u8d25\u72b6\u6001\uff0c\u5305\u542b \"page_unreachable\" \u548c\u9519\u8bef\u8be6\u60c5\n</think_tool_example_3>"
      },
      "type": "@n8n/n8n-nodes-langchain.toolThink",
      "typeVersion": 1,
      "position": [
        -608,
        208
      ],
      "id": "dec4323d-eebe-46b2-992b-f3f65888bc9b",
      "name": "\u601d\u8003(Think)\u5de5\u5177"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://mllfrjetoelmjmgdemlm.supabase.co/rest/v1/rpc/check_existing_forum_posts",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "supabaseApi",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"post_links_to_check\": {{ $json.output.forum_posts.map(post => post.post_link).toJsonString() }}\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        -160,
        -304
      ],
      "id": "78ab9a0d-b84b-474b-826a-0830ccfb5060",
      "name": "Supabase RPC \u68c0\u67e5\u73b0\u6709URL",
      "retryOnFail": true,
      "maxTries": 2,
      "waitBetweenTries": 5000,
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      },
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "mode": "combine",
        "advanced": true,
        "mergeByFields": {
          "values": [
            {
              "field1": "post_link",
              "field2": "existing_post_link"
            }
          ]
        },
        "joinMode": "keepNonMatches",
        "outputDataFrom": "input1",
        "options": {}
      },
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [
        176,
        -544
      ],
      "id": "5c20cc93-12c7-4a30-b6eb-400a437e668e",
      "name": "\u5408\u5e76\u4ec5\u65b0URL",
      "alwaysOutputData": true
    },
    {
      "parameters": {
        "authentication": "webhook",
        "options": {
          "username": "DarkWeb Forums",
          "wait": false
        },
        "embeds": {
          "values": [
            {
              "description": "=### {{ $json.forum_name }}\n- {{ $json.forum_url_path }}",
              "author": "=\ud83d\udd04 \u8bba\u575b\u8ffd\u8e2a\u5df2\u542f\u52a8",
              "color": "#3498DB",
              "timestamp": "={{ $now.toISO() }}"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [
        -848,
        -304
      ],
      "id": "ddb72e5b-71e7-40e9-a8bb-444240271480",
      "name": "\u901a\u77e5\u5f00\u59cb\u8ffd\u8e2a",
      "credentials": {
        "discordWebhookApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "authentication": "webhook",
        "options": {
          "username": "DarkWeb Forums",
          "wait": true
        },
        "embeds": {
          "values": [
            {
              "description": "=### {{ $('\u5faa\u73afURL').item.json.forum_name }}\n- {{ $('\u5faa\u73afURL').item.json.forum_url_path }}\n> AI \u667a\u80fd\u4f53\u5c1d\u8bd5\u83b7\u53d6\u6570\u636e\uff0c\u4f46\u53d1\u751f\u4e86\u9519\u8bef\u3002\n> {{ $json.output?.error_details || $json.error || $json.output.failed_cause || '\u53d1\u751f\u4e86\u672a\u77e5\u9519\u8bef' }}\n`\u67e5\u770b\u5de5\u4f5c\u6d41\u65e5\u5fd7 \u2022 \u9700\u8981\u4eba\u5de5\u5ba1\u67e5`",
              "author": "=\u26a0\ufe0f \u8bba\u575b\u8ffd\u8e2a\u5931\u8d25",
              "color": "#E74C3C",
              "timestamp": "={{ $now.toISO() }}"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [
        -160,
        -48
      ],
      "id": "74bace14-f374-4807-9636-2068938fd3df",
      "name": "\u901a\u77e5\u8ffd\u8e2a\u5931\u8d25",
      "executeOnce": true,
      "retryOnFail": false,
      "credentials": {
        "discordWebhookApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose",
            "version": 2
          },
          "conditions": [
            {
              "id": "a6e494dc-8c00-4583-a950-510c65468f38",
              "leftValue": "={{ $json.forum_posts[0] }}",
              "rightValue": 0,
              "operator": {
                "type": "object",
                "operation": "notEmpty",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "looseTypeValidation": true,
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        176,
        -304
      ],
      "id": "182864c4-00be-415b-8e4a-554e5fd6e0b0",
      "name": "\u6709\u65b0\u5e16\u5b50\u5417?"
    },
    {
      "parameters": {
        "authentication": "webhook",
        "options": {
          "username": "DarkWeb Forums",
          "wait": true
        },
        "embeds": {
          "values": [
            {
              "description": "=### {{ $('\u5faa\u73afURL').item.json.forum_name }}\n- {{ $('\u5faa\u73afURL').item.json.forum_url_path }}",
              "author": "=\u26d4 \u672a\u53d1\u73b0\u65b0\u5e16\u5b50",
              "color": "#3498DB",
              "timestamp": "={{ $now.toISO() }}"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [
        176,
        -48
      ],
      "id": "9bdd7173-e138-41f4-9821-3619f5a840a6",
      "name": "\u901a\u77e5\u672a\u53d1\u73b0\u65b0\u5e16\u5b50",
      "executeOnce": true,
      "credentials": {
        "discordWebhookApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 4
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        -1152,
        -544
      ],
      "id": "722af682-ae01-4768-a2c2-f25df02b97a8",
      "name": "\u5b9a\u65f6\u89e6\u53d1\u5668"
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.output.task_status }}",
                    "rightValue": "success",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "id": "305279dd-7b2b-471c-aba0-0c5fc195c520"
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "success"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict",
                  "version": 2
                },
                "conditions": [
                  {
                    "id": "cd9e2a01-3870-4596-a50e-9288ac4fd972",
                    "leftValue": "={{ $json.output.task_status }}",
                    "rightValue": "failed",
                    "operator": {
                      "type": "string",
                      "operation": "equals",
                      "name": "filter.operator.equals"
                    }
                  }
                ],
                "combinator": "and"
              },
              "renameOutput": true,
              "outputKey": "failed"
            }
          ]
        },
        "options": {
          "fallbackOutput": 1
        }
      },
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3.2,
      "position": [
        -512,
        -304
      ],
      "id": "b5514d01-cd5b-4a2b-a947-b49e7b7a74ce",
      "name": "\u5207\u6362\u667a\u80fd\u4f53\u8f93\u51fa",
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        -1152,
        -304
      ],
      "id": "69625e39-4855-4f35-b1c8-c253b74f288d",
      "name": "\u5faa\u73afURL",
      "executeOnce": false
    },
    {
      "parameters": {
        "fieldToSplitOut": "output.forum_posts",
        "options": {}
      },
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        -160,
        -544
      ],
      "id": "956ed208-036b-44c7-a809-5a7ff3177291",
      "name": "\u62c6\u5206\u8bba\u575b\u5e16\u5b50"
    },
    {
      "parameters": {
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "forum_posts",
        "options": {}
      },
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [
        480,
        -544
      ],
      "id": "93cfe3b1-4905-4053-ab14-2c8c56c8a7a8",
      "name": "\u91cd\u7ec4\u65b0\u5e16\u5b50\u6570\u7ec4"
    },
    {
      "parameters": {
        "tableId": "darkweb_forums",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "monitored_at",
              "fieldValue": "={{ $now.toISO() }}"
            },
            {
              "fieldId": "post_title",
              "fieldValue": "={{ $json.post.post_title }}"
            },
            {
              "fieldId": "post_link",
              "fieldValue": "={{ $json.post.post_link }}"
            },
            {
              "fieldId": "post_author_name",
              "fieldValue": "={{ $json.post.post_author_name }}"
            },
            {
              "fieldId": "post_author_link",
              "fieldValue": "={{ $json.post.post_author_link }}"
            },
            {
              "fieldId": "last_post_date",
              "fieldValue": "={{ $json.post.last_post_date }}"
            },
            {
              "fieldId": "last_post_author",
              "fieldValue": "={{ $json.post.last_post_author }}"
            },
            {
              "fieldId": "last_post_author_link",
              "fieldValue": "={{ $json.post.last_post_author_link }}"
            },
            {
              "fieldId": "forum_name",
              "fieldValue": "={{ $('\u5faa\u73afURL').item.json.forum_name }}"
            },
            {
              "fieldId": "forum_url",
              "fieldValue": "={{ $('\u5faa\u73afURL').item.json.forum_url_path }}"
            },
            {
              "fieldId": "post_alert",
              "fieldValue": "={{ $json.post_alert }}"
            },
            {
              "fieldId": "entity_name",
              "fieldValue": "={{ $json.entity_name }}"
            },
            {
              "fieldId": "post_date",
              "fieldValue": "={{ $json.post.post_date }}"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        480,
        -48
      ],
      "id": "b301cc8c-5503-47f4-982d-b58f605cf51b",
      "name": "\u6dfb\u52a0\u5e16\u5b50\u5230Supabase",
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      },
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "0a60ead9-cd31-4e48-b81c-71b347d84428",
              "name": "forum_name",
              "value": "DarkForums.io",
              "type": "string"
            },
            {
              "id": "dcdea795-8f21-4213-aa5f-0866bdc6f9e8",
              "name": "forum_icon",
              "value": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQCWBDE-GmAiY_vPK4mNsuaPC8-gpK7u7ZFf46RcYP2SBNH4i_UcHc35Uoggs4e3DjvPmw&usqp=CAU",
              "type": "string"
            },
            {
              "id": "b8c7e0f0-1936-4e51-82be-b0c577f42734",
              "name": "forum_url",
              "value": "https://darkforums.io",
              "type": "string"
            },
            {
              "id": "e084011b-ec05-4f17-bd25-d448a4ea3eb6",
              "name": "forum_url_path[0]",
              "value": "https://darkforums.io/Forum-Databases",
              "type": "string"
            },
            {
              "id": "86faa3a0-144a-4807-9843-9e0e1f12a3a4",
              "name": "forum_url_path[1]",
              "value": "https://darkforums.io/Forum-Other-Leaks",
              "type": "string"
            },
            {
              "id": "a9b1c2d3-e4f5-46a7-b8c9-d0e1f2a3b4c5",
              "name": "forum_url_path[2]",
              "value": "https://darkforums.io/Forum-Database-Discussion",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -848,
        -544
      ],
      "id": "66809d45-b46a-4e22-b843-c6f58a19a338",
      "name": "DarkForums.io \u5143\u6570\u636e"
    },
    {
      "parameters": {
        "amount": 10
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        784,
        192
      ],
      "id": "5ba2e161-c303-462f-8508-03383208167b",
      "name": "\u7b49\u5f85"
    },
    {
      "parameters": {
        "fieldToSplitOut": "forum_posts",
        "options": {
          "destinationFieldName": "post"
        }
      },
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        480,
        -304
      ],
      "id": "ac027284-304c-48d3-84c5-863dab8e77a2",
      "name": "\u518d\u6b21\u62c6\u5206\u8bba\u575b\u5e16\u5b50"
    },
    {
      "parameters": {
        "workflowId": {
          "__rl": true,
          "value": "jrZPgmOsShHkTEFl",
          "mode": "list",
          "cachedResultName": "darkweb-send-forum-posts-to-discord"
        },
        "workflowInputs": {
          "mappingMode": "defineBelow",
          "value": {
            "forum_name": "={{ $json.forum_name }}",
            "forum_url_path": "={{ $json.forum_url }}",
            "forum_icon": "={{ $('\u5faa\u73afURL').item.json.forum_icon }}",
            "post_id": "={{ $json.id }}",
            "post_title": "={{ $json.post_title }}",
            "post_link": "={{ $json.post_link }}",
            "post_author_name": "={{ $json.post_author_name }}",
            "post_author_link": "={{ $json.post_author_link }}",
            "last_post_date": "={{ $json.last_post_date }}",
            "last_post_author": "={{ $json.last_post_author }}",
            "last_post_author_link": "={{ $json.last_post_author_link }}",
            "screenshot_filename": "={{ $json.id }}-{{ $json.post_link.split('/').slice(3).join('/').replace(/[^a-zA-Z0-9-_]/g, '-') }}.jpeg",
            "post_date": "={{ $json.post_date }}",
            "post_alert": "={{ $json.post_alert }}",
            "entity_name": "={{ $json.entity_name }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "forum_name",
              "displayName": "forum_name",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "forum_url_path",
              "displayName": "forum_url_path",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "forum_icon",
              "displayName": "forum_icon",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "post_id",
              "displayName": "post_id",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "post_title",
              "displayName": "post_title",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "post_link",
              "displayName": "post_link",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "post_author_name",
              "displayName": "post_author_name",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "post_author_link",
              "displayName": "post_author_link",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "post_date",
              "displayName": "post_date",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "last_post_date",
              "displayName": "last_post_date",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "last_post_author",
              "displayName": "last_post_author",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "last_post_author_link",
              "displayName": "last_post_author_link",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "screenshot_filename",
              "displayName": "screenshot_filename",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "type": "string"
            },
            {
              "id": "post_alert",
              "displayName": "post_alert",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "entity_name",
              "displayName": "entity_name",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "canBeUsedToMatch": true,
              "removed": false
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": true
        },
        "options": {
          "waitForSubWorkflow": true
        }
      },
      "type": "n8n-nodes-base.executeWorkflow",
      "typeVersion": 1.2,
      "position": [
        784,
        -48
      ],
      "name": "\u53d1\u9001\u5e16\u5b50\u5230Discord",
      "id": "0b35f9e1-b415-4868-b377-4f8fede9ca89",
      "alwaysOutputData": true,
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=[\n  {\n    \"forum_url\": \"{{ $('\u5faa\u73afURL').item.json.forum_url_path }}\",\n    \"current_timestamp\": \"{{ $now.toISO() }}\"\n  }\n]",
        "hasOutputParser": true,
        "needsFallback": true,
        "options": {
          "systemMessage": "=\u4f60\u662f\u4e00\u4e2a AI \u667a\u80fd\u4f53\uff0c\u8d1f\u8d23\u4f7f\u7528 Playwright MCP \u5de5\u5177\u4ece {{ $('\u5faa\u73afURL').item.json.forum_name }} \u8bba\u575b\u9875\u9762\u89e3\u6790 ARIA \u5feb\u7167 YAML \u6570\u636e\u3002\u4f60\u7684\u4efb\u52a1\u662f\u63d0\u53d6\u6709\u5173\u8bba\u575b\u5e16\u5b50\u7684\u7ed3\u6784\u5316\u4fe1\u606f\uff0c\u5e76\u5c06\u5176\u6c47\u7f16\u6210\u5177\u6709\u6b63\u786e\u72b6\u6001\u5904\u7406\u7684 JSON \u54cd\u5e94\u3002\n\n## \u91cd\u8981\uff1a\u8f93\u51fa\u72b6\u6001\u5904\u7406\n\n\u4f60\u7684\u54cd\u5e94\u5fc5\u987b\u9075\u5faa\u4ee5\u4e0b\u72b6\u6001\u89c4\u5219\uff1a\n\n### \u6210\u529f\u573a\u666f (task_status: \"success\")\n- \u5f53\u4f60\u6210\u529f\u8bbf\u95ee\u8bba\u575b\u9875\u9762\u5e76\u80fd\u63d0\u53d6\u5e16\u5b50\u6570\u636e\u65f6\n- \u8f93\u51fa\u683c\u5f0f\uff1a`{\"task_status\": \"success\", \"forum_posts\": [...]}`\n- \u5373\u4f7f\u662f\u7a7a\u7684\uff08\u672a\u627e\u5230\u5e16\u5b50\uff09\uff0c\u4e5f\u8981\u5305\u542b forum_posts \u6570\u7ec4\n- \u5728\u6210\u529f\u54cd\u5e94\u4e2d**\u7edd\u4e0d**\u5305\u542b \"failed_cause\"\n\n### \u5931\u8d25\u573a\u666f (task_status: \"failed\")\n- \u5f53\u4f60\u56e0\u4efb\u4f55\u539f\u56e0\u65e0\u6cd5\u5b8c\u6210\u4efb\u52a1\u65f6\n- \u8f93\u51fa\u683c\u5f0f\uff1a`{\"task_status\": \"failed\", \"failed_cause\": \"reason\", \"error_details\": \"optional details\"}`\n- \u5728\u5931\u8d25\u54cd\u5e94\u4e2d**\u7edd\u4e0d**\u5305\u542b \"forum_posts\"\n- **\u7edd\u4e0d**\u751f\u6210\u865a\u62df/\u4f2a\u9020\u6570\u636e\n\n**\u5931\u8d25\u539f\u56e0\u9009\u9879\uff1a**\n- `\"login_needed\"`: \u5f53\u9875\u9762\u9700\u8981\u8ba4\u8bc1/\u767b\u5f55\u65f6\n- `\"bot_captcha\"`: \u5f53\u88ab\u53cd\u722c\u866b\u7cfb\u7edf\u3001CAPTCHA \u6216 Cloudflare \u4fdd\u62a4\u963b\u6b62\u65f6\n- `\"page_unreachable\"`: \u5f53\u9875\u9762\u79bb\u7ebf\u3001\u8fd4\u56de\u9519\u8bef\u3001\u8d85\u65f6\u6216\u65e0\u6cd5\u8bbf\u95ee\u65f6\n\n---\n\n## \u63d0\u53d6\u6240\u9700\u6570\u636e\uff08\u4ec5\u9650\u6210\u529f\u60c5\u51b5\uff09\n\n### \u6b65\u9aa4 1\uff1a\u5bfc\u822a\u4e0e\u622a\u56fe\n\n1. \u4f7f\u7528 Think \u5de5\u5177\u89c4\u5212\u4f60\u7684\u65b9\u6cd5\n2. \u4f7f\u7528 `browser_navigate` \u8bbf\u95ee\u76ee\u6807 URL\n3. \u4f7f\u7528 `browser_snapshot` \u6355\u83b7\u8bba\u575b\u9875\u9762\u5185\u5bb9\n4. \u5206\u6790\u54cd\u5e94\u4ee5\u786e\u5b9a\u662f\u5426\u53ef\u80fd\u63d0\u53d6\u6570\u636e\n\n### \u6b65\u9aa4 2\uff1a\u72b6\u6001\u5224\u5b9a\n\n**\u9996\u5148\u68c0\u67e5\u8fd9\u4e9b\u5931\u8d25\u6761\u4ef6\uff1a**\n- \u767b\u5f55\u6240\u9700\u7684\u9875\u9762 / \u9700\u8981\u8ba4\u8bc1\n- \u53cd\u722c\u866b\u4fdd\u62a4 / CAPTCHA / Cloudflare \u6311\u6218\n- \u9875\u9762\u9519\u8bef\uff08404, 500, \u8d85\u65f6\u7b49\uff09\n- \u65e0\u6cd5\u8bbf\u95ee\u7684\u5185\u5bb9\n\n**\u5982\u679c\u6709\u4efb\u4f55\u5931\u8d25\u6761\u4ef6\u88ab\u68c0\u6d4b\u5230\uff1a**\n- \u7acb\u5373\u8fd4\u56de\u5e26\u6709\u9002\u5f53\u5931\u8d25\u72b6\u6001\u7684\u7ed3\u679c\n- **\u4e0d\u8981**\u5c1d\u8bd5\u63d0\u53d6\u6570\u636e\n- **\u4e0d\u8981**\u751f\u6210\u4f2a\u9020/\u865a\u62df\u6570\u636e\n\n### \u6b65\u9aa4 3\uff1a\u89e3\u6790\u5e16\u5b50\u6570\u636e\uff08\u4ec5\u9650\u6210\u529f\uff09\n\n**\u6210\u529f\u8bbf\u95ee\u9875\u9762\u7684\u8bf4\u660e\uff1a**\n\n1. **\u5b9a\u4f4d\u5e16\u5b50\u6761\u76ee**\uff1a\n   - \u5728 `table` \u6216 `rowgroup` \u4e0a\u4e0b\u6587\u4e2d\u67e5\u627e `row` \u6216 `cell` \u6761\u76ee\u3002\n   - \u5e16\u5b50\u6807\u9898\u901a\u5e38\u51fa\u73b0\u5728\u6807\u8bb0\u6709\u660e\u663e\u6a21\u5f0f\uff08\u5982 `/url` \u4e2d\u5305\u542b `Thread-...` \u6216\u5728\u63d0\u53ca \"by\" \u4f5c\u8005\u7684\u4e0a\u4e0b\u6587\u4e2d\uff09\u7684 `link` \u6807\u7b7e\u4e0b\u3002\n\n2. **\u63d0\u53d6\u6bcf\u4e2a\u5e16\u5b50\u7684\u5b57\u6bb5**\uff1a\n   - **post_title**\uff1a\u5e16\u5b50\u4e3b `link` \u7684\u6587\u672c\u5185\u5bb9\u3002\n   - **post_link**\uff1a\u8bba\u575b\u57fa\u7840 URL \u52a0\u4e0a\u5305\u542b `Thread-...` \u4e14\u4e0d\u5305\u542b `?action=lastpost` \u7684 `link` URL \u8def\u5f84\u3002\n   - **post_author_name**\uff1a\u5728 `by` \u9644\u8fd1\u6216\u63d0\u5230\u4f5c\u8005\u4fe1\u606f\u7684 `link` \u4e2d\u7684\u6587\u672c\u540d\u79f0\u3002\n   - **post_author_link**\uff1a\u5305\u542b `/User-<username>` \u7684\u4f5c\u8005 `link` URL\u3002\n   - **post_date**\uff1a\u539f\u59cb\u5e16\u5b50\u521b\u5efa\u65e5\u671f/\u65f6\u95f4\uff08\u901a\u5e38\u5982 \"17-11-23, 05:14 PM\"\uff09\u3002\u4f7f\u7528\u8bba\u575b\u7684\u65f6\u533a\u4e0a\u4e0b\u6587\u5c06\u5176\u8f6c\u6362\u4e3a ISO 8601 \u683c\u5f0f\u3002\n   - **last_post_date**\uff1a\u5728 `Last Post` \u94fe\u63a5\u6216\u9644\u8fd1\u5143\u6570\u636e\uff08\u53ef\u80fd\u662f\u76f8\u5bf9\u65f6\u95f4\u5982 \"2 minutes ago\"\uff09\u9644\u8fd1\u627e\u5230\u7684\u65e5\u671f/\u65f6\u95f4\u3002\u4f7f\u7528\u63d0\u4f9b\u7684 current_timestamp \u4f5c\u4e3a\u53c2\u8003\u8fdb\u884c\u8f6c\u6362\u3002\n   - **last_post_author**\uff1a\u5728 `Last Post` \u90e8\u5206\u663e\u793a\u4e3a\u6700\u65b0\u56de\u590d\u8005\u7684\u540d\u79f0\u3002\n   - **last_post_author_link**\uff1a\u6700\u65b0\u56de\u590d\u8005\u5305\u542b `/User-<username>` \u7684\u94fe\u63a5\u3002\n\n3. **\u65e5\u671f\u8f6c\u6362\u89c4\u5219**\uff1a\n   - \u6765\u81ea\u7528\u6237\u8f93\u5165\u7684 `current_timestamp` \u5bf9\u4e8e\u5c06\u76f8\u5bf9\u65e5\u671f\uff08\u5982 \"2 minutes ago\"\uff09\u8f6c\u6362\u4e3a ISO 8601 \u683c\u5f0f\u81f3\u5173\u91cd\u8981\u3002\n   - **\u5bf9\u4e8e post_date**\uff1a\u4ece\u8bba\u575b\u683c\u5f0f\uff08\u4f8b\u5982 \"17-11-23, 05:14 PM\"\uff09\u8f6c\u6362\u4e3a ISO 8601\u3002\u5047\u8bbe\u8bba\u575b\u7684\u65f6\u533a\u4e0e current_timestamp \u65f6\u533a\u5339\u914d\u3002\n   - **\u5bf9\u4e8e last_post_date**\uff1a\n     - \u5982\u679c\u662f\u76f8\u5bf9\u7684\uff08\u4f8b\u5982 \"2 minutes ago\", \"1 hour ago\", \"Less than 1 minute ago\"\uff09\uff0c\u4ece current_timestamp \u5411\u540e\u8ba1\u7b97\n     - \u5982\u679c\u662f\u7edd\u5bf9\u65e5\u671f\u683c\u5f0f\uff0c\u7c7b\u4f3c\u4e8e post_date \u8fdb\u884c\u8f6c\u6362\n     - \u793a\u4f8b\uff08\u5047\u8bbe current_timestamp \u662f \"{{ $now.toISO() }}\"\uff09\uff1a\n       - \"Less than 1 minute ago\" \u2192 \u4ece {{ $now.toISO() }} \u51cf\u53bb 30 \u79d2 = \"{{ $now.minus({seconds: 30}).toISO() }}\"\n       - \"2 minutes ago\" \u2192 \u4ece {{ $now.toISO() }} \u51cf\u53bb 2 \u5206\u949f = \"{{ $now.minus({minutes: 2}).toISO() }}\"\n       - \"1 hour ago\" \u2192 \u4ece {{ $now.toISO() }} \u51cf\u53bb 1 \u5c0f\u65f6 = \"{{ $now.minus({hours: 1}).toISO() }}\"\n       - \"3 days ago\" \u2192 \u4ece {{ $now.toISO() }} \u51cf\u53bb 3 \u5929 = \"{{ $now.minus({days: 3}).toISO() }}\"\n       - \"Yesterday at 3:45 PM\" \u2192 \u8ba1\u7b97\u5230\u524d\u4e00\u5929\u7684\u7279\u5b9a\u65f6\u95f4\n\n4. **\u8fc7\u6ee4**\uff1a\n   - \u5ffd\u7565\u4ec5\u4ec5\u662f\u8bba\u575b\u6807\u9898\u6216\u5206\u9875\u63a7\u4ef6\u7684\u884c\u3002\n   - \u786e\u4fdd\u8df3\u8fc7 `Announcement` \u7c7b\u578b\u7684\u884c\uff0c\u9664\u975e\u5b83\u4eec\u9075\u5faa\u76f8\u540c\u7684\u7ed3\u6784\u3002\n\n5. **\u8f93\u51fa**\uff1a\n   - \u8fd4\u56de\u683c\u5f0f\u826f\u597d\u7684 JSON\uff0c\u5305\u542b\u6210\u529f\u72b6\u6001\u548c forum_posts \u6570\u7ec4\u3002\n   - \u786e\u4fdd\u6240\u6709 URL \u90fd\u662f\u7edd\u5bf9\u8def\u5f84\uff0c\u5fc5\u8981\u65f6\u5728\u524d\u9762\u52a0\u4e0a\u8bba\u575b\u57fa\u7840 URL\u3002\n   - \u786e\u4fdd\u6240\u6709\u65e5\u671f\u5747\u4e3a\u5305\u542b\u65f6\u533a\u4fe1\u606f\u7684\u6b63\u786e ISO 8601 \u683c\u5f0f\u3002\n\n### \u6210\u529f\u8f93\u51fa\u793a\u4f8b\uff1a\n\n```json\n{\n  \"task_status\": \"success\",\n  \"forum_posts\": [\n    {\n      \"post_title\": \"Example Leak\",\n      \"post_link\": \"{{ $('\u5faa\u73afURL').item.json.forum_url_path }}/Thread-Example-Leak\",\n      \"post_author_name\": \"Username\",\n      \"post_author_link\": \"{{ $('\u5faa\u73afURL').item.json.forum_url_path }}/User-Username\",\n      \"post_date\": \"2023-11-17T17:14:00+02:00\",\n      \"last_post_date\": \"2024-01-16T18:59:04.164+02:00\",\n      \"last_post_author\": \"Replier\",\n      \"last_post_author_link\": \"{{ $('\u5faa\u73afURL').item.json.forum_url_path }}/User-Replier\"\n    }\n  ]\n}\n```\n\n### \u5931\u8d25\u8f93\u51fa\u793a\u4f8b\uff1a\n\n```json\n{\n  \"task_status\": \"failed\",\n  \"failed_cause\": \"bot_captcha\",\n  \"error_details\": \"Cloudflare protection detected on page\"\n}\n```\n\n```json\n{\n  \"task_status\": \"failed\",\n  \"failed_cause\": \"login_needed\",\n  \"error_details\": \"Page redirected to login form\"\n}\n```\n\n```json\n{\n  \"task_status\": \"failed\",\n  \"failed_cause\": \"page_unreachable\",\n  \"error_details\": \"HTTP 503 Service Unavailable\"\n}\n```\n\n---\n\n## \u53cd\u722c\u866b (ANTI-BOT) \u5904\u7406\n\n### \u4ec5\u5f53 browser_snapshot \u663e\u793a\u53cd\u722c\u866b\u4fdd\u62a4\u65f6\uff1a\n\n- \u4f7f\u7528 `browser_wait_for` \u7b49\u5f85\u65f6\u95f4\uff1a10\uff0c\u4ee5\u81ea\u52a8\u7ed5\u8fc7\n- \u518d\u6b21\u62cd\u6444 `browser_snapshot` \u68c0\u67e5\u8bba\u575b\u662f\u5426\u52a0\u8f7d\n- \u5982\u679c\u4ecd\u7136\u88ab\u5c4f\u853d\uff0c\u8fd4\u56de\u5e26\u6709 \"bot_captcha\" \u539f\u56e0\u7684\u5931\u8d25\u72b6\u6001\n\n### \u4ec5\u5f53\u51fa\u73b0\u9a8c\u8bc1\u7801 (captcha) \u65f6\uff1a\n\n- \u4f7f\u7528 `browser_hover` \u7136\u540e `browser_click` \u70b9\u51fb\u9a8c\u8bc1\u6309\u94ae\n- \u4f7f\u7528 `browser_wait_for` \u7b49\u5f85\u65f6\u95f4\uff1a5\n- \u62cd\u6444\u6700\u7ec8 `browser_snapshot` \u7528\u4e8e\u63d0\u53d6\n- \u5982\u679c\u9a8c\u8bc1\u5931\u8d25\uff0c\u8fd4\u56de\u5e26\u6709 \"bot_captcha\" \u539f\u56e0\u7684\u5931\u8d25\u72b6\u6001\n\n## \u5173\u952e\u63d0\u9192\n\n1. **\u7edd\u4e0d\u751f\u6210\u4f2a\u9020/\u865a\u62df\u6570\u636e** - \u5982\u679c\u65e0\u6cd5\u8bbf\u95ee\u771f\u5b9e\u6570\u636e\uff0c\u8fd4\u56de\u5931\u8d25\u72b6\u6001\n2. **\u59cb\u7ec8\u5148\u786e\u5b9a\u72b6\u6001** - \u5728\u5c1d\u8bd5\u63d0\u53d6\u4e4b\u524d\u68c0\u67e5\u5931\u8d25\u60c5\u51b5\n3. **\u4e25\u683c\u9075\u5faa JSON \u6a21\u5f0f** - \u6210\u529f\u54cd\u5e94\u9700\u8981 forum_posts\uff0c\u5931\u8d25\u54cd\u5e94\u9700\u8981 failed_cause\n4. **\u5931\u8d25\u539f\u56e0\u8981\u7cbe\u786e** - \u9488\u5bf9\u5177\u4f53\u60c5\u51b5\u4f7f\u7528\u6b63\u786e\u7684\u679a\u4e3e\u503c\n5. **\u4e0d\u8981\u6df7\u5408\u54cd\u5e94** - \u7edd\u4e0d\u8981\u5728\u540c\u4e00\u54cd\u5e94\u4e2d\u540c\u65f6\u5305\u542b forum_posts \u548c failed_cause\n6. **\u65e5\u671f\u8f6c\u6362\u662f\u5f3a\u5236\u6027\u7684** - \u5fc5\u987b\u4f7f\u7528\u63d0\u4f9b\u7684 current_timestamp \u4f5c\u4e3a\u53c2\u8003\u5c06\u6240\u6709\u65e5\u671f\u8f6c\u6362\u4e3a ISO 8601 \u683c\u5f0f\n7. **\u63d0\u53d6 post_date \u548c last_post_date** - \u8fd9\u4e24\u4e2a\u73b0\u5728\u90fd\u662f\u6bcf\u4e2a\u8bba\u575b\u5e16\u5b50\u7684\u5fc5\u586b\u5b57\u6bb5",
          "passthroughBinaryImages": true
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 2.1,
      "position": [
        -848,
        -48
      ],
      "id": "9bb9a2ee-ce01-465f-901f-d4dee2099499",
      "name": "AI \u667a\u80fd\u4f53",
      "retryOnFail": true,
      "maxTries": 2,
      "waitBetweenTries": 5000,
      "onError": "continueErrorOutput"
    },
    {
      "parameters": {
        "sseEndpoint": "https://playwright-mcp.zeabur.app/sse",
        "include": "except",
        "excludeTools": [
          "browser_file_upload",
          "browser_install",
          "browser_pdf_save",
          "browser_drag",
          "browser_generate_playwright_test"
        ]
      },
      "type": "@n8n/n8n-nodes-langchain.mcpClientTool",
      "typeVersion": 1,
      "position": [
        -464,
        208
      ],
      "id": "c0710347-a519-4d07-b406-6e1841bf95db",
      "name": "Playwright MCP\u5de5\u5177"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "894fbb6f-1112-4f6e-be85-b8ef55519296",
              "name": "keywords",
              "value": "=[\n  [\"lockbit\"],\n  [\"facebook\", \"meta\"],\n  [\"bank of america\", \"bak\"],\n  [\"visa\"],\n  [\"united states\", \"united states of america\", \" usa \", \"american\"],\n  [\"brasil\", \"brazil\", \".br\", \".com.br\", \"brazilian\"],\n  [\"s\u00e3o paulo\", \"sao paulo\", \" sp \", \"saopaulo\"],\n  [\"breached\", \"breachforums\", \"breach forums\", \"breached-forums\"]\n]",
              "type": "array"
            }
          ]
        },
        "includeOtherFields": true,
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        784,
        -544
      ],
      "id": "d87533a9-3ef7-4596-8f42-070e07ef88b3",
      "name": "\u5173\u952e\u8bcd",
      "notesInFlow": true,
      "notes": "This node defines the entity detection dictionary containing grouped arrays of companies and related terms. Each array represents one canonical entity (first element) followed by its variations, abbreviations, and common misspellings. For example, \"facebook\" includes variants like \"face\", \"fbook\", and \"meta\", enabling comprehensive detection of entity mentions regardless of how they're written in forum posts."
    },
    {
      "parameters": {
        "jsCode": "const { keywords } = $input.all()[0].json;\n\n  function normalizeText(text) {\n    return text.toLowerCase()\n      .normalize('NFD').replace(/[\\u0300-\\u036f]/g, '') // Remove accents\n      .replace(/[^\\w\\s]/g, ' ') // Replace special chars with spaces\n      .replace(/\\s+/g, ' ') // Normalize whitespace\n      .trim();\n  }\n\n  function findMatchingEntities(text, keywords) {\n    const normalizedText = normalizeText(text);\n    const matchedEntities = [];\n\n    keywords.forEach(group => {\n      const mainEntity = group[0];\n      const hasMatch = group.some(variant => {\n        const normalizedVariant = normalizeText(variant);\n\n        // Strategy based on variant characteristics:\n        if (normalizedVariant.length <= 3) {\n          // Short terms: exact word boundaries (avoid \"usa\" in \"usage\")\n          const regex = new RegExp(`\\\\b${normalizedVariant}\\\\b`, 'i');\n          return regex.test(normalizedText);\n        } else if (normalizedVariant.includes(' ')) {\n          // Multi-word terms: substring matching\n          return normalizedText.includes(normalizedVariant);\n        } else {\n          // Single words: try both approaches\n          const wordBoundary = new RegExp(`\\\\b${normalizedVariant}\\\\b`, 'i');\n          const substring = normalizedText.includes(normalizedVariant);\n          return wordBoundary.test(normalizedText) || substring;\n        }\n      });\n\n      if (hasMatch) {\n        matchedEntities.push(mainEntity);\n      }\n    });\n\n    return matchedEntities;\n  }\n\n  return $input.all().map(item => {\n    const postTitle = item.json.post?.post_title || '';\n    const foundEntities = findMatchingEntities(postTitle, keywords);\n\n    return {\n      post: item.json.post,\n      entity_name: foundEntities.length > 0 ? foundEntities : null,  // null when empty\n      post_alert: foundEntities.length > 0\n    };\n  });"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        784,
        -304
      ],
      "id": "b0ad90e0-c1f4-45ce-9568-169ed1ed1c21",
      "name": "\u5b9e\u4f53\u5339\u914d\u4ee3\u7801",
      "notesInFlow": true,
      "notes": "This node performs intelligent entity detection on forum post titles using text normalization and hybrid matching strategies. It processes each post title by removing accents, normalizing whitespace, and applying different matching approaches: exact word boundaries for short terms (\u22643 chars), substring matching for multi-word phrases, and combined word boundary + substring matching for single words. The output includes the original post data plus entity_name (array of detected entities or null) and keyword_alert (boolean flag), providing structured threat intelligence data for database storage."
    },
    {
      "parameters": {
        "fieldToSplitOut": "forum_url_path",
        "include": "allOtherFields",
        "options": {}
      },
      "type": "n8n-nodes-base.splitOut",
      "typeVersion": 1,
      "position": [
        -512,
        -544
      ],
      "id": "4293d486-a32d-40f9-9806-d801437bd8c7",
      "name": "\u62c6\u5206\u5f85\u8ffd\u8e2aURL"
    },
    {
      "parameters": {
        "amount": 30
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        784,
        416
      ],
      "id": "6375f030-7208-47d5-a286-614dfbb04bc5",
      "name": "\u7b49\u5f85\u91cd\u8bd5"
    },
    {
      "parameters": {
        "authentication": "webhook",
        "options": {
          "username": "DarkWeb Forums",
          "wait": true
        },
        "embeds": {
          "values": [
            {
              "description": "=### {{ $('\u5faa\u73afURL').item.json.forum_name }}\n- {{ $('\u5faa\u73afURL').item.json.forum_url_path }}\n> AI \u667a\u80fd\u4f53\u5c1d\u8bd5\u83b7\u53d6\u6570\u636e **3\u6b21** \u4f46\u672a\u80fd\u6210\u529f\u3002\n`\u67e5\u770b\u5de5\u4f5c\u6d41\u65e5\u5fd7 \u2022 \u9700\u8981\u4eba\u5de5\u5ba1\u67e5`",
              "author": "=\u26a0\ufe0f \u8bba\u575b\u8ffd\u8e2a\u91cd\u8bd5\u5931\u8d25",
              "color": "#E74C3C",
              "timestamp": "={{ $now.toISO() }}"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [
        176,
        192
      ],
      "id": "c14ea7f5-7ebc-4b1c-a024-9f0adad68714",
      "name": "\u901a\u77e5\u91cd\u8bd5\u5931\u8d25",
      "executeOnce": true,
      "retryOnFail": false,
      "credentials": {
        "discordWebhookApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "a86fbd7e-7add-4cd2-9107-58defd2f9eef",
              "leftValue": "={{ $runIndex }}",
              "rightValue": 2,
              "operator": {
                "type": "number",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        -160,
        192
      ],
      "id": "b48f6536-8945-409c-8ed7-7f19837aab94",
      "name": "\u91cd\u8bd5\u8ba1\u6570 (2\u6b21)"
    },
    {
      "parameters": {
        "model": "gpt-4o",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1,
      "position": [
        -1136,
        -32
      ],
      "id": "68759977-5219-4ed2-8f0d-d6f8b4633e51",
      "name": "OpenAI Chat Model (GPT-4o)",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "model": "gpt-4o-mini",
        "options": {
          "temperature": 0.2
        }
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1,
      "position": [
        -1136,
        208
      ],
      "id": "712c5b3b-432c-4deb-9aaf-cbfa7d90323d",
      "name": "OpenAI Chat Model (GPT-4o Mini)",
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "authentication": "webhook",
        "options": {
          "username": "DarkWeb Forums",
          "wait": false
        },
        "embeds": {
          "values": [
            {
              "description": "=### {{ $('\u5faa\u73afURL').item.json.forum_name }}\n- {{ $('\u5faa\u73afURL').item.json.forum_url_path }}\n`\u5c1d\u8bd5\u7b2c ({{ $runIndex+1 }}) \u6b21`",
              "author": "=\ud83d\udd04 \u65b0\u7684\u8bba\u575b\u8ffd\u8e2a\u5df2\u542f\u52a8",
              "color": "#3498DB",
              "timestamp": "={{ $now.toISO() }}"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [
        -1152,
        416
      ],
      "id": "423b713f-27d5-4afb-b4f4-d542ea104a3e",
      "name": "\u901a\u77e5\u5f00\u59cb\u65b0\u91cd\u8bd5",
      "credentials": {
        "discordWebhookApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "const allPosts = $(\"AI \u667a\u80fd\u4f53\").first().json.output?.forum_posts || [];\nconst now = new Date();\nconst twentyFourHoursAgo = new Date(now.getTime() - 24 * 60 * 60 * 1000);\n\nconst activePosts = allPosts.filter(post => {\n  const lastPostDate = new Date(post.last_post_date);\n  return lastPostDate >= twentyFourHoursAgo;\n});\n\nif (activePosts.length === 0) {\n  return { hasActivePosts: false };\n}\n\nconst recapList = activePosts.map(post => `- [${post.post_title}](${post.post_link})`).join('\\n');\n\nreturn {\n  hasActivePosts: true,\n  recap_message: `### \ud83d\udcca \u4eca\u65e5\u6d3b\u8dc3\u52a8\u6001\u56de\u987e\\n\u4ee5\u4e0b\u662f\u8fc7\u53bb 24 \u5c0f\u65f6\u5185\u6709\u65b0\u52a8\u9759\u7684\u5e16\u5b50\uff1a\\n\\n${recapList}`\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        480,
        -48
      ],
      "id": "recap-filter-node-1",
      "name": "\u7b5b\u9009\u4eca\u65e5\u6d3b\u8dc3\u5e16\u5b50"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose",
            "version": 2
          },
          "conditions": [
            {
              "id": "c16d",
              "leftValue": "={{ $json.hasActivePosts }}",
              "rightValue": "",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "looseTypeValidation": true,
        "options": {}
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2.2,
      "position": [
        784,
        -48
      ],
      "id": "recap-if-node-1",
      "name": "\u662f\u5426\u6709\u6d3b\u8dc3\u5e16\u5b50?"
    },
    {
      "parameters": {
        "authentication": "webhook",
        "options": {
          "username": "DarkWeb Forums",
          "wait": true
        },
        "embeds": {
          "values": [
            {
              "description": "={{ $json.recap_message }}",
              "author": "=\ud83d\udccb \u4eca\u65e5\u52a8\u6001\u6c47\u603b ({{ $('\u5faa\u73afURL').item.json.forum_name }})",
              "color": "#F1C40F",
              "timestamp": "={{ $now.toISO() }}"
            }
          ]
        }
      },
      "type": "n8n-nodes-base.discord",
      "typeVersion": 2,
      "position": [
        1088,
        -160
      ],
      "id": "recap-discord-node-1",
      "name": "\u901a\u77e5\u4eca\u65e5\u6d3b\u8dc3\u6c47\u603b",
      "executeOnce": true,
      "credentials": {
        "discordWebhookApi": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "\u7ed3\u6784\u5316\u8f93\u51fa\u89e3\u6790\u5668": {
      "ai_outputParser": [
        [
          {
            "node": "AI \u667a\u80fd\u4f53",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "\u601d\u8003(Think)\u5de5\u5177": {
      "ai_tool": [
        [
          {
            "node": "AI \u667a\u80fd\u4f53",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Supabase RPC \u68c0\u67e5\u73b0\u6709URL": {
      "main": [
        [
          {
            "node": "\u5408\u5e76\u4ec5\u65b0URL",
            "type": "main",
            "index": 1
          }
        ],
        [
          {
            "node": "\u901a\u77e5\u8ffd\u8e2a\u5931\u8d25",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u5408\u5e76\u4ec5\u65b0URL": {
      "main": [
        [
          {
            "node": "\u91cd\u7ec4\u65b0\u5e16\u5b50\u6570\u7ec4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u901a\u77e5\u5f00\u59cb\u8ffd\u8e2a": {
      "main": [
        [
          {
            "node": "AI \u667a\u80fd\u4f53",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u901a\u77e5\u8ffd\u8e2a\u5931\u8d25": {
      "main": [
        [
          {
            "node": "\u91cd\u8bd5\u8ba1\u6570 (2\u6b21)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u6709\u65b0\u5e16\u5b50\u5417?": {
      "main": [
        [
          {
            "node": "\u518d\u6b21\u62c6\u5206\u8bba\u575b\u5e16\u5b50",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\u7b5b\u9009\u4eca\u65e5\u6d3b\u8dc3\u5e16\u5b50",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u7b5b\u9009\u4eca\u65e5\u6d3b\u8dc3\u5e16\u5b50": {
      "main": [
        [
          {
            "node": "\u662f\u5426\u6709\u6d3b\u8dc3\u5e16\u5b50?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u662f\u5426\u6709\u6d3b\u8dc3\u5e16\u5b50?": {
      "main": [
        [
          {
            "node": "\u901a\u77e5\u4eca\u65e5\u6d3b\u8dc3\u6c47\u603b",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\u901a\u77e5\u672a\u53d1\u73b0\u65b0\u5e16\u5b50",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u901a\u77e5\u672a\u53d1\u73b0\u65b0\u5e16\u5b50": {
      "main": [
        [
          {
            "node": "\u7b49\u5f85",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u5b9a\u65f6\u89e6\u53d1\u5668": {
      "main": [
        [
          {
            "node": "DarkForums.io \u5143\u6570\u636e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u5207\u6362\u667a\u80fd\u4f53\u8f93\u51fa": {
      "main": [
        [
          {
            "node": "Supabase RPC \u68c0\u67e5\u73b0\u6709URL",
            "type": "main",
            "index": 0
          },
          {
            "node": "\u62c6\u5206\u8bba\u575b\u5e16\u5b50",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\u901a\u77e5\u8ffd\u8e2a\u5931\u8d25",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\u901a\u77e5\u8ffd\u8e2a\u5931\u8d25",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u5faa\u73afURL": {
      "main": [
        [],
        [
          {
            "node": "\u901a\u77e5\u5f00\u59cb\u8ffd\u8e2a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u62c6\u5206\u8bba\u575b\u5e16\u5b50": {
      "main": [
        [
          {
            "node": "\u5408\u5e76\u4ec5\u65b0URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u91cd\u7ec4\u65b0\u5e16\u5b50\u6570\u7ec4": {
      "main": [
        [
          {
            "node": "\u6709\u65b0\u5e16\u5b50\u5417?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u6dfb\u52a0\u5e16\u5b50\u5230Supabase": {
      "main": [
        [
          {
            "node": "\u53d1\u9001\u5e16\u5b50\u5230Discord",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\u7b49\u5f85",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "DarkForums.io \u5143\u6570\u636e": {
      "main": [
        [
          {
            "node": "\u62c6\u5206\u5f85\u8ffd\u8e2aURL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u7b49\u5f85": {
      "main": [
        [
          {
            "node": "\u5faa\u73afURL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u518d\u6b21\u62c6\u5206\u8bba\u575b\u5e16\u5b50": {
      "main": [
        [
          {
            "node": "\u5173\u952e\u8bcd",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u53d1\u9001\u5e16\u5b50\u5230Discord": {
      "main": [
        [
          {
            "node": "\u7b49\u5f85",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI \u667a\u80fd\u4f53": {
      "main": [
        [
          {
            "node": "\u5207\u6362\u667a\u80fd\u4f53\u8f93\u51fa",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\u901a\u77e5\u8ffd\u8e2a\u5931\u8d25",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Playwright MCP\u5de5\u5177": {
      "ai_tool": [
        [
          {
            "node": "AI \u667a\u80fd\u4f53",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "\u5173\u952e\u8bcd": {
      "main": [
        [
          {
            "node": "\u5b9e\u4f53\u5339\u914d\u4ee3\u7801",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u5b9e\u4f53\u5339\u914d\u4ee3\u7801": {
      "main": [
        [
          {
            "node": "\u6dfb\u52a0\u5e16\u5b50\u5230Supabase",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u62c6\u5206\u5f85\u8ffd\u8e2aURL": {
      "main": [
        [
          {
            "node": "\u5faa\u73afURL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u7b49\u5f85\u91cd\u8bd5": {
      "main": [
        [
          {
            "node": "\u901a\u77e5\u5f00\u59cb\u65b0\u91cd\u8bd5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u901a\u77e5\u91cd\u8bd5\u5931\u8d25": {
      "main": [
        [
          {
            "node": "\u7b49\u5f85",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u91cd\u8bd5\u8ba1\u6570 (2\u6b21)": {
      "main": [
        [
          {
            "node": "\u901a\u77e5\u91cd\u8bd5\u5931\u8d25",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\u7b49\u5f85\u91cd\u8bd5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model (GPT-4o)": {
      "ai_languageModel": [
        [
          {
            "node": "AI \u667a\u80fd\u4f53",
            "type": "ai_languageModel",
            "index": 1
          }
        ]
      ]
    },
    "OpenAI Chat Model (GPT-4o Mini)": {
      "ai_languageModel": [
        [
          {
            "node": "\u7ed3\u6784\u5316\u8f93\u51fa\u89e3\u6790\u5668",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "AI \u667a\u80fd\u4f53",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "\u901a\u77e5\u5f00\u59cb\u65b0\u91cd\u8bd5": {
      "main": [
        [
          {
            "node": "AI \u667a\u80fd\u4f53",
            "type": "main",

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

darkweb-get-forum-posts. Uses outputParserStructured, toolThink, httpRequest, discord. Scheduled trigger; 32 nodes.

Source: https://github.com/adminlove520/DarkWeb-Forums-Tracking/blob/d3cbfee4f10338ba091739caf7dda246e7e74904/n8n/workflows/darkweb-get-forum-posts.json — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

kisisel asistan. Uses toolWorkflow, toolHttpRequest, toolCalculator, toolThink. Scheduled trigger; 43 nodes.

Tool Workflow, Tool Http Request, Tool Calculator +15
AI & RAG

This workflow automatically generates professional, branded LinkedIn posts using your custom Figma designs. Perfect for marketers, agencies, content creators, and businesses who want to maintain consi

Memory Buffer Window, Perplexity Tool, Tool Think +7
AI & RAG

Generate AI video clips to promote products, services or events on social media. Use gotoHuman as an interface to control and supervise each step of the workflow to create content that's actually wort

Agent, OpenAI Chat, Tool Think +3
AI & RAG

System Architecture Two integrated N8N workflows providing automated US stock portfolio management through Telegram:

Output Parser Autofixing, OpenAI Chat, Perplexity +10
AI & RAG

This workflow automates the complete blog publishing process. It removes manual work from content creation, image generation, category management, and WordPress publishing by using AI and n8n. It help

Google Gemini Chat, Output Parser Structured, Lm Chat Deep Seek +5