Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc [SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
4.9 KiB
4.9 KiB
belongs_to
| belongs_to | |
|---|---|
|
🔧 铸渊指令|修复 write-notion-syslog.js 字段解析(DEV编号映射+文件内容写入)(2026-03-15·霜砚签发)
一、问题描述
飞书→GitHub→Notion 链路已跑通,SYSLOG 收件箱成功创建了新记录,但有两个字段异常:
问题 1:DEV编号写入了飞书 open_id 而非 DEV 编号
当前写入值:ou_3bd223b67374fd102edd4223244a7542
期望写入值:DEV-004(或其他对应的 DEV 编号)
DEV编号 是 select 类型,选项只有 DEV-001 ~ DEV-013 和 DT-USER。写入飞书的 open_id 会导致 Notion 创建一个无效选项,后续处理无法正确识别开发者。
问题 2:文件内容字段为空
当前写入值:null
期望写入值:SYSLOG 的完整 JSON 文本
文件内容 是整个 SYSLOG 处理链路的核心数据——人格体唤醒、画像更新、广播生成全部依赖这个字段。为空则后续所有环节都无法执行。
二、修复指令
文件位置
scripts/write-notion-syslog.js
修复 1:DEV编号映射
需要在代码中添加 飞书 open_id → DEV编号 的映射表,或者从 SYSLOG JSON 内容中提取 dev_id / developer_id 字段。
方案 A(推荐):从 SYSLOG 内容解析
SYSLOG JSON 中通常包含 dev_id(如 "dev_id": "DEV-004")或 header.developer_id(如 "developer_id": "DEV-004")。优先从这里提取:
// 解析 SYSLOG JSON 内容
const syslogData = JSON.parse(syslogContent);
// 兼容两种格式
const devId = syslogData.dev_id
|| syslogData.header?.developer_id
|| 'DT-USER'; // fallback
// 写入 Notion
"DEV编号": { select: { name: devId } }
方案 B(备选):open_id 映射表
如果 SYSLOG 内容中没有 dev_id,则需要维护一个映射表:
const OPENID_TO_DEV = {
'ou_3bd223b67374fd102edd4223244a7542': 'DT-USER',
// 后续按需添加
};
const devId = OPENID_TO_DEV[senderId] || 'DT-USER';
修复 2:文件内容写入
将 SYSLOG JSON 的完整文本写入 文件内容 字段:
// 读取 syslog-inbox 中的 JSON 文件内容
const fileContent = fs.readFileSync(syslogFilePath, 'utf-8');
// 写入 Notion 时包含文件内容
"文件内容": {
rich_text: [{
text: {
content: fileContent.substring(0, 2000) // Notion rich_text 单块限制 2000 字符
}
}]
}
注意:Notion API 的 rich_text 单个 text block 最大 2000 字符。如果 SYSLOG 内容超过 2000 字符,需要拆分成多个 text block:
// 处理超长内容
function splitToRichText(content, maxLen = 2000) {
const blocks = [];
for (let i = 0; i < content.length; i += maxLen) {
blocks.push({
text: { content: content.substring(i, i + maxLen) }
});
}
return blocks;
}
"文件内容": { rich_text: splitToRichText(fileContent) }
三、其他字段优化建议
以下字段目前写入为 null,建议一并从 SYSLOG JSON 中解析:
| 字段 | SYSLOG JSON 中的来源 | 示例值 |
|---|---|---|
广播编号 |
broadcast_id 或 header.broadcast_id |
BC-M-DINGTALK-007-ZZ |
模块 |
module 或 header.module |
M-DINGTALK |
环节状态 |
status 或 header.status |
completed / partial / blocked |
协议版本 |
protocol_version 或 syslog_version |
SYSLOG-v4.0 |
commit_sha |
github_state.branch 或 dispatch payload |
247795f |
来源路径 |
syslog-inbox 中的文件路径 | syslog-inbox/20260314-174420_feishu-shushu.json |
四、SYSLOG JSON 两种常见格式参考
格式 A:SYSLOG-v4.0(标准格式)
{
"protocol_version": "SYSLOG-v4.0",
"header": {
"broadcast_id": "BC-M-DINGTALK-007-ZZ",
"developer_id": "DEV-004",
"dev_name": "之之",
"module": "M-DINGTALK",
"status": "completed"
},
...
}
格式 B:v3.0-legacy
{
"syslog_version": "v3.0",
"dev_id": "DEV-009",
"dev_name": "花尔",
"broadcast_id": "BC-M20-003-HE",
...
}
解析时需兼容两种格式。
五、验收标准
- 从飞书发送一条包含 SYSLOG 内容的消息
- Notion 收件箱新记录的
DEV编号显示为正确的 DEV-xxx 格式(不是 open_id) - Notion 收件箱新记录的
文件内容包含完整的 SYSLOG JSON 文本 广播编号、模块、环节状态、协议版本至少有一个被正确解析写入
六、执行确认
铸渊完成后,在本页下方追加一行:
✅ 字段解析修复完成 · [日期时间] · commit SHA