fix(vc): preserve meeting event group

This commit is contained in:
renaocheng
2026-07-06 21:17:43 +08:00
parent 39538a4806
commit d18438dfcd
4 changed files with 9 additions and 5 deletions

View File

@@ -168,6 +168,7 @@ type meetingEventsEvent struct {
EventID string `json:"event_id,omitempty"`
EventType string `json:"event_type,omitempty"`
EventTime string `json:"event_time,omitempty"`
Group interface{} `json:"group,omitempty"`
Actors []meetingEventsIdentity `json:"actors,omitempty"`
Payload map[string]interface{} `json:"payload,omitempty"`
}
@@ -279,6 +280,7 @@ func meetingEventsEventFromPayload(event map[string]interface{}, selfIdentity me
EventID: common.GetString(event, "event_id"),
EventType: meetingEventType(event),
EventTime: meetingEventsTimeString(common.GetString(event, "event_time")),
Group: event["group"],
Payload: payload,
}
out.Actors = eventActors(out.EventType, payload, selfIdentity)

View File

@@ -116,6 +116,7 @@ func participantJoinedEvent() map[string]interface{} {
"event_id": "event-1",
"event_type": "participant_joined",
"event_time": "2026-04-17T08:00:00Z",
"group": "group-1",
"payload": map[string]interface{}{
"activity_event_type": "participant_joined",
"meeting": map[string]interface{}{
@@ -621,6 +622,7 @@ func TestMeetingEvents_ExecuteJSON(t *testing.T) {
`"role":"host"`,
`"is_self":true`,
`"event_type":"participant_joined"`,
`"group":"group-1"`,
`"actors":[`,
`"start_time":"2026-04-17T06:35:00Z"`,
`"has_more":true`,
@@ -834,7 +836,7 @@ func TestMeetingEvents_ExecuteNDJSONIncludesMetadataRow(t *testing.T) {
if len(lines) != 2 {
t.Fatalf("ndjson lines = %d, want 2: %s", len(lines), stdout.String())
}
if !strings.Contains(lines[0], `"row_type":"event"`) || !strings.Contains(lines[0], `"event_type":"participant_joined"`) {
if !strings.Contains(lines[0], `"row_type":"event"`) || !strings.Contains(lines[0], `"event_type":"participant_joined"`) || !strings.Contains(lines[0], `"group":"group-1"`) {
t.Fatalf("first ndjson row should be event: %s", lines[0])
}
for _, unwanted := range []string{
@@ -869,7 +871,7 @@ func TestMeetingEventsEventRows_OmitsEmptyEventFields(t *testing.T) {
if !ok {
t.Fatalf("row type = %T, want map", rows[0])
}
for _, unwanted := range []string{"event_id", "event_time", "actors", "payload"} {
for _, unwanted := range []string{"event_id", "event_time", "group", "actors", "payload"} {
if _, exists := row[unwanted]; exists {
t.Fatalf("row should omit %q when empty: %#v", unwanted, row)
}

View File

@@ -73,7 +73,7 @@ metadata:
- 再根据 `note_id``minute_token` 和用户意图,按 [`lark-vc`](../lark-vc/SKILL.md) 的产物决策读取正文、逐字稿或妙记。
- 想看参会人快照:用 `vc meeting get --with-participants`(见 [`lark-vc`](../lark-vc/SKILL.md)
5. **默认必须使用** **`--page-all`**,除非用户明确要求“只查一页”,或确实需要控制返回体大小。
6. 命令默认输出结构化事件契约:`meeting``identity``current_participants``events``warnings``has_more``page_token``identity` 表示当前读取身份,参会人含 `participant_type``role``is_self` 和可读 `label`,事件细节保留在 `payload`
6. 命令默认输出结构化事件契约:`meeting``identity``current_participants``events``warnings``has_more``page_token``identity` 表示当前读取身份,参会人含 `participant_type``role``is_self` 和可读 `label`,事件保留 `group` 用于聚合分组,细节保留在 `payload`
7. 输出格式默认优先 `--format pretty`(时间线更易读,并带当前身份与当前名单标签);需要稳定字段做结构化处理时用 `--format json`;需要流式消费事件时用 `--format ndjson`
8. **必须识别分页信号**:只要响应里出现 `has_more=true`、pretty 里的 `more available`,或返回了非空 `page_token`,就不能把当前结果当作完整事件流;默认应继续分页,或明确告诉用户当前只是部分结果。
9. 保留响应里的 `page_token`,下次增量拉取直接续,不要从头再拉。

View File

@@ -110,7 +110,7 @@ lark-cli vc +meeting-events --as user --meeting-id <id> --page-all --format pret
### 5. 输出格式差异
- `--format json`:结构化契约,顶层包含 `meeting``identity``current_participants``events``has_more``page_token``identity` 表示当前读取身份;参会人身份统一含 `participant_type``role``is_self``label`;每条事件保留 `payload` 便于追溯细节。
- `--format json`:结构化契约,顶层包含 `meeting``identity``current_participants``events``has_more``page_token``identity` 表示当前读取身份;参会人身份统一含 `participant_type``role``is_self``label`;每条事件保留 `group` 用于聚合分组,保留 `payload` 便于追溯细节。
- `--format pretty`:默认推荐格式,输出当前身份、当前名单和逐条时间线,适合快速理解“发生了什么”。
- `--format ndjson`:输出事件行,并带 metadata 行,适合流式消费。
@@ -161,7 +161,7 @@ lark-cli vc +meeting-events --as user --meeting-id <id> --page-all --format pret
| `meeting` | 会议身份与时间状态,包含 `id/topic/meeting_no/start_time/end_time/status` |
| `identity` | 当前读取身份,包含 `id/name/participant_type/is_self/label` |
| `current_participants` | 服务端当前参会人名单;当参会人缺少姓名或类型为 `unknown`CLI 会用同 ID 的事件 actor 信息补全,不做完整历史 replay |
| `events` | 结构化事件列表;每条事件含 `actors` 和事件细节 `payload` |
| `events` | 结构化事件列表;每条事件含用于聚合分组的 `group`、参与者 `actors` 和事件细节 `payload` |
| `warnings` | 非阻断告警列表,例如当前名单补充信息不可用;事件列表本身仍可使用 |
| `has_more` | 是否还有下一页 |
| `page_token` | 下一页游标 |