shuangyan-notebook/第五域 · Fifth Domain/⚒️ 铸渊·协作指令|GitHub ↔ Notion 桥接协议/🔧 铸渊指令|修复 write-notion-syslog js 字段解析(DEV编号映射+文件内容 0cf9ce31aaf14506a0808bf299dab235.md
Guanghu Domestic Migration a27e87cb99 chore: import sanitized domestic snapshot for REPO-007
Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc

[SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
2026-07-17 15:59:55 +08:00

187 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
belongs_to:
- "[[INDEX · 铸渊·协作指令GitHub ↔ Notion 桥接协议]]"
---
# 🔧 铸渊指令|修复 write-notion-syslog.js 字段解析DEV编号映射+文件内容写入2026-03-15·霜砚签发
<aside>
⚠️
**后续修复 · P1 · 霜砚签发 · 2026-03-15 01:35**
**前置已合并**:属性名映射修复(提交日期→接收时间 等 4 项已通过Notion 写入链路已通。
**本次修复**:写入成功但两个字段的值不正确,需要优化解析逻辑。
</aside>
---
## 一、问题描述
飞书→GitHub→Notion 链路已跑通SYSLOG 收件箱成功创建了新记录,但有两个字段异常:
### 问题 1DEV编号写入了飞书 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
```
### 修复 1DEV编号映射
需要在代码中添加 **飞书 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"`)。优先从这里提取:
```jsx
// 解析 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则需要维护一个映射表
```jsx
const OPENID_TO_DEV = {
'ou_3bd223b67374fd102edd4223244a7542': 'DT-USER',
// 后续按需添加
};
const devId = OPENID_TO_DEV[senderId] || 'DT-USER';
```
### 修复 2文件内容写入
将 SYSLOG JSON 的完整文本写入 `文件内容` 字段:
```jsx
// 读取 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
```jsx
// 处理超长内容
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 两种常见格式参考
### 格式 ASYSLOG-v4.0(标准格式)
```json
{
"protocol_version": "SYSLOG-v4.0",
"header": {
"broadcast_id": "BC-M-DINGTALK-007-ZZ",
"developer_id": "DEV-004",
"dev_name": "之之",
"module": "M-DINGTALK",
"status": "completed"
},
...
}
```
### 格式 Bv3.0-legacy
```json
{
"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
```