AutomationFlowsWeb Scraping › 信息提取题目出题工作流

信息提取题目出题工作流

信息提取题目出题工作流. Uses httpRequest. Event-driven trigger; 22 nodes.

Event trigger★★★★☆ complexity22 nodesHTTP Request
Web Scraping Trigger: Event Nodes: 22 Complexity: ★★★★☆ Added:

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": "\u4fe1\u606f\u63d0\u53d6\u9898\u76ee\u51fa\u9898\u5de5\u4f5c\u6d41",
  "nodes": [
    {
      "parameters": {},
      "id": "node-trigger",
      "name": "\u5f00\u59cb\u51fa\u9898",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        0,
        300
      ]
    },
    {
      "parameters": {
        "text": "# \u4fe1\u606f\u63d0\u53d6\u9898\u76ee\u51fa\u9898\u5de5\u4f5c\u6d41\n\u6309\u516d\u6b65\u6cd5\u987a\u5e8f\u51fa\u9898\uff0c\u6bcf\u6b65\u5b8c\u6210\u540e\u9700\u4eba\u5de5\u5ba1\u6838\u3002\n\u5ba1\u6838\u4e0d\u901a\u8fc7\u81ea\u52a8\u9000\u56de\u91cd\u505a\uff08\u4e0a\u9650 3 \u6b21\uff09\u3002\n\n## \u516d\u6b65 + \u6e05\u5355\n1. \u9009\u5b9a\u7d20\u6750\u4e0e\u5b57\u6bb5\n2. \u5b9a\u7edf\u4e00\u5199\u6cd5\n3. \u6536\u96c6\u7d20\u6750\n4. \u5236\u4f5c\u6807\u51c6\u7b54\u6848\n5. \u5199\u9898\u76ee\u8981\u6c42\n6. \u6807\u51c6\u7b54\u6848 + \u6253\u5206\u8bf4\u660e\n7. \u63d0\u4ea4\u524d\u68c0\u67e5\u6e05\u5355"
      },
      "id": "node-sticky-intro",
      "name": "\u6d41\u7a0b\u8bf4\u660e",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        200,
        80
      ]
    },
    {
      "parameters": {
        "values": {
          "string": [
            {
              "name": "step",
              "value": "1"
            },
            {
              "name": "retryCount",
              "value": "0"
            },
            {
              "name": "maxRetries",
              "value": "3"
            }
          ]
        },
        "options": {}
      },
      "id": "node-init",
      "name": "\u521d\u59cb\u5316\u9898\u76ee\u6570\u636e",
      "type": "n8n-nodes-base.set",
      "typeVersion": 2,
      "position": [
        400,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "const step = $input.first().json.step;\nconst retryCount = $input.first().json.retryCount || 0;\n\nconst stepNames = {\n  '1': '\u9009\u5b9a\u7d20\u6750\u4e0e\u5b57\u6bb5',\n  '2': '\u5b9a\u7edf\u4e00\u5199\u6cd5',\n  '3': '\u6536\u96c6\u7d20\u6750',\n  '4': '\u5236\u4f5c\u6807\u51c6\u7b54\u6848',\n  '5': '\u5199\u9898\u76ee\u8981\u6c42',\n  '6': '\u6807\u51c6\u7b54\u6848+\u6253\u5206\u8bf4\u660e',\n  '7': '\u63d0\u4ea4\u524d\u68c0\u67e5\u6e05\u5355'\n};\n\nconst stepDescriptions = {\n  '1': '\u9009\u4e00\u7c7b\u5e26\u56fa\u5b9a\u5185\u5bb9\u7684\u7d20\u6750\uff08\u53d1\u7968/\u540d\u7247/\u5feb\u9012\u5355\u7b49\uff09\uff0c\u5b9a3-7\u4e2a\u8981\u63d0\u53d6\u7684\u5b57\u6bb5\u3002\u8981\u6c42\uff1a\u660e\u786e\u3001\u770b\u5f97\u5230\u3001\u6570\u91cf\u9002\u4e2d\u3001\u6709\u7edf\u4e00\u5199\u6cd5\u3002',\n  '2': '\u4e3a\u6bcf\u4e2a\u5b57\u6bb5\u5b9a\u7edf\u4e00\u5199\u6cd5\uff1a\u65e5\u671f\u2192YYYY-MM-DD\uff0c\u91d1\u989d\u2192\u7eaf\u6570\u5b57\u4e0d\u542b\u5355\u4f4d\uff0c\u7535\u8bdd\u2192\u53bb\u7a7a\u683c\u7eaf\u6570\u5b57\uff0c\u6587\u672c\u2192\u53bb\u524d\u540e\u7a7a\u683c\uff0c\u56fe\u91cc\u6ca1\u6709\u2192\u7559\u7a7a\u4e0d\u7f16\u9020\u3002\u628a\u8fd9\u4e9b\u5199\u4e0b\u6765\u3002',\n  '3': '\u6309\u5b9a\u597d\u7684\u5b57\u6bb5\u6536\u96c6\u7d20\u6750\u3002\u7b80\u535515-20\u5f20/\u4e2d\u7b4920-40\u5f20/\u56f0\u96be40+\u5f20\u3002\u8986\u76d6\u4e0d\u540c\u6837\u5f0f\uff0c\u542b\u5c0f\u5b57/\u624b\u5199/\u906e\u6321/\u7f3a\u9879\u7b49\u96be\u4f8b\u3002\u7edf\u4e00\u547d\u540d\u4e3aimg_001.png...\u6ce8\u610f\u5408\u89c4\u3002',\n  '4': '\u9010\u5f20\u8bfb\u56fe\uff0c\u6309\u7edf\u4e00\u5199\u6cd5\u9010\u9879\u586b\u6807\u51c6\u7b54\u6848\u3002\u56fe\u91cc\u6ca1\u6709\u7684\u7559\u7a7a\u3002\u5b57\u7cca/\u906e\u6321\u8981\u653e\u5927\u786e\u8ba4\uff0c\u8bfb\u4e0d\u51fa\u5c31\u7559\u7a7a\u5e76\u8bb0\u5f55\u3002\u91cd\u8981\u9898\u627e\u7b2c\u4e8c\u4eba\u6838\u5bf9\u3002',\n  '5': '\u5199\u6e05\u4e94\u4ef6\u4e8b\uff1a\u505a\u4ec0\u4e48\u3001\u8bfb\u54ea\u51e0\u9879\u3001\u7edf\u4e00\u5199\u6cd5\u3001\u5904\u7406\u54ea\u4e9b\u56fe\u3001\u7b54\u6848\u683c\u5f0f\u3002\u9644\u6a21\u677f\u5f00\u5934\uff0c\u660e\u786e\u8981\u6c42\"\u5904\u7406\u5168\u90e8\u56fe\u7247\u3001\u627e\u4e0d\u5230\u7559\u7a7a\u4e0d\u8981\u7f16\u9020\"\u3002',\n  '6': '\u786e\u8ba4\u6807\u51c6\u7b54\u6848\u8986\u76d6\u5168\u90e8\u56fe\u7247\u5168\u90e8\u5b57\u6bb5\u3002\u5199\u6253\u5206\u8bf4\u660e\uff1a\u9010\u9879\u7edf\u4e00\u5199\u6cd5\u6bd4\u5bf9\uff0c\u51c6\u786e\u7387=\u7b54\u5bf9\u00f7\u603b\u6570\u3002\u53ca\u683c\u7ebf\u5efa\u8bae\u7b80\u53550.95/\u4e2d\u7b490.9/\u56f0\u96be0.85\u3002',\n  '7': '\u9010\u6761\u6253\u52fe\uff1a\u5b57\u6bb5\u660e\u786e\u2713 \u7edf\u4e00\u5199\u6cd5\u5df2\u5b9a\u4e14\u5199\u5165\u8981\u6c42\u2713 \u56fe\u7247\u8986\u76d6\u591a\u6837\u542b\u96be\u4f8b\u2713 \u56fe\u7247\u540d\u7edf\u4e00\u2713 \u6807\u51c6\u7b54\u6848\u9010\u5f20\u9010\u9879\u6838\u5bf9\u2713 \u9898\u76ee\u8981\u6c42\u5199\u6e05\u4e94\u4ef6\u4e8b\u2713 \u6253\u5206\u8bf4\u660e\u542b\u89c4\u5219\u548c\u53ca\u683c\u7ebf\u2713'\n};\n\nconst stepTasks = {\n  '1': '\u2022 \u9009\u5b9a\u7d20\u6750\u7c7b\u578b\uff08\u53d1\u7968/\u540d\u7247/\u5feb\u9012\u5355/\u8425\u4e1a\u6267\u7167/\u5546\u54c1\u6807\u7b7e\u2026\uff09\\n\u2022 \u5217\u51fa3-7\u4e2a\u8981\u63d0\u53d6\u7684\u5b57\u6bb5\\n\u2022 \u786e\u8ba4\u6bcf\u4e2a\u5b57\u6bb5\u90fd\u80fd\u4ece\u56fe\u4e2d\u8bfb\u5230\\n\u2022 \u786e\u8ba4\u5b57\u6bb5\u65e0\u6b67\u4e49',\n  '2': '\u2022 \u65e5\u671f\u683c\u5f0f\u7edf\u4e00\uff08YYYY-MM-DD / YYYY\u5e74MM\u6708DD\u65e5\uff09\\n\u2022 \u91d1\u989d\u683c\u5f0f\u7edf\u4e00\uff08\u7eaf\u6570\u5b57 / \u542b\u5355\u4f4d / \u5c0f\u6570\u4f4d\uff09\\n\u2022 \u7535\u8bdd\u683c\u5f0f\u7edf\u4e00\uff08\u53bb\u7a7a\u683c / \u4fdd\u7559\u5206\u9694\u7b26\uff09\\n\u2022 \u660e\u786e\"\u56fe\u91cc\u6ca1\u6709\u5c31\u7559\u7a7a\uff0c\u4e0d\u7f16\u9020\"\\n\u2022 \u628a\u7edf\u4e00\u5199\u6cd5\u8bb0\u5f55\u4e0b\u6765\uff0c\u540e\u7eed\u5199\u5165\u9898\u76ee\u8981\u6c42',\n  '3': '\u2022 \u6309\u5b57\u6bb5\u6536\u96c6\u56fe\u7247\\n\u2022 \u786e\u5b9a\u96be\u5ea6\uff1a\u7b80\u535515-20\u5f20 / \u4e2d\u7b4920-40\u5f20 / \u56f0\u96be40+\u5f20\\n\u2022 \u8986\u76d6\u4e0d\u540c\u6837\u5f0f\u548c\u6765\u6e90\\n\u2022 \u542b\u5c0f\u5b57\u3001\u624b\u5199\u3001\u906e\u6321\u3001\u7f3a\u9879\u7b49\u96be\u4f8b\\n\u2022 \u7edf\u4e00\u547d\u540d img_001.png, img_002.png \u2026\\n\u2022 \u5408\u89c4\uff1a\u4e0d\u7528\u771f\u5b9e\u9690\u79c1/\u672a\u6388\u6743\u56fe\u7247',\n  '4': '\u2022 \u9010\u5f20\u6253\u5f00\u56fe\u7247\\n\u2022 \u6309\u7edf\u4e00\u5199\u6cd5\u9010\u9879\u8bfb\u51fa\u5185\u5bb9\\n\u2022 \u586b\u5165\u7ed3\u6784\u5316\u8868\u683c\\n\u2022 \u56fe\u91cc\u6ca1\u6709\u7684\u9879\u7559\u7a7a\\n\u2022 \u5b57\u7cca/\u88ab\u906e\u6321 \u2192 \u653e\u5927\u786e\u8ba4 \u2192 \u8bfb\u4e0d\u51fa\u5c31\u7559\u7a7a\u5e76\u8bb0\u5f55\\n\u2022 \u91cd\u8981\u9898\u76ee\u627e\u7b2c\u4e8c\u4eba\u6838\u5bf9',\n  '5': '\u2022 \u5199\u573a\u666f\u8bf4\u660e\uff08\"\u4f60\u662f\u4e00\u540dXX\u52a9\u624b\"\uff09\\n\u2022 \u5199\u56fe\u7247\u8def\u5f84\uff08/workspace/inputs/\uff09\\n\u2022 \u9010\u9879\u5217\u51fa\u8981\u63d0\u53d6\u7684\u5b57\u6bb5\u53ca\u683c\u5f0f\u8981\u6c42\\n\u2022 \u5199\u6e05\"\u5904\u7406\u5168\u90e8\u56fe\u7247\uff0c\u4e0d\u8981\u9057\u6f0f\"\\n\u2022 \u5199\u6e05\"\u627e\u4e0d\u5230\u7559\u7a7a\uff0c\u4e0d\u8981\u7f16\u9020\"\\n\u2022 \u5bf9\u7167\u7b2c2\u6b65\u7edf\u4e00\u5199\u6cd5\uff0c\u786e\u4fdd\u4e00\u81f4',\n  '6': '\u2022 \u786e\u8ba4\u6807\u51c6\u7b54\u6848\u8986\u76d6\u5168\u90e8\u56fe\u7247\u3001\u5168\u90e8\u5b57\u6bb5\\n\u2022 \u786e\u8ba4\u7edf\u4e00\u5199\u6cd5\u4e0e\u6807\u51c6\u7b54\u6848\u4e00\u81f4\\n\u2022 \u5199\u6253\u5206\u8bf4\u660e\uff1a\u9010\u9879\u6bd4\u5bf9\u89c4\u5219\\n\u2022 \u8bbe\u53ca\u683c\u7ebf\uff1a\u7b80\u53550.95 / \u4e2d\u7b490.9 / \u56f0\u96be0.85\\n\u2022 \u6709\u7279\u6b8a\u89c4\u5219\uff08\u5982\u00b10.01\u8bef\u5dee\uff09\u4e00\u5e76\u5199\u6e05',\n  '7': '\u2610 \u5b57\u6bb5\u660e\u786e\u3001\u6bcf\u9879\u90fd\u80fd\u5728\u56fe\u91cc\u8bfb\u5230\\n\u2610 \u7edf\u4e00\u5199\u6cd5\u5df2\u5b9a\u5e76\u5199\u5165\u9898\u76ee\u8981\u6c42\\n\u2610 \u56fe\u7247\u8986\u76d6\u4e0d\u540c\u6837\u5f0f\uff0c\u542b\u82e5\u5e72\u96be\u4f8b\\n\u2610 \u56fe\u7247\u540d\u7edf\u4e00\uff0c\u4e0e\u6807\u51c6\u7b54\u6848\u5bf9\u5f97\u4e0a\\n\u2610 \u6807\u51c6\u7b54\u6848\u9010\u5f20\u9010\u9879\u6838\u5bf9\uff0c\u7f3a\u9879\u7559\u7a7a\\n\u2610 \u9898\u76ee\u8981\u6c42\u5199\u6e05\u4e94\u4ef6\u4e8b\\n\u2610 \u6807\u51c6\u7b54\u6848\u586b\u5168\uff0c\u6253\u5206\u8bf4\u660e\u542b\u89c4\u5219\u548c\u53ca\u683c\u7ebf'\n};\n\nreturn [{\n  json: {\n    step: step,\n    retryCount: retryCount,\n    stepName: stepNames[step] || '\u5168\u90e8\u5b8c\u6210',\n    stepDescription: stepDescriptions[step] || '',\n    stepTasks: stepTasks[step] || ''\n  }\n}];"
      },
      "id": "node-prepare-step",
      "name": "\u51c6\u5907\u5f53\u524d\u6b65\u9aa4\u4fe1\u606f",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        600,
        300
      ]
    },
    {
      "parameters": {
        "text": "={{ $json.step === '8' ? '## \ud83c\udf89 \u5168\u90e8\u6b65\u9aa4\u5b8c\u6210\uff01\n\u9898\u76ee\u5df2\u901a\u8fc7\u5168\u90e8\u5ba1\u6838\u548c\u68c0\u67e5\u6e05\u5355\uff0c\u53ef\u4ee5\u63d0\u4ea4\u4e86\u3002\n\n**\u63d0\u4ea4\u786e\u8ba4\uff1a**\n\u2022 \u9898\u76eeID\u5df2\u5b9a  \u2022 \u540d\u79f0\u5df2\u5b9a  \u2022 \u6807\u7b7e\u5df2\u9009\n\u2022 \u4efb\u52a1\u6307\u4ee4\u5df2\u5199  \u2022 \u9644\u4ef6\u5df2\u4e0a\u4f20\n\u2022 \u6807\u51c6\u7b54\u6848\u5df2\u586b  \u2022 \u6253\u5206\u8bf4\u660e\u5df2\u5199' : '## \ud83d\udccb \u7b2c' + $json.step + '\u6b65\uff1a' + $json.stepName + '\n\n**\u672c\u6b65\u76ee\u6807\uff1a**\n' + $json.stepDescription + '\n\n**\u5177\u4f53\u4efb\u52a1\uff1a**\n' + $json.stepTasks + '\n\n---\n### \u5b8c\u6210\u540e\u901a\u8fc7 Webhook \u63d0\u4ea4\u5ba1\u6838\n```\nPOST <\u672c\u5de5\u4f5c\u6d41Webhook URL>\n{\n  \"step\": \"' + $json.step + '\",\n  \"action\": \"approve\",\n  \"comment\": \"\u901a\u8fc7\u7406\u7531\uff08\u53ef\u9009\uff09\"\n}\n```\n\u4e0d\u901a\u8fc7\u65f6\u5c06 action \u6539\u4e3a \"reject\" \u5e76\u9644\u539f\u56e0\u3002' }}"
      },
      "id": "node-sticky-step-info",
      "name": "\u5f53\u524d\u6b65\u9aa4\u8be6\u60c5",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        600,
        80
      ]
    },
    {
      "parameters": {
        "webhookPath": "review-step",
        "httpMethod": "POST",
        "responseMode": "responseNode",
        "options": {}
      },
      "id": "node-webhook",
      "name": "\u7b49\u5f85\u4eba\u5de5\u5ba1\u6838",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        800,
        300
      ]
    },
    {
      "parameters": {
        "jsCode": "const body = $input.first().json.body || $input.first().json;\nconst prevStep = $('\u51c6\u5907\u5f53\u524d\u6b65\u9aa4\u4fe1\u606f').first().json.step;\n\nreturn [{\n  json: {\n    step: body.step || prevStep,\n    action: body.action || 'reject',\n    comment: body.comment || '',\n    reviewedAt: new Date().toISOString()\n  }\n}];"
      },
      "id": "node-parse-review",
      "name": "\u89e3\u6790\u5ba1\u6838\u7ed3\u679c",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1000,
        300
      ]
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "={\n  \"status\": \"{{ $json.action }}\",\n  \"step\": \"{{ $json.step }}\",\n  \"message\": \"{{ $json.action === 'approve' ? '\u2705 \u901a\u8fc7\uff0c\u8fdb\u5165\u4e0b\u4e00\u6b65' : '\u274c \u4e0d\u901a\u8fc7\uff0c\u8bf7\u4fee\u6539\u540e\u91cd\u65b0\u63d0\u4ea4' }}\",\n  \"comment\": \"{{ $json.comment }}\"\n}"
      },
      "id": "node-respond",
      "name": "\u8fd4\u56de\u5ba1\u6838\u7ed3\u679c",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1,
      "position": [
        1200,
        500
      ]
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict"
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.action }}",
                    "rightValue": "approve",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ]
              },
              "renameOutput": true,
              "outputKeyName": "\u901a\u8fc7"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict"
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.action }}",
                    "rightValue": "reject",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    }
                  }
                ]
              },
              "renameOutput": true,
              "outputKeyName": "\u4e0d\u901a\u8fc7"
            }
          ]
        },
        "options": {}
      },
      "id": "node-switch-review",
      "name": "\u5ba1\u6838\u7ed3\u679c\u5206\u6d41",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3,
      "position": [
        1200,
        300
      ]
    },
    {
      "parameters": {
        "values": {
          "string": [
            {
              "name": "step",
              "value": "={{ String(parseInt($json.step) + 1) }}"
            },
            {
              "name": "retryCount",
              "value": "0"
            }
          ]
        },
        "options": {}
      },
      "id": "node-set-approved",
      "name": "\u901a\u8fc7-\u524d\u8fdb\u5230\u4e0b\u4e00\u6b65",
      "type": "n8n-nodes-base.set",
      "typeVersion": 2,
      "position": [
        1400,
        200
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $env.NOTIFY_WEBHOOK_URL }}",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "text",
              "value": "=\u2705 \u7b2c{{ $('\u51c6\u5907\u5f53\u524d\u6b65\u9aa4\u4fe1\u606f').first().json.step }}\u6b65\u300c{{ $('\u51c6\u5907\u5f53\u524d\u6b65\u9aa4\u4fe1\u606f').first().json.stepName }}\u300d\u5ba1\u6838\u901a\u8fc7 \u27a1\ufe0f \u8fdb\u5165\u7b2c{{ String(parseInt($('\u51c6\u5907\u5f53\u524d\u6b65\u9aa4\u4fe1\u606f').first().json.step) + 1) }}\u6b65"
            }
          ]
        },
        "options": {}
      },
      "id": "node-notify-approve",
      "name": "\u901a\u77e5\u5ba1\u6838\u901a\u8fc7",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [
        1600,
        120
      ]
    },
    {
      "parameters": {
        "jsCode": "const step = $input.first().json.step;\n\nif (step === '8') {\n  return [{ json: { done: true, step: step, message: '\u5168\u90e8\u6b65\u9aa4\u5df2\u5b8c\u6210\uff08\u542b\u68c0\u67e5\u6e05\u5355\uff09\uff0c\u9898\u76ee\u53ef\u4ee5\u63d0\u4ea4' } }];\n}\n\nreturn [{ json: { done: false, step: step } }];"
      },
      "id": "node-check-done",
      "name": "\u68c0\u67e5\u662f\u5426\u5168\u90e8\u5b8c\u6210",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1600,
        280
      ]
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict"
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.done }}",
                    "rightValue": true,
                    "operator": {
                      "type": "boolean",
                      "operation": "equals"
                    }
                  }
                ]
              },
              "renameOutput": true,
              "outputKeyName": "\u5df2\u5b8c\u6210"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict"
                },
                "conditions": []
              },
              "renameOutput": true,
              "outputKeyName": "\u672a\u5b8c\u6210"
            }
          ]
        },
        "options": {}
      },
      "id": "node-switch-final",
      "name": "\u5168\u90e8\u5b8c\u6210\u68c0\u67e5",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3,
      "position": [
        1800,
        280
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $env.NOTIFY_WEBHOOK_URL }}",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "text",
              "value": "=\ud83c\udf89 **\u4fe1\u606f\u63d0\u53d6\u9898\u76ee\u51fa\u9898\u5b8c\u6210\uff01**\n\n\u6240\u6709\u6b65\u9aa4\uff081-6\uff09\u53ca\u63d0\u4ea4\u524d\u68c0\u67e5\u6e05\u5355\u5df2\u5168\u90e8\u901a\u8fc7\u5ba1\u6838\u3002\n\u9898\u76ee\u53ef\u4ee5\u63d0\u4ea4\u5230\u5e73\u53f0\u4e86\u3002\n\n\u6700\u7ec8\u786e\u8ba4\u9879\uff1a\n\u2022 \u9898\u76eeID / \u540d\u79f0 / \u6807\u7b7e \u2713\n\u2022 \u4efb\u52a1\u6307\u4ee4\uff08\u542b\u7edf\u4e00\u5199\u6cd5\uff09 \u2713\n\u2022 \u9644\u4ef6\u4e0a\u4f20 \u2713\n\u2022 \u6807\u51c6\u7b54\u6848 \u2713\n\u2022 \u6253\u5206\u8bf4\u660e\uff08\u542b\u53ca\u683c\u7ebf\uff09 \u2713"
            }
          ]
        },
        "options": {}
      },
      "id": "node-notify-complete",
      "name": "\u901a\u77e5\u5168\u90e8\u5b8c\u6210",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [
        2000,
        200
      ]
    },
    {
      "parameters": {
        "values": {
          "string": [
            {
              "name": "step",
              "value": "={{ $json.step }}"
            },
            {
              "name": "retryCount",
              "value": "={{ String(parseInt($json.retryCount || '0') + 1) }}"
            },
            {
              "name": "rejectReason",
              "value": "={{ $('\u89e3\u6790\u5ba1\u6838\u7ed3\u679c').first().json.comment || '\u672a\u63d0\u4f9b' }}"
            }
          ]
        },
        "options": {}
      },
      "id": "node-set-rejected",
      "name": "\u4e0d\u901a\u8fc7-\u9000\u56de\u91cd\u505a",
      "type": "n8n-nodes-base.set",
      "typeVersion": 2,
      "position": [
        1400,
        420
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $env.NOTIFY_WEBHOOK_URL }}",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "text",
              "value": "=\u274c \u7b2c{{ $json.step }}\u6b65\u300c{{ $('\u51c6\u5907\u5f53\u524d\u6b65\u9aa4\u4fe1\u606f').first().json.stepName }}\u300d\u5ba1\u6838**\u4e0d\u901a\u8fc7**\n\n\u539f\u56e0\uff1a{{ $('\u89e3\u6790\u5ba1\u6838\u7ed3\u679c').first().json.comment || '\u672a\u63d0\u4f9b' }}\n\u91cd\u8bd5\u6b21\u6570\uff1a{{ String(parseInt($json.retryCount || '0') + 1) }}/{{ $('\u521d\u59cb\u5316\u9898\u76ee\u6570\u636e').first().json.maxRetries || '3' }}\n\n\u8bf7\u6839\u636e\u539f\u56e0\u4fee\u6539\u540e\u91cd\u65b0\u63d0\u4ea4\u5ba1\u6838\u3002"
            }
          ]
        },
        "options": {}
      },
      "id": "node-notify-reject",
      "name": "\u901a\u77e5\u4e0d\u901a\u8fc7\u539f\u56e0",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [
        1600,
        420
      ]
    },
    {
      "parameters": {
        "jsCode": "const data = $input.first().json;\nconst retryCount = parseInt(data.retryCount || '0');\nconst maxRetries = parseInt($('\u521d\u59cb\u5316\u9898\u76ee\u6570\u636e').first().json.maxRetries || '3');\n\nreturn [{\n  json: {\n    step: data.step,\n    retryCount: retryCount,\n    maxRetries: maxRetries,\n    exceeded: retryCount >= maxRetries,\n    rejectReason: data.rejectReason\n  }\n}];"
      },
      "id": "node-retry-logic",
      "name": "\u5904\u7406\u91cd\u8bd5\u903b\u8f91",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        1800,
        420
      ]
    },
    {
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict"
                },
                "conditions": [
                  {
                    "leftValue": "={{ $json.exceeded }}",
                    "rightValue": true,
                    "operator": {
                      "type": "boolean",
                      "operation": "equals"
                    }
                  }
                ]
              },
              "renameOutput": true,
              "outputKeyName": "\u5df2\u8fbe\u4e0a\u9650"
            },
            {
              "conditions": {
                "options": {
                  "caseSensitive": true,
                  "leftValue": "",
                  "typeValidation": "strict"
                },
                "conditions": []
              },
              "renameOutput": true,
              "outputKeyName": "\u672a\u8fbe\u4e0a\u9650"
            }
          ]
        },
        "options": {}
      },
      "id": "node-switch-retry",
      "name": "\u91cd\u8bd5\u4e0a\u9650\u68c0\u67e5",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 3,
      "position": [
        2000,
        420
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "={{ $env.NOTIFY_WEBHOOK_URL }}",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "text",
              "value": "=\ud83d\udea8 **\u91cd\u8bd5\u6b21\u6570\u5df2\u8fbe\u4e0a\u9650\uff01**\n\n\u7b2c{{ $json.step }}\u6b65\u5df2\u91cd\u8bd5 {{ $json.retryCount }} \u6b21\uff08\u4e0a\u9650 {{ $json.maxRetries }} \u6b21\uff09\uff0c\u4ecd\u672a\u901a\u8fc7\u3002\n\u9700\u4eba\u5de5\u4ecb\u5165\u5904\u7406\u3002\n\n\u62d2\u7edd\u539f\u56e0\uff1a{{ $json.rejectReason }}"
            }
          ]
        },
        "options": {}
      },
      "id": "node-notify-max",
      "name": "\u901a\u77e5\u91cd\u8bd5\u4e0a\u9650\u544a\u8b66",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [
        2200,
        380
      ]
    },
    {
      "parameters": {
        "text": "## \u5ba1\u6838 Webhook\n\n### \u8bf7\u6c42\n```\nPOST <\u672c\u5de5\u4f5c\u6d41\u7684 Webhook URL>\nContent-Type: application/json\n\n{\n  \"step\": \"1\",\n  \"action\": \"approve\",   // \u6216 \"reject\"\n  \"comment\": \"\u5907\u6ce8\uff08\u53ef\u9009\uff09\"\n}\n```\n\n### \u54cd\u5e94\n```json\n{\"status\":\"approve\",\"step\":\"1\",\"message\":\"\u2705 \u901a\u8fc7\"}\n```\n\n### \u6b65\u9aa4\u7f16\u53f7\n1 \u9009\u5b9a\u7d20\u6750\u4e0e\u5b57\u6bb5\n2 \u5b9a\u7edf\u4e00\u5199\u6cd5\n3 \u6536\u96c6\u7d20\u6750\n4 \u5236\u4f5c\u6807\u51c6\u7b54\u6848\n5 \u5199\u9898\u76ee\u8981\u6c42\n6 \u6807\u51c6\u7b54\u6848+\u6253\u5206\u8bf4\u660e\n7 \u63d0\u4ea4\u524d\u68c0\u67e5\u6e05\u5355"
      },
      "id": "node-sticky-webhook-doc",
      "name": "Webhook \u63a5\u53e3\u8bf4\u660e",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        800,
        520
      ]
    },
    {
      "parameters": {
        "text": "## \u73af\u5883\u53d8\u91cf\n\n| \u53d8\u91cf | \u8bf4\u660e | \u793a\u4f8b |\n|------|------|------|\n| `NOTIFY_WEBHOOK_URL` | \u901a\u77e5\u6d88\u606f\u63a8\u9001\u5730\u5740 | Slack/\u4f01\u5fae/\u9489\u9489/\u98de\u4e66 Webhook URL |\n\n\u5982\u4f7f\u7528 Email \u901a\u77e5\uff0c\u5c06 HTTP Request \u8282\u70b9\u66ff\u6362\u4e3a Email Send \u8282\u70b9\u5e76\u914d\u7f6e SMTP \u51ed\u8bc1\u3002"
      },
      "id": "node-sticky-env",
      "name": "\u73af\u5883\u53d8\u91cf\u8bf4\u660e",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        0,
        550
      ]
    },
    {
      "parameters": {
        "text": "## \u9000\u56de\u91cd\u505a\u673a\u5236\n\n1. \u5ba1\u6838\u4e0d\u901a\u8fc7 \u2192 \u901a\u77e5\u539f\u56e0 \u2192 retryCount +1\n2. \u672a\u8fbe\u4e0a\u9650 \u2192 \u56de\u5230\u300c\u51c6\u5907\u5f53\u524d\u6b65\u9aa4\u4fe1\u606f\u300d\u2192 \u540c\u4e00\u6b65\u91cd\u505a\n3. \u8fbe\u5230\u4e0a\u9650\uff08\u9ed8\u8ba43\u6b21\uff09\u2192 \u53d1\u544a\u8b66 \u2192 \u6d41\u7a0b\u7ec8\u6b62\n\n\u26a0\ufe0f n8n \u4e0d\u652f\u6301\u539f\u751f\u5faa\u73af\u8fb9\u3002\u5bfc\u5165\u540e\u8bf7\u786e\u8ba4\uff1a\n\u300c\u672a\u8fbe\u4e0a\u9650\u300d\u2192\u300c\u51c6\u5907\u5f53\u524d\u6b65\u9aa4\u4fe1\u606f\u300d\u7684\u8fde\u7ebf\u6709\u6548\u3002\n\u5982\u65ad\u88c2\uff0c\u624b\u52a8\u4ece\u300c\u91cd\u8bd5\u4e0a\u9650\u68c0\u67e5\u300d\u7684\u300c\u672a\u8fbe\u4e0a\u9650\u300d\u8f93\u51fa\n\u62d6\u7ebf\u8fde\u5230\u300c\u51c6\u5907\u5f53\u524d\u6b65\u9aa4\u4fe1\u606f\u300d\u7684\u8f93\u5165\u3002"
      },
      "id": "node-sticky-loop",
      "name": "\u9000\u56de\u91cd\u505a\u673a\u5236",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        2000,
        560
      ]
    }
  ],
  "connections": {
    "\u5f00\u59cb\u51fa\u9898": {
      "main": [
        [
          {
            "node": "\u521d\u59cb\u5316\u9898\u76ee\u6570\u636e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u521d\u59cb\u5316\u9898\u76ee\u6570\u636e": {
      "main": [
        [
          {
            "node": "\u51c6\u5907\u5f53\u524d\u6b65\u9aa4\u4fe1\u606f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u51c6\u5907\u5f53\u524d\u6b65\u9aa4\u4fe1\u606f": {
      "main": [
        [
          {
            "node": "\u7b49\u5f85\u4eba\u5de5\u5ba1\u6838",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u7b49\u5f85\u4eba\u5de5\u5ba1\u6838": {
      "main": [
        [
          {
            "node": "\u89e3\u6790\u5ba1\u6838\u7ed3\u679c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u89e3\u6790\u5ba1\u6838\u7ed3\u679c": {
      "main": [
        [
          {
            "node": "\u5ba1\u6838\u7ed3\u679c\u5206\u6d41",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u5ba1\u6838\u7ed3\u679c\u5206\u6d41": {
      "main": [
        [
          {
            "node": "\u901a\u8fc7-\u524d\u8fdb\u5230\u4e0b\u4e00\u6b65",
            "type": "main",
            "index": 0
          },
          {
            "node": "\u8fd4\u56de\u5ba1\u6838\u7ed3\u679c",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\u4e0d\u901a\u8fc7-\u9000\u56de\u91cd\u505a",
            "type": "main",
            "index": 0
          },
          {
            "node": "\u8fd4\u56de\u5ba1\u6838\u7ed3\u679c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u901a\u8fc7-\u524d\u8fdb\u5230\u4e0b\u4e00\u6b65": {
      "main": [
        [
          {
            "node": "\u901a\u77e5\u5ba1\u6838\u901a\u8fc7",
            "type": "main",
            "index": 0
          },
          {
            "node": "\u68c0\u67e5\u662f\u5426\u5168\u90e8\u5b8c\u6210",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u68c0\u67e5\u662f\u5426\u5168\u90e8\u5b8c\u6210": {
      "main": [
        [
          {
            "node": "\u5168\u90e8\u5b8c\u6210\u68c0\u67e5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u5168\u90e8\u5b8c\u6210\u68c0\u67e5": {
      "main": [
        [
          {
            "node": "\u901a\u77e5\u5168\u90e8\u5b8c\u6210",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\u51c6\u5907\u5f53\u524d\u6b65\u9aa4\u4fe1\u606f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u4e0d\u901a\u8fc7-\u9000\u56de\u91cd\u505a": {
      "main": [
        [
          {
            "node": "\u901a\u77e5\u4e0d\u901a\u8fc7\u539f\u56e0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u901a\u77e5\u4e0d\u901a\u8fc7\u539f\u56e0": {
      "main": [
        [
          {
            "node": "\u5904\u7406\u91cd\u8bd5\u903b\u8f91",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u5904\u7406\u91cd\u8bd5\u903b\u8f91": {
      "main": [
        [
          {
            "node": "\u91cd\u8bd5\u4e0a\u9650\u68c0\u67e5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u91cd\u8bd5\u4e0a\u9650\u68c0\u67e5": {
      "main": [
        [
          {
            "node": "\u901a\u77e5\u91cd\u8bd5\u4e0a\u9650\u544a\u8b66",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "\u51c6\u5907\u5f53\u524d\u6b65\u9aa4\u4fe1\u606f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "callerPolicy": "workflowsFromSameOwner",
    "executionOrder": "v1",
    "saveDataErrorExecution": "all",
    "saveDataSuccessExecution": "all",
    "saveManualExecutions": true,
    "timezone": "Asia/Shanghai"
  },
  "staticData": null,
  "versionId": "1.0.0"
}
Pro

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

About this workflow

信息提取题目出题工作流. Uses httpRequest. Event-driven trigger; 22 nodes.

Source: https://github.com/00103-a/workflow-builder-skill/blob/03ba81580b39e7d4912ea6d6ae88041d9e6b1225/examples/info-extraction-workflow.json — original creator credit. Request a take-down →

More Web Scraping workflows → · Browse all categories →

Related workflows

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

Web Scraping

This workflow allows you to import any workflow from a file or another n8n instance and map the credentials easily. A multi-form setup guides you through the entire process At the beginning you have t

Execute Command, Read Write File, HTTP Request +3
Web Scraping

[n8n] Advanced URL Parsing and Shortening Workflow - Switchy.io Integration. Uses splitInBatches, stickyNote, httpRequest, html. Event-driven trigger; 56 nodes.

HTTP Request, GitHub, Stop And Error +1
Web Scraping

[](https://youtu.be/c7yCZhmMjtI)

HTTP Request, GitHub, Stop And Error +1
Web Scraping

This automation organizes your n8n workflows files into categorizes (Active, Template, Done, Archived) and uploads them directly to a categorized Google Drive folders. It is designed to help users man

Google Drive, HTTP Request, Time Saved
Web Scraping

Create Animated Stories using GPT-4o-mini, Midjourney, Kling and Creatomate API. Uses httpRequest. Event-driven trigger; 51 nodes.

HTTP Request