Ir al contenido

API de publicación

Descripción general

La publicación es un flujo de tres pasos:

  1. publish — simulación (dry-run) que genera un manifiesto de cambios revisable y un token de confirmación de corta duración. No se escriben datos.
  2. publish-confirm — presenta el token e inicia la canalización inmediatamente. Devuelve { publish_id, status: "running" } en segundos; no espera a que finalice el despliegue.
  3. publish-status — consulta el estado hasta que el trabajo llegue a succeeded o failed.

Autenticación: Token OAuth Bearer o clave de API de servicio. El emisor debe tener el rol manager en el proyecto.

Paso 1 — publish (simulación)

Genera un manifiesto de cambios pendientes y devuelve un token de confirmación de un solo uso. No se escribe ni se despliega nada en este paso.

Argumentos

CampoRequeridoNotas
project_idEl proyecto a publicar.
project_nameDebe coincidir exactamente con el nombre del proyecto almacenado (sin distinguir mayúsculas/minúsculas). Una discrepancia devuelve un error mostrando los valores esperados y suministrados.

Respuesta

{
"manifest": {
"project_name": "Acme Real Estate",
"target_site_url": "https://tf-acme.web.app",
"drafts": [
{ "path": "abc123", "language": "en", "slug": "guides/intro", "title": "Getting started" }
],
"theme_changes": { "colors": { "primary": "#14b8a6" } },
"translations_planned": 4
},
"confirmation_token": "ec1a4b…(64 hex)",
"expires_at": "2026-05-11T01:23:45.678Z"
}

El confirmation_token es de un solo uso y caduca después de 5 minutos.

Paso 2 — publish-confirm (inicio asíncrono)

Presenta el token y encola la canalización de despliegue. Devuelve una respuesta inmediata; la cadena de promoción → traducción → despliegue se ejecuta en segundo plano.

Argumentos

CampoRequeridoNotas
project_idDebe coincidir con el proyecto vinculado al token.
confirmation_tokenDevuelto por publish.

Respuesta

{
"publish_id": "auto-generated-id",
"status": "running",
"site_url": "https://tf-acme.web.app"
}

Guarde el publish_id: lo necesitará para consultar el estado y revertir la publicación en el plazo de una hora.

Paso 3 — publish-status (consulta hasta finalizar)

Consulte el estado hasta que el trabajo llegue a succeeded o failed. El emisor necesita el rol member o superior.

Argumentos

CampoRequerido
project_id
publish_id

Respuesta por estado

statusCampos adicionales
queued / runningConsultar de nuevo.
succeededpublished_urls: [{ title, language, slug, url }] — presentar como enlaces clicables.
failederror — el mensaje de error.

Canalización de promoción

Validación

Cada borrador se valida antes de que ocurra cualquier escritura. Un error de validación aborta todo el lote.

ReglaError
metadata.title ausenteMissing required field 'title'
metadata.title no tiene 10–60 caracteresTitle must be 10–60 characters
metadata.description ausenteMissing required field 'description'
metadata.description no tiene 50–160 caracteresDescription must be 50–160 characters
metadata.slug ausenteMissing required field 'metadata.slug'
content vacíoContent cannot be empty
content empieza con # Content contains an h1. Start content with ## instead.

Requisito de índice

Cada idioma publicado debe tener un documento activo o en el lote con metadata.slug === "index".

Concurrencia

Solo se ejecuta un trabajo de publicación a la vez por proyecto. Una llamada concurrente a publish-confirm devuelve publish in progress.

Traducciones

Tras la promoción, se crean automáticamente copias de borrador de cada documento promocionado para todos los idiomas adicionales configurados en el proyecto. Los borradores traducidos se validan en una segunda pasada antes de la promoción; una traducción defectuosa no puede llegar a producción directamente.

Omitir si no hay cambios: si el contenido original y la configuración de traducción de una variante previamente traducida son idénticos a la última publicación, la traducción se reutiliza sin realizar una nueva llamada de IA. Esto cubre tanto cambios de contenido como actualizaciones de versión del modelo de IA; una actualización de modelo nunca se omite silenciosamente.

Reversión

revert-publish revierte la acción en el plazo de una hora utilizando el publish_id de publish-confirm.

Errores

FaseErrorCausa
AutorizaciónInsufficient permission: this tool requires 'manager' on project '…'El emisor tiene rol member o ninguno.
Autorizaciónproject_name does not match project …: expected 'X', got 'Y'Fallo en la verificación de project_name.
TokenInvalid or already-used confirmation tokenToken caducado, ya usado o proyecto incorrecto.
TokenConfirmation token has expiredVentana de 5 minutos agotada. Ejecute publish de nuevo.
Bloqueopublish in progressYa hay otra publicación en curso. Espere y reintente.
PromociónValidation failed for one or more draftsSe violó una regla de validación. Los detalles incluyen la ruta y el campo del borrador.
PromociónMissing mandatory index page for locale(s): …Falta una página de índice en un idioma configurado.
Despliegue{ "success": false, "error": "…" }Fallo de compilación o despliegue. El campo error contiene el detalle.

Relacionado

Última actualización: