Passer à la navigation

Canaux

Les canaux constituent la mécanisme de base pour gérer les mises à jour de l'application dans Capgo. Ils vous permettent de contrôler comment et quand vos utilisateurs reçoivent les mises à jour, en activant des fonctionnalités comme les tests A/B, les lancements étalés et les mises à jour spécifiques au plateau.

Un canal représente une piste de distribution pour les mises à jour de votre application. Chaque canal peut être configuré avec des règles et des contraintes spécifiques :

  • Contrôle du paquet (version): Spécifiez le paquet (version) que les utilisateurs reçoivent
  • Ciblage du plateau: Ciblez des plateformes spécifiques (iOS/Android/Electron)
  • Politiques d'actualisation: Contrôlez comment les mises à jour sont livrées
  • Restrictions de dispositif: Gérez lesquels appareils peuvent accéder aux mises à jour
  • public: Définissez le canal par défaut pour les nouveaux appareils.
  • disableAutoUpdateUnderNative: Empêchez les mises à jour lorsque la version native de l'application du dispositif est plus récente que la version stable du canal.
  • disableAutoUpdate: Contrôle le comportement de mise à jour (major, minor, metadata, patch, ou none).
  • ios/android/electron: Activer ou désactiver la livraison par plateforme.
  • allow_device_self_set: Laisser les appareils choisir leur canal.
  • allow_emulator, allow_device, allow_dev, allow_prod: Contrôler les types de dispositifs et de builds qui reçoivent les mises à jour.
  • Progressive rolloutConservez un bundle stable tout en exposant un bundle cible à un groupe collant. Rollouts progressifs.
  1. Canal de test: Maintenez un canal de test pour la validation interne
  2. Rollout étape par étape: Utilisez plusieurs canaux pour le déploiement d'actualisations progressives
  3. Séparation de plateforme: Créez des canaux séparés pour iOS, Android et Electron lorsque nécessaire
  4. Contrôle de bundle (version): Utilisez Gestion de version sémantique Pour des chemins d'actualisation clairs

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

Créer ou mettre à jour une configuration de canal.

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
}

Pour les champs de lancement et d'arrêt automatique, API accepte également l'équivalent snake_case forme, telle que rollout_version ou auto_pause_enabled. Si les deux formes sont fournies, la valeur camelCase l'emporte. rollback est en camelCase uniquement.

Un cible de déploiement nécessite un canal existant. Il doit avoir un bundle stable déjà affecté ou recevoir un en même temps que la requête POST. version en même temps que la requête POST. rollback et promoteToStable sont des actions terminales ; ne les combinez pas entre elles.

Configurer un déploiement de 5 % pour un canal existant dont le bundle stable est déjà défini : production Terminal de fenêtre

ne pas les combiner entre elles.
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"
}

La méthode POST est une mise à jour et retourne uniquement son statut. Effectuez une requête GET pour lire la configuration du canal résultant.

Limite de clé de prévisualisation de l'application

Section intitulée « Limite de clé de prévisualisation de l'application »

Pour une prévisualisation de PR avec les privilèges les moins élevés, authentifiez cet endpoint avec authorization: $CAPGO_API_KEY ou capgkey: $CAPGO_API_KEYLe x-api-key en-tête n'est pas accepté par les canaux API.

An app_preview Cette clé peut créer un nouveau canal de prévisualisation non public. La création donne automatiquement à cette clé une liaison de cycle de vie au niveau du canal pour ce canal uniquement. Le rôle ne comprend pas channel.update_settings, elle ne peut donc pas utiliser POST pour mettre à jour un canal existant, y compris un canal par défaut ou principal.

Quitter public non défini (ou définissez-le sur false) pour les canaux de prévisualisation PR. Utilisez bundle upload --channel pour le flux de création et d'upload au lieu de traiter POST comme une mise à jour générale du canal de prévisualisation.

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

Récupérer les informations du canal. Retourne 50 canaux par page. Sans channel, la réponse est un tableau. Avec channel, la réponse est un objet de canal.

  • app_id: Obligatoire. L'ID de votre application
  • page: Facultatif. Numéro de page pour la pagination
  • channel: Facultatif. Nom de canal spécifique à récupérer
Fenêtre de 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 est un raccourci d'entrée uniquement et n'est pas retourné. Une mise en production arrêtée est représentée par une valeur non nulle 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/

Supprimer un canal. Notez que cela affectera tous les appareils utilisant ce canal.

interface Channel {
channel: string
app_id: string
delete_bundle?: boolean // also delete the linked bundle
}
Fenêtre de terminal
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"
}

Avec delete_bundle: true, un app_preview La clé peut nettoyer atomiquement uniquement un canal qu'elle a créé et son paquet lié, non partagé. La clé n'a pas la permission générale. bundle.delete Fenêtre de terminal

Copier dans le presse-papier
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/

Scénarios d'erreurs courants et leurs réponses :

// 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. Test de version bêta
{
"app_id": "com.example.app",
"channel": "beta",
"version": "1.2.0-beta",
"public": false,
"allow_emulator": true,
"allow_dev": true
}
  1. Déploiement en production
{
"app_id": "com.example.app",
"channel": "production",
"version": "1.2.0",
"public": true,
"disableAutoUpdate": "minor"
}
  1. Mises à jour spécifiques au plateforme
{
"app_id": "com.example.app",
"channel": "ios-hotfix",
"version": "1.2.1",
"ios": true,
"android": false
}

Si vous utilisez les canaux pour planifier la routage des canaux et la mise en production étape par étape, connectez-le à les canaux pour les détails d'implémentation dans les canaux les canaux pour les détails d'implémentation dans les canaux Solution de test bêta pour le flux de travail du produit dans la Solution de test bêta Solution de ciblage de version pour le flux de produit dans la Solution de ciblage de version, et Capgo Pratiques d'environnement : Étape de mise en scène avec un seul ID d'application mobile pour le contexte pratique dans Capgo Pratiques d'environnement : Étape de mise en scène avec un seul ID d'application mobile.