控制台开通服务与获取凭证
实名认证、创建项目、App ID / Customer Secret / App Certificate、轮换密钥、开通录制与推流。
这一页说明「一个项目从开通到能入会」需要做的四件事:建项目 → 拿凭证 → 开通服务 → 配回调。控制台 UI 的逐页操作见 控制台使用指南;这里给出等价的 REST 步骤,因为它可脚本化、可复跑。
前置条件
- 控制面已启动:代码库根目录
pnpm dev:api(默认https://api.your-domain.example),或 文档与接口定义自动化校验(默认https://api.your-domain.example)。 - 有一个控制台账号。本地演示账号:
owner@example.com/change-me-now(可用CONSOLE_SEED_EMAIL/CONSOLE_SEED_PASSWORD覆盖)。
第 1 步:登录控制台拿会话
curl -s -X POST "$NIMEET_API_BASE/console/auth/login" \
-H 'Content-Type: application/json' \
-d '{"email":"owner@example.com","password":"change-me-now"}'响应里的 token 就是后续 /console/* 调用的 Authorization: Bearer <token>。会话有独立的过期时间,与项目凭证无关。
第 2 步:创建项目,保存一次性凭证
curl -s -X POST "$NIMEET_API_BASE/console/projects" \
-H "Authorization: Bearer $NIMEET_CONSOLE_SESSION" \
-H 'Content-Type: application/json' \
-d '{"name":"my-first-project","services":{"recording":true,"streaming":true}}'响应里的四件套就是后续所有调用的凭证:
| 字段 | 用途 | 是否会再次返回 |
|---|---|---|
project.appId | 客户端 SDK 初始化 / REST 路径参数 | 是 |
project.customerId | Basic 凭证用户名 | 是 |
customerSecret | Basic 凭证密码 | 否,只返回一次 |
appCertificate | 签发 Token 的密钥 | 否,只返回一次 |
第 3 步:开通/关闭服务
项目创建时可以通过 services 直接开通,也可以后续单独调整:
curl -s -X POST "$NIMEET_API_BASE/console/projects/$PROJECT_ID/services" \
-H "Authorization: Bearer $NIMEET_CONSOLE_SESSION" \
-H 'Content-Type: application/json' \
-d '{"recording":true,"streaming":true}'服务未开通时调用对应产品接口会返回 403 service_not_enabled(见 错误码全表)。这条规则是刻意的:避免「没开通也悄悄扣费」。
第 4 步:配置回调地址(可选)
curl -s -X PUT "$NIMEET_API_BASE/console/projects/$PROJECT_ID/webhook" \
-H "Authorization: Bearer $NIMEET_CONSOLE_SESSION" \
-H 'Content-Type: application/json' \
-d '{"url":"https://example.com/hooks/nimeet","secret":"$WEBHOOK_SECRET","events":["channel_create","user_join","recording_state_changed"],"enabled":true}'secret 用于计算 Agora-Signature(SHA1)与 Agora-Signature-V2(SHA256);校验方式与重试计划见 回调接入。配置完成后可以在 GET .../webhook/deliveries 看投递日志并重放失败的投递。
第 5 步:自检
# Token 生成器(控制台同款逻辑,服务端直接签发一个测试 Token)
curl -s -X POST "$NIMEET_API_BASE/console/projects/$PROJECT_ID/token" \
-H "Authorization: Bearer $NIMEET_CONSOLE_SESSION" \
-H 'Content-Type: application/json' \
-d '{"channelName":"weekly-sync","uid":10001,"role":"host","ttlSeconds":600}'拿到 rtcToken 后,把它交给任一端的示例代码即可入会(见 快速开始 与对应平台的「快速开始与功能指南」)。
本地等价物:演示凭证文件
pnpm dev:api 首次启动会创建一个演示项目,并把一次性凭证写到服务端数据目录下的 demo-credentials.json。文档示例运行器默认读取该文件,因此不跑上面 5 步也能执行示例:
node 文档站 class="tok-flag">-all.mjs --only=0演示项目在每次 API 重启后重新生成,旧 Token 与旧凭证随之失效——这也是为什么它只能用于本地验证,不能当生产凭证。
常见失败
| 现象 | code | 原因与处理 |
|---|---|---|
| 401 | missing_authorization | 没带会话或凭证 |
| 401 | unauthorized | 会话失效或被吊销(认证失败,不是没权限):重新登录即可,不要按「权限不足」提示用户 |
| 401 | invalid_credentials | 账号密码错误,或 Basic 的 secret 是轮换前的旧值 |
| 403 | banned(details.permissionDenied: true) | 已登录,但该账号无权访问这个项目(项目按账号隔离) |
| 409 | project_exists | 项目名重复;换一个名字再建 |
| 403 | service_not_enabled | 调用了未开通的服务,回到第 3 步开通 |