# Templates

Puedes enviarnos tus Assembly Instructionsdirectamente con cada solicitud, o guardarlas en un Template y hacer referencia a su `template_id` en tus solicitudes.

## Builtin Templates

Transloadit también proporciona Templates que mantenemos y versionamos. Estos Builtin Templates son puntos de partida estables y listos para usar en transformaciones comunes.

Consulta [Builtin Templates](/docs/topics/builtin-templates.md) para conocer los builtins disponibles y cómo enumerarlos mediante la API.

Enviar Instructions directamente permite crear prototipos con rapidez, pero guardarlas en un Template ofrece algunas ventajas:

1. Puedes evitar transmitir datos confidenciales y detalles de implementación con cada solicitud de encoding. Esto resulta especialmente útil cuando realizas integraciones con navegadores.
2. En combinación con `"allow_steps_override": false`, lasInstructions **no pueden manipularse**.
3. En combinación con las Assembly Notifications, puedes habilitar las Assembly Replays.
4. Si integraste Transloadit en una aplicación, puedes **cambiar la configuración de encoding sin realizar un despliegue** ni esperar a que una App Store publique una nueva versión.

## Cómo crear un Template

1. [Crea un Template en tu cuenta](/c/templates/new/).
2. Asigna un nombre a tu Template para poder identificarlo en el futuro.
3. Proporciona el JSON de Assembly Instructions para tu Template. Puedes seleccionar ejemplos de una lista, permitir que nuestro asistente genereInstructions, duplicar un Template existente o comenzar desde cero.
4. Guarda los cambios.

Una vez guardado el Template, se muestra una página con el Template que creaste. En la parte superior de la página aparece el ID del Template, por ejemplo, `4b62ee4dbb38455d96fe13d972ec3211`. Después puedes copiar y pegar este ID en el `template_id` del código de tu integración, o desplazarte hacia abajo en elTemplate Editor, donde ya mostramos ejemplos que incluyen este ID.

###### Nota

El Template Editor también tiene un área de pruebas donde puedes probar tus Templates junto con un formulario de subida directamente en el navegador, sin actualizar tu integración (ni siquiera tienes que guardar los cambios).

## Modificar Templates en tiempo de ejecución

Podrías pensar que son mutuamente excluyentes, pero es posible proporcionar tanto `template_id` como`steps` dentro de params, ya que esto te permite cambiar el comportamiento del Template en tiempo de ejecución. De hecho, cualquier otra propiedad dentro de `params`, excepto `allow_steps_override`, se combinará de forma recursiva sobre el Template cargado mediante `template_id`.

Por ejemplo, veamos el siguiente Template, que gestiona una subida, codifica un video para reproducirlo correctamente en iPads y guarda el resultado en S3:

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_6ZskK4ZaqZ1GYVxrmc4Qz2KncJJA)

```json
{
  "steps": {
    ":original": {
      "robot": "/upload/handle"
    },
    "encoded": {
      "use": ":original",
      "robot": "/video/encode",
      "preset": "ipad-high"
    },
    "exported": {
      "use": "encoded",
      "robot": "/s3/store",
      "credentials": "YOUR_S3_CREDENTIALS",
      "bucket": "main-bucket"
    }
  }
}

```

Cuando creas una Assembly, podemos ajustar el comportamiento del Template en tiempo de ejecución, por ejemplo, agregando una propiedad `steps`:

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_6ZskK4ZaqZ1GYVxrmc4Qz2KncJJA)

```json
{
  "template_id": "4b62ee4dbb38455d96fe13d972ec3211",
  "steps": {
    "exported": {
      "bucket": "another-bucket"
    }
  }
}

```

Luego, Transloadit combina esto para crear las siguientesAssembly Instructions:

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_6ZskK4ZaqZ1GYVxrmc4Qz2KncJJA)

```json
{
  "steps": {
    "encoded": {
      "use": ":original",
      "robot": "/video/encode",
      "preset": "ipad-high"
    },
    "exported": {
      "use": "encoded",
      "robot": "/s3/store",
      "credentials": "YOUR_S3_CREDENTIALS",
      "bucket": "another-bucket"
    }
  }
}

```

Como puedes ver, el valor de `bucket` cambió de `"main-bucket"` a `"another-bucket"`. Esto puede ser práctico y potente en entornos de confianza.

En otros entornos, quizá quieras impedir que se sobrescriban losSteps para que un navegador no pueda modificar el comportamiento. Para hacerlo, establece `allow_steps_override` en `false` dentro del Template guardado, de esta manera:

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_6ZskK4ZaqZ1GYVxrmc4Qz2KncJJA)

```jsonc
{
  "allow_steps_override": false,
  "steps": {
    // …
  },
}

```

Ahora siempre se utilizará únicamente `main-bucket`, independientemente de que se hayan proporcionado `steps` adicionales.

## Opciones de Template

Además de `steps` y `allow_steps_override`, existen más opciones para controlar el comportamiento de unaAssembly.

Como la mayoría también puede configurarse cuando no se usan Templates, están documentadas en la[documentación de la API para crear una nueva Assembly](/docs/api/assemblies-post.md). Sin embargo, si integras Transloadit en entornos que no son de confianza, como los navegadores, una persona malintencionada podría cambiarlas fácilmente. Por lo tanto, para permitir el cambio dinámico de los parámetros de un Template en entornos que no son de confianza, considera usar[Signature Authentication](/docs/api/authentication.md).
