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

# Configuração do aplicativo (BETA)

> Informações de referência para opções de configuração de aplicativos criados na nova plataforma para desenvolvedores (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>

Veja abaixo informações de referência para recursos da plataforma para desenvolvedores, incluindo definições de arquivo de configuração, detalhes de escopos e muito mais.

## Estrutura do projeto

* Todos os componentes do projeto devem estar no diretório `src` especificado no arquivo de configuração `hsproject.json` de nível superior.
* Todos os recursos e componentes do aplicativo devem estar no diretório `src/app/`. No diretório `app/`, você definirá subdiretórios para cada recurso ao qual deseja que seu aplicativo ofereça suporte:
  * Os eventos de aplicativo são configurados em `app-events/`.
  * Objetos de aplicativo são definidos em `app-objects/`.
  * Todos os recursos do cartão são definidos no `cards/`.
  * Os recursos da página de configurações são definidos no `settings/`.
  * A telemetria é configurada em `telemetry/`.
  * As assinaturas de webhook são definidas no diretório `webhooks/`.
  * As ações de fluxo de trabalho personalizadas são definidas no `workflow-actions/`.
* Dentro de cada subdiretório de recurso, você configurará o recurso usando um arquivo `*-hsmeta.json`. Você pode prefixar o nome do arquivo com algo significativo para seu aplicativo (por exemplo, `my-app-hsmeta.json`), desde que o arquivo termine com `-hsmeta.json`. Esses arquivos devem estar no nível raiz da respectiva pasta (por exemplo, `app/my-app-hsmeta.json`, `cards/my-card-hsmeta.json`).

O exemplo de estrutura de diretório abaixo descreve todos os recursos disponíveis. Detalhes para configurar o esquema de aplicativo de arquivo `app-hsmeta.json` de nível superior são fornecidos na [seção de esquema de aplicativo](#app-schema) a seguir. Quando estiver pronto para adicionar recursos de aplicativo, confira a seção [adicionar recursos de aplicativo](#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 exemplo no 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 />

A extensão HubSpot Visual Studio Code fornece [verificação de tipo](/developer-tooling/local-development/vs-code-extension#validate-hs-meta-json-config-files) para cada uma das propriedades em seus arquivos de configuração `*-hsmeta.json`.

## Especificar UIDs

O campo `uid` é um identificador exclusivo interno para seu aplicativo específico e também deve ser globalmente exclusivo dentro do projeto. Cada [recurso de aplicativo](#adding-app-features) terá seu próprio `uid` definido nos respectivos arquivos `*-hsmeta.json`, que devem ser diferentes do `uid` de nível superior escolhido no arquivo `app-hsmeta.json` do seu aplicativo.

## Esquema de aplicativo

A configuração de nível superior do seu aplicativo é especificada em um arquivo de configuração `app-hsmeta.json` no diretório `app`.

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

Veja abaixo as opções de configuração disponíveis 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 exemplo no 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 uma das opções de configuração é detalhada na tabela abaixo. Mais contexto sobre como [distribuir seu aplicativo](#distribution), configurar a [autenticação](#authentication) e especificar [escopos](#scopes) são fornecidos nas seções abaixo da tabela.

<p className="table-key">
  Campos marcados com <span style={{ color: 'red' }}>\*</span> são obrigatórios.
</p>

| Campo                                               | Tipo   | Descrição                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| --------------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `uid`<span style={{color:"red"}}>\*</span>          | String | Um identificador exclusivo interno do aplicativo. Deve ser globalmente exclusivo dentro do projeto. Pode ser qualquer string de até 64 caracteres. Os caracteres podem ser maiúsculos ou minúsculos e podem incluir números e sublinhados (`_`), traços (`-`) e pontos (`.`).                                                                                                                                                                              |
| `type`<span style={{color:"red"}}>\*</span>         | String | O tipo de componente. Deve corresponder ao nome da pasta principal (`app`).                                                                                                                                                                                                                                                                                                                                                                                |
| `description`<span style={{color:"red"}}>\*</span>  | String | Uma descrição do que o aplicativo faz para o usuário que está instalando. Pode ser qualquer string de até 8192 caracteres.                                                                                                                                                                                                                                                                                                                                 |
| `name`<span style={{color:"red"}}>\*</span>         | String | O nome do aplicativo, que será exibido na interface do HubSpot. Pode ser qualquer string de até 200 caracteres. Não deve iniciar ou terminar com um caractere de espaço.                                                                                                                                                                                                                                                                                   |
| `distribution`<span style={{color:"red"}}>\*</span> | String | O método de distribuição do aplicativo, que pode ser definido como um dos seguintes:<ul><li>`marketplace`: usado se você quiser que o aplicativo seja qualificado para listagem no Marketplace de aplicativos da HubSpot.</li><li>`private`: usado se você somente quiser instalar seu aplicativo em um conjunto específico de contas permitidas ou em uma única conta por vez.</li></ul> <p>Saiba mais na seção [distribuição](#distribution) abaixo.</p> |
| `auth`<span style={{color:"red"}}>\*</span>         | Objeto | Um objeto que contém os detalhes do método de autenticação do aplicativo. Consulte a [seção de autenticação](#authentication) abaixo para obter detalhes.                                                                                                                                                                                                                                                                                                  |
| `permittedUrls`                                     | Objeto | Uma matriz que contém os URLs que o aplicativo tem permissão para chamar. Os URLs devem usar o esquema HTTPS e devem conter uma [autoridades](https://developer.mozilla.org/en-US/docs/Learn_web_development/Howto/Web_mechanics/What_is_a_URL#authority), seguido por um prefixo de caminho opcional, se necessário.                                                                                                                                      |
| `supportEmail`                                      | String | Um endereço de e-mail válido com o qual os usuários podem entrar em contato para obter suporte.                                                                                                                                                                                                                                                                                                                                                            |
| `documentationUrl`                                  | String | O URL externa na qual os usuários podem navegar para documentação de suporte. Devem usar HTTPS.                                                                                                                                                                                                                                                                                                                                                            |
| `supportUrl`                                        | String | O URL externo para o qual os usuários podem navegar para obter suporte adicional. Devem usar HTTPS.                                                                                                                                                                                                                                                                                                                                                        |
| `supportPhone`                                      | String | O número de telefone com o qual os usuários podem entrar em contato para obter suporte. Deve começar com um sinal de mais (`+`).                                                                                                                                                                                                                                                                                                                           |

### Distribuição

O campo `distribution` no esquema do aplicativo permite que você configure como deseja distribuir o aplicativo:

* Se você planeja listar seu aplicativo no [Marketplace de aplicativos da HubSpot](https://ecosystem.hubspot.com/marketplace/apps), defina o campo `distribution` como `"marketplace"`. Um exemplo de esquema de aplicativo para esta opção pode ser encontrado [aqui](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). Se você escolher essa opção, verifique se definiu `type` na propriedade `auth` como `oauth`, tal como especificado na seção de [autenticação](#authentication) abaixo.
* Se você quiser permitir que seu aplicativo seja instalado em um conjunto específico de contas permitidas, ou se quiser restringir a instalação a uma única conta por vez, defina `distribution` como `"private"`. Certifique-se de definir o `type` dentro da propriedade `auth`:
  * Se você quiser instalar seu aplicativo em várias contas com base em [uma lista de permissões definida nas configurações do seu projeto](/apps/developer-platform/build-apps/manage-apps-in-hubspot#manage-authentication-for-your-app), defina a autenticação `type` como `oauth`. Consulte o exemplo de esquema de aplicativo para esta opção [aqui](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 a instalação a uma única conta, seja a mesma conta usada para desenvolvimento ou outra à qual o usuário instalador tenha acesso, defina a autenticação `type` como `static`. Um exemplo de esquema de aplicativo para autenticação estática pode ser encontrado [aqui](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).

### Autenticação

A autenticação do seu aplicativo é configurada por meio da propriedade `auth` no esquema do aplicativo. Você pode especificar os requisitos de escopo do seu aplicativo, os URLs de redirecionamento e o tipo de autenticação.

<p className="table-key">
  Campos marcados com <span style={{ color: 'red' }}>\*</span> são obrigatórios.
</p>

| Campo                                                 | Tipo   | Descrição                                                                                                                                                                                                                                                                                                                                                                      |
| ----------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `type`<span style={{color:"red"}}>\*</span>           | String | O tipo de autenticação, que pode ser definido como um dos seguintes: <ul><li>`oauth`: permita a instalação via OAuth, seja para um conjunto específico de contas permitidas ou listando-o no Marketplace de aplicativos da HubSpot.</li><li>`static`: restrinja a instalação do seu aplicativo a uma única conta à qual o usuário que está instalando tenha acesso. </li></ul> |
| `redirectUrls`<span style={{color:"red"}}>\*</span>   | Matriz | Uma lista de URLs que o OAuth tem permissão para usar em redirecionamentos. Cada aplicativo deve ter pelo menos um URL de redirecionamento de autenticação e deve usar HTTPS. A única exceção é que `http://localhost` é permitida para testes.                                                                                                                                |
| `requiredScopes`<span style={{color:"red"}}>\*</span> | Matriz | Uma lista dos escopos obrigatórios do seu aplicativo. Cada aplicativo deve incluir pelo menos um escopo, e o usuário instalador deve conceder esses escopos para instalar o aplicativo. [Saiba mais sobre escopos abaixo](#scopes).                                                                                                                                            |
| `optionalScopes`                                      | Matriz | Uma lista dos escopos opcionais do seu aplicativo. Esses escopos podem ser excluídos da autorização durante a instalação se a conta ou o usuário que está instalando o aplicativo não tiver as permissões adequadas. Nesse caso, o escopo não será incluído no token de atualização ou de acesso resultante. [Saiba mais sobre escopos abaixo](#scopes).                       |
| `conditionallyRequiredScopes`                         | Matriz | Uma lista de escopos que são necessários somente quando incluídos no parâmetro de consulta `scope` do URL de instalação. [Saiba mais sobre escopos abaixo](#scopes).                                                                                                                                                                                                           |

### Escopos

Na janela `auth` de um arquivo de configuração de aplicativo, você pode especificar três [tipos de escopos](/apps/legacy-apps/public-apps/overview#scope-types): necessários, condicionalmente necessários e opcionais.

No mínimo, seu aplicativo deve incluir o escopo `read` para permitir que os clientes acessem o tipo de objeto do CRM associado.

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

```

Para obter uma lista completa dos escopos disponíveis, consulte a [referência de escopos](/apps/legacy-apps/authentication/scopes).

## Adicionar recursos do aplicativo

Para configurar recursos de aplicativo, como assinaturas de webhook, ações de fluxo de trabalho personalizadas e cartões de aplicativo, confira os guias abaixo para obter detalhes sobre como adicionar os arquivos `*-hsmeta.json` ao seu projeto:

* [Criar um cartão de aplicativo](/apps/developer-platform/add-features/ui-extensibility/app-cards/create-an-app-card)
* [Definir eventos de aplicativo](/apps/developer-platform/add-features/app-events/overview)
* [Criar objetos de aplicativo](/apps/developer-platform/add-features/app-objects/quickstart-guide-to-app-objects)
* [Criar um componente de configurações](/apps/developer-platform/add-features/ui-extensibility/create-a-settings-component)
* [Configurar uma ação de fluxo de trabalho personalizado](/apps/developer-platform/add-features/custom-workflow-actions)
* [Configurar uma assinatura de webhook](/apps/developer-platform/add-features/configure-webhooks)
* [Adicionar telemetria](/apps/developer-platform/add-features/add-telemetry)
