내용으로 건너뛰기

채널

채널은 Capgo 앱 업데이트를 관리하는 핵심 메커니즘입니다. 채널을 사용하여 사용자가 업데이트를 언제 받을지 제어할 수 있으며, A/B 테스트, 단계별 롤아웃 및 플랫폼별 업데이트와 같은 기능을 활성화할 수 있습니다.

채널은 앱 업데이트의 배포 트랙을 나타냅니다. 각 채널은 특정 규칙과 제약을 구성할 수 있습니다:

  • 버ndle(버전) 제어: 사용자가 받는 버ndle(버전) 지정
  • 플랫폼 목표 설정: iOS/Android/Electron 플랫폼을 대상으로 설정합니다.
  • 업데이트 정책: 업데이트 전달 방법을 제어합니다.
  • 장치 제한: 업데이트에 접근할 수 있는 장치를 관리합니다.

채널 구성 옵션

채널 구성 옵션
  • 공개: 새로운 장치에 대한 기본 채널로 설정합니다.
  • 네이티브 앱 버전보다 최신인 채널의 안정적인 패키지를 받지 않도록 업데이트를 차단합니다.disableAutoUpdateUnderNative
  • 자동 업데이트 비활성화: 업데이트 동작을 제어 (major, minor, metadata, patch, 또는 none).
  • 패키지 업데이트: 장치가 zip, delta 또는 둘 다 다운로드할지 여부를 제어 (all, zip, delta, zip_from_builtin, 또는 delta_from_builtin). 자세히 보기 패키지 업데이트.
  • ios/android/electron: 플랫폼별로 배포를 활성화하거나 비활성화합니다.
  • 장치 자체가 채널을 선택하도록 허용장치가 채널을 선택할 수 있도록 허용
  • allow_emulator, allow_device, allow_dev, allow_prod: 업데이트 받을 장치 및 빌드 타입을 제어합니다.
  • 진보적 롤아웃: 안정적인 번들을 유지하면서 특정 그룹에만 특정 번들을 노출합니다. 자세히 보기 진보적 롤아웃.

최적화 방법

최적화 방법 섹션
  1. 테스트 채널: 내부 검증을 위한 테스트 채널을 유지합니다.
  2. 스테이징 롤아웃: 여러 채널을 사용하여 점진적인 업데이트 배포
  3. 플랫폼 분리: iOS, Android 및 Electron에 필요한 경우 별도의 채널을 생성
  4. 버nd (버전) 제어: 명확한 업데이트 경로를 위해 세미나 버전 엔드포인트

엔드포인트 섹션

POST

POST 섹션

__CAPGO_KEEP_0__

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

채널 구성 설정을 만들거나 업데이트합니다.

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
updatePackage?: "all" | "zip" | "delta" | "zip_from_builtin" | "delta_from_builtin"
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
}

롤아웃 및 자동 중단 field 에서 API도 해당하는 형식의 값을 받습니다. snake_case 예를 들어 rollout_version 또는 auto_pause_enabled. updatePackage 또한 accepts update_packagecamelCase 형식만 허용됩니다. rollback 롤아웃 대상은 이미 존재하는 채널이 필요합니다. 이미 안정적인 버전이 할당된 채널이거나 POST 요청에서 할당받아야 합니다.

A rollout target requires an existing channel. It must have a stable bundle already assigned or receive one through version in the same POST request. rollbackpromoteToStable 터미널 액션입니다. 서로 다른 액션을 결합하지 마십시오.

예시 요청

예시 요청

기존에 설정된 안정 버전의 채널을 위한 5% 롤아웃을 구성하려면: production 터미널 창

클립보드 복사
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"
}

__CAPGO_KEEP_0__

앱 미리보기 키 경계

앱 미리보기 키 경계

최소 권한의 PR 미리보기에 대해 이 엔드포인트를 인증해야 합니다. authorization: $CAPGO_API_KEY 또는 capgkey: $CAPGO_API_KEYThe x-api-key Channels API의 헤더는 수락되지 않습니다.

An app_preview 키는 새로운 비공개 미리보기 채널을 만들 수 있습니다. 생성은 채널에 대한 채널 범위의 라이프 사이클 바인딩을 자동으로 제공합니다. 이 역할에는 channel.update_settings이러한 채널, 포함하여 기본 또는 메인 채널을 업데이트하기 위해 POST를 사용할 수 없습니다.

미리보기 채널의 경우 PR 미리보기 채널을 설정하지 않거나 public 를 사용하세요. false) for PR preview channels. Use bundle upload --channel 생성 및 업로드 흐름을 위해 POST를 일반적인 미리보기 채널 업데이트로 처리하는 대신.

GET

GET

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

채널 정보를 가져옵니다. 50개의 페이지당 채널을 반환합니다. channel,이 경우 응답은 배열입니다. channel,이 경우 응답은 하나의 채널 객체입니다.

Query Parameters

필수. 앱의 ID
  • app_id선택. 페이지 번호를 위한 페이징
  • page선택. 특정 채널 이름을 가져오기 위해
  • channel예제 요청들

예시 요청들

예시 요청 섹션
터미널 창
# 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
updatePackage: "all" | "zip" | "delta" | "zip_from_builtin" | "delta_from_builtin"
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 입력 전용 단축키이며 반환되지 않습니다. 중단된 롤아웃은 null이 아닌 값을 나타냅니다. rolloutPausedAt.

[
{
"id": 1,
"name": "production",
"app_id": "com.example.app",
"updatePackage": "all",
"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/

채널 삭제. 이 채널을 사용하는 모든 기기에 영향을 줄 것입니다.

interface Channel {
channel: string
app_id: string
delete_bundle?: boolean // also delete the linked bundle
}
터미널 창
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"
}

그리고 delete_bundle: true, app_preview 키는 만든 채널과 연결된, 공유되지 않은 번들을 포함하여 키가 만든 채널만 atomically 정리할 수 있습니다. 키는 일반적인 bundle.delete 권한을 받지 않습니다.

터미널 창
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/

일반적인 오류 시나리오와 그에 대한 응답:

// 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. 베타 테스트
{
"app_id": "com.example.app",
"channel": "beta",
"version": "1.2.0-beta",
"public": false,
"allow_emulator": true,
"allow_dev": true
}
  1. 운영 배포
{
"app_id": "com.example.app",
"channel": "production",
"version": "1.2.0",
"public": true,
"disableAutoUpdate": "minor"
}
  1. 플랫폼별 업데이트
{
"app_id": "com.example.app",
"channel": "ios-hotfix",
"version": "1.2.1",
"ios": true,
"android": false
}

채널 라우팅과 단계별 배포를 계획하고 계획하고 계획 채널 채널 채널 채널 베타 테스트 솔루션 채널 버전 대상 솔루션 채널 Capgo 환경 최적화: 단일 모바일 앱 ID 스테이징 for the practical context in Capgo Environment Best Practices: Staging with One Mobile App ID.