Appearance
应用市场发布
自建应用只有本组织能用;发布到市场后,其他组织的管理员可以浏览、安装、 单独授权——一次开发,多组织复用。
1. 上架:用途声明 + 平台审核
在应用设置 →「提交审核」,流程是三段状态机:
private ──提交审核──▶ pending_review ──平台批准──▶ published
▲ │
└────────平台驳回────────┘ (改完可重新提交,回到 pending_review)- 前提:页面地址必须是
https://(提交审核时强制校验,本地 http 仅限 调试期的私有应用)。 - 提交审核前必须为每个已勾选的能力(scope)填写一句用途说明(≤300 字符, 在应用编辑页填写)——具体说明"为什么需要",而不是泛泛地写"需要该权限"。 这些说明会展示给平台审核人员,批准后也会展示在市场详情里,供安装方管理员 在「权限」页参考。
- 提交后进入
pending_review:应用不会出现在市场列表里,直到平台审核 通过。被驳回时能看到驳回理由,修改后可重新提交。 - 可见范围(audience)(跟提交审核一起选,批准后生效):
- 留空 = 所有组织可见
- 指定名单 = 只有命中的人/组织/团队能看到并安装:
user_id—— 某个人org:<组织id>—— 该组织全体成员(要求你是该组织成员)team:<团队id>—— 该团队成员(要求你是其所在组织成员)
已上架后扩大能力范围会被自动下架
上架后如果你修改了 scopes(增加能力)或 homepage_url(页面地址),应用 会自动降级回 private 并要求重新提交审核——防止"先用很小的能力范围过审, 上架后再悄悄扩大范围"这条绕过审核的路径。已安装该应用的组织会立即失去访问 (打开应用/调用开放 API 均报应用不存在),直到你重新提交并再次获批。只改 简介/图标/绑定的知识库数据库白名单不会触发这个降级。
2. 安装 ≠ 授权
这是市场模型的核心,向你的用户讲清楚:
| 动作 | 谁做 | 效果 |
|---|---|---|
| 安装 | 安装方组织管理员 | 应用出现在他们的工作台,成员可免登打开 |
| 授权 | 安装方组织管理员 | 勾选的能力才对他们的组织生效 |
安装后默认零授权(仅免登)。影响安装方组织成员的能力需要在「权限」里 逐项勾选:contacts(通讯录)、im(消息)、ai_tools(成员 AI 里的工具)、 local(成员设备上的本地能力);而 ai/kb/db 消耗/访问的都是你(发布方) 的资源,不受安装方授权约束(见 能力说明)。
所以应用后端调用开放 API 时要优雅处理 403:提示用户"请联系贵组织管理员 在应用权限里开启 xx 能力",而不是报错崩溃。
3. 让安装方找到你
市场列表展示:应用名、图标、简介、安装数、发布组织。把图标和简介当产品 首页来写——一句话说清"这个应用帮我做什么"。
4. 生命周期事件
上架后建议订阅事件,app.installed / app.uninstalled / app.scopes.granted 会推送到你的后端——做新客引导、账期统计、授权变更感知 都靠它们。
5. 停用 / 下架 / 删除的影响
| 你的操作 | 对安装方 | 对开放 API |
|---|---|---|
停用应用(status: disabled) | 工作台不再显示(管理员仍可见以便卸载) | authCode 停发;已有 app token 随过期失效 |
下架(market_status 离开 published,含手动改回 private 与因改 scopes/homepage_url 触发的自动降级) | 立即从工作台消失(非管理员成员看不到,管理员仍见)、无法再打开应用或换新 authCode | 不受影响的已有 app token 在过期前仍可用,但该应用已不再是"已安装"状态 |
| 轮换密钥 | 不变 | 所有旧 token 即时失效,安装方后端若自配了你的 secret 需更新(市场应用一般不需要) |
| 删除应用 | 安装关系一并删除 | 凭证即时失效 |
演进策略
页面内容更新无需任何操作(客户端每次打开加载的就是你的最新页面); 接口行为变更请遵循更新日志的兼容性约定并给安装方留迁移期。