> ## Documentation Index
> Fetch the complete documentation index at: https://developers.hubspot.es/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuración de la aplicación (BETA)

> Información de referencia para las opciones de configuración de las aplicaciones creadas en la nueva plataforma para desarrolladores (BETA)

<style>
  {`
    .github-link a div,
    .github-link a div p {
      display: inline;
      margin: 0;
      padding: 0;
    }
    .github-link {
      background-color: rgb(255, 255, 255);
      border-radius: 24px;
      box-shadow: rgba(0, 0, 0, 0.25) 0px 2px 4px 0px;
      padding: 5px;
      max-width: 247px;
      display: flex;
      align-items: center;
      margin-bottom: 20px;
    }
    .github-icon {
        display: inline;
        width: 24px;
        margin-right: 8px;
        flex-shrink: 0;
    }
    .table-key, .table-key div, .table-key p {
      margin: 0;
      font-size: 14px;
    }
    `}
</style>

Abajo encontrarás información de referencia sobre las funciones de las aplicaciones de la plataforma para desarrolladores, incluidas las definiciones de los archivos de configuración, los detalles de los permisos y mucho más.

## Estructura del proyecto

* Todos los componentes del proyecto deben estar dentro del directorio `src` especificado en el archivo de configuración de nivel superior `hsproject.json`.
* Todas las funciones y componentes de la aplicación deben estar en el directorio `src/app/`. Dentro de este directorio `app/`, definirás subdirectorios para cada función que quieras que admita tu aplicación:
  * Los eventos de la aplicación se configuran en `app-events/`.
  * Los objetos de la aplicación se definen en `app-objects/`.
  * Todas las características de la tarjeta se definen en `cards/`.
  * Las funciones de la página de configuración se definen en `settings/`.
  * La telemetría se configura en `telemetry/`.
  * Las suscripciones de webhooks se definen en `webhooks/`.
  * Las acciones de workflow personalizadas se definen en `workflow-actions/`.
* Dentro de cada subdirectorio de características, configurarás la característica mediante un archivo `*-hsmeta.json`. Puedes anteponer al nombre del archivo algo significativo para tu aplicación (por ejemplo, `my-app-hsmeta.json`), siempre que el archivo termine en `-hsmeta.json`. Estos archivos deben estar en el nivel base de sus respectivas carpetas (por ejemplo, `app/my-app-hsmeta.json`, `cards/my-card-hsmeta.json`).

El ejemplo de estructura de directorios que aparece abajo describe todas las funciones disponibles. Los detalles para configurar el archivo `app-hsmeta.json` del esquema de la aplicación de nivel superior se proporcionan en la [sección sobre el esquema de la aplicación](#app-schema) que aparece abajo. Cuando estés listo para agregar funciones a la aplicación, consulta la sección [agregar funciones a la aplicación](#adding-app-features).

```shell theme={null}
my-project-folder/
└── hsproject.json
└── src
    └── app/
        └── app-hsmeta.json/
        └── app-events/
            └── my-event-type-hsmeta.json
        └── cards/
            └── MyCard.jsx
            └── my-app-card-hsmeta.json
            └── package.json
        └── settings/
            └── Settings.tsx
            └── settings-hsmeta.json
            └── package.json
        └── telemetry/
            └── telemetry-hsmeta.json
        └── webhooks/
            └── webhooks-hsmeta.json
        └── workflow-actions/
            └── custom-action-hsmeta.json
```

<Card title="Ver ejemplo en GitHub" href="https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/tree/main/projects/app-object-getting-started-template" icon="github" horizontal />

La extensión de HubSpot Visual Studio Code proporciona [comprobación de tipos](/developer-tooling/local-development/vs-code-extension#validate-hs-meta-json-config-files) para cada una de las propiedades de tus archivos de configuración `*-hsmeta.json`.

## Especificar UID

El campo `uid` es un identificador único interno para tu aplicación específica, y también debe ser único globalmente dentro del proyecto. Cada una de las [funciones de la aplicación](#adding-app-features) tendrá su propio `uid` definido en sus respectivos archivos `*-hsmeta.json`, que deben ser distintos del `uid` de nivel superior que elijas en el archivo `app-hsmeta.json` de tu aplicación.

## Esquema de la aplicación

La configuración de nivel superior de tu aplicación se especifica en un archivo de configuración `app-hsmeta.json` en el directorio `app`.

```shell theme={null}
my-project-folder/
└── src
    └── app/
        └── app-hsmeta.json/
```

Abajo se indican las opciones de configuración disponibles para `app-hsmeta.json`.

```json theme={null}
{
  "uid": "new_developer_platform_app",
  "type": "app",
  "config": {
    "description": "An example to demonstrate how to build an app with developer projects.",
    "name": "my first app",
    "distribution": "marketplace",
    "auth": {
      "type": "oauth",
      "redirectUrls": ["http://localhost:3000/oauth-callback"],
      "requiredScopes": ["crm.objects.contacts.read", "crm.objects.contacts.write"],
      "optionalScopes": [],
      "conditionallyRequiredScopes": []
    },
    "permittedUrls": {
      "fetch": ["https://api.hubapi.com"],
      "iframe": [],
      "img": []
    },
    "support": {
      "supportEmail": "support@example.com",
      "documentationUrl": "https://example.com/docs",
      "supportUrl": "https://example.com/support",
      "supportPhone": "+18005555555"
    }
  }
}
```

<Card title="Ver ejemplo en GitHub" href="https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/blob/main/projects/app-object-getting-started-template/src/app/app-hsmeta.json" icon="github" horizontal />

Cada una de las opciones de configuración se detalla en la tabla de abajo. En las secciones que hay debajo de la tabla se proporciona más contexto sobre la [distribución de tu aplicación](#distribution), la configuración de la [autenticación](#authentication) y la especificación de los [permisos](#scopes).

<p className="table-key">
  Los campos marcados con <span style={{ color: 'red' }}>\*</span> son obligatorios.
</p>

| Campo                                               | Tipo   | Descripción                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| --------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `uid`<span style={{color:"red"}}>\*</span>          | Cadena | Un identificador único interno para la aplicación. Debe ser globalmente único dentro del proyecto. Puede ser cualquier cadena de hasta 64 caracteres. Los caracteres pueden ser mayúsculas o minúsculas, y pueden incluir números, guiones bajos (`_`), guiones (`-`) y puntos (`.`).                                                                                                                                                                               |
| `type`<span style={{color:"red"}}>\*</span>         | Cadena | El tipo de componente. Debe coincidir con el nombre de la carpeta primaria (`app`).                                                                                                                                                                                                                                                                                                                                                                                 |
| `description`<span style={{color:"red"}}>\*</span>  | Cadena | Descripción de lo que hace la aplicación para el usuario que la instala. Puede ser cualquier cadena de hasta 8192 caracteres.                                                                                                                                                                                                                                                                                                                                       |
| `name`<span style={{color:"red"}}>\*</span>         | Cadena | El nombre de la aplicación, que se mostrará en HubSpot. Puede ser cualquier cadena de hasta 200 caracteres. No debe empezar ni terminar con un carácter de espacio en blanco.                                                                                                                                                                                                                                                                                       |
| `distribution`<span style={{color:"red"}}>\*</span> | Cadena | El método de distribución de la aplicación, que puede establecerse como uno de los siguientes:<ul><li>`marketplace`: se utiliza si quieres que la aplicación sea apta para aparecer en el mercado de aplicaciones de HubSpot.</li><li>`private`: se utiliza si solo quieres instalar tu aplicación en un conjunto específico de cuentas permitidas, o en una sola cuenta a la vez.</li></ul> <p>Más información en la sección de [distribución](#distribution).</p> |
| `auth`<span style={{color:"red"}}>\*</span>         | Objeto | Un objeto que contiene los detalles del método de autenticación de la aplicación. Para más detalles, consulta la [sección de autenticación](#authentication).                                                                                                                                                                                                                                                                                                       |
| `permittedUrls`                                     | Objeto | Una matriz que contiene las URL a las que la aplicación puede llamar. Las URL deben utilizar el esquema HTTPS y deben contener una [autoridad](https://developer.mozilla.org/en-US/docs/Learn_web_development/Howto/Web_mechanics/What_is_a_URL#authority), seguida de un prefijo de ruta opcional si es necesario.                                                                                                                                                 |
| `supportEmail`                                      | Cadena | Una dirección de correo electrónico válida con la que los usuarios puedan ponerse en contacto para recibir asistencia.                                                                                                                                                                                                                                                                                                                                              |
| `documentationUrl`                                  | Cadena | La URL externa a la que los usuarios pueden navegar para obtener documentación de apoyo. Debe utilizar HTTPS.                                                                                                                                                                                                                                                                                                                                                       |
| `supportUrl`                                        | Cadena | La URL externa a la que los usuarios pueden navegar para obtener asistencia adicional. Debe utilizar HTTPS.                                                                                                                                                                                                                                                                                                                                                         |
| `supportPhone`                                      | Cadena | El número de teléfono al que pueden dirigirse los usuarios para solicitar asistencia. Debe empezar por el signo más (`+`).                                                                                                                                                                                                                                                                                                                                          |

### Distribución

El campo `distribution` del esquema de tu aplicación te permite configurar cómo quieres distribuir tu aplicación:

* Si piensas publicar tu aplicación en el [mercado de aplicaciones de HubSpot](https://ecosystem.hubspot.com/marketplace/apps), establece el campo `distribution` en `"marketplace"`. Puedes encontrar un esquema de aplicación de ejemplo para esta opción [aquí](https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/blob/main/projects/public-app-getting-started-template/src/app/app-hsmeta.json). Si eliges esta opción, asegúrate de establecer el `type` dentro de la propiedad `auth` en `oauth`, tal y como se detalla en la sección de [autenticación](#authentication) más adelante.
* Si quieres permitir que tu aplicación se instale en un conjunto específico de cuentas permitidas, o si quieres restringir la instalación a una sola cuenta cada vez, configura `distribution` en `"private"`. Asegúrate de configurar el `type` dentro de la propiedad `auth` en consecuencia:
  * Si quieres instalar tu aplicación en varias cuentas basándote en [una lista de permisos que configures en los ajustes de tu proyecto](/apps/developer-platform/build-apps/manage-apps-in-hubspot#manage-authentication-for-your-app), establece la autenticación `type` en `oauth`. Consulta el esquema de aplicación de ejemplo para [esta opción](https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/blob/main/projects/private-app-oauth-getting-started-template/src/app/app-hsmeta.json).
  * Para restringir la instalación a una sola cuenta, ya sea la misma que utilizas para el desarrollo u otra cuenta a la que tenga acceso el usuario instalador, establece la autenticación `type` en `static`. Puedes encontrar un esquema de aplicación de ejemplo para la [autenticación estática](https://github.com/robrown-hubspot/hubspot-project-components-ua-app-objects-beta/blob/main/projects/private-app-static-getting-started-template/src/app/app-hsmeta.json).

### Autenticación

La autenticación de tu aplicación se configura mediante la propiedad `auth` del esquema de tu aplicación. Puedes especificar los permisos de tu aplicación, las URL de redireccionamiento y el tipo de autenticación.

<p className="table-key">
  Los campos marcados con <span style={{ color: 'red' }}>\*</span> son obligatorios.
</p>

| Campo                                                 | Tipo   | Descripción                                                                                                                                                                                                                                                                                                                                                                                             |
| ----------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `type`<span style={{color:"red"}}>\*</span>           | Cadena | El tipo de autenticación, que puede establecerse en una de las siguientes opciones: <ul><li>`oauth`: permitir la instalación mediante OAuth, ya sea a un conjunto específico de cuentas permitidas o incluyéndola en el mercado de aplicaciones de HubSpot.</li><li>`static`: restringir la instalación de tu aplicación a una única cuenta a la que tenga acceso el usuario que la instale. </li></ul> |
| `redirectUrls`<span style={{color:"red"}}>\*</span>   | Matriz | Una lista de URL a las que el proceso OAuth puede redirigir. Cada aplicación debe tener al menos una URL de redireccionamiento de autenticación, y debe utilizar HTTPS. La única excepción es que se permite `http://localhost` para las pruebas.                                                                                                                                                       |
| `requiredScopes`<span style={{color:"red"}}>\*</span> | Matriz | Una lista de los permisos necesarios para tu aplicación. Cada aplicación debe incluir al menos un permiso, y el usuario que la instala debe conceder estos permisos para que la aplicación se instale correctamente. [Más información sobre los permisos a continuación](#scopes).                                                                                                                      |
| `optionalScopes`                                      | Matriz | Una lista de los permisos opcionales de tu aplicación. Estos permisos pueden excluirse de la autorización durante la instalación si la cuenta o el usuario que instala la aplicación no tiene los permisos adecuados. En ese caso, el permiso no se incluirá en el token de actualización ni en el token de acceso resultantes. [Más información sobre los permisos abajo](#scopes).                    |
| `conditionallyRequiredScopes`                         | Matriz | Lista de permisos que solo son necesarios cuando se incluyen en el parámetro de consulta `scope` de la URL de instalación. [Más información sobre los permisos a continuación](#scopes).                                                                                                                                                                                                                |

### Permisos

En el campo `auth` del archivo de configuración de una aplicación, puedes especificar tres [tipos de permisos](/apps/legacy-apps/public-apps/overview#scope-types): permisos requeridos, permisos requeridos condicionalmente y permisos opcionales.

Como mínimo, tu aplicación debe incluir el permiso `read` para que los clientes puedan acceder al tipo de objeto del CRM asociado.

```json theme={null}
"auth": {
      "type" : "oauth",
      "redirectUrls": ["http://localhost:3000/oauth-callback"],
      "requiredScopes": [
        "crm.objects.contacts.read",
        "crm.objects.contacts.write"
      ],
      "optionalScopes": [],
      "conditionallyRequiredScopes": []
    },

```

Para obtener una lista completa de los permisos disponibles, consulta la [referencia de permisos](/apps/legacy-apps/authentication/scopes).

## Agregando funciones a la aplicación

Para configurar las funciones de la aplicación, como las suscripciones de webhooks, las acciones de workflow personalizadas y las tarjetas de la aplicación, consulta las guías de abajo para saber cómo agregar los archivos `*-hsmeta.json` asociados a tu proyecto:

* [Crear una tarjeta de aplicación](/apps/developer-platform/add-features/ui-extensibility/app-cards/create-an-app-card)
* [Definir eventos de aplicación](/apps/developer-platform/add-features/app-events/overview)
* [Crear objetos de aplicación](/apps/developer-platform/add-features/app-objects/quickstart-guide-to-app-objects)
* [Crear un componente de configuración](/apps/developer-platform/add-features/ui-extensibility/create-a-settings-component)
* [Configurar una acción de workflow personalizada](/apps/developer-platform/add-features/custom-workflow-actions)
* [Configurar una suscripción de webhook](/apps/developer-platform/add-features/configure-webhooks)
* [Agregar telemetría](/apps/developer-platform/add-features/add-telemetry)
