Saltar al contenido

Canales

Los canales son la mecánica central para gestionar las actualizaciones de la aplicación en Capgo. Permiten controlar cómo y cuándo los usuarios reciben actualizaciones, habilitando características como pruebas A/B, despliegues escalonados y actualizaciones específicas de plataforma.

Un canal representa un track de distribución para las actualizaciones de la aplicación. Cada canal puede configurarse con reglas y restricciones específicas:

  • Control de paquete (versión) : Especificar qué paquete (versión) reciben los usuarios
  • Configuración de Plataforma: Dirija específicamente a plataformas (iOS/Android/Electron)
  • Políticas de Actualización: Controla cómo se entregan las actualizaciones
  • Restricciones de Dispositivo: Administra qué dispositivos pueden acceder a las actualizaciones
  • público: Establecer como canal predeterminado para nuevos dispositivos.
  • desactivarActualizaciónAutomáticaBajoAplicaciónNativa: Evita actualizaciones cuando la versión nativa de la aplicación del dispositivo es más reciente que la versión estable del canal.
  • desactivarActualizacionesAutomaticas: Controlar el comportamiento de la actualización (major, minor, metadata, patch, o none).
  • ios/android/electron: Habilitar o deshabilitar la entrega por plataforma.
  • permitirQueElDispositivoEligeSuCanalpermitirEmulador
  • permitirDispositivo, permitirDev, permitirProd, : Controlar qué tipos de dispositivos y compilaciones reciben actualizaciones.desactivarActualizacionesAutomaticas
  • Despliegue progresivo: Mantenga una versión estable de un paquete mientras expone una versión objetivo a un grupo cohesivo. Despliegues progresivos.
  1. Canal de pruebas: Mantenga un canal de pruebas para la validación interna.
  2. Despliegue en etapas: Utilice múltiples canales para el despliegue gradual de actualizaciones.
  3. Separación de plataforma: Cree canales separados para iOS, Android y Electron cuando sea necesario.
  4. Control de versión de paquete (versión): Utilice versión semántica para caminos de actualización claros

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

Crear o actualizar una configuración 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
}

Para campos de rollout y auto-pausar, API también acepta el equivalente snake_case formas, como rollout_version o auto_pause_enabledo valor camelCase gana si se proporcionan ambos. rollback es camelCase solo.

Un objetivo de lanzamiento requiere un canal existente. Debe tener un paquete estable asignado ya sea mediante una asignación previa o mediante una asignación en la misma solicitud POST. version y rollback son acciones terminales; no las combine con otras. promoteToStable Ejemplo de solicitud

Preserve protected tokens exactly: Capgo, Capacitor, GitHub, Cloudflare, code, API, SDK, CLI, npm, bun production Preserve protected tokens exactly: Capgo, Capacitor, GitHub, Cloudflare, code, API, SDK, CLI, npm, bun

Ventana de 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 es un upsert y devuelve solo su estado. Haga una solicitud GET para leer la configuración del canal resultante.

Límite de clave de vista previa de la aplicación

Sección titulada “Límite de clave de vista previa de la aplicación”

Para una vista previa de PR con privilegios mínimos, autentique este punto de conexión con authorization: $CAPGO_API_KEY o capgkey: $CAPGO_API_KEYLa cabecera no se acepta por los canales __CAPGO_KEEP_0__. x-api-key header is not accepted by the Channels API.

Un app_preview Una clave puede crear un nuevo canal de vista previa no público. La creación de este canal automáticamente le da a esa clave una vinculación de ciclo de vida del canal para ese canal solo. El rol no incluye channel.update_settings, por lo que no puede usar POST para actualizar un canal existente, incluido un canal existente por defecto o principal.

Dejar public sin establecer (o establecerlo en) falsepara canales de vista previa de PR. Utilice bundle upload --channel en lugar de tratar a POST como un upsert general de canal de vista previa.

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

Obtener información del canal. Devuelve 50 canales por página. Sin channella respuesta es un array. Con channella respuesta es un objeto de canal único.

  • app_id: Obligatorio. El ID de tu aplicación
  • page: Opcional. Número de página para paginación
  • channel: Opcional. Nombre específico de canal para recuperar
Ventana 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 es una atajo de entrada solo y no se devuelve. Una pausa de lanzamiento se representa mediante un valor no nulo 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/

Eliminar un canal. Tenga en cuenta que esto afectará a todos los dispositivos que utilizan este canal

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

Eliminación de vista previa de la aplicación

Con

, una delete_bundle: trueLa clave puede eliminar de manera atómica solo un canal que creó y su paquete vinculado no compartido. La clave no recibe permiso general. app_preview Ventana de terminal bundle.delete Eliminación de vista previa de la aplicación

Con
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/

Escenarios de errores comunes y sus respuestas:

// 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. Pruebas beta
{
"app_id": "com.example.app",
"channel": "beta",
"version": "1.2.0-beta",
"public": false,
"allow_emulator": true,
"allow_dev": true
}
  1. Implementación en producción
{
"app_id": "com.example.app",
"channel": "production",
"version": "1.2.0",
"public": true,
"disableAutoUpdate": "minor"
}
  1. Actualizaciones específicas de plataforma
{
"app_id": "com.example.app",
"channel": "ios-hotfix",
"version": "1.2.1",
"ios": true,
"android": false
}

Si estás utilizando Canales Para planificar la ruta de canal y el despliegue en etapas, conecta con Canales Para los detalles de implementación en Canales, Canales Para los detalles de implementación en Canales, Solución de Pruebas Beta Para el flujo de trabajo del producto en Solución de Pruebas Beta, Solución de Targeteo de Versión para el flujo de trabajo del producto en Solución de Targeteo de Versión, y Capgo Mejores Prácticas de Entorno: Etapa con un ID de Aplicación Móvil para el contexto práctico en Capgo Mejores Prácticas de Entorno: Etapa con un ID de Aplicación Móvil.