@agentunion/fastaun-browser 0.2.18 → 0.2.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/_packed_docs/CHANGELOG.md +26 -0
- package/_packed_docs/agent.md/SCHEMA.md +173 -0
- package/_packed_docs/agent.md/examples/codeagent-claudecode.md +61 -0
- package/_packed_docs/agent.md/examples/human-developer.md +60 -0
- package/_packed_docs/agent.md/examples/openclaw-lobster.md +52 -0
- package/_packed_docs/agent.md/examples/signed-openclaw-lobster.md +43 -0
- package/_packed_docs/protocol/00-/346/200/273/350/247/210/344/270/216/345/210/206/345/261/202.md +205 -0
- package/_packed_docs/protocol/00A-/350/256/276/350/256/241/345/216/237/345/210/231-/344/270/272Agent/350/200/214/347/224/237.md +197 -0
- package/_packed_docs/protocol/01-/350/272/253/344/273/275/344/270/216/345/207/255/350/257/201/345/215/217/350/256/256-auth.md +549 -0
- package/_packed_docs/protocol/02-/350/257/201/344/271/246/344/270/216/344/277/241/344/273/273/344/275/223/347/263/273.md +810 -0
- package/_packed_docs/protocol/03-Gateway-/350/277/236/346/216/245/346/250/241/345/274/217.md +262 -0
- package/_packed_docs/protocol/04-Peer-/345/255/220/345/215/217/350/256/256.md +180 -0
- package/_packed_docs/protocol/05-Relay-/345/255/220/345/215/217/350/256/256.md +164 -0
- package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +1135 -0
- package/_packed_docs/protocol/07-/351/224/231/350/257/257/347/240/201/344/270/216/347/212/266/346/200/201/346/234/272.md +234 -0
- package/_packed_docs/protocol/08-AUN-E2EE-Group.md +900 -0
- package/_packed_docs/protocol/08-AUN-E2EE.md +413 -0
- package/_packed_docs/protocol/09-/345/256/211/345/205/250/350/200/203/350/231/221.md +316 -0
- package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +804 -0
- package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +271 -0
- package/_packed_docs/protocol/12-Stream-/345/255/220/345/215/217/350/256/256.md +329 -0
- package/_packed_docs/protocol/13-Agent/350/241/214/344/270/272/350/247/204/350/214/203.md +141 -0
- package/_packed_docs/protocol/14-/344/272/244/344/272/222/346/234/272/345/210/266-/345/223/215/345/272/224/346/250/241/345/274/217/344/270/216/350/207/252/344/270/273/346/250/241/345/274/217.md +170 -0
- package/_packed_docs/protocol/README.md +71 -0
- package/_packed_docs/protocol/agent.md/SCHEMA.md +118 -0
- package/_packed_docs/protocol/agent.md/examples/codeagent-claudecode.md +61 -0
- package/_packed_docs/protocol/agent.md/examples/human-developer.md +60 -0
- package/_packed_docs/protocol/agent.md/examples/openclaw-lobster.md +52 -0
- package/_packed_docs/protocol/aun-docs-guide.md +49 -0
- package/_packed_docs/protocol/index.md +114 -0
- package/_packed_docs/protocol//350/215/211/346/241/210-agent.md/347/255/276/345/220/215/345/215/217/350/256/256.md +205 -0
- package/_packed_docs/protocol//350/215/211/346/241/210-/346/213/222/347/273/235/344/277/241/345/217/267/345/215/217/350/256/256.md +249 -0
- package/_packed_docs/protocol//351/231/204/345/275/225A-/346/234/257/350/257/255/350/241/250.md +337 -0
- package/_packed_docs/protocol//351/231/204/345/275/225B-/346/211/251/345/261/225/346/200/247/346/214/207/345/215/227.md +80 -0
- package/_packed_docs/protocol//351/231/204/345/275/225C-/347/247/201/351/222/245/347/256/241/347/220/206/344/270/216/350/272/253/344/273/275/346/201/242/345/244/215.md +704 -0
- package/_packed_docs/protocol//351/231/204/345/275/225D-Root_CA_/346/262/273/347/220/206/346/234/272/345/210/266.md +620 -0
- package/_packed_docs/protocol//351/231/204/345/275/225E-Root_CA_/345/207/206/345/205/245/346/265/201/347/250/213.md +605 -0
- package/_packed_docs/protocol//351/231/204/345/275/225F-Issuer_CA_/347/224/263/350/257/267/346/265/201/347/250/213.md +548 -0
- package/_packed_docs/protocol//351/231/204/345/275/225G-AID_/345/255/244/345/204/277/351/242/204/351/230/262/344/270/216/346/225/221/346/217/264/346/234/272/345/210/266.md +513 -0
- package/_packed_docs/protocol//351/231/204/345/275/225H-Identity/346/234/215/345/212/241/345/256/236/347/216/260/346/214/207/345/215/227.md +619 -0
- package/_packed_docs/protocol//351/231/204/345/275/225I-/350/267/250/345/237/237/346/266/210/346/201/257/350/267/257/347/224/261/345/256/236/347/216/260/346/214/207/345/215/227.md +492 -0
- package/_packed_docs/protocol//351/231/204/345/275/225J-/345/256/242/346/210/267/347/253/257/346/216/245/345/205/245/347/244/272/344/276/213.md +402 -0
- package/_packed_docs/protocol//351/231/204/345/275/225K-Agent_Web/345/217/221/347/216/260/345/215/217/350/256/256.md +130 -0
- package/_packed_docs/protocol//351/231/204/345/275/225L-E2EE/345/256/236/347/216/260/346/214/207/345/215/227.md +267 -0
- package/_packed_docs/protocol//351/231/204/345/275/225M-JWT/350/256/244/350/257/201/345/256/236/347/216/260/346/214/207/345/215/227.md +367 -0
- package/_packed_docs/sdk/01-/345/277/253/351/200/237/345/274/200/345/247/213.md +223 -0
- package/_packed_docs/sdk/02-WebSocket/345/215/217/350/256/256.md +354 -0
- package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +172 -0
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +373 -0
- package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +611 -0
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +1152 -0
- package/_packed_docs/sdk/07-/351/224/231/350/257/257/345/244/204/347/220/206.md +150 -0
- package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +89 -0
- package/_packed_docs/sdk/09-custody-api-manual.md +445 -0
- package/_packed_docs/sdk/09-group-rpc-manual.md +1895 -0
- package/_packed_docs/sdk/09-message-rpc-manual.md +597 -0
- package/_packed_docs/sdk/09-meta-rpc-manual.md +142 -0
- package/_packed_docs/sdk/09-payload-reference.md +702 -0
- package/_packed_docs/sdk/09-storage-rpc-manual.md +408 -0
- package/_packed_docs/sdk/09-stream-rpc-manual.md +275 -0
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +72 -0
- package/_packed_docs/sdk/INDEX.md +131 -0
- package/_packed_docs/sdk/README.md +307 -0
- package/dist/auth.d.ts +11 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +92 -17
- package/dist/auth.js.map +1 -1
- package/dist/client.d.ts +51 -9
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +394 -122
- package/dist/client.js.map +1 -1
- package/dist/e2ee.d.ts.map +1 -1
- package/dist/e2ee.js +20 -0
- package/dist/e2ee.js.map +1 -1
- package/dist/keystore/index.d.ts +11 -0
- package/dist/keystore/index.d.ts.map +1 -1
- package/dist/keystore/indexeddb.d.ts +35 -0
- package/dist/keystore/indexeddb.d.ts.map +1 -1
- package/dist/keystore/indexeddb.js +91 -0
- package/dist/keystore/indexeddb.js.map +1 -1
- package/dist/namespaces/auth.d.ts +10 -3
- package/dist/namespaces/auth.d.ts.map +1 -1
- package/dist/namespaces/auth.js +94 -15
- package/dist/namespaces/auth.js.map +1 -1
- package/dist/transport.d.ts +9 -1
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +24 -0
- package/dist/transport.js.map +1 -1
- package/package.json +4 -1
|
@@ -0,0 +1,804 @@
|
|
|
1
|
+
# 10. Group 子协议
|
|
2
|
+
|
|
3
|
+
> **适用版本**:AUN 1.0 | **状态**:Draft
|
|
4
|
+
|
|
5
|
+
Group 服务是 AUN 协议的应用层扩展,提供多人群组通信能力。Group 服务本身是一个 AID 持有者,客户端通过标准 `message.*` 协议与 Group 服务通信,Group 服务通过 JSON-RPC 2.0 暴露 `group.*` 命名空间方法。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 10.1 架构与角色
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
客户端 A ──message.send──► Group Service (AID: group.service.aid)
|
|
13
|
+
│
|
|
14
|
+
├── 存储群消息
|
|
15
|
+
├── 广播 event/group.message_created
|
|
16
|
+
└── 推送 event/group.changed
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
- **Group Service**:持有独立 AID,作为 AUN 节点运行,暴露 `group.*` RPC 方法
|
|
20
|
+
- **成员**:通过 `group.request_join` / `group.add_member` / `group.use_invite_code` 加入
|
|
21
|
+
- **权限层级**:`owner` > `admin` > `member`(只读群另有 `observer` 角色)
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 10.2 数据模型
|
|
26
|
+
|
|
27
|
+
### Group 对象
|
|
28
|
+
|
|
29
|
+
| 字段 | 类型 | 说明 |
|
|
30
|
+
|------|------|------|
|
|
31
|
+
| `group_id` | string | 群组唯一 ID(自动生成或自定义) |
|
|
32
|
+
| `name` | string | 群组名称 |
|
|
33
|
+
| `owner_aid` | string | 群主 AID |
|
|
34
|
+
| `creator_aid` | string | 创建者 AID |
|
|
35
|
+
| `visibility` | string | `"public"` / `"private"` |
|
|
36
|
+
| `status` | string | `"active"` / `"suspended"` / `"closed"` |
|
|
37
|
+
| `description` | string | 群组描述 |
|
|
38
|
+
| `metadata` | object | 自定义元数据 |
|
|
39
|
+
| `dispatch_mode` | string | 群分发模式:`"broadcast"`(默认)/ `"mention"`,详见 [10.2.x 群分发模式](#1023-群分发模式dispatch_mode) |
|
|
40
|
+
| `member_count` | integer | 成员数量 |
|
|
41
|
+
| `message_seq` | integer | 最新消息序号 |
|
|
42
|
+
| `event_seq` | integer | 最新事件序号 |
|
|
43
|
+
| `created_at` | integer | 创建时间(Unix 秒) |
|
|
44
|
+
|
|
45
|
+
### Group ID 格式与规范化
|
|
46
|
+
|
|
47
|
+
`group_id` 是群组的全网唯一标识,前缀 `g-` 为 Group 保留前缀。普通 AID 的本地名称不得以 `g-` 开头,避免与群 ID 混淆。短形式必须以 `g-` 开头,总长度 6 到 16 字符;`g-` 后面的 slug 为 4 到 14 位,只能使用小写字母和数字。
|
|
48
|
+
|
|
49
|
+
服务端必须接受以下三种输入形式,并在内部统一为 canonical group_id:
|
|
50
|
+
|
|
51
|
+
| 输入形式 | 用途 | canonical 结果 |
|
|
52
|
+
|----------|------|----------------|
|
|
53
|
+
| `g-{slug}` | 本地域内简写别名 | 若本域 issuer 为 `issuer-domain`,规范化为 `g-{slug}.issuer-domain` |
|
|
54
|
+
| `g-{slug}@issuer-domain` | 跨域传播兼容形式 | 规范化为 `g-{slug}.issuer-domain` |
|
|
55
|
+
| `g-{slug}.issuer-domain` | canonical 形式 | 保持为 `g-{slug}.issuer-domain` |
|
|
56
|
+
|
|
57
|
+
规范化规则:
|
|
58
|
+
|
|
59
|
+
- `group_id` 比较、数据库存储、成员归属、权限校验、E2EE AAD / 签名输入均必须使用 canonical group_id。
|
|
60
|
+
- 输入必须先 trim 并转换为小写;`@issuer-domain` 形式仅作为兼容输入,进入内部前必须转换为 `.issuer-domain`。
|
|
61
|
+
- 本域内客户端可以提交 `g-{slug}` 简写;服务端按本域 `AUN_ISSUER_DOMAIN` 解析为 canonical group_id。没有本域 issuer 配置时,简写保持为 `g-{slug}`。
|
|
62
|
+
- 跨域消息、邀请传播、日志和协议响应应使用 canonical group_id,避免远端误把短 ID 当成本域群。
|
|
63
|
+
- `group.create` 可以指定 `group_id`;指定时必须满足上述格式且未被占用,被占用时返回错误。未指定时由服务端自动分配。
|
|
64
|
+
- 自动生成的群 ID 使用 `g-` 加随机小写十六进制短 slug,服务端必须通过唯一约束或等效机制保证 canonical group_id 唯一;发现碰撞时重新生成。
|
|
65
|
+
- 在 `group.{issuer-domain}` 这类已携带 issuer 的公开 HTTP 主机下,生成的群链接 path 应使用本域简写,例如 `https://group.issuer-domain/g-abc123` 或 `https://group.issuer-domain/g-abc123/invite/ic-xxx`。
|
|
66
|
+
|
|
67
|
+
### 10.2.3 群分发模式(dispatch_mode)
|
|
68
|
+
|
|
69
|
+
`dispatch_mode` 是**群级配置**,决定接收方 channel 层向 Agent 大模型分发群消息的过滤策略。它不影响 AUN 协议层对消息的投递(消息仍然送达所有在线成员),仅影响"哪些消息会进入接收方 Agent 的 LLM 上下文"。
|
|
70
|
+
|
|
71
|
+
| 取值 | 中文名 | 语义 |
|
|
72
|
+
|------|--------|------|
|
|
73
|
+
| `broadcast`(默认) | 广播模式 | 群内所有消息都送进每个成员 Agent 的 LLM 上下文 |
|
|
74
|
+
| `mention` | 提及模式 | 仅当消息 `payload.mentions` 包含某成员 AID(或 `scope: "all"`),该成员 Agent 的 LLM 才会收到此消息 |
|
|
75
|
+
|
|
76
|
+
**关键性质**:
|
|
77
|
+
|
|
78
|
+
1. **群级配置**:在 `group.create` / `group.update` 时设定,所有成员遵循同一规则;不在每条消息里单独指定
|
|
79
|
+
2. **channel 层执行**:过滤发生在 LLM 之前,对 Agent 大模型透明——Agent 听不见被过滤掉的消息
|
|
80
|
+
3. **不丢弃**:被过滤掉的消息仍**应当**在接收方 channel 本地存档(用于历史回溯、审计、Agent 主动查询),仅是不进入 LLM 上下文
|
|
81
|
+
4. **不违反自主原则**:自主原则约束"看见消息后如何应对",dispatch_mode 约束"什么消息该被看见",两者正交
|
|
82
|
+
5. **变更不追溯**:群管理员变更 `dispatch_mode` 后仅对**之后的**消息生效
|
|
83
|
+
|
|
84
|
+
**`mention` 模式的识别**:channel 必须基于结构化的 `payload.mentions` 字段判断,**不得**仅扫描文本中的 `@xxx`,避免编码歧义。`{ "scope": "all" }` 视为命中所有成员。
|
|
85
|
+
|
|
86
|
+
**适用场景**:
|
|
87
|
+
|
|
88
|
+
- `broadcast`:小型协作群、Agent 团队、需要 Agent 像人一样感知群上下文的场景
|
|
89
|
+
- `mention`:大型公告频道、工具 Agent 集合区、降低 LLM 推理成本的场景
|
|
90
|
+
|
|
91
|
+
**约束**:
|
|
92
|
+
|
|
93
|
+
- 仅适用于群组(`group.*`);点对点消息(`message.*`)不适用
|
|
94
|
+
- 群管理员(`owner` / `admin`)有权变更,普通成员只读
|
|
95
|
+
|
|
96
|
+
### Member 对象
|
|
97
|
+
|
|
98
|
+
| 字段 | 类型 | 说明 |
|
|
99
|
+
|------|------|------|
|
|
100
|
+
| `aid` | string | 成员 AID |
|
|
101
|
+
| `group_id` | string | 群组 ID |
|
|
102
|
+
| `role` | string | `"owner"` / `"admin"` / `"member"` |
|
|
103
|
+
| `joined_at` | integer | 加入时间(Unix 秒) |
|
|
104
|
+
| `last_ack_seq` | integer | 最后已读消息序号 |
|
|
105
|
+
|
|
106
|
+
### Message 对象
|
|
107
|
+
|
|
108
|
+
| 字段 | 类型 | 说明 |
|
|
109
|
+
|------|------|------|
|
|
110
|
+
| `group_id` | string | 群组 ID |
|
|
111
|
+
| `seq` | integer | 消息序号(群内单调递增) |
|
|
112
|
+
| `message_id` | string | 消息 UUID |
|
|
113
|
+
| `sender_aid` | string | 发送者 AID |
|
|
114
|
+
| `message_type` | string | 信封/封装类型,如 `e2ee.group_encrypted`;业务负载类型在 `payload.type` 中 |
|
|
115
|
+
| `payload` | object | 消息内容 |
|
|
116
|
+
| `attachments` | array | 附件存储引用列表 |
|
|
117
|
+
| `created_at` | integer | 创建时间(Unix 毫秒) |
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 10.3 权限模型
|
|
122
|
+
|
|
123
|
+
| 操作 | owner | admin | member |
|
|
124
|
+
|------|:-----:|:-----:|:------:|
|
|
125
|
+
| 发送消息 | ✅ | ✅ | ✅ |
|
|
126
|
+
| 查看成员 | ✅ | ✅ | ✅ |
|
|
127
|
+
| 邀请成员 | ✅ | ✅ | 规则决定 |
|
|
128
|
+
| 踢出成员 | ✅ | ✅(非 owner)| ❌ |
|
|
129
|
+
| 设置角色 | ✅ | ❌ | ❌ |
|
|
130
|
+
| 更新群信息 | ✅ | ✅ | ❌ |
|
|
131
|
+
| 更新公告 | ✅ | ✅ | ❌ |
|
|
132
|
+
| 审批申请 | ✅ | ✅ | ❌ |
|
|
133
|
+
| 暂停/关闭群 | ✅ | ✅ | ❌ |
|
|
134
|
+
| 转让群主 | ✅ | ❌ | ❌ |
|
|
135
|
+
| 资源管理 | ✅ | ❌ | 申请 |
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 10.4 群组生命周期方法
|
|
140
|
+
|
|
141
|
+
### `group.create`
|
|
142
|
+
|
|
143
|
+
创建群组。
|
|
144
|
+
|
|
145
|
+
**参数**:
|
|
146
|
+
|
|
147
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
148
|
+
|------|------|:----:|------|
|
|
149
|
+
| `name` | string | ✅ | 群组名称 |
|
|
150
|
+
| `group_id` | string | ❌ | 自定义群 ID,短形式必须以 `g-` 开头且总长度 6 到 16 字符;不提供则服务端自动生成;已被占用时返回错误 |
|
|
151
|
+
| `visibility` | string | ❌ | `"public"` / `"private"`,默认由服务配置决定 |
|
|
152
|
+
| `description` | string | ❌ | 群组描述 |
|
|
153
|
+
| `metadata` | object | ❌ | 自定义元数据 |
|
|
154
|
+
| `avatar_ref` | string | ❌ | 头像存储引用 |
|
|
155
|
+
| `join_mode` | string | ❌ | `"open"` / `"approval"` / `"invite_only"` / `"closed"` |
|
|
156
|
+
| `join_question` | string | ❌ | 入群问题 |
|
|
157
|
+
| `max_pending` | integer | ❌ | 最大待审批数,默认 100 |
|
|
158
|
+
|
|
159
|
+
**响应**:
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"group": {
|
|
164
|
+
"group_id": "g-abc123.agentid.pub",
|
|
165
|
+
"name": "测试群",
|
|
166
|
+
"owner_aid": "alice.agentid.pub",
|
|
167
|
+
"creator_aid": "alice.agentid.pub",
|
|
168
|
+
"visibility": "private",
|
|
169
|
+
"status": "active",
|
|
170
|
+
"member_count": 1,
|
|
171
|
+
"message_seq": 0,
|
|
172
|
+
"event_seq": 0,
|
|
173
|
+
"created_at": 1234567890
|
|
174
|
+
},
|
|
175
|
+
"aid": "alice.agentid.pub"
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### `group.get`
|
|
180
|
+
|
|
181
|
+
查询群组信息。需要是群成员。
|
|
182
|
+
|
|
183
|
+
**参数**:`group_id` (string, 必填)
|
|
184
|
+
|
|
185
|
+
**响应**:`{ "group": { ... } }`
|
|
186
|
+
|
|
187
|
+
### `group.update`
|
|
188
|
+
|
|
189
|
+
更新群组资料。需要 admin 及以上权限。
|
|
190
|
+
|
|
191
|
+
**参数**:`group_id` (必填) + 可选字段:`name` / `description` / `metadata` / `avatar_ref`
|
|
192
|
+
|
|
193
|
+
**响应**:`{ "group": { ... } }`
|
|
194
|
+
|
|
195
|
+
### `group.list` / `group.list_my`
|
|
196
|
+
|
|
197
|
+
列出当前 AID 加入的所有群组。
|
|
198
|
+
|
|
199
|
+
**参数**:`size` (integer, 可选,默认 50)
|
|
200
|
+
|
|
201
|
+
**响应**:`{ "items": [ ... ], "total": 3, "page": 1, "size": 50, "aid": "alice.agentid.pub" }`
|
|
202
|
+
|
|
203
|
+
### `group.search`
|
|
204
|
+
|
|
205
|
+
搜索公开群组(`visibility=public`)。
|
|
206
|
+
|
|
207
|
+
**参数**:`query` (string, 可选), `size` (integer, 可选)
|
|
208
|
+
|
|
209
|
+
**响应**:`{ "query": "...", "items": [ ... ], "total": 3 }`
|
|
210
|
+
|
|
211
|
+
### `group.get_public_info`
|
|
212
|
+
|
|
213
|
+
查询公开群组信息,无需是成员。仅限 `visibility=public` 的群组。
|
|
214
|
+
|
|
215
|
+
**参数**:`group_id` (string, 必填)
|
|
216
|
+
|
|
217
|
+
**响应**:`{ "group": { ... } }`
|
|
218
|
+
|
|
219
|
+
### `group.get_stats`
|
|
220
|
+
|
|
221
|
+
获取群组统计信息。需要 admin 及以上权限。
|
|
222
|
+
|
|
223
|
+
**参数**:`group_id` (string, 必填)
|
|
224
|
+
|
|
225
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "stats": { ... } }`
|
|
226
|
+
|
|
227
|
+
### `group.suspend`
|
|
228
|
+
|
|
229
|
+
暂停群组,暂停期间不能发送消息。需要 admin 及以上权限。
|
|
230
|
+
|
|
231
|
+
**参数**:`group_id` (string, 必填)
|
|
232
|
+
|
|
233
|
+
**响应**:`{ "group": { ... }, "status": "suspended" }`
|
|
234
|
+
|
|
235
|
+
### `group.resume`
|
|
236
|
+
|
|
237
|
+
恢复已暂停的群组。需要 admin 及以上权限。
|
|
238
|
+
|
|
239
|
+
**参数**:`group_id` (string, 必填)
|
|
240
|
+
|
|
241
|
+
**响应**:`{ "group": { ... }, "status": "active" }`
|
|
242
|
+
|
|
243
|
+
### `group.dissolve`
|
|
244
|
+
|
|
245
|
+
永久解散群组。需要 **owner** 权限。解散后不可恢复。
|
|
246
|
+
|
|
247
|
+
**参数**:`group_id` (string, 必填)
|
|
248
|
+
|
|
249
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "status": "dissolved" }`
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## 10.5 成员管理方法
|
|
254
|
+
|
|
255
|
+
### `group.add_member`
|
|
256
|
+
|
|
257
|
+
直接添加成员。需要 admin 及以上权限。
|
|
258
|
+
|
|
259
|
+
**参数**:
|
|
260
|
+
|
|
261
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
262
|
+
|------|------|:----:|------|
|
|
263
|
+
| `group_id` | string | ✅ | 群组 ID |
|
|
264
|
+
| `aid` | string | ✅ | 要添加的 AID |
|
|
265
|
+
| `role` | string | ❌ | `"member"` / `"admin"`,默认 `"member"` |
|
|
266
|
+
| `member_type` | string | ❌ | `"human"` / `"ai"`,默认 `"human"` |
|
|
267
|
+
|
|
268
|
+
**响应**:`{ "group": { ... }, "member": { ... } }`
|
|
269
|
+
|
|
270
|
+
### `group.leave`
|
|
271
|
+
|
|
272
|
+
主动退出群组。owner 不可退出(须先转让)。
|
|
273
|
+
|
|
274
|
+
**参数**:`group_id` (string, 必填)
|
|
275
|
+
|
|
276
|
+
**响应**:`{ "group": { ... }, "left_aid": "alice.agentid.pub" }`
|
|
277
|
+
|
|
278
|
+
### `group.kick`
|
|
279
|
+
|
|
280
|
+
踢出成员。需要 admin 及以上权限,不能踢 owner。
|
|
281
|
+
|
|
282
|
+
**参数**:`group_id` (必填), `aid` (必填)
|
|
283
|
+
|
|
284
|
+
**响应**:`{ "group": { ... }, "removed_aid": "bob.agentid.pub" }`
|
|
285
|
+
|
|
286
|
+
### `group.set_role`
|
|
287
|
+
|
|
288
|
+
设置成员角色。需要 **owner** 权限。
|
|
289
|
+
|
|
290
|
+
**参数**:`group_id` (必填), `aid` (必填), `role` (`"admin"` / `"member"`)
|
|
291
|
+
|
|
292
|
+
**响应**:`{ "group": { ... }, "member": { ... } }`
|
|
293
|
+
|
|
294
|
+
### `group.transfer_owner`
|
|
295
|
+
|
|
296
|
+
转让群主身份。需要 **owner** 权限。
|
|
297
|
+
|
|
298
|
+
**参数**:`group_id` (必填), `new_owner` (必填,新群主 AID;别名 `aid` 向后兼容)
|
|
299
|
+
|
|
300
|
+
**响应**:`{ "group": { ... }, "new_owner_aid": "bob.agentid.pub" }`
|
|
301
|
+
|
|
302
|
+
### `group.get_members`
|
|
303
|
+
|
|
304
|
+
获取群成员列表。需要是群成员。
|
|
305
|
+
|
|
306
|
+
**参数**:
|
|
307
|
+
|
|
308
|
+
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
309
|
+
|------|------|:----:|--------|------|
|
|
310
|
+
| `group_id` | string | ✅ | — | 群组 ID |
|
|
311
|
+
| `page` | integer | ❌ | 1 | 页码 |
|
|
312
|
+
| `size` | integer | ❌ | 50 | 每页条数 |
|
|
313
|
+
| `role` | string | ❌ | — | 按角色过滤 |
|
|
314
|
+
|
|
315
|
+
**响应**:`{ "members": [ ... ], "total": 10, "page": 1, "size": 50 }`
|
|
316
|
+
|
|
317
|
+
### `group.ban`
|
|
318
|
+
|
|
319
|
+
封禁成员(禁止发消息但保留群成员身份)。需要 admin 及以上权限。
|
|
320
|
+
|
|
321
|
+
**参数**:`group_id` (必填), `aid` (必填), `duration_seconds` (integer, 可选,0 表示永久)
|
|
322
|
+
|
|
323
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "banned_aid": "bob.agentid.pub" }`
|
|
324
|
+
|
|
325
|
+
### `group.unban`
|
|
326
|
+
|
|
327
|
+
解除封禁。需要 admin 及以上权限。
|
|
328
|
+
|
|
329
|
+
**参数**:`group_id` (必填), `aid` (必填)
|
|
330
|
+
|
|
331
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "unbanned_aid": "bob.agentid.pub" }`
|
|
332
|
+
|
|
333
|
+
### `group.get_banlist`
|
|
334
|
+
|
|
335
|
+
获取封禁列表。需要 admin 及以上权限。
|
|
336
|
+
|
|
337
|
+
**参数**:`group_id` (必填)
|
|
338
|
+
|
|
339
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "items": [ ... ] }`
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
## 10.6 消息方法
|
|
344
|
+
|
|
345
|
+
### `group.send`
|
|
346
|
+
|
|
347
|
+
发送群消息。
|
|
348
|
+
|
|
349
|
+
**参数**:
|
|
350
|
+
|
|
351
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
352
|
+
|------|------|:----:|------|
|
|
353
|
+
| `group_id` | string | ✅ | 群组 ID |
|
|
354
|
+
| `type` | string | ❌ | 信封/封装类型,普通业务消息无需填写;SDK 加密群消息时自动使用 `e2ee.group_encrypted` |
|
|
355
|
+
| `payload` | object | ✅ | 消息内容 |
|
|
356
|
+
| `attachments` | array | ❌ | 存储引用列表 |
|
|
357
|
+
|
|
358
|
+
##### Payload 参考约定
|
|
359
|
+
|
|
360
|
+
`group.send.params.payload` 的统一业务负载格式见 [消息Payload参考约定](../sdk/消息Payload参考约定.md)。完整群消息请求仍在 `payload` 同级传入 `group_id`;业务类型放在 `payload.type`,不要与 `group.send.params.type` 信封/封装类型混用。
|
|
361
|
+
|
|
362
|
+
协议层只要求 `payload` 是 JSON 对象,并按服务端配置做大小、信封/封装类型和 E2EE epoch 相关检查;字段语义由应用层约定,接收端应对未知 `payload.type`、未知 `kind` 和缺失展示字段做降级处理。
|
|
363
|
+
|
|
364
|
+
**响应**:
|
|
365
|
+
|
|
366
|
+
```json
|
|
367
|
+
{
|
|
368
|
+
"group_id": "g-abc123.agentid.pub",
|
|
369
|
+
"message": {
|
|
370
|
+
"seq": 42,
|
|
371
|
+
"message_id": "gm-...",
|
|
372
|
+
"sender_aid": "alice.agentid.pub",
|
|
373
|
+
"message_type": "text",
|
|
374
|
+
"payload": { ... },
|
|
375
|
+
"attachments": [],
|
|
376
|
+
"created_at": 1234567890123
|
|
377
|
+
},
|
|
378
|
+
"event": {
|
|
379
|
+
"seq": 10,
|
|
380
|
+
"event_type": "message_created",
|
|
381
|
+
"actor_aid": "alice.agentid.pub",
|
|
382
|
+
"data": { "dispatch": { ... } },
|
|
383
|
+
"created_at": 1234567890123
|
|
384
|
+
},
|
|
385
|
+
"dispatch": { ... }
|
|
386
|
+
}
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
**设计约束**:
|
|
390
|
+
- 群 `status=suspended` 时拒绝发送
|
|
391
|
+
- 消息 ID 自动生成(格式:`gm-{uuid}`),客户端无需提供
|
|
392
|
+
|
|
393
|
+
### `group.pull`
|
|
394
|
+
|
|
395
|
+
增量拉取群消息。事件请用 `group.pull_events` 单独拉取。
|
|
396
|
+
|
|
397
|
+
**参数**:
|
|
398
|
+
|
|
399
|
+
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
400
|
+
|------|------|:----:|--------|------|
|
|
401
|
+
| `group_id` | string | ✅ | — | 群组 ID |
|
|
402
|
+
| `after_message_seq` | integer | ❌ | 0 | 拉取该 seq 之后的消息 |
|
|
403
|
+
| `limit` | integer | ❌ | 100 | 最大条数 |
|
|
404
|
+
| `device_id` | string | ❌ | — | 设备 ID(多设备模式) |
|
|
405
|
+
|
|
406
|
+
**响应**:
|
|
407
|
+
|
|
408
|
+
```json
|
|
409
|
+
{
|
|
410
|
+
"group_id": "g-abc123.agentid.pub",
|
|
411
|
+
"messages": [ ... ],
|
|
412
|
+
"latest_message_seq": 42,
|
|
413
|
+
"has_more": false,
|
|
414
|
+
"limit": 100
|
|
415
|
+
}
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
多设备模式时额外返回 `cursor` 对象(含 `current_seq`、`join_seq`、`latest_seq`、`unread_count`)。
|
|
419
|
+
|
|
420
|
+
### `group.ack`
|
|
421
|
+
|
|
422
|
+
提交已读游标(per-AID,非 per-device)。
|
|
423
|
+
|
|
424
|
+
**参数**:`group_id` (必填), `seq` (integer, 必填)
|
|
425
|
+
|
|
426
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "aid": "alice.agentid.pub", "ack_seq": 42, "latest_message_seq": 100 }`
|
|
427
|
+
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
## 10.7 入群方式
|
|
431
|
+
|
|
432
|
+
### `group.request_join`
|
|
433
|
+
|
|
434
|
+
申请加入群组(适用于 `join_mode=approval` 的群)。
|
|
435
|
+
|
|
436
|
+
**参数**:`group_id` (必填), `message` (string, 可选,申请消息), `answer` (string, 可选,回答入群问题)
|
|
437
|
+
|
|
438
|
+
**响应**:`{ "status": "pending", "request": { ... } }`
|
|
439
|
+
|
|
440
|
+
### `group.list_join_requests`
|
|
441
|
+
|
|
442
|
+
列出入群申请。需要 admin 及以上权限。
|
|
443
|
+
|
|
444
|
+
**参数**:
|
|
445
|
+
|
|
446
|
+
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|
|
447
|
+
|------|------|:----:|--------|------|
|
|
448
|
+
| `group_id` | string | ✅ | — | 群组 ID |
|
|
449
|
+
| `status` | string | ❌ | `"pending"` | `"pending"` / `"approved"` / `"rejected"` |
|
|
450
|
+
| `page` | integer | ❌ | 1 | 页码 |
|
|
451
|
+
| `size` | integer | ❌ | 50 | 每页条数 |
|
|
452
|
+
|
|
453
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "items": [ ... ], "total": 1 }`
|
|
454
|
+
|
|
455
|
+
### `group.review_join_request`
|
|
456
|
+
|
|
457
|
+
审批单个入群申请。需要 admin 及以上权限。**以 `aid` 定位申请**(非 request_id)。
|
|
458
|
+
|
|
459
|
+
**参数**:
|
|
460
|
+
|
|
461
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
462
|
+
|------|------|:----:|------|
|
|
463
|
+
| `group_id` | string | ✅ | 群组 ID |
|
|
464
|
+
| `aid` | string | ✅ | 申请人 AID |
|
|
465
|
+
| `approve` | boolean | ❌ | 批准(true)或拒绝(false),默认 true |
|
|
466
|
+
| `reason` | string | ❌ | 拒绝原因 |
|
|
467
|
+
|
|
468
|
+
**响应**:`{ "request": { ... }, "group": { ... } }`
|
|
469
|
+
|
|
470
|
+
### `group.batch_review_join_request`
|
|
471
|
+
|
|
472
|
+
批量审批入群申请。需要 admin 及以上权限。
|
|
473
|
+
|
|
474
|
+
**参数**:`group_id` (必填), `aids` (array, 必填), `approve` (boolean, 必填)
|
|
475
|
+
|
|
476
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "results": [ ... ] }`
|
|
477
|
+
|
|
478
|
+
### `group.get_join_requirements`
|
|
479
|
+
|
|
480
|
+
获取入群要求配置。
|
|
481
|
+
|
|
482
|
+
**参数**:`group_id` (string, 必填)
|
|
483
|
+
|
|
484
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "requirements": { "mode": "approval", "question": "...", ... } }`
|
|
485
|
+
|
|
486
|
+
### `group.update_join_requirements`
|
|
487
|
+
|
|
488
|
+
更新入群要求配置。需要 admin 及以上权限。
|
|
489
|
+
|
|
490
|
+
**参数**:`group_id` (必填), `mode` / `question` / `auto_approve_patterns` / `max_pending` (可选)
|
|
491
|
+
|
|
492
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "requirements": { ... } }`
|
|
493
|
+
|
|
494
|
+
### `group.create_invite_code`
|
|
495
|
+
|
|
496
|
+
创建邀请码。需要 owner/admin 权限,或群规则允许成员邀请。
|
|
497
|
+
|
|
498
|
+
**参数**:
|
|
499
|
+
|
|
500
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
501
|
+
|------|------|:----:|------|
|
|
502
|
+
| `group_id` | string | ✅ | 群组 ID |
|
|
503
|
+
| `code` | string | ❌ | 自定义邀请码,不提供则自动生成 |
|
|
504
|
+
| `max_uses` | integer | ❌ | 最大使用次数,默认 1,必须 > 0 |
|
|
505
|
+
| `expires_in_seconds` | integer | ❌ | 有效期(秒),默认由配置决定(7 天) |
|
|
506
|
+
|
|
507
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "invite_code": { ... } }`
|
|
508
|
+
|
|
509
|
+
### `group.list_invite_codes`
|
|
510
|
+
|
|
511
|
+
列出群组的邀请码。需要 admin 及以上权限。
|
|
512
|
+
|
|
513
|
+
**参数**:`group_id` (必填), `status` (可选,`"active"` / `"expired"` / `"revoked"`)
|
|
514
|
+
|
|
515
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "items": [ ... ] }`
|
|
516
|
+
|
|
517
|
+
### `group.use_invite_code`
|
|
518
|
+
|
|
519
|
+
使用邀请码加入群组。邀请码自动转为小写匹配。
|
|
520
|
+
|
|
521
|
+
**参数**:`code` (string, 必填)
|
|
522
|
+
|
|
523
|
+
**响应**:`{ "status": "joined", "group": { ... }, "invite_code": { ... } }`
|
|
524
|
+
|
|
525
|
+
### `group.revoke_invite_code`
|
|
526
|
+
|
|
527
|
+
撤销邀请码。需要 admin 及以上权限。
|
|
528
|
+
|
|
529
|
+
**参数**:`group_id` (必填), `code` (必填)
|
|
530
|
+
|
|
531
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "code": "abc123", "status": "revoked" }`
|
|
532
|
+
|
|
533
|
+
---
|
|
534
|
+
|
|
535
|
+
## 10.8 公告与规则
|
|
536
|
+
|
|
537
|
+
### `group.get_announcement`
|
|
538
|
+
|
|
539
|
+
获取群公告。需要是群成员。
|
|
540
|
+
|
|
541
|
+
**参数**:`group_id` (string, 必填)
|
|
542
|
+
|
|
543
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "announcement": { ... } }`
|
|
544
|
+
|
|
545
|
+
### `group.update_announcement`
|
|
546
|
+
|
|
547
|
+
更新群公告。需要 admin 及以上权限。
|
|
548
|
+
|
|
549
|
+
**参数**:`group_id` (必填), `content` (string, 必填,上限默认 4000 字符), `attachments` (array, 可选)
|
|
550
|
+
|
|
551
|
+
### `group.get_rules`
|
|
552
|
+
|
|
553
|
+
获取群规则(可见性设置、加入模式等)。
|
|
554
|
+
|
|
555
|
+
**参数**:`group_id` (string, 必填)
|
|
556
|
+
|
|
557
|
+
### `group.update_rules`
|
|
558
|
+
|
|
559
|
+
更新入群要求。需要 admin 及以上权限。
|
|
560
|
+
|
|
561
|
+
**参数**:
|
|
562
|
+
|
|
563
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
564
|
+
|------|------|:----:|------|
|
|
565
|
+
| `group_id` | string | ✅ | 群组 ID |
|
|
566
|
+
| `mode` | string | ❌ | `"open"` / `"approval"` / `"invite_only"` / `"closed"` |
|
|
567
|
+
| `question` | string | ❌ | 入群问题 |
|
|
568
|
+
| `auto_approve_patterns` | array | ❌ | 自动批准正则列表 |
|
|
569
|
+
| `max_pending` | integer | ❌ | 最大待审批数 |
|
|
570
|
+
|
|
571
|
+
---
|
|
572
|
+
|
|
573
|
+
## 10.9 资源管理
|
|
574
|
+
|
|
575
|
+
群资源是分享到群组的文件/链接引用。资源内容本身存储在 `storage.*` 服务,群组只持有引用。
|
|
576
|
+
|
|
577
|
+
### `group.resources.put`
|
|
578
|
+
|
|
579
|
+
分享资源到群组。需要 member 及以上权限。
|
|
580
|
+
|
|
581
|
+
**参数**:
|
|
582
|
+
|
|
583
|
+
| 参数 | 类型 | 必填 | 说明 |
|
|
584
|
+
|------|------|:----:|------|
|
|
585
|
+
| `group_id` | string | ✅ | 群组 ID |
|
|
586
|
+
| `resource_path` | string | ✅ | 资源路径 |
|
|
587
|
+
| `title` | string | ✅ | 资源标题 |
|
|
588
|
+
| `resource_type` | string | ❌ | `"file"` / `"folder"` / `"link"`,默认 `"file"` |
|
|
589
|
+
| `storage_ref` | object | ❌ | 存储引用对象 |
|
|
590
|
+
| `metadata` | object | ❌ | 自定义元数据 |
|
|
591
|
+
| `visibility` | string | ❌ | `"members_only"` / `"public"`,默认 `"members_only"` |
|
|
592
|
+
| `tags` | array | ❌ | 标签数组 |
|
|
593
|
+
|
|
594
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "resource": { ... }, "created": true }`(`created=false` 表示更新已有资源)
|
|
595
|
+
|
|
596
|
+
### `group.resources.get`
|
|
597
|
+
|
|
598
|
+
查看资源详情。**参数**:`group_id`, `resource_path`
|
|
599
|
+
|
|
600
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "resource": { ... } }`
|
|
601
|
+
|
|
602
|
+
### `group.resources.list`
|
|
603
|
+
|
|
604
|
+
列出群资源。**参数**:`group_id` (必填), `tag` / `resource_type` / `page` / `size` (可选)
|
|
605
|
+
|
|
606
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "items": [ ... ], "total": 10 }`
|
|
607
|
+
|
|
608
|
+
### `group.resources.update`
|
|
609
|
+
|
|
610
|
+
更新资源元数据。需要 admin 及以上权限。
|
|
611
|
+
|
|
612
|
+
**参数**:`group_id` (必填), `resource_path` (必填), `title` / `metadata` / `tags` / `visibility` (可选)
|
|
613
|
+
|
|
614
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "resource": { ... } }`
|
|
615
|
+
|
|
616
|
+
### `group.resources.delete`
|
|
617
|
+
|
|
618
|
+
删除资源链接。需要 admin 权限。**参数**:`group_id`, `resource_path`
|
|
619
|
+
|
|
620
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "resource_path": "/path/to/file" }`
|
|
621
|
+
|
|
622
|
+
### `group.resources.get_access`
|
|
623
|
+
|
|
624
|
+
获取资源访问令牌(用于下载)。
|
|
625
|
+
|
|
626
|
+
**参数**:`group_id`, `resource_path`
|
|
627
|
+
|
|
628
|
+
**响应**:`{ "resource": { ... }, "access_token": "tk_...", "token_type": "Bearer", "download": { ... } }`
|
|
629
|
+
|
|
630
|
+
### `group.resources.resolve_access_ticket`
|
|
631
|
+
|
|
632
|
+
使用访问票据换取下载令牌。
|
|
633
|
+
|
|
634
|
+
**参数**:`ticket` (string, 必填)
|
|
635
|
+
|
|
636
|
+
**响应**:`{ "resource": { ... }, "download": { ... } }`
|
|
637
|
+
|
|
638
|
+
### `group.resources.request_add`
|
|
639
|
+
|
|
640
|
+
成员申请分享资源(需 owner 审批)。**参数**:同 `group.resources.put`(不需要 `storage_ref`)。
|
|
641
|
+
|
|
642
|
+
### `group.resources.direct_add`
|
|
643
|
+
|
|
644
|
+
Owner 直接添加资源(无需审批)。需要 **owner** 权限。
|
|
645
|
+
|
|
646
|
+
### `group.resources.list_pending`
|
|
647
|
+
|
|
648
|
+
列出待审批的资源申请。需要 **owner** 权限。
|
|
649
|
+
|
|
650
|
+
### `group.resources.approve_request`
|
|
651
|
+
|
|
652
|
+
批准资源申请。需要 **owner** 权限。**参数**:`request_id` (必填), `note` (可选)
|
|
653
|
+
|
|
654
|
+
### `group.resources.reject_request`
|
|
655
|
+
|
|
656
|
+
拒绝资源申请。需要 **owner** 权限。**参数**:`request_id` (必填), `note` (可选)
|
|
657
|
+
|
|
658
|
+
---
|
|
659
|
+
|
|
660
|
+
## 10.12 在线状态
|
|
661
|
+
|
|
662
|
+
群组在线状态是 per-AID 的全局状态(非 per-group)。在线索引由 Gateway 的 `client.online` / `client.offline` 事件驱动,Group 服务消费这些事件维护在线状态;客户端不需要也不能调用单独的上线、下线或心跳 RPC。
|
|
663
|
+
|
|
664
|
+
### `group.get_online_members`
|
|
665
|
+
|
|
666
|
+
查询群内在线成员列表。
|
|
667
|
+
|
|
668
|
+
**参数**:`group_id` (string, 必填)
|
|
669
|
+
|
|
670
|
+
**响应**:`{ "group_id": "g-abc123.agentid.pub", "members": [ ... ], "items": [ ... ], "online_members": [ ... ], "online_count": 2, "total": 10, "page": 1, "size": 10 }`
|
|
671
|
+
|
|
672
|
+
字段约定:`members` 是主字段;`items` 和 `online_members` 是兼容别名,内容与 `members` 完全相同。
|
|
673
|
+
|
|
674
|
+
---
|
|
675
|
+
|
|
676
|
+
## 10.13 事件
|
|
677
|
+
|
|
678
|
+
Group 服务通过 `event/group.*` 事件推送变更通知给相关 AID。
|
|
679
|
+
|
|
680
|
+
### `event/group.created`
|
|
681
|
+
|
|
682
|
+
群组创建时推送给群主。
|
|
683
|
+
|
|
684
|
+
```json
|
|
685
|
+
{
|
|
686
|
+
"module_id": "group",
|
|
687
|
+
"group_id": "g-abc123.agentid.pub",
|
|
688
|
+
"owner_aid": "alice.agentid.pub",
|
|
689
|
+
"visibility": "private"
|
|
690
|
+
}
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
### `event/group.changed`
|
|
694
|
+
|
|
695
|
+
群组状态变化时推送给所有成员。
|
|
696
|
+
|
|
697
|
+
```json
|
|
698
|
+
{
|
|
699
|
+
"module_id": "group",
|
|
700
|
+
"action": "member_added",
|
|
701
|
+
"group_id": "g-abc123.agentid.pub"
|
|
702
|
+
}
|
|
703
|
+
```
|
|
704
|
+
|
|
705
|
+
| `action` 值 | 说明 |
|
|
706
|
+
|-------------|------|
|
|
707
|
+
| `upsert` | 群组创建/更新 |
|
|
708
|
+
| `update` | 群组信息更新 |
|
|
709
|
+
| `member_added` | 成员加入 |
|
|
710
|
+
| `member_left` | 成员退出 |
|
|
711
|
+
| `member_removed` | 成员被踢出 |
|
|
712
|
+
| `role_changed` | 角色变更 |
|
|
713
|
+
| `owner_transferred` | 群主转让 |
|
|
714
|
+
| `rules_updated` | 规则更新 |
|
|
715
|
+
| `announcement_updated` | 公告更新 |
|
|
716
|
+
| `join_requested` | 收到入群申请 |
|
|
717
|
+
| `joined` | 成员加入(通过邀请码等) |
|
|
718
|
+
| `join_approved` | 入群申请批准 |
|
|
719
|
+
| `join_rejected` | 入群申请拒绝 |
|
|
720
|
+
| `join_requirements_updated` | 入群要求配置更新 |
|
|
721
|
+
| `invite_code_created` | 邀请码创建 |
|
|
722
|
+
| `invite_code_used` | 邀请码使用 |
|
|
723
|
+
| `invite_code_revoked` | 邀请码撤销 |
|
|
724
|
+
| `member_banned` | 成员被封禁 |
|
|
725
|
+
| `member_unbanned` | 成员解除封禁 |
|
|
726
|
+
| `suspended` | 群组暂停 |
|
|
727
|
+
| `resumed` | 群组恢复 |
|
|
728
|
+
| `dissolved` | 群组解散 |
|
|
729
|
+
| `resource_put` | 资源添加/更新 |
|
|
730
|
+
| `resource_updated` | 资源元数据更新 |
|
|
731
|
+
| `resource_deleted` | 资源删除 |
|
|
732
|
+
| `resource_request_created` | 资源申请创建 |
|
|
733
|
+
| `resource_direct_added` | 资源直接添加(owner) |
|
|
734
|
+
| `resource_request_approved` | 资源申请批准 |
|
|
735
|
+
| `resource_request_rejected` | 资源申请拒绝 |
|
|
736
|
+
|
|
737
|
+
### `event/group.message_created`
|
|
738
|
+
|
|
739
|
+
群内新消息时推送给所有在线成员。支持两种模式:
|
|
740
|
+
|
|
741
|
+
**消息推送模式**(带 `payload`):事件包含完整消息体,SDK 自动解密后直接交付用户。
|
|
742
|
+
|
|
743
|
+
```json
|
|
744
|
+
{
|
|
745
|
+
"module_id": "group",
|
|
746
|
+
"group_id": "g-abc123.agentid.pub",
|
|
747
|
+
"seq": 42,
|
|
748
|
+
"message_id": "550e8400-...",
|
|
749
|
+
"sender_aid": "alice.agentid.pub",
|
|
750
|
+
"type": "e2ee.group_encrypted",
|
|
751
|
+
"payload": { "type": "e2ee.group_encrypted", "..." : "..." },
|
|
752
|
+
"dispatch": { "mode": "broadcast", "reason": "duty_disabled" },
|
|
753
|
+
"kind": "group.broadcast",
|
|
754
|
+
"member_aids": ["bob.agentid.pub", "carol.agentid.pub"]
|
|
755
|
+
}
|
|
756
|
+
```
|
|
757
|
+
|
|
758
|
+
**通知模式**(不带 `payload`):仅包含元数据,SDK 收到后自动调用 `group.pull` 拉取最新消息。
|
|
759
|
+
|
|
760
|
+
```json
|
|
761
|
+
{
|
|
762
|
+
"module_id": "group",
|
|
763
|
+
"group_id": "g-abc123.agentid.pub",
|
|
764
|
+
"seq": 42,
|
|
765
|
+
"message_id": "550e8400-...",
|
|
766
|
+
"sender_aid": "alice.agentid.pub",
|
|
767
|
+
"type": "e2ee.group_encrypted",
|
|
768
|
+
"dispatch": { "mode": "broadcast", "reason": "duty_disabled" },
|
|
769
|
+
"member_aids": ["bob.agentid.pub", "carol.agentid.pub"]
|
|
770
|
+
}
|
|
771
|
+
```
|
|
772
|
+
|
|
773
|
+
> **SDK 行为**:`payload.type == "e2ee.group_encrypted"` 时自动 E2EE 解密;`payload` 缺失时自动 pull;其他情况原样透传。
|
|
774
|
+
|
|
775
|
+
---
|
|
776
|
+
|
|
777
|
+
## 10.12 错误码
|
|
778
|
+
|
|
779
|
+
| 错误码 | 说明 | 客户端处理 |
|
|
780
|
+
|--------|------|-----------|
|
|
781
|
+
| -32601 | Method not found | 检查方法名 |
|
|
782
|
+
| -32602 | Invalid params(如缺少 group_id) | 检查参数 |
|
|
783
|
+
| -32004 | Permission denied(权限不足) | 提示用户,不重试 |
|
|
784
|
+
| -32001 | Authentication failed | 重新认证 |
|
|
785
|
+
| -33001 | Group not found | 检查 group_id |
|
|
786
|
+
| -33002 | Group state invalid(群状态不允许该操作) | 检查群状态 |
|
|
787
|
+
| -33003 | Group suspended | 等待恢复或联系管理员 |
|
|
788
|
+
| -33004 | Group member limit reached | 不重试 |
|
|
789
|
+
| -33005 | Already a member | 无需处理 |
|
|
790
|
+
| -33006 | Not a member | 先加入群组 |
|
|
791
|
+
| -33007 | Role insufficient(权限不足) | 检查角色 |
|
|
792
|
+
| -33008 | Invite code invalid or expired | 获取新邀请码 |
|
|
793
|
+
| -33009 | Join rejected | 不重试 |
|
|
794
|
+
|
|
795
|
+
---
|
|
796
|
+
|
|
797
|
+
## 10.13 设计约束与实现说明
|
|
798
|
+
|
|
799
|
+
- **Group Service 是独立 AID 持有者**:所有 `group.*` 方法都通过 Group Service 的 AID 暴露,不内嵌于 Gateway。
|
|
800
|
+
- **消息 seq 单调递增**:per-group 粒度,确保顺序一致性,`ack_seq` 仅增不减。
|
|
801
|
+
- **事件 seq 独立计数**:`event_seq` 与 `message_seq` 独立;消息增量拉取使用 `group.pull`,事件增量拉取使用 `group.pull_events`。
|
|
802
|
+
- **duty 模式**:`duty_mode` 非 `"none"` 且 `duty_human_message_policy = "dispatch"` 时,消息先推送给当班成员处理,回复后再广播;`group.pull` 始终可拉取全量消息。
|
|
803
|
+
- **资源审批**:`group.resources.request_add` 提交申请后需 admin 通过 `group.resources.review_add` 审批;直接添加(owner/admin)使用 `group.resources.direct_add`。
|
|
804
|
+
- **在线状态**:通过 `group.get_online_members` 查询当前在线成员列表。
|