__CAPGO_KEEP_0__ - Berita Hidup untuk Aplikasi __CAPGO_KEEP_1__

Saluran

Saluran adalah mekanisme inti untuk mengelola pembaruan aplikasi di Capgo. Mereka memungkinkan Anda mengontrol bagaimana dan kapan pengguna Anda menerima pembaruan, memungkinkan fitur seperti pengujian A/B, peluncuran berjenjang, dan pembaruan spesifik platform.

Saluran mewakili jalur distribusi untuk pembaruan aplikasi Anda. Setiap saluran dapat dikonfigurasi dengan aturan dan keterbatasan tertentu:

  • Pengendalian Paket (Versi): Tentukan paket (versi) yang diterima pengguna
  • Pengtargetan Platform: Target platform tertentu (iOS/Android/Electron)
  • Kebijakan Perbarui: Mengontrol bagaimana perbarui disampaikan
  • Keterbatasan Perangkat: Mengelola perangkat mana yang dapat mengakses perbarui
  • publik: Tetapkan sebagai saluran default untuk perangkat baru.
  • disableAutoUpdateUnderNative: Mencegah perbarui ketika versi aplikasi asli perangkat lebih baru dari bundle stabil saluran.
  • disableAutoUpdate: Mengontrol perilaku perbarui (major, minor, metadata, patchatau none).
  • ios/android/electron: Aktifkan atau nonaktifkan pengiriman berdasarkan platform.
  • allow_device_self_set: Biarkan perangkat memilih saluran.
  • allow_emulator, allow_device, allow_dev, allow_prod: Kontrol jenis perangkat dan jenis bangun yang menerima update.
  • Rollout Progresif: Simpan bundle stabil sambil menampilkan bundle target kepada kelompok yang konsisten. Lihat Rollout Progresif.
  1. Saluran Pengujian: Tambahkan saluran pengujian untuk validasi internal
  2. Rollout Berstadi: Gunakan beberapa saluran untuk penggunaan update yang bertahap
  3. Pemisahan Platform: Buatkan saluran yang terpisah untuk iOS, Android, dan Electron jika perlu
  4. Pengendalian Paket (versi): Gunakan Pengendalian Versi Semantik untuk jalur pembaruan yang jelas

https://api.capgo.app/channel/

Buat atau perbarui konfigurasi saluran.

type DisableAutoUpdate = "major" | "minor" | "metadata" | "patch" | "none"
type AutoPauseAction = "pause" | "rollback" | "notify"
interface ChannelSet {
app_id: string
channel: string
version?: string | null // stable bundle name
public?: boolean
disableAutoUpdateUnderNative?: boolean
disableAutoUpdate?: DisableAutoUpdate
ios?: boolean
android?: boolean
electron?: boolean
allow_device_self_set?: boolean
allow_emulator?: boolean
allow_device?: boolean
allow_dev?: boolean
allow_prod?: boolean
// Progressive rollout (camelCase is preferred)
rolloutVersion?: string | number | null // target bundle name or ID
rolloutPercentage?: number // 0–100
rolloutPercentageBps?: number // 0–10000; takes precedence when both are set
rolloutEnabled?: boolean
rolloutPaused?: boolean // input-only convenience flag
rolloutPausedAt?: string | null // ISO timestamp or null
rolloutPauseReason?: string | null
rolloutCacheTtlSeconds?: number // 60–31536000
rollback?: boolean
promoteToStable?: boolean
// Rollout auto-pause policy
autoPauseEnabled?: boolean
autoPauseWindowMinutes?: number
autoPauseFailureRateBps?: number | null
autoPauseConfidence?: number
autoPauseMinAttempts?: number | null
autoPauseMinFailures?: number | null
autoPauseAction?: AutoPauseAction
autoPauseCooldownMinutes?: number
}

Untuk bidang peluncuran dan pause otomatis, API juga menerima setara snake_case berbentuk, seperti rollout_version atau auto_pause_enabledJika kedua bentuk disediakan, nilai camelCase yang lebih tinggi akan menang. rollback Hanya camelCase.

Sasaran peluncuran memerlukan saluran yang sudah ada. Ini harus memiliki bundle stabil yang sudah ditugaskan atau menerima satu melalui version dalam permintaan POST yang sama. rollback dan promoteToStable adalah aksi terminal; jangan kombinasikan mereka dengan satu sama lain.

Konfigurasi peluncuran 5% untuk saluran yang sudah ada production channel yang bundle stabilnya sudah ditetapkan:

Jendela terminal
curl -X POST \
-H "authorization: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"app_id": "com.example.app",
"channel": "production",
"rolloutVersion": "1.3.0",
"rolloutPercentage": 5,
"rolloutEnabled": true,
"rolloutCacheTtlSeconds": 2592000,
"autoPauseEnabled": true,
"autoPauseFailureRateBps": 500,
"autoPauseMinAttempts": 100,
"autoPauseAction": "pause"
}' \
https://api.capgo.app/channel/
{
"status": "ok"
}

POST adalah operasi upsert dan hanya mengembalikan statusnya. Lakukan permintaan GET untuk membaca konfigurasi saluran hasilnya.

Untuk mendapatkan pratinjau PR dengan hak akses minimal, autentikasi endpoint ini dengan authorization: $CAPGO_API_KEY atau capgkey: $CAPGO_API_KEY. x-api-key Kepala tidak diterima oleh API.

Sebuah app_preview kunci dapat membuat saluran pratinjau non-umum baru. Pembuatan secara otomatis memberikan kunci tersebut ikatan kehidupan siklus yang terkait dengan saluran tersebut hanya. Peran ini tidak termasuk channel.update_settingsJadi, tidak dapat digunakan untuk memperbarui saluran yang sudah ada, termasuk saluran default atau utama.

Biarkan public kosong (atau atur kembali ke false) untuk saluran pratinjau PR. bundle upload --channel Pakai

untuk alur pembuatan dan unggah daripada menganggap POST sebagai pratinjau-saluran upsert umum.

GET

https://api.capgo.app/channel/

Judul bagian “GET” channelPilih informasi saluran. Mengembalikan 50 saluran per halaman. Tanpa channel, jawaban adalah array. Dengan

, jawaban adalah objek saluran tunggal.

Parameter Pemintaan Query
  • app_idWajib. ID aplikasi Anda
  • pageOpsional. Nomor halaman untuk pengaturan halaman
  • channelOpsional. Nama saluran spesifik untuk mengambil
Jendela terminal
# Get all channels
curl -H "authorization: your-api-key" \
"https://api.capgo.app/channel/?app_id=com.example.app"
# Get a specific channel
curl -H "authorization: your-api-key" \
"https://api.capgo.app/channel/?app_id=com.example.app&channel=production"
# Get the next page
curl -H "authorization: your-api-key" \
"https://api.capgo.app/channel/?app_id=com.example.app&page=1"
interface Channel {
id: number
created_at: string
updated_at: string
name: string
app_id: string
created_by: string
public: boolean
disableAutoUpdateUnderNative: boolean
disableAutoUpdate: DisableAutoUpdate
allow_device_self_set: boolean
allow_emulator: boolean
allow_device: boolean
allow_dev: boolean
allow_prod: boolean
version: { id: number, name: string } | null // stable bundle
// These three response identifiers intentionally use snake_case.
rollout_version: number | null
rollout_id: string
rollout_version_info: { id: number, name: string } | null
rolloutPercentageBps: number
rolloutEnabled: boolean
rolloutPausedAt: string | null
rolloutPauseReason: string | null
rolloutCacheTtlSeconds: number
autoPauseEnabled: boolean
autoPauseWindowMinutes: number
autoPauseFailureRateBps: number | null
autoPauseConfidence: number
autoPauseMinAttempts: number | null
autoPauseMinFailures: number | null
autoPauseAction: AutoPauseAction
autoPauseCooldownMinutes: number
autoPauseLastTriggeredAt: string | null
autoPauseLastCheckedAt: string | null
}

rolloutPaused adalah singkat masukan dan tidak akan dikembalikan. Rilis yang tertunda diwakili oleh nilai yang tidak null rolloutPausedAt.

[
{
"id": 1,
"name": "production",
"app_id": "com.example.app",
"version": { "id": 1, "name": "1.2.0" },
"rollout_version": 2,
"rollout_id": "e60c19c9-2e65-4e0d-bc06-d1f5b4f96276",
"rollout_version_info": { "id": 2, "name": "1.3.0" },
"rolloutPercentageBps": 500,
"rolloutEnabled": true,
"rolloutPausedAt": null,
"rolloutCacheTtlSeconds": 2592000,
"autoPauseEnabled": true,
"autoPauseFailureRateBps": 500,
"autoPauseAction": "pause"
}
]

https://api.capgo.app/channel/

Hapus saluran. Perlu diingat bahwa ini akan mempengaruhi semua perangkat yang menggunakan saluran ini.

interface Channel {
channel: string
app_id: string
delete_bundle?: boolean // also delete the linked bundle
}

Contoh Permintaan

Jendela terminal
Salin ke clipboard
curl -X DELETE \
-H "authorization: your-api-key" \
-H "Content-Type: application/json" \
-d '{
"app_id": "com.example.app",
"channel": "beta"
}' \
https://api.capgo.app/channel/
{
"status": "ok"
}

Dengan delete_bundle: true, sebuah app_preview Kunci dapat membersihkan atomik hanya sebuah saluran yang dibuat dan bundel terkait, tidak dibagikan. Kunci tidak menerima izin umum. bundle.delete Jendela Terminal

Salin ke clipboard
curl -X DELETE \
-H "capgkey: $CAPGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"app_id": "com.example.app",
"channel": "pr-123",
"delete_bundle": true
}' \
https://api.capgo.app/channel/

__CAPGO_KEEP_0__

Pengaturan Kesalahan

Skenario kesalahan umum dan responsnya:

// Channel not found
{
"error": "Channel not found",
"status": "KO"
}
// Invalid bundle (version) format
{
"error": "Invalid version format. Use semantic versioning",
"status": "KO"
}
// Invalid update policy
{
"error": "Invalid disableAutoUpdate value",
"status": "KO"
}
// Permission denied
{
"error": "Insufficient permissions to manage channels",
"status": "KO"
}
  1. Pengujian Beta
{
"app_id": "com.example.app",
"channel": "beta",
"version": "1.2.0-beta",
"public": false,
"allow_emulator": true,
"allow_dev": true
}
  1. Peluncuran Produksi
{
"app_id": "com.example.app",
"channel": "production",
"version": "1.2.0",
"public": true,
"disableAutoUpdate": "minor"
}
  1. Perbaruan Spesifik Platform
{
"app_id": "com.example.app",
"channel": "ios-hotfix",
"version": "1.2.1",
"ios": true,
"android": false
}

Jika Anda menggunakan Channels untuk merencanakan routing saluran dan peluncuran tahap demi tahap, hubungkan dengan Channels untuk detail implementasi di Channels, Channels untuk detail implementasi di Channels, Pengujian Beta untuk alur kerja produk di Pengujian Beta, Pengaturan Target Versi untuk alur kerja produk di Pengaturan Target Versi, dan Capgo Praktik Terbaik Lingkungan: Staging dengan Satu ID Aplikasi Mobile untuk konteks praktis di Capgo Praktik Terbaik Lingkungan: Staging dengan Satu ID Aplikasi Mobile