AI projects
Quản lý dự án AI (ngữ cảnh workspace cho feed, job, chat, thư viện). Mọi form cần domain đăng ký — xem Authentication.
Hai API trên https://api.gommo.net:
| API | Khi nào dùng |
|---|---|
Legacy POST /ai/projects | List tối giản; lấy id_base làm project_id |
V2 POST /api/v2/ai-projects | Quản lý dự án đầy đủ (scopes, thành viên, CRUD) |
Playground
Playground — Home feed khi chạy npm run docs:stack: Không gian dự án, Thư viện dự án, Ngân sách dự án, Nền tảng (legacy: API legacy). Bảng worker bên dưới.
Liên quan: Cookbook home feed · Endpoint map · Gommo public API
Xác thực
Authorization: Bearer <access_token>+ formaccess_tokendomain= domain đăng ký ($env:GOMMO_API_DOMAIN)
V2 gửi thêm device_id, device_name, device_info. Gateway tự điền device nếu client bỏ trống.
Legacy — danh sách
$domain = $env:GOMMO_API_DOMAIN
if (-not $domain) { throw 'Set GOMMO_API_DOMAIN' }
$h = @{ Authorization = "Bearer $env:TOKEN"; 'Content-Type' = 'application/x-www-form-urlencoded' }
Invoke-RestMethod -Method Post -Uri 'https://api.gommo.net/ai/projects' -Headers $h -Body "access_token=$env:TOKEN&domain=$domain"Self-host: POST {gateway}/gateway/projects
V2 — quản lý dự án
POST https://api.gommo.net/api/v2/ai-projects (form urlencoded), field action:
action | Field bắt buộc | Ghi chú |
|---|---|---|
list | token, domain | data[] có my_scopes, session_count, member_preview, … |
create | name, description | Mô tả ≥ 10 ký tự |
get | id_base | data là một object. Tùy chọn password khi protected — mở khóa (Mở dự án). Sai mật khẩu: success: false, needs_password: true. |
set_password | id_base, password | Tab Chi tiết — MẬT KHẨU TÀI DỰ ÁN. protected: true. Password rỗng = xóa mật khẩu. |
update | id_base, name, description | Tên/mô tả — không đổi mật khẩu dự án. Response có thể có projectInfo và data |
delete | id_base | Dùng id_base, không dùng id số |
member_list | id_base | Tab Thành viên — members[], invites[], my_role, my_scopes |
member_kick | id_base, user_id | Kick thành viên — user_id số từ member_list (đã verify Network) |
invite | id_base, identifier, role, access, scopes | Mời — role: member / mod / admin; scopes JSON (copy Network) |
invite_revoke | invite_id | Thu hồi lời mời — invite_id từ data.invites[] |
set_budget | id_base, budget | Tab Hạn mức — số nguyên; 0 = không giới hạn |
stats | id_base, period | Tab Thống kê — period: all, today, yesterday, this_month, last_month |
activity_list | id_base, limit, offset | Tab Lịch sử hoạt động — mặc định UI: limit=50, offset=0 |
Credit pool (tab Ngân sách): Credit pools.
Thống kê dự án (action=stats)
Response: data.summary (credit chi tiêu/hoàn/nạp, cuộc trò chuyện, đơn media), data.chart, data.project. Khác usage-history (toàn tài khoản). Gateway: POST {gateway}/gateway/ai-projects JSON. Playground: Thống kê sử dụng.
Lịch sử hoạt động (action=activity_list)
Tab modal Lịch sử hoạt động — cùng endpoint V2.
| Field | Bắt buộc | Ghi chú |
|---|---|---|
id_base | có | UUID dự án |
limit | không | UI dealer thường 50 |
offset | không | 0 trang đầu; tăng theo limit để phân trang |
Response: data.items[] — audit (actor_*, summary theo locale, mã sự kiện action khác tên API như invite / member_kick), target_type, target_id, payload, created_time (Unix giây).
Mã action đã thấy (mẫu): project.create, project.update, budget.set, share_credit.on / off, member.invite, member.revoke, member.kick, member.accept. Pool create / deposit / delete có thể có khi upstream ghi log — không đảm bảo trên mọi dự án.
Gateway Mode B:
{
"action": "activity_list",
"id_base": "<id_base từ list>",
"limit": 50,
"offset": 0,
"language": "vi"
}Playground: Nhật ký hoạt động.
Ví dụ PowerShell (V2)
$domain = $env:GOMMO_API_DOMAIN
if (-not $domain) { throw 'Set GOMMO_API_DOMAIN' }
$h = @{ Authorization = "Bearer $env:TOKEN"; 'Content-Type' = 'application/x-www-form-urlencoded' }
$uri = 'https://api.gommo.net/api/v2/ai-projects'
$list = "access_token=$env:TOKEN&domain=$domain&action=list&language=vi"
Invoke-RestMethod -Method Post -Uri $uri -Headers $h -Body $list
$create = "access_token=$env:TOKEN&domain=$domain&action=create&name=Ten+du+an&description=Mo+ta+du+moi+muoi+ky+tu&language=vi"
Invoke-RestMethod -Method Post -Uri $uri -Headers $h -Body $create
$idBase = '<id_base_tu_list>'
$get = "access_token=$env:TOKEN&domain=$domain&action=get&id_base=$idBase&language=vi"
Invoke-RestMethod -Method Post -Uri $uri -Headers $h -Body $get
$upd = "access_token=$env:TOKEN&domain=$domain&action=update&id_base=$idBase&name=Ten+du+an&description=Mo+ta+sau+khi+sua+day+du&language=vi"
Invoke-RestMethod -Method Post -Uri $uri -Headers $h -Body $upd
$del = "access_token=$env:TOKEN&domain=$domain&action=delete&id_base=$idBase&language=vi"
Invoke-RestMethod -Method Post -Uri $uri -Headers $h -Body $del
$members = "access_token=$env:TOKEN&domain=$domain&action=member_list&id_base=$idBase&language=vi"
Invoke-RestMethod -Method Post -Uri $uri -Headers $h -Body $members
$kick = "access_token=$env:TOKEN&domain=$domain&action=member_kick&id_base=$idBase&user_id=75965&language=vi"
Invoke-RestMethod -Method Post -Uri $uri -Headers $h -Body $kick
$budget = "access_token=$env:TOKEN&domain=$domain&action=set_budget&id_base=$idBase&budget=48790&language=vi"
Invoke-RestMethod -Method Post -Uri $uri -Headers $h -Body $budget
$setPwd = "access_token=$env:TOKEN&domain=$domain&action=set_password&id_base=$idBase&password=MAT_KHAU&language=vi"
Invoke-RestMethod -Method Post -Uri $uri -Headers $h -Body $setPwd
$getProtected = "access_token=$env:TOKEN&domain=$domain&action=get&id_base=$idBase&password=MAT_KHAU&language=vi"
Invoke-RestMethod -Method Post -Uri $uri -Headers $h -Body $getProtectedGateway Mode B
POST {gateway}/gateway/ai-projects — JSON, Bearer bắt buộc. Gateway tự thêm domain nếu thiếu. Alias: idBase/projectId → id_base; userId → user_id; inviteId → invite_id. OpenAPI: openapi.yaml.
{ "action": "list", "language": "vi" }{
"action": "get",
"id_base": "<id_base từ list>",
"password": "<khi protected — Mở dự án>",
"language": "vi"
}{
"action": "set_password",
"id_base": "<id_base từ list>",
"password": "<mật mới — chuỗi rỗng = xóa>",
"language": "vi"
}Playground (Home feed)
Khi chạy npm run docs:stack, Playground proxy gateway (same-origin). Menu Home feed dùng nhóm API legacy, Không gian dự án, Thư viện dự án, Ngân sách dự án, Nền tảng — mỗi worker một luồng (tên khớp UI Playground):
| Nhóm | Worker Playground | action | Field form chính |
|---|---|---|---|
| Không gian dự án | Duyệt dự án | list | language |
| Không gian dự án | Mở dự án | get | id_base, password (tùy chọn) |
| Không gian dự án | Mật khẩu dự án | set_password | id_base, password (rỗng = xóa) |
| Không gian dự án | Tạo / Sửa / Xóa dự án | create, update, delete | name, description, id_base |
| Không gian dự án | Thành viên & lời mời / Mời / Thu hồi / Gỡ | member_list, invite, invite_revoke, member_kick | Xem mục dưới; access (tùy chọn) trên invite |
| Không gian dự án | Hạn mức / Thống kê / Nhật ký | set_budget, stats, activity_list | id_base, budget / period / limit+offset |
| Không gian dự án | Nâng cao: action tùy chỉnh | action bất kỳ | action + field tùy chọn |
Worker Home feed không dùng Limit / After ID của thư viện media.
Tab Request vs Send: preview có thể hiện placeholder ({id_base}, gợi ý password) khi ô trống; Send chỉ gửi giá trị đã điền. set_password luôn gửi key password.
Kick thành viên (Mode B)
{
"action": "member_kick",
"id_base": "<id_base>",
"user_id": 75965,
"language": "vi"
}Mời thành viên (Mode B)
{
"action": "invite",
"id_base": "<id_base>",
"identifier": "username",
"role": "member",
"access": "view",
"scopes": { "...": "copy JSON từ Network dealer theo role" },
"language": "vi"
}Gateway default access nếu bỏ trống: member → view, mod/admin → edit.
Thu hồi lời mời
{
"action": "invite_revoke",
"invite_id": "<uuid từ member_list data.invites[]>",
"language": "vi"
}action chưa typed (pass-through)
Gateway đã typed toàn bộ bảng action (list … activity_list, gồm set_password). Action upstream mới chưa có trong OpenAPI có thể forward qua JSON capture. Playground: Nâng cao: action tùy chỉnh; flow chuẩn dùng worker riêng.
project_id trên feed/job
Dùng id_base từ list/get làm project_id (newfeeds, job, library). Project mặc định: id_base = "default".
Credit vs hạn mức
| Số dư tài khoản | Ví user — không tự trừ khi tạo job |
budget (set_budget) | Trần dự án được dùng |
credit_balance | Số dư chi tiêu trên dự án (thường 0 đến khi nạp pool) |
| Credit pools | Tab Ngân sách — list, create, deposit (Bơm), delete, ledger, share credit |
Job/media thường trừ pool dự án khi share credit bật, không trừ thẳng ví menu.
Tab Media (modal dự án)
Tab Media (Ảnh / Video / Audio / Music) không gọi ai-projects. Scope là UUID dự án (id_base từ list).
Ảnh & video (files-manager)
POST https://api.gommo.net/api/v2/files-manager — action=list
| Field | Bắt buộc | Ghi chú |
|---|---|---|
project | có | UUID dự án (không dùng project_id ở đây) |
media_type | có | image hoặc video |
status | không | UI dealer gửi ready |
signed_previews | không | true — URL preview trong data.items[] |
limit | không | UI 30 |
offset | không | Phân trang |
Response: data.items[] (id_hash, media_type, preview.url, original_name, status, …), limit, offset.
Mode B: POST {gateway}/gateway/files-manager JSON. Playground: Media dự án (ảnh / video).
Dealer có thể gọi thêm POST /ai/images hoặc POST /ai/videos + project_id — capture thường data: []; grid UI dùng files-manager.
Ô Tìm kiếm: lọc phía client — payload files-manager list không thêm field search; lọc data.items[] (vd. original_name).
Audio
POST https://api.gommo.net/ai/audio — tab Audio:
| Field | Bắt buộc | Ghi chú |
|---|---|---|
project_id | có | UUID dự án |
action_type | có | get.list (modal đã verify; không nhầm TTS getLists) |
Mode B: POST {gateway}/gateway/project-media/audio. Playground: Media dự án (audio list).
Music
POST https://api.gommo.net/api/apps/go-mmo/ai_musics/getAll (form):
| Field | Bắt buộc |
|---|---|
project_id | có |
domain, access_token, device | có |
Mode B: POST {gateway}/gateway/project-media/music. Playground: Media dự án (music getAll).
Khác library user (/ai/library/musics) và API tạo job music.
Pool & share credit
Chi tiết: Credit pools — create, deposit (Bơm), delete, ledger, set_share_credit. deposit: ví ≥ amount + 100k reserve.
Chưa document
Upload trên tab Media (ngoài list) — capture riêng.
