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

4.9 KiB
Raw Blame History

belongs_to
belongs_to
INDEX · 铸渊·协作指令GitHub ↔ Notion 桥接协议

🔧 铸渊指令|修复 write-notion-syslog.js 字段解析DEV编号映射+文件内容写入2026-03-15·霜砚签发


一、问题描述

飞书→GitHub→Notion 链路已跑通SYSLOG 收件箱成功创建了新记录,但有两个字段异常:

问题 1DEV编号写入了飞书 open_id 而非 DEV 编号

当前写入值ou_3bd223b67374fd102edd4223244a7542
期望写入值DEV-004或其他对应的 DEV 编号)

DEV编号select 类型,选项只有 DEV-001 ~ DEV-013DT-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")。优先从这里提取:

// 解析 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_idheader.broadcast_id BC-M-DINGTALK-007-ZZ
模块 moduleheader.module M-DINGTALK
环节状态 statusheader.status completed / partial / blocked
协议版本 protocol_versionsyslog_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(标准格式)

{
  "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

{
  "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