{
  "name": "\u62db\u8058\u4fe1\u606f\u805a\u5408Bot",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 12
            }
          ]
        }
      },
      "id": "e25ccbcc-98e9-4416-b6c7-1230be66c456",
      "name": "\u5b9a\u65f6\u89e6\u53d1\uff08\u6bcf12\u5c0f\u65f6\uff09",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -448,
        16
      ],
      "typeVersion": 1.3
    },
    {
      "parameters": {
        "method": "=POST",
        "url": "=http://browserless:3000/content",
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n  \"url\": \"{{ $('vars').item.json.COMPANY_JOBS_URL }}\",\n  \"waitFor\": 3000,\n  \"gotoOptions\": {\n    \"waitUntil\": \"networkidle2\"\n  }\n}",
        "options": {
          "timeout": 30000
        }
      },
      "id": "0cfa51a1-ef78-4dce-9f09-ad4b42687495",
      "name": "\u4f01\u4e1a\u5b98\u7f51\u722c\u53d6",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -32,
        224
      ],
      "typeVersion": 4.4,
      "notes": "\u5728 Variables \u4e2d\u8bbe\u7f6e COMPANY_JOBS_URL \u4e3a\u76ee\u6807\u4f01\u4e1a\u62db\u8058\u9875URL\n\u4f8b\u5982\uff1ahttps://careers.example.com/jobs"
    },
    {
      "parameters": {
        "url": "={{ $('vars').item.json.UNIVERSITY_JOBS_URL }}",
        "options": {
          "timeout": 30000
        }
      },
      "id": "a06c9311-1426-410f-a581-7a3b2d1280a4",
      "name": "\u9ad8\u6821\u5c31\u4e1a\u7f51\u722c\u53d6",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -32,
        400
      ],
      "typeVersion": 4.4,
      "notes": "\u5728 Variables \u4e2d\u8bbe\u7f6e UNIVERSITY_JOBS_URL\n\u4f8b\u5982\uff1ahttps://career.university.edu.cn/jobs"
    },
    {
      "parameters": {
        "extractionValues": {
          "values": [
            {
              "key": "title",
              "cssSelector": "=.post_list"
            }
          ]
        },
        "options": {}
      },
      "id": "588be3bb-90dd-42f9-8c9d-380c0c8e0320",
      "name": "HTML\u5b57\u6bb5\u63d0\u53d6",
      "type": "n8n-nodes-base.htmlExtract",
      "position": [
        176,
        304
      ],
      "typeVersion": 1,
      "notes": "\u26a0\ufe0f CSS\u9009\u62e9\u5668\u9700\u8981\u6839\u636e\u76ee\u6807\u7f51\u7ad9\u5b9e\u9645\u7ed3\u6784\u8c03\u6574\n\u5efa\u8bae\uff1a\u5148\u7528\u6d4f\u89c8\u5668\u5f00\u53d1\u8005\u5de5\u5177\u627e\u5230\u6b63\u786e\u7684\u9009\u62e9\u5668"
    },
    {
      "parameters": {
        "mode": "combine",
        "fieldsToMatchString": "title",
        "joinMode": "keepEverything",
        "options": {}
      },
      "id": "96369b98-a68e-4c5d-b3e6-f6ea46133075",
      "name": "\u5408\u5e76\u6240\u6709\u6765\u6e90",
      "type": "n8n-nodes-base.merge",
      "position": [
        176,
        160
      ],
      "typeVersion": 3.2
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 3
          },
          "conditions": [
            {
              "leftValue": "={{ $json.title }}",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "isNotEmpty"
              },
              "id": "50625082-6568-4d9e-b6af-987cfef1f475"
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "bf28853e-cb55-448a-9669-e6d5fadfa833",
      "name": "\u8fc7\u6ee4\u7a7a\u6570\u636e",
      "type": "n8n-nodes-base.filter",
      "position": [
        368,
        160
      ],
      "typeVersion": 2.3,
      "alwaysOutputData": false,
      "disabled": true
    },
    {
      "parameters": {
        "options": {}
      },
      "id": "cbdf45ab-56d2-44df-acd1-574f7cac5a6e",
      "name": "\u53bb\u91cd\uff08\u6309\u6807\u9898+\u94fe\u63a5\uff09",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        560,
        160
      ],
      "typeVersion": 2
    },
    {
      "parameters": {
        "batchSize": 10,
        "options": {}
      },
      "id": "55f84c03-2790-4a05-931c-5c1e8923303d",
      "name": "\u5206\u6279\u5904\u7406\uff08\u6bcf\u627910\u6761\uff09",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        736,
        224
      ],
      "typeVersion": 3,
      "notes": "\u63a7\u5236\u6bcf\u6b21AI\u8bf7\u6c42\u7684\u6570\u636e\u91cf\uff0c\u907f\u514dtoken\u8d85\u9650"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.deepseek.com/v1/chat/completions",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "httpHeaderAuth",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "contentType": "raw",
        "rawContentType": "=application/json",
        "body": "={{ $json.body }}",
        "options": {}
      },
      "id": "34474d02-f2ac-4ff3-9251-1e29076b20a1",
      "name": "DeepSeek AI\u63d0\u70bc",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        912,
        160
      ],
      "typeVersion": 4.4,
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "notes": "\u8c03\u7528DeepSeek API\u63d0\u70bc\u5173\u952e\u5b57\u6bb5\n\u9700\u8981\u5728Credentials\u4e2d\u521b\u5efa HTTP Header Auth\uff0cKey\u586bAuthorization\uff0cValue\u586b Bearer sk-\u4f60\u7684key"
    },
    {
      "parameters": {
        "jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n  item.json.myNewField = 1;\n}\n\nreturn $input.all();"
      },
      "id": "04cdd993-5797-4da8-82c6-8f1a0e4622eb",
      "name": "\u683c\u5f0f\u5316Telegram\u6d88\u606f",
      "type": "n8n-nodes-base.code",
      "position": [
        1104,
        160
      ],
      "typeVersion": 2
    },
    {
      "parameters": {
        "chatId": "={{ $json.TELEGRAM_CHAT_ID }}",
        "text": "={{ $json.choices[0].message.content }}",
        "additionalFields": {
          "disable_web_page_preview": true,
          "parse_mode": "Markdown"
        }
      },
      "id": "fc4b6044-72f1-46a8-b65e-25daab6fa24e",
      "name": "Telegram\u53d1\u9001",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1408,
        144
      ],
      "typeVersion": 1.2,
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "notes": "\u9700\u8981\u5728Credentials\u4e2d\u914d\u7f6eTelegram Bot API Token\n\u5728Variables\u4e2d\u8bbe\u7f6e TELEGRAM_CHAT_ID\uff08\u4f60\u7684Chat ID\uff09"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "ebae294f-c1d6-4264-bd5a-5125220ba333",
              "name": "COMPANY_JOBS_URL",
              "value": "https://join.qq.com/post.html?query=p_1",
              "type": "string"
            },
            {
              "id": "975ef74e-6d8d-423c-8f2a-9335aaaadfa7",
              "name": "UNIVERSITY_JOBS_URL",
              "value": "https://job.tju.edu.cn/",
              "type": "string"
            },
            {
              "id": "1526e25f-b8f5-4e52-86d9-87c5b65dac5a",
              "name": "WECHAT_MP_ID_1",
              "value": "sogou_vr_11002601_title_0",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        -224,
        304
      ],
      "id": "615b2759-7337-4862-a91a-3dd399b32d27",
      "name": "vars"
    },
    {
      "parameters": {
        "jsCode": "const items = $input.all();\n\nconst jobList = items.map(item => ({\n  title: item.json.title,\n  link: item.json.link,\n  deadline: item.json.deadline,\n  requirements: item.json.requirements,\n  type: item.json.type,\n  source: item.json.source\n}));\n\nconst body = {\n  model: \"deepseek-chat\",\n  max_tokens: 2000,\n  messages: [\n    {\n      role: \"system\",\n      content: \"\u4f60\u662f\u4e00\u4e2a\u62db\u8058\u4fe1\u606f\u63d0\u70bc\u52a9\u624b\u3002\u7528\u6237\u4f1a\u7ed9\u4f60\u4e00\u6279\u62db\u8058\u4fe1\u606f\u539f\u59cb\u6570\u636e\uff0c\u4f60\u9700\u8981\u63d0\u70bc\u6210\u7ed3\u6784\u5316JSON\u6570\u7ec4\u3002\\n\u6bcf\u6761\u8bb0\u5f55\u5305\u542b\uff1a\\n- title: \u5c97\u4f4d\u540d\u79f0\\n- link: \u7533\u8bf7\u94fe\u63a5\\n- deadline: \u622a\u6b62\u65e5\u671f\uff08\u683c\u5f0fYYYY-MM-DD\uff0c\u65e0\u6cd5\u8bc6\u522b\u5219\u586bnull\uff09\\n- education: \u5b66\u5386\u8981\u6c42\uff08\u65e0\u5219\u586bnull\uff09\\n- major: \u4e13\u4e1a\u8981\u6c42\uff08\u65e0\u5219\u586bnull\uff09\\n- type: \u7c7b\u578b\uff08\u6821\u62db/\u5b9e\u4e60/\u793e\u62db\uff09\\n- source: \u6765\u6e90\\n\\n\u53ea\u8f93\u51faJSON\u6570\u7ec4\uff0c\u4e0d\u8981\u4efb\u4f55\u89e3\u91ca\u6587\u5b57\u3002\"\n    },\n    {\n      role: \"user\",\n      content: \"\u8bf7\u63d0\u70bc\u4ee5\u4e0b\u62db\u8058\u4fe1\u606f\uff1a\\n\" + JSON.stringify(jobList)\n    }\n  ]\n};\n\nreturn [{ json: { body: JSON.stringify(body) } }];"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [
        736,
        96
      ],
      "id": "9e1e9cb7-e204-41dd-abc2-a312a8840c3a",
      "name": "Code in JavaScript"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "bee8ad8e-e2ab-490a-9bb4-03de03729e49",
              "name": "TELEGRAM_CHAT_ID",
              "value": 7054214273,
              "type": "number"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1104,
        16
      ],
      "id": "e79b9a3b-6a0e-4ac4-9bd8-a3885319d908",
      "name": "vars2"
    },
    {
      "parameters": {
        "mode": "combine",
        "combineBy": "combineAll",
        "options": {}
      },
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [
        1264,
        144
      ],
      "id": "ad1e3e24-0712-4ebb-b9d1-a4217cf7413b",
      "name": "Merge"
    }
  ],
  "connections": {
    "\u5b9a\u65f6\u89e6\u53d1\uff08\u6bcf12\u5c0f\u65f6\uff09": {
      "main": [
        [
          {
            "node": "vars2",
            "type": "main",
            "index": 0
          },
          {
            "node": "vars",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u4f01\u4e1a\u5b98\u7f51\u722c\u53d6": {
      "main": [
        [
          {
            "node": "HTML\u5b57\u6bb5\u63d0\u53d6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u9ad8\u6821\u5c31\u4e1a\u7f51\u722c\u53d6": {
      "main": [
        [
          {
            "node": "HTML\u5b57\u6bb5\u63d0\u53d6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML\u5b57\u6bb5\u63d0\u53d6": {
      "main": [
        [
          {
            "node": "\u5408\u5e76\u6240\u6709\u6765\u6e90",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "\u5408\u5e76\u6240\u6709\u6765\u6e90": {
      "main": [
        [
          {
            "node": "\u8fc7\u6ee4\u7a7a\u6570\u636e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u8fc7\u6ee4\u7a7a\u6570\u636e": {
      "main": [
        [
          {
            "node": "\u53bb\u91cd\uff08\u6309\u6807\u9898+\u94fe\u63a5\uff09",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u53bb\u91cd\uff08\u6309\u6807\u9898+\u94fe\u63a5\uff09": {
      "main": [
        [
          {
            "node": "\u5206\u6279\u5904\u7406\uff08\u6bcf\u627910\u6761\uff09",
            "type": "main",
            "index": 0
          },
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u5206\u6279\u5904\u7406\uff08\u6bcf\u627910\u6761\uff09": {
      "main": [
        [
          {
            "node": "DeepSeek AI\u63d0\u70bc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "DeepSeek AI\u63d0\u70bc": {
      "main": [
        [
          {
            "node": "\u683c\u5f0f\u5316Telegram\u6d88\u606f",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "\u683c\u5f0f\u5316Telegram\u6d88\u606f": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "vars": {
      "main": [
        [
          {
            "node": "\u4f01\u4e1a\u5b98\u7f51\u722c\u53d6",
            "type": "main",
            "index": 0
          },
          {
            "node": "\u9ad8\u6821\u5c31\u4e1a\u7f51\u722c\u53d6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript": {
      "main": [
        [
          {
            "node": "DeepSeek AI\u63d0\u70bc",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "vars2": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Telegram\u53d1\u9001",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate",
    "availableInMCP": false
  },
  "versionId": "2bedfca9-5bc6-4560-a3fe-423678745818",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "qhduwVhE8Zm5XndV",
  "tags": []
}