<span aria-hidden="true" id="my-first-app"></span>

# Mi primera aplicación

<span aria-hidden="true" id="getting-started"></span>

<span aria-hidden="true" id="basic-flow"></span>

<span aria-hidden="true" id="code-sample"></span>

Transloadit es versátil y hay muchas formas de aprovechar nuestra API. Para elegir un flujo sencillo con fines de demostración, usaremos de manera predeterminada una integración con el navegador web mediante el plugin de Transloadit para [Uppy](/es/docs/sdks/uppy.md).

Crearemos una página web sencilla que sube imágenes y las redimensiona a `1500x500` píxeles. Este primer Template tiene un solo Robot de procesamiento, para que puedas obtener un resultado antes de configurar el almacenamiento o un flujo de trabajo más amplio.

<span aria-hidden="true" id="our-first-template"></span> <span aria-hidden="true" id="nuestro-primer-template"></span>

## Nuestro primer Template

[Crea un Template nuevo](/c/templates/new/) en tu Workspace, asígnale el nombre `my-first-template` y guarda en él las siguientes Assembly Instructions:

```json
{
  ":original": {
    "robot": "/upload/handle"
  },
  "crop_thumbed": {
    "use": ":original",
    "robot": "/image/resize",
    "result": true,
    "width": 1500,
    "height": 500,
    "resize_strategy": "fillcrop"
  }
}

```

<span aria-hidden="true" id="explaining-the-assembly-instructions"></span>

## Explicación de las Assembly Instructions

Ahora veamos más de cerca el JSON, que contiene dosSteps:

1. `:original` invoca [🤖/upload/handle](/es/docs/robots/upload-handle.md), que recibirá cualquier archivo que Uppy le envíe y lo pondrá a disposición de otrosRobots. Entre otras cosas, podrías definir un límite de tamaño de archivo en este Robot.
2. `crop_thumbed` recibe esos archivos mediante `"use": ":original"`. Luego invoca[🤖/image/resize](/es/docs/robots/image-resize.md) con parámetros como`resize_strategy`. Este es el único Robot de procesamiento del Template.

###### Nota

Los archivos de resultados se alojan temporalmente con nosotros y se eliminan después de 24 h. Así, este primer ejemplo se centra en una sola conversión. La siguiente guía añade almacenamiento permanente.

En nuestra integración con Uppy, reemplaza `YOUR_TEMPLATE_ID` por el ID de tu Template. Añade lo siguiente a un archivo `test.html` y luego ábrelo en tu navegador:

```html
<!-- This pulls Uppy from our CDN -->
<!-- For smaller self-hosted bundles, install Uppy and plugins manually: -->
<!-- npm i @uppy/core @uppy/dashboard @uppy/remote-sources @uppy/transloadit ... -->
<link
  href="https://releases.transloadit.com/uppy/v4.3.1/uppy.min.css"
  rel="stylesheet"
/>
<button id="browse">Select Files</button>
<script type="module">
  import {
    Uppy,
    Dashboard,
    ImageEditor,
    RemoteSources,
    Transloadit,
  } from 'https://releases.transloadit.com/uppy/v4.3.1/uppy.min.mjs'
  const uppy = new Uppy()
    .use(Transloadit, {
      waitForEncoding: true,
      alwaysRunAssembly: true,
      assemblyOptions: {
        params: {
          template_id: 'YOUR_TEMPLATE_ID',
          // To avoid tampering, use Signature Authentication:
          // https://transloadit.com/docs/api/authentication/
          auth: {
            key: 'YOUR_TRANSLOADIT_KEY',
          },
        },
      },
    })
    .use(Dashboard, { trigger: '#browse' })
    .use(ImageEditor, { target: Dashboard })
    .use(RemoteSources, {
      companionUrl: 'https://api2.transloadit.com/companion',
    })
    .on('complete', ({ transloadit }) => {
      // Due to waitForEncoding:true this is fired after encoding is done.
      // Alternatively, set waitForEncoding to false and provide a notify_url
      console.log(transloadit) // Array of Assembly Statuses
      transloadit.forEach((assembly) => {
        console.log(assembly.results) // Array of all encoding results
      })
    })
    .on('error', (error) => {
      console.error(error)
    })
</script>

```

Notarás que, además de `YOUR_TEMPLATE_ID`, también tendremos que reemplazar `YOUR_TRANSLOADIT_KEY`, cuyo valor puedes obtener[creando una Auth Key en tu cuenta](/c/template-credentials/).

¡Y eso es todo! ✨ Si seguiste el proceso copiando, pegando y reemplazando los valores, ahora tienes un prototipo funcional. Los resultados se muestran en el registro de la consola de tu navegador, pero también puedes ver las[Assemblies](/c/assemblies/) que se añaden a tu cuenta en tiempo real. Si no seguiste los pasos, también puedes probarlo en vivo en esta[demostración de redimensionamiento de imágenes EN (English)](/demos/image-processing/resize-to-twitter-cover-dimensions.md).

Las URL temporales de los resultados aparecen en el registro de la consola. Para conservar estos archivos de forma permanente y enviar los resultados a tu back-end, continúa en la página[Guardar los archivos de resultados](/es/docs/getting-started/saving-conversion-results.md).
