Última modificación: 26 de septiembre de 2025
A continuación, encontrarás información de referencia para crear tarjetas de aplicación

Estructura del proyecto

En el contexto de un proyecto, los componentes de las tarjetas de aplicación se definen en un directorio cards dentro de app/. El directorio cards debe contener:
  • Un archivo de definición del esquema JSON para cada tipo de tarjeta (*-hsmeta.json).
  • Un archivo React que renderiza la interfaz de la tarjeta. Puede ser un archivo .jsx o .tsx.
  • Un archivo package.json para gestionar las dependencias necesarias.
project-folder/
└── src/
    └── app/
        ├── app-hsmeta.json
        └── cards/
            └── my-app-card-hsmeta.json
            └── my-app-card.jsx
            └── package.json

Esquema de la tarjeta de aplicación

En el archivo de configuración *-hsmeta.json de tu tarjeta de aplicación, incluye las siguientes propiedades.
{
  "uid": "example-card",
  "type": "card",
  "config": {
    "name": "Hello Example App",
    "description": "A description of the card's purpose.",
    "location": "crm.record.tab",
    "entrypoint": "/app/cards/ExampleCard.jsx",
    "objectTypes": [
      "contacts"
    ]
  }
}

Los campos marcados con * son obligatorios.

CampoTipoDescripción
uid*CadenaEl identificador único de la tarjeta. Puede ser cualquier cadena, pero debe identificar significativamente a la tarjeta. HubSpot identificará la tarjeta por este ID para que puedas cambiar el título de la tarjeta sin eliminar datos históricos o de estado, como la posición en el registro del CRM.
typeCadenaEl tipo de componente, que en este caso debe ser card.
configObjetoUn objeto que contiene detalles de configuración.
name*CadenaEl título de la tarjeta, tal y como se muestra en la interfaz de usuario de HubSpot.
descriptionCadenaDescripción de la tarjeta.
previewImageObjetoObjeto que contiene los campos file y altText. El campo file es la ruta relativa a la imagen de previsualización. Las extensiones de archivo válidas son png, jpeg, jpg o gif. El tamaño máximo del archivo es de 5.0 MB. El campo altText es una breve descripción de la imagen.
entrypoint*CadenaLa ruta del archivo del código React de la interfaz de la tarjeta.
location*crm.record.tab | crm.record.sidebar | crm.preview |helpdesk.sidebarDónde aparece la tarjeta en la interfaz de usuario de HubSpot. Solo puedes especificar un valor de ubicación, pero algunas combinaciones de location y objectTypes dan lugar a un soporte de ubicación múltiple. Para más información, consulta la sección Localizaciones compatibles.
objectTypes*MatrizLos tipos de registros del CRM en los que aparecerá la tarjeta. Para más detalles, consulta la sección Objetos compatibles.

Objetos compatibles

En la matriz objectTypes del archivo de configuración *-hsmeta.json de la tarjeta, especifica los tipos de registros del CRM en los que aparecerá la tarjeta. A continuación se indican los objetos del CRM admitidos actualmente, su valor objectType y el permiso mínimo que debes agregar a tu aplicación.
Para los objetos estándar de HubSpot, los valores de objectType no distinguen entre mayúsculas y minúsculas, y admiten tanto el singular como el plural. Por ejemplo, tanto "CONTACT" como "contacts" son válidos.
Objeto del CRMobjectType valorPermiso relacionado
ContactosCONTACTcrm.objects.contacts.read
EmpresasCOMPANYcrm.objects.companies.read
NegociosDEALScrm.objects.deals.read
TicketsTICKETStickets
Objetos personalizadosp_objectName (distingue mayúsculas de minúsculas)crm.objects.custom.read
Objetos de la aplicaciónapp_object_uidVer permisos de los objetos de la aplicación
Además, los siguientes objetos del CRM son compatibles si se han activado en la biblioteca de objetos:
Objeto del CRMobjectType valorPermisos relacionados
CitasAPPOINTMENTScrm.objects.appointments.read
CursosCOURSEScrm.objects.courses.read
ListadosLISTINGScrm.objects.listings.read
ServiciosSERVICEScrm.objects.services.read

Ubicaciones compatibles

En el campo location del archivo de configuración *-hsmeta.json de la tarjeta, especifica dónde debe mostrarse la tarjeta en HubSpot. A continuación se indican las ubicaciones admitidas actualmente.
  • crm.record.tab: coloca la extensión en la columna central de las páginas de registros del CRM, en una de las pestañas predeterminadas de HubSpot o en una pestaña personalizada. Si objectType está configurado como COMPANIES, la tarjeta también estará disponible en el panel de vista previa de cuentas objetivo del espacio de ventas.
Si has personalizado la columna central previamente, tendrás que personalizar la vista de la columna central para hacer visibles las extensiones recién creadas.
  • crm.preview: muestra la tarjeta de la aplicación en el panel de vista previa al que puedes acceder en todo el CRM. Cuando utilices esta ubicación, la extensión estará disponible al previsualizar el objectTypes especificado en el archivo de configuración JSON. Esto incluye la previsualización de registros desde las páginas de registros del CRM, páginas de índice, vistas de tablero y la herramienta de listas. Más información sobre cómo personalizar las vistas previas.
  • helpdesk.sidebar: muestra la tarjeta en las barras laterales del ticket dentro del centro de ayuda. Esto incluye tanto el panel de vista previa del ticket en la página de inicio del centro de ayuda como la barra lateral derecha de la visualización del ticket en el centro de ayuda. Para agregar una tarjeta a esta ubicación, tendrás que configurar los ajustes de tu centro de ayuda para incluir la tarjeta.
Al crear una extensión para esta ubicación, también tendrás que asegurarte de que el archivo de configuración JSON de la aplicación incluye tickets en la matriz de scopes, y de que el archivo de configuración JSON de la tarjeta incluye tickets en el campo objectTypes.

Crear la interfaz de React

La interfaz de usuario de una tarjeta de aplicación se crea mediante un archivo de componentes React, ya sea .jsx o .tsx. Este archivo se encuentra en el directorio cards/ junto al archivo JSON de configuración de la tarjeta (*-hsmeta.json). En el archivo de configuración de la tarjeta, especificarás la ruta del archivo React en el campo entrypoint. Abajo se muestra un ejemplo de una tarjeta de aplicación sencilla, que incluye los componentes de interfaz de usuario Text y Button para representar el contenido de la tarjeta, junto con un componente Flex para gestionar el diseño.
import React from 'react';
import { Text, Button, Flex, hubspot } from '@hubspot/ui-extensions';

// Define the extension to be run within the Hubspot CRM
hubspot.extend(() => <Extension />);

// Define the Extension component
const Extension = () => {
  return (
    <Flex direction="column" gap="medium">
      <Text>
        This is a simple getting started UI extension with static text.
      </Text>
      <Button onClick={() => console.log('Button clicked!')}>Click me!</Button>
    </Flex>
  );
};
Se proporciona la siguiente documentación de referencia para crear el aspecto y la funcionalidad de las tarjetas:

Gestionar las dependencias

Puedes incluir dependencias para tu tarjeta de aplicación en un archivo package.json dentro del directorio cards/. Por defecto, al agregar una tarjeta de aplicación mediante el comando hs project add, se te creará un archivo package.json con las siguientes dependencias:
  • @hubspot/ui-extensions
  • react
  • typescript
Para instalar las dependencias de los componentes del proyecto con un archivo package.json, puedes ejecutar el comando hs project install-deps en el directorio de tu proyecto.
{
  "name": "hubspot-example-extension",
  "version": "0.1.0",
  "license": "MIT",
  "dependencies": {
    "@hubspot/ui-extensions": "latest",
    "react": "^18.2.0"
  },
  "devDependencies": {
    "typescript": "^5.3.3"
  }
}