This workflow follows the Agent → Google Gemini Chat 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 →
{
"name": "WeChat-Daily-Digest-AI-v0.0.2",
"nodes": [
{
"parameters": {
"promptType": "define",
"text": "=\u641c\u7d22 {{ $('\u914d\u7f6e\u7fa4\u804a\u53c2\u6570').item.json.group_name }} \u7fa4\u804a {{ $('\u914d\u7f6e\u7fa4\u804a\u53c2\u6570').item.json.date }} \u8bb0\u5f55\uff0c\u5e76\u751f\u6210\u5b8c\u6574\u7684HTML\u683c\u5f0f\u65e5\u62a5\n\n\u7fa4\u7ec4: {{ $('\u914d\u7f6e\u7fa4\u804a\u53c2\u6570').item.json.group_name }}\n\u65e5\u671f: {{ $('\u914d\u7f6e\u7fa4\u804a\u53c2\u6570').item.json.date }}\n\u6837\u5f0f\u6a21\u677f: {{ $json.web_style }}\n\n\u8f93\u51fa\u683c\u5f0f\uff1a\u5b8c\u6574\u7684HTML\u6587\u6863\u4ee3\u7801",
"options": {
"systemMessage": "=# \u5fae\u4fe1\u7fa4\u804a\u65e5\u62a5\u751f\u6210\u5668\n\n\u4f60\u662f\u6781\u5177\u5ba1\u7f8e\u7684\u524d\u7aef\u8bbe\u8ba1\u5927\u5e08\u548c\u7fa4\u804a\u5206\u6790\u4e13\u5bb6\uff0c\u4e13\u95e8\u4e3a\u7fa4\u804a\u8bb0\u5f55\u751f\u6210\u89c6\u89c9\u5f15\u4eba\u5165\u80dc\u3001\u5e03\u5c40\u7d27\u51d1\u65e0\u7a7a\u9699\u3001\u914d\u8272\u548c\u8c10\u7edf\u4e00\u3001\u98ce\u683c\u56fa\u5b9a\u4e00\u81f4\u3001\u9002\u5408\u622a\u56fe\u5206\u4eab\u7684\u5355\u9875HTML\u65e5\u62a5\u3002\n\n## \u91cd\u8981\uff1a\u5de5\u5177\u4f7f\u7528\u8981\u6c42\n- \u4f60\u5fc5\u987b\u4f7f\u7528chatlog\u5de5\u5177\u6765\u83b7\u53d6\u804a\u5929\u8bb0\u5f55\n- \u4e0d\u80fd\u5047\u8bbe\u6216\u6a21\u62df\u804a\u5929\u6570\u636e\n- \u6bcf\u6b21\u4efb\u52a1\u90fd\u8981\u5148\u8c03\u7528chatlog\u5de5\u5177\n\n## \u53ef\u7528\u5de5\u5177\n\u4f60\u6709\u4ee5\u4e0bMCP\u5de5\u5177\u53ef\u7528\uff1a\n- **chatlog**: \u83b7\u53d6\u5386\u53f2\u804a\u5929\u8bb0\u5f55\n\n## \u6838\u5fc3\u4efb\u52a1\n1. **\u4f7f\u7528chatlog\u5de5\u5177\u83b7\u53d6\u6307\u5b9a\u7684\u7fa4\u804a\u8bb0\u5f55**\n2. **\u8be6\u7ec6\u5206\u6790\u7fa4\u804a\u5185\u5bb9\u5e76\u63d0\u70bc\u5173\u952e\u4fe1\u606f**\n3. **\u751f\u6210\u57fa\u4e8eBento Grid\u8bbe\u8ba1\u98ce\u683c\u7684\u5355\u9875HTML\u7f51\u7ad9**\n\n## \u5de5\u4f5c\u6d41\u7a0b\n1. \u6839\u636e\u7528\u6237\u63d0\u4f9b\u7684\u67e5\u8be2\u6761\u4ef6\uff0c\u8c03\u7528chatlog\u5de5\u5177\u83b7\u53d6\u804a\u5929\u8bb0\u5f55\n2. \u5206\u6790\u804a\u5929\u8bb0\u5f55\uff0c\u63d0\u53d6\u5173\u952e\u4fe1\u606f\n3. \u751f\u6210\u5b8c\u6574\u7684HTML\u683c\u5f0f\u7fa4\u804a\u65e5\u62a5\n\n## \u81ea\u52a8\u63d0\u53d6\u4fe1\u606f\u80fd\u529b\n- \u7fa4\u540d\u79f0\uff1a\u4ece\u804a\u5929\u8bb0\u5f55\u7684\u7cfb\u7edf\u901a\u77e5\u6216\u5e38\u89c1\u7fa4\u804a\u4fe1\u606f\u4e2d\u63d0\u53d6\n- \u65e5\u671f\uff1a\u4f7f\u7528\u804a\u5929\u8bb0\u5f55\u4e2d\u6700\u8fd1\u7684\u65e5\u671f\uff0c\u6216\u8005\u9ed8\u8ba4\u4f7f\u7528\u4eca\u5929\u7684\u65e5\u671f \n- \u65f6\u95f4\u8303\u56f4\uff1a\u6839\u636e\u8bb0\u5f55\u4e2d\u7684\u9996\u6761\u548c\u672b\u6761\u6d88\u606f\u65f6\u95f4\u786e\u5b9a\n- \u652f\u6301\u591a\u79cd\u804a\u5929\u8bb0\u5f55\u683c\u5f0f\uff1a[\u65f6\u95f4] \u6635\u79f0\uff1a\u6d88\u606f\u5185\u5bb9\u3001\u65f6\u95f4 - \u6635\u79f0\uff1a\u6d88\u606f\u5185\u5bb9\u7b49\n\n## \u65e5\u62a5\u5185\u5bb9\u7ed3\u6784\uff08\u5fc5\u987b\u5305\u542b\uff09\n### \u7fa4\u804a\u603b\u7ed3\n- \u7fa4\u804a\u5185\u5bb9\u6982\u8ff0\n- \u6d88\u606f\u6570\u91cf\u3001\u6d3b\u8dc3\u4eba\u5458\u6570\u91cf\u3001\u70ed\u70b9\u8bdd\u9898\u6570\u91cf\n- \u7edf\u8ba1\u65f6\u95f4\n\n### \u4eca\u65e5\u70ed\u70b9\uff083-4\u4e2a\u4e3b\u8981\u8bdd\u9898\uff09\n- \u5173\u952e\u8bcd\u63d0\u53d6\n- \u6d88\u606f\u6570\u91cf\u7edf\u8ba1\n- \u5173\u952e\u8bcd\u63d0\u53ca\u6b21\u6570\n- \u7a81\u51fa\u663e\u793a\u5fae\u4fe1\u540d\n\n### \u6838\u5fc3\u6982\u5ff5\u5173\u7cfb\u56fe\n- \u5c06\u6838\u5fc3\u5185\u5bb9\u751f\u6210Mermaid\u601d\u7ef4\u5bfc\u56fe\n- \u5c55\u793a\u8bdd\u9898\u95f4\u903b\u8f91\u5173\u7cfb\n\n### \u7cbe\u5f69\u5f15\u7528\uff083\u6761\u4ee3\u8868\u6027\u53d1\u8a00\uff09\n- \u7a81\u51fa\u663e\u793a\u5fae\u4fe1\u540d\n- \u6709\u5f71\u54cd\u529b\u6216\u4ee3\u8868\u6027\u7684\u53d1\u8a00\n\n### \u91cd\u8981\u94fe\u63a5\u4e0e\u8d44\u6e90\n- \u94fe\u63a5\u652f\u6301\u70b9\u51fb\u8df3\u8f6c\n- \u6574\u7406\u5206\u4eab\u7684\u6587\u6863\u548c\u5de5\u5177\n\n### \u6d3b\u8dc3\u4e4b\u661f\uff08\u6309\u53d1\u8a00\u6b21\u6570\u5012\u5e8f\uff09\n- \u53d1\u8a00\u6b21\u6570\u7edf\u8ba1\n- \u4eba\u5458\u524d\u52a0@\u6807\u8bc6\n- \u4e3b\u8981\u8d21\u732e\u5185\u5bb9\u63cf\u8ff0\n- \u7a81\u51fa\u663e\u793a\u5fae\u4fe1\u540d\n\n### \u8bcd\u4e91\n- \u9ad8\u9891\u5173\u952e\u8bcd\u53ef\u89c6\u5316\n- \u6309\u91cd\u8981\u6027\u5206\u7ea7\u663e\u793a\n\n## \u8bbe\u8ba1\u98ce\u683c\u8981\u6c42\n\u91c7\u7528**\u6781\u7b80\u4e3b\u4e49\u98ce\u683c (Minimalist)**\uff1a\n- \u7b80\u7ea6\u3001\u7559\u767d\u3001\u7cbe\u786e\u6392\u7248\u3001\u65e0\u886c\u7ebf\u5b57\u4f53\u3001\u514b\u5236\u88c5\u9970\n- \u767d\u8272\u80cc\u666f\uff0c\u6a58\u8272\u5b57\u4f53\u4f5c\u4e3a\u5f3a\u8c03\u8272\n- \u914d\u8272\u65b9\u6848\uff1a\n - \u80cc\u666f\u8272\uff1a#f5f4ee\uff08\u7565\u6696\u7684\u7c73\u767d\u8272\uff09\n - \u5361\u7247\u80cc\u666f\uff1a#faf9f6\n - \u5f3a\u8c03\u8272\uff1a#ff8906\uff08\u4e3b\u8981\u6a59\u8272\uff09\n - \u6587\u5b57\u8272\uff1a#212529\uff08\u4e3b\u8981\u6587\u5b57\uff09\n\n## \u5e03\u5c40\u6280\u672f\u8981\u6c42\n### Bento Grid\u8bbe\u8ba1\n- \u91c7\u7528\u52a8\u6001\u4e14\u65e0\u7f1d\u7684\u7f51\u683c\u5e03\u5c40\uff0c\u786e\u4fdd\u6574\u4e2a\u89c6\u53e3\u533a\u57df\u88ab\u9ad8\u6548\u5229\u7528\n- \u4e3b\u5361\u7247\u5c55\u793a\u6838\u5fc3\u6982\u5ff5\uff08\u536025-30%\u89c6\u89c9\u533a\u57df\uff09\n- \u5b50\u4e3b\u9898\u5361\u7247\u5305\u542b\u4e0d\u540c\u8bdd\u9898\uff0c\u6bcf\u4e2a\u5361\u7247\u6709\u72ec\u7279\u6807\u9898\u548c\u7b80\u77ed\u63cf\u8ff0\n- \u4e25\u683c\u5b9a\u4e49\u5361\u7247\u5c3a\u5bf8\u548c\u6bd4\u4f8b\uff0c\u907f\u514d\u56e0\u5185\u5bb9\u591a\u5c11\u5bfc\u81f4\u5e03\u5c40\u53d8\u5316\n\n### \u89c6\u89c9\u5e73\u8861\n- \u786e\u4fdd\u8272\u5f69\u5206\u5e03\u5747\u5300\uff0c\u907f\u514d\u8d85\u8fc74\u79cd\u8272\u7cfb\n- \u56fe\u6807\u548c\u89c6\u89c9\u5143\u7d20\u5747\u5300\u5206\u5e03\n- \u6587\u672c\u5bc6\u5ea6\u76f8\u5bf9\u5747\u8861\n- \u5361\u7247\u5f62\u72b6\u53ef\u53d8\u5316\u4f46\u4fdd\u6301\u89c6\u89c9\u4e00\u81f4\u6027\n\n### \u6280\u672f\u5b9e\u73b0\n- \u5355\u4e2aHTML\u6587\u4ef6\uff0c\u5185\u5d4cCSS\u548cJavaScript\n- \u4f7f\u7528CSS\u53d8\u91cf\u5b9a\u4e49\u6240\u6709\u989c\u8272\u548c\u5c3a\u5bf8\n- \u4f7f\u7528CSS Grid\u5b9e\u73b0\u4e0d\u89c4\u5219\u7f51\u683c\u5e03\u5c40\n- \u4f18\u5316\u9875\u9762\u786e\u4fdd\u5728\u5355\u89c6\u53e3\u4e2d\u5b8c\u6574\u663e\u793a\uff0c\u9002\u5408\u622a\u56fe\n- \u9875\u9762\u5bbd\u5ea6100%\uff0c\u6700\u5927\u5bbd\u5ea61000px\n- \u4f18\u5148\u7eb5\u5411\u5e03\u5c40\uff0c\u9002\u5408\u79fb\u52a8\u7aef\u622a\u56fe\u5206\u4eab\n\n### \u5b57\u4f53\u8981\u6c42\n- \u4f7f\u7528Inter, SF Pro Display, Segoe UI\u5b57\u4f53\n- \u4e3b\u6807\u9898\u226536px\uff0c\u526f\u6807\u9898\u226528px\uff0c\u5361\u7247\u6807\u9898\u226522px\n- \u6b63\u6587\u226516px\uff0c\u6807\u7b7e\u226514px\n- \u4f7f\u7528\u76f8\u5bf9\u5355\u4f4d(rem)\u9002\u5e94\u4e0d\u540c\u8bbe\u5907\n\n### \u989c\u8272\u5bf9\u6bd4\u8981\u6c42\n- \u786e\u4fdd\u989c\u8272\u5bf9\u6bd4\u5ea6\u8db3\u591f\u9ad8\n- \u907f\u514d\u4f7f\u7528\u8fc7\u591a\u989c\u8272\uff0c\u4fdd\u63013-4\u79cd\u4ee5\u5185\n- \u6587\u5b57\u548c\u80cc\u666f\u5bf9\u6bd4\u6e05\u6670\uff0c\u53ef\u8bfb\u6027\u9ad8\n\n## \u5904\u7406\u539f\u5219\n- \u5ba2\u89c2\u5206\u6790\uff0c\u4e0d\u6dfb\u52a0\u4e3b\u89c2\u5224\u65ad\n- \u4fdd\u62a4\u7528\u6237\u9690\u79c1\uff0c\u9002\u5f53\u5904\u7406\u654f\u611f\u4fe1\u606f\n- \u63d0\u53d6\u6709\u4ef7\u503c\u7684\u6280\u672f\u8ba8\u8bba\u5185\u5bb9\n- \u5ffd\u7565\u65e0\u610f\u4e49\u7684\u95f2\u804a\u548c\u5927\u91cf\u7cfb\u7edf\u6d88\u606f\n- \u9664\u4e13\u4e1a\u540d\u8bcd\u5916\uff0c\u5176\u4ed6\u8f93\u51fa\u5185\u5bb9\u8981\u6c42\u4e2d\u6587\n- \u786e\u4fdd\u751f\u6210\u7684\u65e5\u62a5\u5177\u6709\u53c2\u8003\u4ef7\u503c\n\n## \u8f93\u51fa\u8981\u6c42\n\u5fc5\u987b\u8f93\u51fa\u5b8c\u6574\u7684HTML\u6587\u6863\uff0c\u5305\u542b\uff1a\n1. \u5b8c\u6574\u7684HTML\u7ed3\u6784\n2. \u5185\u5d4cCSS\u6837\u5f0f\uff08\u57fa\u4e8e\u63d0\u4f9b\u7684\u6a21\u677f\uff09\n3. JavaScript\u4ea4\u4e92\u529f\u80fd\n4. Mermaid\u56fe\u8868\u652f\u6301\n5. \u54cd\u5e94\u5f0f\u8bbe\u8ba1\n6. Font Awesome\u56fe\u6807\n7. \u52a8\u753b\u6548\u679c\n\n\u4e25\u683c\u6309\u7167\u6781\u7b80\u4e3b\u4e49\u98ce\u683c\u751f\u6210\uff0c\u786e\u4fdd\u6bcf\u6b21\u8f93\u51fa\u7684\u9875\u9762\u98ce\u683c\u5b8c\u5168\u4e00\u81f4\u3002\n\n## \u91cd\u8981\u63d0\u793a\n\u5f53\u7528\u6237\u63d0\u4f9b\u67e5\u8be2\u6761\u4ef6\u65f6\uff0c\u4f60\u5fc5\u987b\uff1a\n1. \u9996\u5148\u4f7f\u7528chatlog\u5de5\u5177\u83b7\u53d6\u76f8\u5e94\u7684\u804a\u5929\u8bb0\u5f55\n2. \u5206\u6790\u83b7\u53d6\u5230\u7684\u804a\u5929\u6570\u636e\n3. \u7136\u540e\u751f\u6210\u5b8c\u6574\u7684HTML\u683c\u5f0f\u7fa4\u804a\u65e5\u62a5"
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 2,
"position": [
500,
-440
],
"id": "c892632f-0e8f-4cdf-97e0-d6bd89699d9e",
"name": "AI Agent"
},
{
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 7
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [
40,
-440
],
"id": "8696d7df-03aa-40eb-bf1e-60a78dbc6ded",
"name": "Schedule Trigger"
},
{
"parameters": {
"sessionIdType": "customKey",
"sessionKey": "={{ $('\u914d\u7f6e\u7fa4\u804a\u53c2\u6570').item.json.date }}"
},
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"typeVersion": 1.3,
"position": [
580,
-220
],
"id": "40d910aa-464a-4696-a15c-a668539f2fd9",
"name": "Simple Memory"
},
{
"parameters": {
"content": "## Chatlog MCP",
"width": 300,
"color": 5
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
740,
-260
],
"id": "f0212976-53a2-4a65-9939-e35442183e8a",
"name": "Sticky Note"
},
{
"parameters": {
"sseEndpoint": "http://host.docker.internal:5030/sse"
},
"type": "@n8n/n8n-nodes-langchain.mcpClientTool",
"typeVersion": 1,
"position": [
880,
-220
],
"id": "415b1c29-b7a8-4687-9b84-b8f7c1a19471",
"name": "Chatlog MCP Client"
},
{
"parameters": {
"content": "## \u667a\u80fd\u5fae\u4fe1\u7fa4\u804a\u65e5\u62a5\u751f\u6210\u5668 - \u5355\u7fa4\u7ec4\u7248\n### \ud83d\udccb \u57fa\u672c\u4fe1\u606f\n- \u5de5\u4f5c\u6d41\u540d\u79f0: WeChat-Daily-Digest-AI\n- \u7248\u672c: v0.0.2\n- \u521b\u5efa\u8005: \u6797\u6708\u534a\u5b50\u804aAI\n- \u5fae\u4fe1\uff1acloud-native-101\n- \u516c\u4f17\u53f7: \u6797\u6708\u534a\u5b50\u7684AI\u7b14\u8bb0\n\n### \ud83c\udfaf \u529f\u80fd\u6982\u8ff0\n\u57fa\u4e8e ChatlogMCP \u7684\u5fae\u4fe1\u7fa4\u804a\u5206\u6790\u81ea\u52a8\u5316\u5de5\u5177\uff0c\u81ea\u52a8\u83b7\u53d6\u5fae\u4fe1\u7fa4\u804a\u8bb0\u5f55\uff0c\u901a\u8fc7AI\u667a\u80fd\u5206\u6790\u751f\u6210\u7cbe\u7f8e\u7684HTML\u683c\u5f0f\u7fa4\u804a\u65e5\u62a5\uff0c\u5b9e\u73b0\u4ece\u6d77\u91cf\u6d88\u606f\u5230\u7cbe\u534e\u5185\u5bb9\u7684\u81ea\u52a8\u5316\u63d0\u53d6\u3002\n\n### \u914d\u7f6e\u8bf4\u660e\n1. \u914d\u7f6e\u7fa4\u804a\u53c2\u6570\u8282\u70b9\n - \u66ff\u6362\u7fa4\u804a\u540d\u79f0\n - \u9ed8\u8ba4\u81ea\u52a8\u8bbe\u7f6e\u4e3a\u524d\u4e00\u5929\n - \u6a21\u677f\u53ef\u6309\u9700\u8c03\u6574\n2. \u914d\u7f6e Gemini \u51ed\u636e",
"height": 1000,
"width": 2180,
"color": 6
},
"type": "n8n-nodes-base.stickyNote",
"typeVersion": 1,
"position": [
-40,
-880
],
"id": "474b1298-e91c-4042-9227-967d98d435d1",
"name": "Sticky Note2"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "c2a2eec2-4ead-4544-83db-73aba917f553",
"name": "group_name",
"value": "n8n\u5b66\u4e60\u4ea4\u6d41",
"type": "string"
},
{
"id": "6dab17d2-2e5e-40e3-b5d9-0abcdac0dde8",
"name": "date",
"value": "={{ $now.minus({days: 1}).format('yyyy-MM-dd') }}",
"type": "string"
},
{
"id": "d98a1539-81e4-45d3-8602-e81815516a7c",
"name": "web_style",
"value": "<!DOCTYPE html><html lang=\"zh-CN\"><head><meta charset=\"UTF-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><title>[\u5728\u6b64\u5904\u586b\u5199\u62a5\u544a\u6807\u9898] - [\u65e5\u671f]</title><link rel=\"stylesheet\" href=\"https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/tailwindcss/2.2.19/tailwind.min.css\"><link rel=\"stylesheet\" href=\"https://lf6-cdn-tos.bytecdntp.com/cdn/expire-100-M/font-awesome/6.0.0/css/all.min.css\"><link rel=\"preconnect\" href=\"https://fonts.googleapis.com\"><link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin><link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap\" rel=\"stylesheet\"><script src=\"https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js\" xintegrity=\"sha512-BNaRQnYJYiPSqHHDb58B0yaPfCu+Wgds8Gp/gU33kqBtgNS4tSPHuGibyoVBL5rLesXWW/sGuLhYFChxgYnz2Q==\" crossorigin=\"anonymous\" referrerpolicy=\"no-referrer\"></script><script src=\"https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js\"></script><style> :root { --bg-primary: #f5f4ee; --bg-secondary: #faf9f6; --bg-tertiary: #f1f3f5; --text-primary: #212529; --text-secondary: #495057; --accent-primary: #ff8906; --accent-secondary: #f76707; --accent-tertiary: #e8590c; --accent-blue: #339af0; --accent-purple: #7048e8; --accent-cyan: #22b8cf; --highlight-keyword-bg: #ffe8cc; --highlight-name-color: #7048e8; --card-padding: 24px; --grid-gap: 16px; --card-radius: 12px; --card-shadow: 0 4px 6px rgba(0, 0, 0, 0.05); --font-family: 'Inter', 'SF Pro Display', 'Segoe UI', sans-serif; } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: var(--font-family); background-color: var(--bg-primary); color: var(--text-primary); line-height: 1.6; font-size: 16px; width: 100%; max-width: 1000px; margin: 0 auto; padding: 20px; } body.modal-active { overflow: hidden; } h1, h2, h3, h4 { font-weight: 600; letter-spacing: 0.5px; } h1 { font-size: 2.5rem; margin-bottom: 0.5rem; color: var(--accent-primary); } h2 { font-size: 1.75rem; margin-bottom: 1rem; color: var(--accent-primary); } h3 { font-size: 1.25rem; margin-bottom: 0.75rem; color: var(--accent-blue); } .grid-container { display: grid; grid-template-columns: repeat(12, 1fr); grid-auto-rows: minmax(100px, auto); gap: var(--grid-gap); margin-top: 20px; grid-template-areas: \"main main main main main main main main main main main main\" \"topics topics topics topics topics topics topics topics topics topics topics topics\" \"mindmap mindmap mindmap mindmap mindmap mindmap mindmap mindmap mindmap mindmap mindmap mindmap\" \"quote quote quote quote quote quote links links links links links links\" \"stats stats stats stats stats stats stats wordcloud wordcloud wordcloud wordcloud wordcloud\"; } .card { background-color: var(--bg-secondary); border-radius: var(--card-radius); padding: var(--card-padding); box-shadow: var(--card-shadow); position: relative; overflow: hidden; transition: transform 0.3s ease, box-shadow 0.3s ease; display: flex; flex-direction: column; } .card:hover { transform: translateY(-5px); box-shadow: 0 8px 15px rgba(0, 0, 0, 0.1); } .card::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 3px; background: var(--accent-primary); } .card-icon { position: absolute; bottom: var(--card-padding); right: var(--card-padding); font-size: 4rem; opacity: 0.07; color: var(--accent-primary); z-index: 0; } .main-card { grid-area: main; } .topic-cards-wrapper { grid-area: topics; display: grid; grid-template-columns: repeat(12, 1fr); gap: var(--grid-gap); } .mindmap-card-container { grid-area: mindmap; } .quote-card { grid-area: quote; } .links-card { grid-area: links; } .stats-card { grid-area: stats; } .wordcloud-card { grid-area: wordcloud; } .topic-card { grid-column: span 6; min-height: 250px; } .topic-card > .topic-card-content-wrapper { flex-grow: 1; padding-bottom: 1rem; } .topic-cards-wrapper > .topic-card:nth-last-child(1):nth-child(odd) { grid-column: span 12; } .main-card h1 { text-align: center; } .main-card .date { text-align: center; } .date { font-size: 1.1rem; color: var(--text-secondary); margin-bottom: 1rem; } .meta-info { display: flex; flex-wrap: wrap; gap: 15px; margin-bottom: 1rem; justify-content: center; } .meta-info span { background-color: var(--bg-tertiary); padding: 5px 10px; border-radius: 20px; font-size: 0.9rem; color: var(--accent-blue); } .summary { margin-top: 1rem; line-height: 1.7; text-align: left; } .topic-category { display: inline-block; background-color: var(--accent-tertiary); color: var(--bg-primary); padding: 3px 8px; border-radius: 4px; font-size: 0.8rem; margin-bottom: 0.5rem; } .topic-keywords { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 0.75rem; margin-bottom: 0.75rem; } .keyword { background-color: var(--bg-tertiary); color: var(--accent-primary); padding: 3px 8px; border-radius: 4px; font-size: 0.8rem; } .highlight-keyword { background-color: var(--highlight-keyword-bg); padding: 1px 2px; border-radius: 2px; font-weight: 500; display: inline; line-height: 1.2; box-decoration-break: clone; -webkit-box-decoration-break: clone; } .highlight-name { color: var(--highlight-name-color); font-weight: 500; } .topic-mentions { font-size: 0.9rem; color: var(--text-secondary); } .quote { position: relative; padding-left: 20px; margin: 10px 0; font-style: italic; color: var(--text-secondary); } .quote::before { content: '\"'; position: absolute; left: 0; top: 0; font-size: 1.5rem; color: var(--accent-tertiary); } .quote-author { text-align: right; font-size: 0.9rem; color: var(--accent-tertiary); margin-top: 5px; } .link-item { display: flex; align-items: center; margin-bottom: 10px; padding: 8px; border-radius: 6px; background-color: var(--bg-tertiary); transition: background-color 0.2s ease; text-decoration: none; } .link-item:hover { background-color: rgba(51, 154, 240, 0.1); } .link-item a { text-decoration: none; color: inherit; display: flex; align-items: center; width: 100%; } .link-item a:hover .link-title { text-decoration: underline; color: var(--accent-blue); } .link-icon { margin-right: 10px; color: var(--accent-blue); } .link-title { flex-grow: 1; color: var(--text-primary); } .link-title.is-link { color: var(--accent-blue); } .link-title.is-link:hover { text-decoration: underline; } .user-stats-table { width: 100%; border-collapse: collapse; margin-top: 0.5rem; } .user-stats-table th { text-align: center; padding: 0.75rem 0.5rem; border-bottom: 2px solid var(--accent-primary); color: var(--text-primary); font-weight: 600; font-size: 0.9rem; } .user-stats-table td { padding: 0.75rem 0.5rem; border-bottom: 1px solid var(--bg-tertiary); color: var(--text-secondary); font-size: 0.85rem; vertical-align: top; text-align: left; } .user-stats-table .user-name-col { width: 25%; font-weight: 500; word-break: break-all; } .user-stats-table .message-count-col { text-align: center; width: 15%; white-space: nowrap; } .user-stats-table .contribution-col { width: 60%; word-break: break-all; } .user-stats-table tr:last-child td { border-bottom: none; } .wordcloud { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; padding: 20px 0; } .wordcloud-item { padding: 5px 10px; border-radius: 4px; font-weight: 500; transition: transform 0.2s ease; } .wordcloud-item:hover { transform: scale(1.1); } .size-1 { font-size: 0.9rem; color: var(--text-secondary); } .size-2 { font-size: 1.1rem; color: var(--accent-cyan); } .size-3 { font-size: 1.3rem; color: var(--accent-blue); } .size-4 { font-size: 1.5rem; color: var(--accent-purple); } .size-5 { font-size: 1.8rem; color: var(--accent-tertiary); } .action-buttons-container { text-align: center; margin: 20px 0; padding-bottom: 20px; } .action-button { background-color: var(--accent-primary); color: white; border: none; padding: 10px 20px; border-radius: var(--card-radius); font-size: 1rem; font-weight: 500; cursor: pointer; transition: background-color 0.3s ease, transform 0.2s ease; margin: 5px 10px; box-shadow: var(--card-shadow); display: inline-flex; align-items: center; justify-content: center; } .action-button:hover { background-color: var(--accent-secondary); transform: translateY(-2px); } .action-button i, .action-button .fas { margin-right: 8px; } .footer { margin-top: 30px; text-align: center; color: var(--text-secondary); font-size: 0.9rem; } #report-content-wrapper .footer { margin-top: 30px; padding-bottom: 20px; } .mindmap-card { min-height: 400px; } .mindmap-card h2 i { margin-right: 8px; } .mindmap-controls { display: flex; gap: 10px; margin-bottom: 15px; align-items: center; flex-wrap: wrap; } .mindmap-controls button { background-color: var(--accent-blue); color: white; border: none; padding: 8px 12px; border-radius: var(--card-radius); font-size: 0.9rem; cursor: pointer; transition: background-color 0.2s ease; font-weight: 500; display: inline-flex; align-items: center; justify-content: center; } .mindmap-controls button:hover { background-color: #228be6; } .mindmap-controls button i { margin-right: 5px; } .mindmap-controls .fullscreen-toggle-btn { margin-left: auto; } .mermaid-container { flex-grow: 1; display: flex; justify-content: center; align-items: center; overflow: auto; background-color: #fff; border-radius: 8px; padding: 10px; border: 1px solid var(--bg-tertiary); min-height: 300px; cursor: grab; } .mermaid-container.dragging { cursor: grabbing; } .mermaid-container:empty::before { content: \"\u5728\u6b64\u5904\u751f\u6210\u6216\u7c98\u8d34Mermaid\u5bfc\u56fe\u4ee3\u7801\u3002\"; color: var(--text-secondary); font-style: italic; text-align: center; padding: 20px; } .mermaid-container svg { max-width: none; height: auto; display: block; transition: transform 0.2s ease-out; } #mermaid-main-feedback-message, #mermaid-modal-feedback-message { text-align: center; margin-top: 15px; padding: 8px; border-radius: 4px; font-weight: 500; font-size: 0.9rem; display: none; } #mermaid-main-feedback-message.success, #mermaid-modal-feedback-message.success { color: #155724; background-color: #d4edda; border: 1px solid #c3e6cb; display: block; } #mermaid-main-feedback-message.error, #mermaid-modal-feedback-message.error { color: #721c24; background-color: #f8d7da; border: 1px solid #f5c6cb; display: block; } #mermaid-main-feedback-message.info, #mermaid-modal-feedback-message.info { color: #0c5460; background-color: #d1ecf1; border: 1px solid #bee5eb; display: block; } #feedback-message { text-align: center; margin-top: 10px; font-weight: 500; } #feedback-message.success { color: green; } #feedback-message.error { color: red; } .modal-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.75); display: none; justify-content: center; align-items: center; z-index: 1000; padding: 20px; } .modal-overlay.active { display: flex; } .modal-content { width: 95%; height: 90%; max-width: 1200px; } .modal-close-btn { position: absolute; top: 15px; right: 20px; background: none; border: none; font-size: 2.2rem; color: var(--text-secondary); cursor: pointer; line-height: 1; padding: 5px; z-index: 1010; } .modal-close-btn:hover { color: var(--text-primary); } #modalMermaidContainer { flex-grow: 1; min-height: 0; } #modalMermaidContainer:empty::before { content: \"\u5bfc\u56fe\u5185\u5bb9\u5c06\u5728\u6b64\u663e\u793a\u3002\"; color: var(--text-secondary); font-style: italic; text-align: center; padding: 20px; display: flex; justify-content: center; align-items: center; height: 100%; } @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .card { animation: fadeIn 0.5s ease forwards; } .main-card { animation-delay: 0.1s; } .topic-cards-wrapper .topic-card:nth-child(1) { animation-delay: 0.2s; } .topic-cards-wrapper .topic-card:nth-child(2) { animation-delay: 0.3s; } .topic-cards-wrapper .topic-card:nth-child(3) { animation-delay: 0.4s; } .topic-cards-wrapper .topic-card:nth-child(4) { animation-delay: 0.5s; } .mindmap-card-container .card { animation-delay: 0.6s; } .quote-card { animation-delay: 0.7s; } .links-card { animation-delay: 0.8s; } .stats-card { animation-delay: 0.9s; } .wordcloud-card { animation-delay: 1.0s; } #report-content-wrapper .footer { animation: fadeIn 0.5s ease forwards; animation-delay: 1.1s; } .action-buttons-container { animation: fadeIn 0.5s ease forwards; animation-delay: 1.2s; } @media (max-width: 768px) { body { padding: 10px; font-size: 14px; } h1 { font-size: 1.8rem; } h2 { font-size: 1.4rem; } h3 { font-size: 1.1rem; } .grid-container { grid-template-columns: 1fr; grid-template-areas: \"main\" \"topics\" \"mindmap\" \"quote\" \"links\" \"stats\" \"wordcloud\"; } .topic-cards-wrapper { grid-template-columns: 1fr; } .topic-card { grid-column: 1 / -1; min-height: auto; } .topic-card > .topic-card-content-wrapper { padding-bottom: 1rem; } .topic-mentions { position: static; margin-top: 10px; margin-bottom: 10px; text-align: left; } .card-icon { font-size: 2.5rem; opacity:0.05; } .mindmap-card .card-icon { bottom: 15px; right: 15px; } .user-stats-table th, .user-stats-table td { padding: 0.5rem 0.25rem; font-size: 0.8rem; } .user-stats-table td { text-align: left; } .user-stats-table .message-count-col { text-align: center; } .action-button { padding: 8px 15px; font-size: 0.9rem; } .action-buttons-container { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; } .action-buttons-container .action-button { width: calc(50% - 10px); min-width: 180px; margin: 5px 0; } .mindmap-card .card { padding: 15px; } .mindmap-controls button { font-size: 0.8rem; padding: 6px 10px; } .modal-content { width: 100%; height: 95%; } .modal-close-btn { font-size: 1.8rem; top:10px; right:10px;} } @media (max-width: 480px) { .action-buttons-container .action-button { width: 80%; } .user-stats-table { display: block; overflow-x: auto; } .user-stats-table th, .user-stats-table td { white-space: normal; } .user-stats-table thead, .user-stats-table tbody, .user-stats-table tr { display: block; } .user-stats-table tr { border-bottom: 1px solid var(--bg-tertiary); } .user-stats-table th { display: none; } .user-stats-table td { display: block; text-align: left; border-bottom: none; padding-left: 0.5rem; } .user-stats-table td.message-count-col { text-align: left; } .user-stats-table td::before { content: attr(data-label); font-weight: bold; display: inline-block; width: 100px; margin-right: 10px; color: var(--text-primary); text-align: left; } .user-stats-table tr:last-child { border-bottom: none; } }</style></head><body><div id=\"report-content-wrapper\"><div class=\"grid-container\"><div class=\"card main-card\"><h1 contenteditable=\"true\">[\u4e3b\u62a5\u544a\u6807\u9898 - \u4f8b\u5982\uff1aAI\u4ea7\u54c1\u56e2\u65e5\u62a5]</h1><div class=\"date\">[\u65e5\u671f - \u4f8b\u5982\uff1a2025\u5e745\u670819\u65e5]</div><div class=\"meta-info\"><span><i class=\"fas fa-comment\"></i> \u6d88\u606f\u6570: [\u6570\u5b57]+</span><span><i class=\"fas fa-users\"></i> \u6d3b\u8dc3\u7528\u6237: [\u6570\u5b57]+</span><span><i class=\"fas fa-fire\"></i> \u70ed\u70b9\u8bdd\u9898: [\u6570\u5b57]</span></div><p class=\"summary\">[\u5728\u6b64\u5904\u586b\u5199\u5f53\u65e5\u8ba8\u8bba\u7684\u603b\u4f53\u6458\u8981\u3002\u4fdd\u6301\u7b80\u6d01\u660e\u4e86\uff0c\u7a81\u51fa\u7fa4\u7ec4\u7684\u4e3b\u8981\u4e3b\u9898\u548c\u6c1b\u56f4\u3002]</p><i class=\"fas fa-microchip card-icon\"></i></div><div class=\"topic-cards-wrapper\"><div class=\"card topic-card\"><div class=\"topic-card-content-wrapper\"><h2 contenteditable=\"true\"><i class=\"fas fa-lightbulb\"></i> [\u4e3b\u98981\u6807\u9898]</h2><div class=\"topic-category\">[\u5206\u7c7b1 - \u4f8b\u5982\uff1a\u5de5\u5177\u6280\u5de7]</div><p>\u5173\u4e8e<span class=\"highlight-keyword\">\u63d2\u4ef6\u529f\u80fd</span>\u7684\u8ba8\u8bba\uff0c\u7279\u522b\u662f<span class=\"highlight-name\">@\u7528\u6237A</span>\u63d0\u5230\u7684<span class=\"highlight-keyword\">\u4e0a\u4e0b\u6587\u5904\u7406</span>\u80fd\u529b\u3002</p><div class=\"topic-keywords\"><span class=\"keyword\">[\u5173\u952e\u8bcd1A]</span><span class=\"keyword\">[\u5173\u952e\u8bcd1B]</span><span class=\"keyword\">[\u5173\u952e\u8bcd1C]</span></div><div class=\"topic-mentions\"><i class=\"fas fa-bullhorn\"></i> \u63d0\u53ca\u6b21\u6570: [\u6570\u91cf1]</div></div><i class=\"fas fa-tools card-icon\"></i></div><div class=\"card topic-card\"><div class=\"topic-card-content-wrapper\"><h2 contenteditable=\"true\"><i class=\"fas fa-rocket\"></i> [\u4e3b\u98982\u6807\u9898]</h2><div class=\"topic-category\">[\u5206\u7c7b2 - \u4f8b\u5982\uff1a\u65b0\u529f\u80fd]</div><p><span class=\"highlight-name\">@\u7528\u6237B</span>\u5206\u4eab\u4e86<span class=\"highlight-keyword\">AI\u641c\u7d22</span>\u7684\u6700\u65b0\u8fdb\u5c55\u548c<span class=\"highlight-keyword\">\u5730\u533a\u9650\u5236</span>\u95ee\u9898\u3002</p><div class=\"topic-keywords\"><span class=\"keyword\">[\u5173\u952e\u8bcd2A]</span><span class=\"keyword\">[\u5173\u952e\u8bcd2B]</span></div><div class=\"topic-mentions\"><i class=\"fas fa-bullhorn\"></i> \u63d0\u53ca\u6b21\u6570: [\u6570\u91cf2]</div></div><i class=\"fas fa-star card-icon\"></i></div><div class=\"card topic-card\"><div class=\"topic-card-content-wrapper\"><h2 contenteditable=\"true\"><i class=\"fas fa-comments-dollar\"></i> [\u4e3b\u98983\u6807\u9898]</h2><div class=\"topic-category\">[\u5206\u7c7b3 - \u4f8b\u5982\uff1a\u5de5\u5177\u4f53\u9a8c]</div><p>\u5927\u5bb6\u5bf9<span class=\"highlight-keyword\">Agent\u6280\u672f</span>\u7684<span class=\"highlight-keyword\">\u5546\u4e1a\u5316\u524d\u666f</span>\u8fdb\u884c\u4e86\u63a2\u8ba8\uff0c<span class=\"highlight-name\">@\u7528\u6237C</span>\u63d0\u51fa\u4e86\u72ec\u5230\u89c1\u89e3\u3002</p><div class=\"topic-keywords\"><span class=\"keyword\">[\u5173\u952e\u8bcd3A]</span><span class=\"keyword\">[\u5173\u952e\u8bcd3B]</span><span class=\"keyword\">[\u5173\u952e\u8bcd3C]</span></div><div class=\"topic-mentions\"><i class=\"fas fa-bullhorn\"></i> \u63d0\u53ca\u6b21\u6570: [\u6570\u91cf3]</div></div><i class=\"fas fa-comments card-icon\"></i></div></div><div class=\"mindmap-card-container card\"><div class=\"mindmap-card\"><h2><i class=\"fas fa-sitemap\"></i> \u6838\u5fc3\u6982\u5ff5\u5173\u7cfb\u56fe</h2><div class=\"mindmap-controls\"><button id=\"zoomInBtn\"><i class=\"fas fa-search-plus\"></i> \u653e\u5927</button><button id=\"zoomOutBtn\"><i class=\"fas fa-search-minus\"></i> \u7f29\u5c0f</button><button id=\"downloadDiagramBtn\"><i class=\"fas fa-download\"></i> \u4e0b\u8f7d\u5bfc\u56fe</button><button id=\"fullscreenOpenBtn\" class=\"fullscreen-toggle-btn\"><i class=\"fas fa-expand\"></i> \u5168\u5c4f</button></div><div class=\"mermaid-container\" id=\"mainMermaidContainer\"><div class=\"mermaid\" id=\"mindmapDiagram\"> mindmap root((\u4e2d\u5fc3\u4e3b\u9898)) (\u70b9\u51fb\u4e0b\u65b9\u6309\u94ae\u6216\u5728\u5168\u5c4f\u6a21\u5f0f\u4e0b\u7f16\u8f91\u5185\u5bb9)</div></div><div id=\"mermaid-main-feedback-message\"></div><i class=\"fas fa-project-diagram card-icon\"></i></div></div><div class=\"card quote-card\"><h2 contenteditable=\"false\"><i class=\"fas fa-quote-left\"></i> \u7cbe\u5f69\u5f15\u7528</h2><div class=\"quote\"> \"[\u5f15\u8a001\u5185\u5bb9\u3002\u4f7f\u5176\u5177\u6709\u5f71\u54cd\u529b\u6216\u4ee3\u8868\u6027\u3002]\"<div class=\"quote-author\">- @[\u53d1\u8a00\u4eba1]</div></div><div class=\"quote\"> \"[\u5f15\u8a002\u5185\u5bb9\u3002]\"<div class=\"quote-author\">- @[\u53d1\u8a00\u4eba2]</div></div><div class=\"quote\"> \"[\u5f15\u8a003\u5185\u5bb9\u3002]\"<div class=\"quote-author\">- @[\u53d1\u8a00\u4eba3]</div></div><i class=\"fas fa-comment-dots card-icon\"></i></div><div class=\"card links-card\"><h2 contenteditable=\"false\"><i class=\"fas fa-link\"></i> \u91cd\u8981\u94fe\u63a5\u4e0e\u8d44\u6e90</h2><div class=\"link-item\"><a href=\"[URL\u94fe\u63a51]\" target=\"_blank\"><i class=\"fas fa-external-link-alt link-icon\"></i><span class=\"link-title\">[\u94fe\u63a51\u6807\u9898]</span></a></div><div class=\"link-item\"><a href=\"[URL\u94fe\u63a52]\" target=\"_blank\"><i class=\"fas fa-external-link-alt link-icon\"></i><span class=\"link-title\">[\u94fe\u63a52\u6807\u9898]</span></a></div><div class=\"link-item\"><i class=\"fas fa-file link-icon\"></i><span class=\"link-title\">[\u6587\u68631\u6807\u9898 - \u4f8b\u5982\uff1a\u5171\u4eab\u63d0\u793a\u8bcdV5]</span></div><i class=\"fas fa-share-alt card-icon\"></i></div><div class=\"card stats-card\"><h2 contenteditable=\"false\"><i class=\"fas fa-chart-line\"></i> \u6d3b\u8dc3\u4e4b\u661f</h2><table class=\"user-stats-table\"><thead><tr><th class=\"user-name-col\">\u7528\u6237</th><th class=\"message-count-col\">\u53d1\u8a00\u6570</th><th class=\"contribution-col\">\u4e3b\u8981\u8d21\u732e</th></tr></thead><tbody><tr><td data-label=\"\u7528\u6237\" class=\"user-name-col\">@\u53d1\u8a00\u4eba1</td><td data-label=\"\u53d1\u8a00\u6570\" class=\"message-count-col\">[\u6570\u91cf1]+</td><td data-label=\"\u4e3b\u8981\u8d21\u732e\" class=\"contribution-col\">[\u7528\u62371\u7684\u4e3b\u8981\u8d21\u732e\u5185\u5bb9 - \u4f8b\u5982\uff1a\u5206\u4eab PageTalk \u63d2\u4ef6\u548c\u4e07\u80fd Prompt \u751f\u6210\u5668]</td></tr><tr><td data-label=\"\u7528\u6237\" class=\"user-name-col\">@\u53d1\u8a00\u4eba2</td><td data-label=\"\u53d1\u8a00\u6570\" class=\"message-count-col\">[\u6570\u91cf2]+</td><td data-label=\"\u4e3b\u8981\u8d21\u732e\" class=\"contribution-col\">[\u7528\u62372\u7684\u4e3b\u8981\u8d21\u732e\u5185\u5bb9 - \u4f8b\u5982\uff1aPageTalk \u63d2\u4ef6\u5f00\u53d1\u8005\uff0c\u5206\u4eab\u4f7f\u7528\u4f53\u9a8c]</td></tr><tr><td data-label=\"\u7528\u6237\" class=\"user-name-col\">@\u53d1\u8a00\u4eba3</td><td data-label=\"\u53d1\u8a00\u6570\" class=\"message-count-col\">[\u6570\u91cf3]+</td><td data-label=\"\u4e3b\u8981\u8d21\u732e\" class=\"contribution-col\">[\u7528\u62373\u7684\u4e3b\u8981\u8d21\u732e\u5185\u5bb9 - \u4f8b\u5982\uff1a\u53c2\u4e0e Agent \u8ba8\u8bba\u548c\u5de5\u5177\u6d4b\u8bd5]</td></tr></tbody></table><i class=\"fas fa-user-friends card-icon\"></i></div><div class=\"card wordcloud-card\"><h2 contenteditable=\"false\"><i class=\"fas fa-cloud\"></i> \u8bcd\u4e91</h2><div class=\"wordcloud\"><span class=\"wordcloud-item size-5\">[\u5173\u952e\u8bcdA]</span><span class=\"wordcloud-item size-5\">[\u5173\u952e\u8bcdB]</span><span class=\"wordcloud-item size-4\">[\u5173\u952e\u8bcdC]</span><span class=\"wordcloud-item size-4\">[\u5173\u952e\u8bcdD]</span><span class=\"wordcloud-item size-3\">[\u5173\u952e\u8bcdE]</span><span class=\"wordcloud-item size-3\">[\u5173\u952e\u8bcdF]</span><span class=\"wordcloud-item size-2\">[\u5173\u952e\u8bcdG]</span><span class=\"wordcloud-item size-2\">[\u5173\u952e\u8bcdH]</span><span class=\"wordcloud-item size-1\">[\u5173\u952e\u8bcdI]</span></div><i class=\"fas fa-tags card-icon\"></i></div></div><div class=\"footer\"><p>\u6570\u636e\u6765\u6e90\uff1a[\u60a8\u7684\u6570\u636e\u6765\u6e90 - \u4f8b\u5982\uff1aAI\u4ea7\u54c1\u56e2\u804a\u5929\u8bb0\u5f55] | \u751f\u6210\u65e5\u671f\uff1a[\u751f\u6210\u65e5\u671f] | \u7edf\u8ba1\u5468\u671f\uff1a[\u7edf\u8ba1\u5468\u671f - \u4f8b\u5982\uff1a[\u65e5\u671f]\u5168\u5929]</p><p>[\u514d\u8d23\u58f0\u660e - \u4f8b\u5982\uff1a\u672c\u62a5\u544a\u7531AI\u81ea\u52a8\u751f\u6210\uff0c\u4ec5\u4f9b\u53c2\u8003\uff0c\u4e0d\u4ee3\u8868\u6240\u6709\u7fa4\u6210\u5458\u89c2\u70b9\u3002]</p></div></div><div class=\"action-buttons-container\"><button id=\"viewPreviousReportBtn\" class=\"action-button\"><i class=\"fas fa-calendar-alt\"></i> \u67e5\u770b\u6628\u65e5\u65e5\u62a5</button><button id=\"screenshotToClipboardBtn\" class=\"action-button\"><i class=\"fas fa-clipboard\"></i> \u62f7\u8d1d\u622a\u56fe</button><button id=\"screenshotDownloadBtn\" class=\"action-button\"><i class=\"fas fa-camera\"></i> \u4e0b\u8f7d\u622a\u56fe</button><button id=\"copyHtmlBtn\" class=\"action-button\"><i class=\"fas fa-copy\"></i> \u62f7\u8d1d\u6e90\u7801</button><button id=\"downloadHtmlBtn\" class=\"action-button\"><i class=\"fas fa-download\"></i> \u4e0b\u8f7d\u62a5\u544a</button></div><div id=\"feedback-message\"></div><div id=\"fullscreenModal\" class=\"modal-overlay\"><div class=\"modal-content card\"><button id=\"fullscreenCloseBtn\" class=\"modal-close-btn\" aria-label=\"\u5173\u95ed\u5168\u5c4f\">×</button><h2><i class=\"fas fa-sitemap\"></i> \u6838\u5fc3\u6982\u5ff5\u5173\u7cfb\u56fe (\u5168\u5c4f)</h2><div class=\"mindmap-controls\"><button id=\"modalZoomInBtn\"><i class=\"fas fa-search-plus\"></i> \u653e\u5927</button><button id=\"modalZoomOutBtn\"><i class=\"fas fa-search-minus\"></i> \u7f29\u5c0f</button><button id=\"modalDownloadDiagramBtn\"><i class=\"fas fa-download\"></i> \u4e0b\u8f7d\u5bfc\u56fe</button></div><div class=\"mermaid-container\" id=\"modalMermaidContainer\"></div><div id=\"mermaid-modal-feedback-message\"></div></div></div><script> // --- Mermaid Diagram JavaScript START --- // --- Global Variables for Mermaid --- let mainCurrentScale = 1; let modalCurrentScale = 1; let currentMindmapDefinition = ''; // Store the current definition // --- DOM Elements for Mermaid --- const mainZoomInBtn = document.getElementById('zoomInBtn'); const mainZoomOutBtn = document.getElementById('zoomOutBtn'); const mainDownloadDiagramBtn = document.getElementById('downloadDiagramBtn'); // Renamed from downloadBtn const mainMermaidContainer = document.getElementById('mainMermaidContainer'); const mermaidMainFeedbackMessage = document.getElementById('mermaid-main-feedback-message'); // Renamed const mainMindmapDiagramDiv = document.getElementById('mindmapDiagram'); const fullscreenOpenBtn = document.getElementById('fullscreenOpenBtn'); const fullscreenModal = document.getElementById('fullscreenModal'); const fullscreenCloseBtn = document.getElementById('fullscreenCloseBtn'); const modalMermaidContainer = document.getElementById('modalMermaidContainer'); const modalZoomInBtn = document.getElementById('modalZoomInBtn'); const modalZoomOutBtn = document.getElementById('modalZoomOutBtn'); const modalDownloadDiagramBtn = document.getElementById('modalDownloadDiagramBtn'); // Renamed const mermaidModalFeedbackMessage = document.getElementById('mermaid-modal-feedback-message'); // Renamed // --- Mermaid Initialization --- if (typeof mermaid !== 'undefined') { mermaid.initialize({ startOnLoad: false, // Will render manually after content is set theme: 'base', // Options: 'default', 'forest', 'dark', 'neutral', 'base' fontFamily: '\"Inter\", sans-serif', mindmap: { padding: 15 } // For other diagram types, you might add specific configs here // e.g., sequence: { actorMargin: 50 } }); } else { console.error(\"Mermaid library not loaded.\"); if(mermaidMainFeedbackMessage) mermaidMainFeedbackMessage.textContent = \"\u9519\u8bef\uff1aMermaid\u5e93\u672a\u80fd\u52a0\u8f7d\u3002\"; } // --- Helper Functions for Mermaid --- function showMermaidFeedback(element, message, type = 'info', duration = 3000) { if (element) { element.textContent = message; element.className = type; // success, error, info element.style.display = 'block'; setTimeout(() => { element.textContent = ''; element.className = ''; element.style.display = 'none'; }, duration); } } function applySvgScale(svgElement, scale) { if (svgElement) { svgElement.style.transform = `scale(${scale})`; svgElement.style.transformOrigin = 'center center'; // Ensure scaling is from center } } function makeDraggable(containerElement) { let isDragging = false; let startX, startY, scrollLeftStart, scrollTopStart; if (!containerElement) return; containerElement.addEventListener('mousedown', (e) => { if (e.button !== 0) return; // Only main mouse button // Prevent dragging if clicking on interactive elements within the SVG or buttons if (e.target.closest('button') || e.target.closest('a') || e.target.closest('[onclick]')) return; // Check if clicking on scrollbars (simple check, might need refinement) if (e.target === containerElement) { // Only drag if mousedown is on container itself, not SVG content const verticalScrollbarVisible = containerElement.scrollHeight > containerElement.clientHeight; const horizontalScrollbarVisible = containerElement.scrollWidth > containerElement.clientWidth; const clickedOnVerticalScrollbar = verticalScrollbarVisible && e.offsetX >= containerElement.clientWidth - 17; // Approx scrollbar width const clickedOnHorizontalScrollbar = horizontalScrollbarVisible && e.offsetY >= containerElement.clientHeight - 17; if (clickedOnVerticalScrollbar || clickedOnHorizontalScrollbar) return; } isDragging = true; startX = e.pageX; startY = e.pageY; scrollLeftStart = containerElement.scrollLeft; scrollTopStart = containerElement.scrollTop; containerElement.classList.add('dragging'); // e.preventDefault(); // Be careful with preventDefault on container, might affect text selection inside SVG if not handled well }); document.addEventListener('mousemove', (e) => { if (!isDragging) return; e.preventDefault(); // Prevent text selection during drag const deltaX = e.pageX - startX; const deltaY = e.pageY - startY; containerElement.scrollLeft = scrollLeftStart - deltaX; containerElement.scrollTop = scrollTopStart - deltaY; }); document.addEventListener('mouseup', (e) => { if (e.button !== 0 || !isDragging) return; isDragging = false; containerElement.classList.remove('dragging'); }); // Touch events for dragging on mobile containerElement.addEventListener('touchstart', (e) => { if (e.target.closest('button') || e.target.closest('a') || e.target.closest('[onclick]')) return; if (e.touches.length === 1) { isDragging = true; const touch = e.touches[0]; startX = touch.pageX; startY = touch.pageY; scrollLeftStart = containerElement.scrollLeft; scrollTopStart = containerElement.scrollTop; containerElement.classList.add('dragging'); } }, { passive: true }); // Use passive true if not calling preventDefault document.addEventListener('touchmove', (e) => { if (!isDragging || e.touches.length !== 1) return; // e.preventDefault(); // To prevent page scroll if dragging content const touch = e.touches[0]; const deltaX = touch.pageX - startX; const deltaY = touch.pageY - startY; containerElement.scrollLeft = scrollLeftStart - deltaX; containerElement.scrollTop = scrollTopStart - deltaY; }); // Set passive: false if e.preventDefault() is used document.addEventListener('touchend', (e) => { if (!isDragging) return; isDragging = false; containerElement.classList.remove('dragging'); }); } async function downloadMermaidAsSVG(svgElement, baseFilename, feedbackElem) { if (svgElement && svgElement.innerHTML.trim() !== \"\") { try { // Apply current scale to the SVG for download if desired, or download at 100% // For simplicity, we download the SVG as it is currently rendered (potentially scaled in view, but SVG itself is 100%) const svgData = new XMLSerializer().serializeToString(svgElement); const blob = new Blob([svgData], { type: 'image/svg+xml;charset=utf-8' }); const url = URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.download = `${baseFilename}.svg`; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(url); showMermaidFeedback(feedbackElem, `${baseFilename}.svg \u5df2\u4e0b\u8f7d!`, 'success'); } catch (error) { console.error(`Error during SVG download for ${baseFilename}:`, error); showMermaidFeedback(feedbackElem, `\u4e0b\u8f7d ${baseFilename}.svg \u5931\u8d25: ${error.message}`, 'error'); } } else { showMermaidFeedback(feedbackElem, '\u65e0\u6cd5\u4e0b\u8f7d\uff1a\u56fe\u8868\u5185\u5bb9\u4e3a\u7a7a\u3002', 'error'); } } async function renderDiagram(definition, targetContainer, scaleVariableRef, feedbackElem, uniqueSvgId) { if (!targetContainer) { console.error(\"Target container for Mermaid diagram not found.\"); return null; } targetContainer.innerHTML = '<p style=\"text-align:center; padding:20px;\">\u56fe\u8868\u52a0\u8f7d\u4e2d...</p>'; targetContainer.classList.remove('empty'); if (!definition || definition.trim() === \"\" || definition.trim().toLowerCase() === \"mindmap\") { targetContainer.innerHTML = ''; targetContainer.classList.add('empty'); return null; } currentMindmapDefinition = definition; // Store the definition for fullscreen toggle try { if (typeof mermaid === 'undefined') throw new Error(\"Mermaid library is not available.\"); const {svg, bindFunctions} = await mermaid.render(uniqueSvgId, definition); targetContainer.innerHTML = svg; if (bindFunctions) bindFunctions(targetContainer); const svgElement = targetContainer.querySelector('svg'); if (svgElement) { // Reset scale to 1 initially for the new render if (targetContainer === mainMermaidContainer) mainCurrentScale = 1; else if (targetContainer === modalMermaidContainer) modalCurrentScale = 1; applySvgScale(svgElement, scaleVariableRef.value); // Apply current scale (which should be 1 after reset) makeDraggable(targetContainer); // Make the container draggable return svgElement; } else { targetContainer.innerHTML = ''; targetContainer.classList.add('empty'); showMermaidFeedback(feedbackElem, '\u56fe\u8868\u751f\u6210\u4e86\uff0c\u4f46\u672a\u627e\u5230SVG\u5185\u5bb9\u3002', 'error'); return null; } } catch (error) { console.error(\"Error rendering Mermaid:\", error); targetContainer.innerHTML = `<p style=\"color:red; text-align:center; padding:20px;\">\u6e32\u67d3\u56fe\u8868\u65f6\u51fa\u9519: ${error.message}</p>`; showMermaidFeedback(feedbackElem, `\u6e32\u67d3\u56fe\u8868\u65f6\u51fa\u9519: ${error.message}`, 'error', 5000); return null; } } // --- Main Mindmap Logic --- if(mainZoomInBtn) mainZoomInBtn.addEventListener('click', () => { mainCurrentScale += 0.1; const svg = mainMermaidContainer.querySelector('svg'); applySvgScale(svg, mainCurrentScale); }); if(mainZoomOutBtn) mainZoomOutBtn.addEventListener('click', () => { if (mainCurrentScale > 0.2) { // Prevent scaling too small mainCurrentScale -= 0.1; const svg = mainMermaidContainer.querySelector('svg'); applySvgScale(svg, mainCurrentScale); } }); if(mainDownloadDiagramBtn) mainDownloadDiagramBtn.addEventListener('click', () => { const svg = mainMermaidContainer.querySelector('svg'); downloadMermaidAsSVG(svg, '\u6838\u5fc3\u6982\u5ff5\u5173\u7cfb\u56fe', mermaidMainFeedbackMessage); }); // --- Fullscreen Modal Logic for Mermaid --- if(fullscreenOpenBtn) fullscreenOpenBtn.addEventListener('click', async () => { if (!currentMindmapDefinition || currentMindmapDefinition.trim() === \"\" || currentMindmapDefinition.trim().toLowerCase() === \"mindmap\") { showMermaidFeedback(mermaidMainFeedbackMessage, '\u8bf7\u5148\u751f\u6210\u4e00\u4e2a\u6709\u6548\u7684\u5bfc\u56fe\u624d\u80fd\u5168\u5c4f\u67e5\u770b\u3002', 'info'); return; } if(fullscreenModal) fullscreenModal.classList.add('active'); document.body.classList.add('modal-active'); modalCurrentScale = mainCurrentScale; // Sync scale from main view or reset await renderDiagram(currentMindmapDefinition, modalMermaidContainer, {value: modalCurrentScale}, mermaidModalFeedbackMessage, 'modalGeneratedSvgId'); }); if(fullscreenCloseBtn) fullscreenCloseBtn.addEventListener('click', () => { if(fullscreenModal) fullscreenModal.classList.remove('active'); document.body.classList.remove('modal-active'); if(modalMermaidContainer) { modalMermaidContainer.innerHTML = ''; modalMermaidContainer.classList.add('empty'); } }); if(modalZoomInBtn) modalZoomInBtn.addEventListener('click', () => { modalCurrentScale += 0.1; const svg = modalMermaidContainer.querySelector('svg'); applySvgScale(svg, modalCurrentScale); }); if(modalZoomOutBtn) modalZoomOutBtn.addEventListener('click', () => { if (modalCurrentScale > 0.2) { modalCurrentScale -= 0.1; const svg = modalMermaidContainer.querySelector('svg'); applySvgScale(svg, modalCurrentScale); } }); if(modalDownloadDiagramBtn) modalDownloadDiagramBtn.addEventListener('click', () => { const svg = modalMermaidContainer.querySelector('svg'); downloadMermaidAsSVG(svg, '\u6838\u5fc3\u6982\u5ff5\u5173\u7cfb\u56fe-\u5168\u5c4f', mermaidModalFeedbackMessage); }); // --- Initial Setup for Mermaid --- async function initializeMainDiagram() { if (mainMindmapDiagramDiv && mainMermaidContainer) { const initialDefinition = mainMindmapDiagramDiv.textContent.trim(); if (initialDefinition) { await renderDiagram(initialDefinition, mainMermaidContainer, { value: mainCurrentScale }, mermaidMainFeedbackMessage, 'initialMainDiagramSvg'); } else { mainMermaidContainer.classList.add('empty'); // Ensure it's marked empty if no initial content } } else { if(mermaidMainFeedbackMessage && !mainMermaidContainer) showMermaidFeedback(mermaidMainFeedbackMessage, '\u9519\u8bef\uff1a\u5bfc\u56fe\u5bb9\u5668\u672a\u627e\u5230\u3002', 'error'); } } // --- Mermaid Diagram JavaScript END --- // --- Report Page JavaScript START --- // Helper function: Get CSS variable value function getCssVariable(variableName, defaultValue = null) { const value = getComputedStyle(document.documentElement).getPropertyValue(variableName).trim(); return value || defaultValue; } function getWebpageNameForFilename() { const pageTitleTag = document.querySelector('title'); let baseName = 'AI\u4ea7\u54c1\u65e5\u62a5'; if (pageTitleTag && pageTitleTag.textContent) { const fullTitle = pageTitleTag.textContent.trim(); const titleParts = fullTitle.split(' - '); if (titleParts.length > 0 && titleParts[0].trim() !== \"\" && titleParts[0].trim() !== \"[\u5728\u6b64\u5904\u586b\u5199\u62a5\u544a\u6807\u9898]\") { baseName = titleParts[0].trim(); } } return baseName; } function getDateStringForFilename() { const reportDateElement = document.querySelector('.main-card .date'); let dateStr = \"\u672a\u6307\u5b9a\u65e5\u671f\"; if (reportDateElement && reportDateElement.textContent) { const dateContent = reportDateElement.textContent.trim(); if (dateContent && dateContent !== \"[\u65e5\u671f - \u4f8b\u5982\uff1a2025\u5e745\u670819\u65e5]\") { dateStr = dateContent; } } return dateStr; } function sanitizeFilename(filename) { return filename.replace(/[^a-z0-9\\u4e00-\\u9fa5_\\-\\.\\(\\)\\[\\]]/gi, '_').replace(/_+/g, '_'); } const previousReportUrl = \"\u5728\u6b64\u5904\u586b\u5199\u6628\u65e5\u65e5\u62a5\u7684URL\"; function showReportFeedbackMessage(message, type = 'info', duration = 3000) { // Renamed to avoid conflict const feedbackElement = document.getElementById('feedback-message'); // This is the report's general feedback if (feedbackElement) { feedbackElement.textContent = message; feedbackElement.className = type; setTimeout(() => { feedbackElement.textContent = ''; feedbackElement.className = ''; }, duration); } } async function captureScreenshot(elementToCapture) { await document.fonts.ready; return html2canvas(elementToCapture, { useCORS: true, scale: window.devicePixelRatio || 1, logging: false, backgroundColor: getCssVariable('--bg-primary', '#f5f4ee'), scrollX: -window.scrollX, scrollY: -window.scrollY, windowWidth: document.documentElement.scrollWidth, windowHeight: document.documentElement.scrollHeight, onclone: function(clonedDoc) { const highlightElements = clonedDoc.querySelectorAll('.highlight-keyword'); highlightElements.forEach(el => { el.style.display = 'inline'; el.style.padding = '1px 2px'; el.style.lineHeight = '1.2'; el.style.boxDecorationBreak = 'clone'; el.style.webkitBoxDecorationBreak = 'clone'; }); } }); } const screenshotToClipboardBtn = document.getElementById('screenshotToClipboardBtn'); if(screenshotToClipboardBtn) screenshotToClipboardBtn.addEventListener('click', async function() { const reportContent = document.getElementById('report-content-wrapper'); if (!reportContent) { showReportFeedbackMessage('\u622a\u56fe\u9519\u8bef: \u672a\u627e\u5230\u62a5\u544a\u5185\u5bb9\u3002', 'error'); return; } const actionButtons = document.querySelector('.action-buttons-container'); const feedbackMsgElement = document.getElementById('feedback-message'); const originalButtonText = this.innerHTML; this.innerHTML = '<i class=\"fas fa-spinner fa-spin\"></i> \u5904\u7406\u4e2d...'; this.disabled = true; if(actionButtons) actionButtons.style.visibility = 'hidden'; if(feedbackMsgElement) feedbackMsgElement.style.visibility = 'hidden'; try { const canvas = await captureScreenshot(reportContent); canvas.toBlob(async function(blob) { if (blob) { try { if (navigator.clipboard && navigator.clipboard.write) { await navigator.clipboard.write([ new ClipboardItem({ 'image/png': blob }) ]); showReportFeedbackMessage('\u622a\u56fe\u5df2\u62f7\u8d1d\u5230\u526a\u8d34\u677f!', 'success'); } else { showReportFeedbackMessage('\u622a\u56fe\u5df2\u751f\u6210\uff0c\u4f46\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u76f4\u63a5\u62f7\u8d1d\u56fe\u7247\u3002\u8bf7\u5c1d\u8bd5\u4e0b\u8f7d\u622a\u56fe\u3002', 'error', 5000); } } catch (copyError) { console.error('\u62f7\u8d1d\u5230\u526a\u8d34\u677f\u5931\u8d25:', copyError); showReportFeedbackMessage('\u62f7\u8d1d\u622a\u56fe\u5230\u526a\u8d34\u677f\u5931\u8d25: ' + copyError.message, 'error', 5000); } } else { throw new Error('\u65e0\u6cd5\u5c06Canvas\u8f6c\u6362\u4e3aBlob\u3002'); } }, 'image/png'); } catch (error) {
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.
googlePalmApimcpClientApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
WeChat-Daily-Digest-AI-v0.0.2. Uses agent, memoryBufferWindow, mcpClientTool, readWriteFile. Scheduled trigger; 17 nodes.
Source: https://github.com/lqshow/awesome-n8n-workflows/blob/c78bab4cce4e943e25a95b71c7304427ca828ada/workflows/wechat-daily-report/workflow-single-group.json — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
WeChat-Daily-Digest-AI-v1.0.0. Uses executeWorkflowTrigger, readWriteFile, memoryBufferWindow, agent. Scheduled trigger; 27 nodes.
This workflow is an AI-powered Dental Appointment Assistant that automates appointment booking, rescheduling, and cancellations through Telegram or a Webhook. It uses intelligent agents to understand
Lead gen without spam: drop helpful replies where your audience hangs out. Get discovered by AI surfaces (AI Overviews / SGE, AISEO/GSEO) via high-quality brand mentions. Customer support in the wild:
This Chatbot automates the process of discovering job openings and generating tailored job application emails.
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