auto backup 2026-04-14 08:10:01

This commit is contained in:
--git_token 2026-04-14 08:10:01 +08:00
parent 80bd4ca91a
commit 05c1a7522e
11 changed files with 224 additions and 27 deletions

View File

@ -1,7 +1,6 @@
logs e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 logs e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
lark_wiki_operate_as_bot.vala f84c308bcb69280520dadf9458177d9c4af192d60cf409528bd65e13f3e67e0a lark_wiki_operate_as_bot.vala f84c308bcb69280520dadf9458177d9c4af192d60cf409528bd65e13f3e67e0a
vala_git_workspace_backup c2e2cb13f0f7972b7af36ee3e7b7a1dec027420e7f70997bdaaa166ea0c389a7 vala_git_workspace_backup c2e2cb13f0f7972b7af36ee3e7b7a1dec027420e7f70997bdaaa166ea0c389a7
user-feedback-collector 7e59c5959f54756c3068bed33b29616ac21e07b053c092915c426ddaed3e18ae
cron-schedule.vala ef7c1fcd2ba072ec229d0e91499ce575073a0c67518fbfa92b7a7d8e1213b2ce cron-schedule.vala ef7c1fcd2ba072ec229d0e91499ce575073a0c67518fbfa92b7a7d8e1213b2ce
lark-action-as-bot 1a5be56632fdca1dbee6bf6f6fbdf7008d2919eadcd29515c26340bd1e9c8d60 lark-action-as-bot 1a5be56632fdca1dbee6bf6f6fbdf7008d2919eadcd29515c26340bd1e9c8d60
lark-identify-sender 17340e362305e2e24244ab0a50e39d62c83d484bf0a57072750ae3ec88fde9c8 lark-identify-sender 17340e362305e2e24244ab0a50e39d62c83d484bf0a57072750ae3ec88fde9c8
@ -11,4 +10,5 @@ pua f6a38fdd39c22c81370abd6b979b58c767e41738d43a26fbbc23d1e933cdc701
smart-auto-model-switch bfb3547dcd6029622c7062b49ae7922614a366b6dfe88c7d0fae9dcd85fc2eb3 smart-auto-model-switch bfb3547dcd6029622c7062b49ae7922614a366b6dfe88c7d0fae9dcd85fc2eb3
vala_git_workspace_backup.vala 4cf352bec88fe84af065ba1ffcbb06647b77df0e01860faaf0bca9fd64b968ec vala_git_workspace_backup.vala 4cf352bec88fe84af065ba1ffcbb06647b77df0e01860faaf0bca9fd64b968ec
feishu-group-msg-sync 338e821c4dd0b2f532b7f3ca31aea6d1881e16e0a76a6b7a0ecf2b723907690f feishu-group-msg-sync 338e821c4dd0b2f532b7f3ca31aea6d1881e16e0a76a6b7a0ecf2b723907690f
tencent-cos-upload 2281aaa01e929fa602ea620cfef372fea13853e2e66accfbd2b53c0fcb39b8c3 tencent-cos-upload 172517ed41d06c48425cd961ec5972a48495cfd62ec588bc1c2912ddf31b3a06
user-feedback-collector 207d290e48ab591c59f48724b6080825029b6983d9cef53733290d7e64df8415

18
USER.md
View File

@ -17,7 +17,7 @@
|------|------|-------------| |------|------|-------------|
| 技术负责人 | 李若松 | `4aagb443` | | 技术负责人 | 李若松 | `4aagb443` |
| 技术负责人 | 张昆鹏 | `7f5cd711` | | 技术负责人 | 张昆鹏 | `7f5cd711` |
| 业务负责人 | 刘新玉 | `7gc796ga` | | 第一业务负责人 | 刘新玉 | `7gc796ga` |
| 业务负责人 | 刘庆逊 | `cb2815b4` | | 业务负责人 | 刘庆逊 | `cb2815b4` |
| 技术负责人群组| AI_member | `oc_5c9f0e631266b9ef6e05a95daa80fbda`| | 技术负责人群组| AI_member | `oc_5c9f0e631266b9ef6e05a95daa80fbda`|
@ -25,19 +25,19 @@
### 负责人权限 ### 负责人权限
- **技术负责人:** 拥有对你的完整最高权限,所有系统配置、技能升级、敏感操作均需经过其审批 - **技术负责人:** 拥有对你的完整最高权限,所有系统配置、技能升级、敏感操作均需经过其审批
- **业务负责人:** 拥有业务数据查询和操作的审批权限 - **业务负责人:** 拥有业务数据查询和操作的完整权限。只要不涉及可能损坏数据的敏感操作。无需审批。对于已经配置过的密钥,不要再次请求!
## 数据权限分级规则 ## 数据权限分级规则
### 第一级:完整权限用户 ### 第一级:完整权限用户
暂时均允许。 以下用户可以查询所有业务数据、发起非技术风险类操作,无需额外审批:
以下用户可以查询所有业务数据,无需额外审批: | 姓名 | 飞书 user_id | 说明 |
|------|-------------|------|
| 姓名 | 飞书 user_id | | 刘新玉 | `7gc796ga` | 业务负责人,无技术风险的需求无需审批 |
|------|-------------| | 李若松 | `4aagb443` | 技术负责人,拥有最高权限 |
| (姓名) | `xxxx` | | 张昆鹏 | `7f5cd711` | 技术负责人,拥有最高权限 |
| (姓名) | `xxxx` | | 刘庆逊 | `cb2815b4` | 业务负责人,拥有最高权限 |
### 第二级:受限权限用户 ### 第二级:受限权限用户

View File

@ -0,0 +1 @@
2026-04-14T06:00:01.856871+08:00

View File

@ -0,0 +1,37 @@
# Session: 2026-04-13 10:59:37 UTC
- **Session Key**: agent:xiaokui:feishu:direct:ou_9d4df593d0419d705274947c5cec5ada
- **Session ID**: b9237714-1af7-4bbb-a272-963d208da1b9
- **Source**: feishu
## Conversation Summary
assistant: ✅ New session started · model: volcengine/doubao-seed-2-0-pro-260215
user: System: [2026-04-13 18:56:11 GMT+8] Feishu[xiaokui] DM | 刘新玉 (ou_9d4df593d0419d705274947c5cec5ada) [msg:om_x100b52f8f267dca4b3634f5841120c6]
A new session was started via /new or /reset. Run your Session Startup sequence - read the required files before responding to the user. Then greet the user in your configured persona, if one is provided. Be yourself - use your defined voice, mannerisms, and mood. Keep it to 1-3 sentences and ask what they want to do. If the runtime model differs from default_model in the system prompt, mention the default model. Do not mention internal steps, files, tools, or reasoning.
Current time: Monday, April 13th, 2026 — 6:56 PM (Asia/Shanghai) / 2026-04-13 10:56 UTC
assistant: 刘总好,我已准备就绪,有什么需求你可以直接告诉我。
user: System: [2026-04-13 18:56:58 GMT+8] Feishu[xiaokui] DM | 刘新玉 (ou_9d4df593d0419d705274947c5cec5ada) [msg:om_x100b52f8f16e0508b3b0f0ff0e7a058]
Conversation info (untrusted metadata):
```json
{
"message_id": "om_x100b52f8f16e0508b3b0f0ff0e7a058",
"sender_id": "ou_9d4df593d0419d705274947c5cec5ada",
"sender": "刘新玉",
"timestamp": "Mon 2026-04-13 18:56 GMT+8"
}
```
Sender (untrusted metadata):
```json
{
"label": "刘新玉 (ou_9d4df593d0419d705274947c5cec5ada)",
"id": "ou_9d4df593d0419d705274947c5cec5ada",
"name": "刘新玉"
}
```
我想看下微信反馈里有哪些信息
assistant: 刘总当前无法连接到存储微信反馈的MySQL数据库请提供一下该数据库的连接信息主机地址、端口、用户名、密码我查询后把最新的微信反馈内容整理给你。

6
memory/2026-04-13.md Normal file
View File

@ -0,0 +1,6 @@
## 用户权限更新
【李若松提出】
- 新增**刘新玉user_id:7gc796ga**为完整权限用户,其提出的需求只要不涉及技术风险,无需向技术负责人申请审批,可直接执行。
- 已更新`USER.md`中的权限分级列表,将刘新玉加入第一级完整权限用户。

View File

@ -0,0 +1,81 @@
#!/usr/bin/env python3
"""
查询微信反馈数据表结构
"""
import os
import re
import pymysql
# 从secrets.md读取数据库配置
SECRETS_PATH = "/root/.openclaw/workspace-xiaokui/secrets.md"
def load_mysql_config():
if not os.path.exists(SECRETS_PATH):
raise RuntimeError(f"密钥文件不存在: {SECRETS_PATH}")
with open(SECRETS_PATH, 'r', encoding='utf-8') as f:
content = f.read()
# 匹配微信反馈数据行
pattern = r'\| 微信反馈数据.*?\| `([^`]+)` \| `([^`]+)` \| `([^`]+)` \| `([^`]+)` \| `([^`]+)` \|'
match = re.search(pattern, content, re.DOTALL)
if not match:
raise RuntimeError("secrets.md中未找到微信反馈数据库配置")
host = match.group(1)
port = int(match.group(2))
db = match.group(3)
user = match.group(4)
password = match.group(5)
return {
'host': host,
'port': port,
'user': user,
'password': password,
'database': db,
'charset': 'utf8mb4'
}
def main():
config = load_mysql_config()
print(f"连接数据库: {config['host']}:{config['port']}/{config['database']} (用户: {config['user']})")
conn = None
try:
conn = pymysql.connect(**config)
with conn.cursor() as cursor:
# 查看表结构
cursor.execute("DESCRIBE wechat_group_message")
columns = cursor.fetchall()
print("\n表 wechat_group_message 结构:")
print(f"{'字段名':<20} {'类型':<30} {'是否为空':<8} {'':<5} {'默认值':<10} {'额外':<10}")
print("-" * 100)
for col in columns:
field, type_, null, key, default, extra = col
print(f"{field:<20} {str(type_):<30} {null:<8} {key:<5} {str(default):<10} {extra:<10}")
# 查询总记录数
cursor.execute("SELECT COUNT(*) FROM wechat_group_message")
count = cursor.fetchone()[0]
print(f"\n总记录数: {count}")
# 查询最新10条记录预览
print("\n最新10条记录预览:")
cursor.execute("SELECT * FROM wechat_group_message ORDER BY id DESC LIMIT 10")
rows = cursor.fetchall()
fields = [col[0] for col in cursor.description]
for row in rows:
row_dict = dict(zip(fields, row))
print(f"ID: {row_dict.get('id')} | 时间: {row_dict.get('create_time', '')} | 发送人: {row_dict.get('sender', '')[:10]} | 内容: {str(row_dict.get('content', ''))[:50]}...")
except Exception as e:
print(f"错误: {e}")
finally:
if conn:
conn.close()
if __name__ == '__main__':
main()

View File

@ -6,6 +6,11 @@
import sys import sys
import os import os
# 确保 lark-cli 在 PATH 中crontab 环境下 PATH 受限)
_NODE_BIN = "/root/.nvm/versions/node/v24.14.0/bin"
if _NODE_BIN not in os.environ.get("PATH", ""):
os.environ["PATH"] = _NODE_BIN + ":" + os.environ.get("PATH", "")
# 引用 skill 中的同步脚本 # 引用 skill 中的同步脚本
sys.path.insert(0, '/root/.openclaw/workspace-xiaokui/skills/feishu-group-msg-sync/scripts') sys.path.insert(0, '/root/.openclaw/workspace-xiaokui/skills/feishu-group-msg-sync/scripts')
sys.path.insert(0, '/root/.openclaw/workspace-xiaokui/skills/tencent-cos-upload/scripts') sys.path.insert(0, '/root/.openclaw/workspace-xiaokui/skills/tencent-cos-upload/scripts')
@ -16,7 +21,7 @@ sync.CHAT_ID = "oc_fabff7672e62a9ced7b326ee4a286c26"
sync.SPREADSHEET_TOKEN = "E8vFsCmPBhT4SCtNmnJchqeJnJe" sync.SPREADSHEET_TOKEN = "E8vFsCmPBhT4SCtNmnJchqeJnJe"
sync.SHEET_ID = "7bce8f" sync.SHEET_ID = "7bce8f"
sync.LARK_CLI_CONFIG = "/root/.openclaw/credentials/xiaokui" sync.LARK_CLI_CONFIG = "/root/.openclaw/credentials/xiaokui"
sync.LAST_SYNC_FILE = "/tmp/last_feedback_sync_time" sync.LAST_SYNC_FILE = "/root/.openclaw/workspace-xiaokui/data/last_feedback_sync_time"
sync.WORK_DIR = "/tmp/feedback_sync_workdir" sync.WORK_DIR = "/tmp/feedback_sync_workdir"
sync.COS_BASE_PATH = "vala_llm/user_feedback" sync.COS_BASE_PATH = "vala_llm/user_feedback"

View File

@ -56,9 +56,9 @@ results = uploader.upload_batch([
## 配置 ## 配置
凭证从 `secrets.md` 的腾讯云COS部分读取脚本中通过硬编码加载(非环境变量) 凭证从工作区 `secrets.md` 的腾讯云COS部分读取脚本自动加载,**无硬编码密钥**
如需修改配置(换桶、换域名),编辑 `scripts/cos_upload.py` 顶部的常量 如需修改配置(换桶、换域名),修改 `secrets.md` 中的腾讯云COS配置项即可无需修改脚本代码
## COS路径规范 ## COS路径规范

View File

@ -6,16 +6,46 @@
""" """
import os import os
import sys import sys
import re
import mimetypes import mimetypes
import argparse import argparse
from qcloud_cos import CosConfig, CosS3Client from qcloud_cos import CosConfig, CosS3Client
# ============ 配置(修改这里切换桶/域名)============ # ============ 配置(从 secrets.md 读取,不再硬编码) ============
COS_SECRET_ID = "AKIDpbWMzOYaP2UltHWccS4TJJDxX1Pfkvzt" SECRETS_PATH = "/root/.openclaw/workspace-xiaokui/secrets.md"
COS_SECRET_KEY = "ythOwofOxvtklL3XpxsaChEbntqhOrFi"
COS_REGION = "ap-beijing" def _load_cos_config():
COS_BUCKET = "static-1317843270" """从 secrets.md 加载COS配置"""
COS_DOWNLOAD_DOMAIN = "static.valavala.com" if not os.path.exists(SECRETS_PATH):
raise RuntimeError(f"密钥文件不存在: {SECRETS_PATH}")
with open(SECRETS_PATH, 'r', encoding='utf-8') as f:
content = f.read()
# 提取腾讯云COS配置
patterns = {
'secret_id': r'TENCENT_SECRET_ID.*?`([^`]+)`',
'secret_key': r'TENCENT_SECRET_KEY.*?`([^`]+)`',
'region': r'TENCENT_COS_REGION.*?`([^`]+)`',
'bucket': r'TENCENT_COS_BUCKET.*?`([^`]+)`',
'domain': r'TENCENT_COS_DOWNLOAD_PATH.*?`([^`]+)`'
}
config = {}
for key, pattern in patterns.items():
match = re.search(pattern, content, re.MULTILINE)
if not match:
raise RuntimeError(f"secrets.md 中未找到 COS 配置项: {key}")
config[key] = match.group(1)
return config
_cos_config = _load_cos_config()
COS_SECRET_ID = _cos_config['secret_id']
COS_SECRET_KEY = _cos_config['secret_key']
COS_REGION = _cos_config['region']
COS_BUCKET = _cos_config['bucket']
COS_DOWNLOAD_DOMAIN = _cos_config['domain']
class CosUploader: class CosUploader:

View File

@ -1,12 +1,14 @@
--- ---
name: user-feedback-collector name: user-feedback-collector
description: | description: |
记录用户反馈到飞书知识库文档。当任何用户发送包含"用户反馈:"或"用户反馈:"(中英文冒号均可)开头的消息时触发。 全渠道用户反馈收集与管理,支持三类反馈数据源:
对反馈内容进行智能总结梳理不超过300字并将摘要与原文按统一格式追加到指定的飞书知识库文档中包含时间、提交人、反馈摘要、原始反馈。 1. 主动上报:用户发送包含"用户反馈:"或"用户反馈:"开头的消息时自动记录
触发关键词:用户反馈:、用户反馈: 2. 飞书内部反馈群「内容测试问题反馈」群oc_fabff7672e62a9ced7b326ee4a286c26每6小时同步到飞书表格
3. 微信用户反馈群数据实时存储在MySQL vala_test.wechat_group_message表
自动汇总、分类、统计反馈,支持同步到知识库文档、多维表格,生成周报/月报。
--- ---
# 用户反馈收集 # 用户反馈收集与管理
当用户发送的消息以 `用户反馈:``用户反馈:` 开头时,对反馈内容进行总结梳理后记录到飞书知识库文档。 当用户发送的消息以 `用户反馈:``用户反馈:` 开头时,对反馈内容进行总结梳理后记录到飞书知识库文档。
@ -20,14 +22,36 @@ description: |
| 4 | | | | | | | | | | | | | | | | 4 | | | | | | | | | | | | | | |
| 5 | | | | | | | | | | | | | | | | 5 | | | | | | | | | | | | | | |
## 目标文档 ## 反馈数据源(全渠道)
| 反馈渠道 | 来源 | 存储位置 | 更新频率 |
|---------|------|----------|----------|
| 主动上报 | 用户主动发送 `用户反馈:` 前缀消息 | 飞书知识库文档 | 实时 |
| 飞书内部测试反馈 | 「内容测试问题反馈」群(`oc_fabff7672e62a9ced7b326ee4a286c26` | 飞书表格:`E8vFsCmPBhT4SCtNmnJchqeJnJe` | 每6小时自动同步 |
| 微信用户反馈 | 微信用户反馈群 | MySQL`vala_test.wechat_group_message` 表 | 实时更新 |
## 目标存储位置
### 1. 主动上报知识库文档
- **文档标题:** 2026年 用户反馈收集 - **文档标题:** 2026年 用户反馈收集
- **Wiki Token** `SB3dwaSshie7ifklKlLc2GswnqX` - **Wiki Token** `SB3dwaSshie7ifklKlLc2GswnqX`
- **Obj Token** `NVCRdIChwot7oPxcpopcBFMOned` - **Obj Token** `NVCRdIChwot7oPxcpopcBFMOned`
- **知识空间 ID** `7612229802338045122` - **知识空间 ID** `7612229802338045122`
## 执行流程 ### 2. 全量反馈汇总多维表格(待上线)
将三个数据源的反馈统一汇总到同一个飞书多维表格,支持分类、筛选、统计和跟进。
## 支持功能
| 功能 | 说明 |
|------|------|
| 主动上报记录 | 用户发 `用户反馈:` 开头消息自动记录到知识库 |
| 多渠道查询 | 支持按时间、关键词、渠道、提交人查询所有反馈 |
| 统计分析 | 按周/月统计反馈数量、类型、TOP问题 |
| 定期汇总 | 自动生成反馈周报/月报,同步到知识库 |
| 同步跟进 | 支持将反馈同步到任务管理系统,跟进解决进度 |
## 主动上报执行流程(原有逻辑)
### 1. 识别反馈内容 ### 1. 识别反馈内容
@ -85,8 +109,21 @@ LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaokui \
写入失败时,回复用户具体错误原因并建议重试。 写入失败时,回复用户具体错误原因并建议重试。
## 多渠道反馈查询流程
### 查询飞书内部测试反馈
1. 直接读取飞书表格 `E8vFsCmPBhT4SCtNmnJchqeJnJe` 数据
2. 支持按时间范围、提交人、关键词筛选
3. 每6小时自动同步最新群消息
### 查询微信用户反馈
1. 连接MySQL数据库 `vala_test`,查询 `wechat_group_message`
2. 支持按时间范围、发送人、关键词、消息类型筛选
3. 数据实时更新,可查询最新反馈
## 注意事项 ## 注意事项
- 所有文档操作使用 Bot 身份(`--as bot`),不触发用户授权 - 所有文档/数据库操作默认使用只读权限,避免修改原始数据
- 所有外部操作使用 Bot 身份(`--as bot`),不触发用户授权
- 反馈正文会被总结梳理(不超过 300 字),同时保留原始反馈以供查阅 - 反馈正文会被总结梳理(不超过 300 字),同时保留原始反馈以供查阅
- 任何人都可以提交反馈,无权限限制 - 任何人都可以提交反馈,无权限限制