01.POST
Upsert colleagues
/api/ingest/colleague
同步公司同事目录。按 email(优先)或 id 去重。externalIds 用于后续跨源对应。
{
"colleagues": [
{
"name": "李慕白",
"email": "limubai@skynet.local",
"department": "工程",
"role": "高级工程师",
"externalIds": { "wechat": "wx_limubai", "gitlab": "limubai" }
}
]
}02.POST
Ingest chat messages
/api/ingest/chat
支持 WECHAT / FEISHU / WECOM 三种来源。externalId 用于去重;同一条消息重复 POST 会被跳过。
{
"source": "WECHAT",
"messages": [
{
"author": { "email": "limubai@skynet.local" },
"channel": "工程组",
"externalId": "msg_001",
"content": "今天把 infra 的告警梳理了一遍",
"sentAt": "2026-04-07T09:32:00.000Z"
}
]
}03.POST
Ingest attendance
/api/ingest/attendance
按 (colleague, date) 唯一;重复 POST 会 upsert 同一天记录。
{
"records": [
{
"colleague": { "email": "limubai@skynet.local" },
"date": "2026-04-07T00:00:00.000Z",
"checkIn": "2026-04-07T01:12:00.000Z",
"checkOut": "2026-04-07T10:45:00.000Z",
"status": "present",
"durationMinutes": 573
}
]
}04.POST
Ingest commits
/api/ingest/gitlab
按 (repo, sha) 去重。支持 additions / deletions / filesChanged 等指标。
{
"commits": [
{
"author": { "email": "limubai@skynet.local", "externalId": "limubai" },
"repo": "group/core",
"branch": "main",
"sha": "abc123deadbeef",
"message": "fix: tighten retry policy",
"additions": 42,
"deletions": 7,
"filesChanged": 3,
"committedAt": "2026-04-07T11:00:00.000Z",
"url": "https://gitlab.example.com/group/core/-/commit/abc123"
}
]
}05.POST
Ingest Figma activity
/api/ingest/figma
记录设计师在 Figma 文件上的编辑、评论、创建、发布等动作。
{
"activities": [
{
"author": { "email": "baixiaoyue@skynet.local" },
"fileKey": "FILE_KEY_abc",
"fileName": "Skynet 控制台 v2",
"action": "edit",
"externalId": "evt_001",
"occurredAt": "2026-04-07T08:12:00.000Z"
}
]
}06.POST
Ingest meetings
/api/ingest/calendar
日程 / 会议事件。按 (colleagueId, externalId) 去重;role 可为 organizer / attendee / optional。recurrenceRule 支持 RFC 5545 RRULE 字符串。
{
"meetings": [
{
"colleague": { "email": "limubai@skynet.local" },
"title": "周会:Skynet v0.7 规划",
"startAt": "2026-04-07T02:00:00.000Z",
"endAt": "2026-04-07T03:00:00.000Z",
"durationMinutes": 60,
"location": "Zoom",
"organizer": "zhouche@skynet.local",
"role": "attendee",
"attendees": ["limubai", "baixiaoyue", "zhouche"],
"notes": "讨论本周进度与下周目标",
"recurrenceRule": "FREQ=WEEKLY;BYDAY=MO",
"externalId": "meet_001"
}
]
}07.POST
Ingest meeting AI summary (second pass)
/api/ingest/calendar
腾讯会议 / Zoom / 飞书会议等提供 AI 转录+总结时,在会议结束后 re-POST 同一个 externalId,只追加 aiSummary / actionItems / transcript 字段。服务端会原地合并,不创建新记录。
{
"meetings": [
{
"colleague": { "email": "limubai@skynet.local" },
"title": "周会:Skynet v0.7 规划",
"startAt": "2026-04-07T02:00:00.000Z",
"endAt": "2026-04-07T03:00:00.000Z",
"externalId": "meet_001",
"provider": "tencent-meeting",
"transcriptUrl": "https://meeting.tencent.com/record/abc",
"aiSummary": "复盘了上周的 incident,确认 Redis 重试策略需要加 jitter。下周由李慕白主导 runbook 更新...",
"actionItems": [
"李慕白: 起草 Redis 重试 runbook",
"周彻: 对接上下游的灰度计划",
"全体: 周三前提交告警整理"
],
"participants": [
{ "name": "李慕白", "email": "limubai@skynet.local", "speakingMinutes": 18, "wordCount": 1200 },
{ "name": "周彻", "email": "zhouche@skynet.local", "speakingMinutes": 12, "wordCount": 780 }
]
}
]
}