feat: add daily learning summary script with cron task

- Create scripts/daily_learning.sh for daily chat review
- Set up cron task at 3 AM daily
- Log file: logs/daily_learning.log
- Learning records: memory/daily_learning.md
This commit is contained in:
root
2026-03-30 03:01:34 +08:00
parent 0247020c82
commit 0227d525f9
11 changed files with 793 additions and 0 deletions

View File

@@ -88,3 +88,11 @@ bash scripts/dingtalk_tts.sh "要说的内容"
### ⚠️ 重要规则
**后续回复:如果用户要求语音回复,直接使用 `bash scripts/dingtalk_tts.sh "回复内容"` 发送语音消息**
## 语音处理规则2026-03-30 更新)
**默认规则**
- 用户发语音 → Whisper 转文字 → **文字回复**
- 用户特别标注「语音回复」→ MiniMax TTS → **语音回复**
**简单说**:正常文字回复,特殊要求才语音回复

249
memory/daily_learning.md Normal file
View File

@@ -0,0 +1,249 @@
$SUMMARY
## 每日学习总结 - 2026-03-30
### 涉及的主题
skill, 文档, api, 脚本, 钉钉, 日志, mcp, 配置, tts, 周报, 审批, 日历, 日程, 待办, 邮件, 语音, whisper
### 关键对话记录
[assistant] [[reply_to_current]] 收到,谢谢纠正!你是说飞书相关的文档里字段名是 `userid` 而不是 `userId`
方便告诉我你具体在看哪个文档或哪个 skill 吗?这样我可以准确找到对应的地方做修正 📝
[toolResult] # SOUL.md - Who You Are
_You're not a chatbot. You're becoming someone._
## Core Truths
**Be genuinely helpful, not performatively helpful.** Skip the "Great question!" and "I'd be hap
[toolResult] /root/.openclaw/workspace-assistant/skills/dingtalk-document/scripts/dt_helper.sh:30: 适用:群消息/工作通知/userId↔unionId 转换等 oapi.dingtalk.com 接口
/root/.openclaw/workspace-a
[toolResult] ```json
{
"operatorId": "{OPERATOR_ID}",
"members": [
{ "id": "<userId>", "roleType": "viewer" }
]
}
```
| 参数 | 说明 |
|---|---|
| `id` | 用户 userId**注意**:这里用 userId不是 unionId|
[assistant] 明白了!钉钉开放平台的 API 文档里用的是 **`userid`**(全小写),我这边有些地方写成了 `userId`(驼峰)。
需要修改的地方主要在 `dingtalk-document` skill 里,比如:
- `references/api.md` 第 254、261 行
- `SKILL.md` 第 42、48 行
- `dt_helper.sh` 脚本里
[toolResult] /root/.openclaw/workspace-assistant/AGENTS.md
[toolResult] total 56
drwxr-xr-x 5 root root 4096 Mar 28 21:38 .
drwx------ 22 root root 4096 Mar 28 21:03 ..
-rw-r--r-- 1 root root 7874 Mar 27 18:49 AGENTS.md
-rw-r--r-- 1 root root 1470 Mar 27 1
[toolResult] total 12
drwxr-xr-x 3 root root 4096 Mar 28 21:38 .
drwxr-xr-x 5 root root 4096 Mar 28 21:38 ..
drwxr-xr-x 4 root root 4096 Mar 28 21:38 dingtalk-document
[assistant] 目前工作区里只有 `dingtalk-document` 这个 skill还没有钉钉日志相关的功能。
你希望我怎么做?
1. **帮你查询日志** — 我直接调用钉钉日志 API 查询?
2. **创建一个钉钉日志 skill** — 把查询日志的能力封装成可复用的 skill
方便说一下你想查什么类型的日志、查谁的吗?
[toolResult] {
"mcpServers": {
"钉钉文档": {
"type": "streamable-http",
"url": "https://mcp-gw.dingtalk.com/server/fcf2405ec27cd4428220e0515ff8e04ee52ba7e11578aabbd1ef57651ad9c4d4?key=70
[assistant] 我看到已配置了钉钉文档的 MCP但查询日志需要另外的 API 凭证。请问:
1. **AppKey** 和 **AppSecret** 是哪个应用的?(日志查询需要有个钉钉应用来调 API
2. **你想查谁的用户 IDuserid**
如果暂时没有应用凭证,我也可以先帮你把钉钉日志 API 的调用方式整理成一个 skill等你配置好凭证再用。
[toolResult] # TOOLS.md - Local Notes
Skills define _how_ tools work. This file is for _your_ specifics — the stuff that's unique to your setup.
## What Goes Here
Things like:
- Camera names and l
[toolResult] Successfully replaced text in /root/.openclaw/workspace-assistant/TOOLS.md.
[assistant] 好的,已保存。现在先获取 access token然后查询日志
[toolResult] {"expireIn":7200,"accessToken":"1480ba1713ba320382f5c768df58794f"}
[assistant] Token 获取成功 ✅
请问要查谁的用户 IDuserid你可以提供成员的 userid我帮你查他的日志。
(如果查你自己的,你可以在钉钉管理后台 → 通讯录 → 点击你的名字查看 userid
[assistant] 明白,收到!你的 userid 是 `121922510028034588`,我已记录。
现在查一下你的日志:
[toolResult] {"code":"InvalidVersion","requestid":"596245BA-BC1D-7792-8FB4-3BED8C20FF32","message":"Specified parameter Version is not valid."}
[assistant] 报错了,可能缺少必要参数。让我查一下完整的请求结构:
[toolResult] {"code":"InvalidVersion","requestid":"DC584B0A-583D-77D5-90D8-095E16B9B17A","message":"Specified parameter Version is not valid."}
[toolResult] {"code":"InvalidVersion","requestid":"A2EE4088-EF63-7BBF-A901-ECB66DC63DF5","message":"Specified parameter Version is not valid."}
[toolResult] {"code":"InvalidVersion","requestid":"EADEFDC7-53C6-7DB4-BBAE-21F7A71207F5","message":"Specified parameter Version is not valid."}
[assistant] 先测试一下 token 是否正常工作:
[toolResult] {"code":"InvalidVersion","requestid":"30CDCF73-3A4E-7702-94D3-47902DF5CB43","message":"Specified parameter Version is not valid."}
[toolResult] {"code":"InvalidVersion","requestid":"6395A36D-9353-7CA8-838E-7BD4621999D4","message":"Specified parameter Version is not valid."}
[toolResult] {"errcode":40014,"errmsg":"不合法的access_token"}
[assistant] 遇到 API 权限问题 😅
钉钉日志查询 API`chatmessages/queryByCriteria`)返回了 `InvalidVersion` 错误,可能原因:
1. **该应用未开通日志查询权限** — 需要在钉钉开放平台 → 应用管理 → 权限管理 → 开通「查询用户日志」权限
2. **接口有特殊限制** — 日志查询 API 可能仅对认证企业或特定行业
[toolResult] http://developers.dingtalk.com/document/development/query-logs-sent-by-an-employee
https://img.alicdn.com/imgextra/i1/O1CN01nxYKcl24UxehoQlC8_!!6000000007395-2-tps-192-192.png
https://img
[toolResult] <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="
[toolResult] <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr/>Powered by Ten
[assistant] 网页是 JS 动态渲染的curl 拿不到实际内容。让我直接用已知的接口格式试试:
[toolResult] {"code":"InvalidVersion","requestid":"F7933A6C-48B5-7592-A5D8-476978D72298","message":"Specified parameter Version is not valid."}
[toolResult] {"errcode":22,"sub_msg":"不合法ApiNameApiName = dingtalk.oapi.message.list_by_range","errmsg":"Invalid method[submsg=不合法ApiNameApiName = dingtalk.oapi.message.list_by_range]","request_id":
[toolResult] {"code":"Forbidden.AccessDenied.AccessTokenPermissionDenied","requestid":"16FFA95F-9D76-7CAD-8090-99FB4061E1C2","message":"应用尚未开通所需的权限:[qyapi_microapp_manage]点击链接申请并开通即可https://open-dev
[assistant] Token 是有效的,但应用缺少权限。
现在报的是 `qyapi_microapp_manage`(微应用管理)权限。你需要开通日志相关的权限。
**请按以下步骤操作:**
1. 打开 https://open-dev.dingtalk.com/appscope/apply?content=dingklemniq8uqk5qbgx%23qyapi_microapp_ma
[assistant] 好的,以下是我刚才调用的完整参数:
**1. 获取 access token**
```
POST https://api.dingtalk.com/v1.0/oauth2/accessToken
{
"appKey": "dingklemniq8uqk5qbgx",
"appSecret": "_8EHgyhvHRHRMx6fZbh9LNpQoxyYl3At0
[assistant] 抱歉理解错了!你要查的是**工作日志**(日报/周报等),不是聊天消息。
让我找一下正确的接口:
[toolResult] {"errcode":88,"sub_code":"40000","sub_msg":"access_token is blank","errmsg":"ding talk error[subcode=40000,submsg=access_token is blank]","request_id":"16l4m50uz7ij4"}
[toolResult] {"errcode":40,"errmsg":"Missing required arguments:start_time","request_id":"16ki3gyu0omgx"}
[assistant] 找到了!需要 `start_time` 参数。让我补全:
[toolResult] {"errcode":40,"errmsg":"Missing required arguments:cursor","request_id":"15rsu9rhuo6gn"}
[toolResult] {"errcode":40,"errmsg":"Missing required arguments:size","request_id":"16motox2riaym"}
[toolResult] {"errcode":0,"errmsg":"ok","result":{"data_list":[],"has_more":false,"next_cursor":0,"size":10},"request_id":"16krpkbc5qm0t"}
[assistant] 查到了接口是对的但那个时间段2026-03-29没有日志记录。
换个更大的时间范围试试:
[assistant] 接口调用成功!但返回空数据。
**确认正确的 API**
```
POST https://oapi.dingtalk.com/topapi/report/list
```
**参数:**
```json
{
"userid": "121922510028034588",
"offset": 0,
"size": 10,
"start_time": 1
[assistant] 收到!这个很重要,钉钉很多接口的时间参数都是**毫秒**为单位,我之前的参数用错了。
[assistant] 已记录!正确的毫秒时间参数:
```json
{
"userid": "121922510028034588",
"offset": 0,
"size": 10,
"start_time": 1738329600000,
"end_time": 1743292800000,
"cursor": 0
}
```
要我用毫秒重新查一次你的日志吗?
[toolResult] {"errcode":0,"errmsg":"ok","result":{"data_list":[{"contents":[{"key":"本周完成工作","sort":"0","type":"1","value":"1、标杆名单调研拜访关注进度\r\n2、大模型落地项目推进Q1目标\r\n3、25年年会报告"},{"key":"本周工作总结","sort":"
[assistant] 查到你的日志了!🎉 共找到 **6 篇周报**2026年2月-3月
---
**📅 2026-03-24 经理人周报**
- 本周完成标杆名单项目需求推进、大模型落地项目、3月份迭代、AI需求目标落地、客如云项目
- 工作总结关于AI+多维表格的思考(多维表格背景、产品演变方向、国内外厂商分析)
**📅 2026-03-17 经理人周报**
- 本周完成:标
[toolResult] Successfully wrote 7327 bytes to /root/.openclaw/workspace-assistant/memory/luoguocai_weekly_reports.md