Manifiestos para complementos de Google Workspace

Un proyecto de Apps Script usa un archivo de manifiesto para configurar ciertos detalles sobre la secuencia de comandos y su operación. Para aprender a ver y editar un manifiesto, consulta Manifiestos.

En esta documentación, se abordan los detalles de la configuración de un manifiesto para un complemento de Google Workspace.

Estructura del manifiesto para los complementos de Google Workspace

Los complementos de Google Workspace usan el archivo de manifiesto del proyecto de Apps Script para definir varios aspectos de la apariencia y el comportamiento del complemento. Las propiedades del manifiesto para los complementos de Google Workspace se organizan en la sección addOns de la estructura del objeto del manifiesto.

Ejemplo de configuración del manifiesto del complemento de Google Workspace

En la siguiente muestra de manifiesto, se ve la sección de un archivo de manifiesto que define complementos de Google Workspace, incluidos los siguientes aspectos:

  • La sección addOns.common del manifiesto define el nombre, la URL del logotipo, los colores y otros parámetros de configuración generales independientes del host para el complemento.
  • El manifiesto define una página principal común, pero también define páginas principales específicas de Calendario, Drive, Documentos, Hojas de cálculo y Presentaciones. Gmail usa la página principal predeterminada.
  • La configuración del manifiesto de muestra permite lo siguiente:
    • Activadores eventOpen y eventUpdated de Calendario, y dos soluciones de conferencia de Calendario.
    • Dos acciones universales.
    • Un onItemsSelectedTrigger de Drive.
    • Una acción de redacción de Gmail y un activador contextual.
    • Un linkPreviewTrigger de Documentos. Para obtener información sobre este activador, consulta Cómo obtener una vista previa de los vínculos con chips inteligentes.
    • Interfaces específicas de archivos para Documentos, Hojas de cálculo y Presentaciones.
  • El campo oauthScopes establece los permisos de autorización del proyecto (por lo general, es obligatorio para los complementos).
  • El campo urlFetchWhitelist es un campo que garantiza que cualquier extremo recuperado coincida con una lista específica de prefijos de URL HTTPS. Para obtener más información, consulta URLs de la lista de entidades permitidas.

Los vínculos de la muestra dirigen a las descripciones de ese campo en la documentación de referencia del manifiesto.

{
  "addOns": {
    "calendar": {
      "createSettingsUrlFunction": "getConferenceSettingsPageUrl",
      "conferenceSolution": [{
        "id": "my-video-conf",
        "logoUrl": "https://lh3.googleusercontent.com/...",
        "name": "My Video Conference",
        "onCreateFunction": "onCreateMyVideoConference"
      }, {
        "id": "my-streamed-conf",
        "logoUrl": "https://lh3.googleusercontent.com/...",
        "name": "My Streamed Conference",
        "onCreateFunction": "onCreateMyStreamedConference"
      }],
      "currentEventAccess": "READ_WRITE",
      "eventOpenTrigger": {
        "runFunction": "onCalendarEventOpen"
      },
      "eventUpdateTrigger": {
        "runFunction": "onCalendarEventUpdate"
      },
      "eventAttachmentTrigger": {
        "label": "My Event Attachment",
        "runFunction": "onCalendarEventAddAttachment"
      },
      "homepageTrigger": {
        "runFunction": "onCalendarHomePageOpen",
        "enabled": true
      }
    },
    "common": {
      "homepageTrigger": {
        "runFunction": "onDefaultHomePageOpen",
        "enabled": true
      },
      "layoutProperties": {
        "primaryColor": "#ff392b",
        "secondaryColor": "#d68617"
      },
      "logoUrl": "https://ssl.gstatic.com/docs/script/images/logo/script-64.png",
      "name": "Demo Google Workspace Add-on",
      "openLinkUrlPrefixes": [
        "https://mail.google.com/",
        "https://script.google.com/a/google.com/d/",
        "https://drive.google.com/a/google.com/file/d/",
        "https://en.wikipedia.org/wiki/",
        "https://www.example.com/"
      ],
      "universalActions": [{
        "label": "Open settings",
        "runFunction": "getSettingsCard"
      }, {
        "label": "Open Help URL",
        "openLink": "https://www.example.com/help"
      }],
      "useLocaleFromApp": true
    },
    "drive": {
      "homepageTrigger": {
        "runFunction": "onDriveHomePageOpen",
        "enabled": true
      },
      "onItemsSelectedTrigger": {
        "runFunction": "onDriveItemsSelected"
      }
    },
    "gmail": {
      "composeTrigger": {
        "selectActions": [
          {
            "text": "Add images to email",
            "runFunction": "getInsertImageComposeCards"
          }
        ],
        "draftAccess": "METADATA"
      },
      "contextualTriggers": [
        {
          "unconditional": {},
          "onTriggerFunction": "onGmailMessageOpen"
        }
      ]
    },
    "docs": {
      "homepageTrigger": {
        "runFunction": "onEditorsHomepage"
      },
      "onFileScopeGrantedTrigger": {
        "runFunction": "onFileScopeGrantedEditors"
      },
      "linkPreviewTriggers": [
        {
        "runFunction": "onLinkPreview",
        "patterns": [
            {
              "hostPattern": "example.com",
              "pathPrefix": "example-path"
            }
        ],
        "labelText": "Link preview",
        "localizedLabelText": {
          "es": "Link preview localized in Spanish"
        },
        "logoUrl": "https://www.example.com/images/smart-chip-icon.png"
        }
      ]
    },
    "sheets": {
      "homepageTrigger": {
        "runFunction": "onEditorsHomepage"
      },
      "onFileScopeGrantedTrigger": {
        "runFunction": "onFileScopeGrantedEditors"
      }
    },
    "slides": {
      "homepageTrigger": {
        "runFunction": "onEditorsHomepage"
      },
      "onFileScopeGrantedTrigger": {
        "runFunction": "onFileScopeGrantedEditors"
      }
    }
  },
  "oauthScopes": [
    "https://www.googleapis.com/auth/calendar.addons.execute",
    "https://www.googleapis.com/auth/calendar.addons.current.event.read",
    "https://www.googleapis.com/auth/calendar.addons.current.event.write",
    "https://www.googleapis.com/auth/drive.addons.metadata.readonly",
    "https://www.googleapis.com/auth/gmail.addons.current.action.compose",
    "https://www.googleapis.com/auth/gmail.addons.current.message.metadata",
    "https://www.googleapis.com/auth/userinfo.email",
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/script.locale",
    "https://www.googleapis.com/auth/script.scriptapp",
    "https://www.googleapis.com/auth/drive.file",
    "https://www.googleapis.com/auth/documents.currentonly",
    "https://www.googleapis.com/auth/spreadsheets.currentonly",
    "https://www.googleapis.com/auth/presentations.currentonly",
    "https://www.googleapis.com/auth/workspace.linkpreview"
  ],
  "urlFetchWhitelist": [
    "https://www.example.com/myendpoint/"
  ]
}

URLs de la lista de entidades permitidas

Usa las listas de entidades permitidas para designar URLs específicas que están aprobadas previamente para el acceso a través de tu secuencia de comandos o tu complemento. Las listas de entidades permitidas ayudan a proteger los datos del usuario. Cuando defines una lista de entidades permitidas, los proyectos de secuencias de comandos no pueden acceder a las URLs que no están incluidas en la lista de entidades permitidas.

Este campo es opcional cuando instalas una implementación de prueba, pero es obligatorio cuando creas una implementación con versión.

Usa listas de entidades permitidas cuando tu secuencia de comandos o complemento realiza las siguientes acciones:

  • Recupera o recupera información de una ubicación externa (como extremos HTTPS) con el servicio UrlFetch de Apps Script. Si quieres incluir URLs en la lista de entidades permitidas para la recuperación, incluye el campo urlFetchWhitelist en tu archivo de manifiesto.
  • Abre o muestra una URL en respuesta a una acción del usuario (obligatorio para los complementos de Google Workspace que abren o muestran URLs externas a Google). Si quieres agregar URLs a la lista de entidades permitidas para que se abran, incluye el campo addOns.common.openLinkUrlPrefixes en tu archivo de manifiesto.

Agrega prefijos a tu lista de entidades permitidas

Cuando especificas listas de entidades permitidas en tu archivo de manifiesto (con los campos addOns.common.openLinkUrlPrefixes o urlFetchWhitelist), debes incluir una lista de prefijos de URL. Los prefijos que agregues al manifiesto deben cumplir con los siguientes requisitos:

  • Cada prefijo debe ser una URL válida.
  • Cada prefijo debe usar https://, no http://.
  • Cada prefijo debe tener un dominio completo.
  • Cada prefijo debe tener una ruta de acceso que no esté vacía. Por ejemplo, https://www.google.com/ es válido, pero https://www.google.com no lo es.
  • Puedes usar comodines para hacer coincidir los prefijos de subdominio de URL.
  • Se puede usar un solo comodín * en el campo addOns.common.openLinkUrlPrefixes para que coincida con todos los vínculos, pero esto no es recomendable, ya que puede exponer los datos del usuario al riesgo y prolongar el proceso de revisión de complementos. Usa un comodín solo si la funcionalidad del complemento lo requiere.

Para determinar si una URL coincide con un prefijo incluido en la lista de entidades permitidas, se aplican las siguientes reglas:

  • Para la coincidencia de rutas de acceso, se distinguen mayúsculas de minúsculas.
  • Si el prefijo es idéntico a la URL, es una coincidencia.
  • Si la URL es la misma o una secundaria del prefijo, es una coincidencia.

Por ejemplo, el prefijo https://example.com/foo coincide con las siguientes URLs:

  • https://example.com/foo
  • https://example.com/foo/
  • https://example.com/foo/bar
  • https://example.com/foo?bar
  • https://example.com/foo#bar

Usa comodines

Puedes usar un solo carácter comodín (*) para hacer coincidir un subdominio en los campos urlFetchWhitelist y addOns.common.openLinkUrlPrefixes. No puedes usar más de un comodín para hacer coincidir varios subdominios, y el comodín debe representar el prefijo inicial de la URL.

Por ejemplo, el prefijo https://*.example.com/foo coincide con las siguientes URLs:

  • https://subdomain.example.com/foo
  • https://any.number.of.subdomains.example.com/foo

El prefijo https://*.example.com/foo no coincide con las siguientes URLs:

  • https://subdomain.example.com/bar (no coincide con el sufijo)
  • https://example.com/foo (se debe incluir al menos un subdominio)

Algunas de las reglas de prefijo se aplican cuando intentas guardar el manifiesto. Por ejemplo, los siguientes prefijos provocan un error si están presentes en tu manifiesto cuando intentas guardar:

  • https://*.*.example.com/foo (no se permiten varios comodines)
  • https://subdomain.*.example.com/foo (los comodines se deben usar como prefijo inicial)