Дополнение использует файл манифеста для настройки определенных сведений о приложении и его работе.
В этой документации описываются детали настройки манифеста для надстройки Google Workspace.
Структура манифеста для дополнений Google Workspace
Надстройки Google Workspace используют файл манифеста для определения нескольких аспектов внешнего вида и поведения надстройки.
 Свойства манифеста для надстроек Google Workspace организованы в разделе « addOns » структуры объекта манифеста.
- Информацию о файлах манифеста Apps Script см. в разделе Структура манифеста . 
- Информацию о файлах манифеста для дополнений, созданных с использованием конечных точек HTTP, можно найти в ресурсе - projects.deployments.
Манифесты для Google Chat
Если ваше дополнение Google Workspace расширяет возможности Google Chat, вам необходимо настроить приложение Google Chat , включив и настроив API Google Chat в консоли Google Cloud.
 Общие параметры конфигурации манифеста (включая addons.common ) игнорируются в Chat. Вместо использования манифеста дополнения вы используете API Chat для настройки следующих параметров Chat:
- Название, логотип и описание приложения чата, которые отображаются только в пользовательском интерфейсе чата.
- Триггеры чат-приложения .
Если вы создали надстройку в Apps Script, вам также необходимо добавить или обновить следующие объекты в манифесте:
-  addons.chat(обязательно)
-  oauthScopes(требуется, если ваше приложение Google Chat использует области OAuth)
Инструкции по настройке параметров чата для надстройки см. в разделе Настройка приложения Google Chat .
Пример конфигурации манифеста надстройки Google Workspace
В следующих примерах манифеста показан раздел файла манифеста, определяющий надстройку Google Workspace, включая следующие аспекты:
- Раздел - addOns.commonманифеста определяет название, URL-адрес логотипа, цвета и другие общие, независимые от хоста параметры для дополнения.
- Манифест определяет общую домашнюю страницу, а также определяет домашние страницы, специфичные для Google Календаря, Google Диска, Google Документов, Таблиц и Презентаций. Gmail использует домашнюю страницу по умолчанию. 
- Пример настроек манифеста позволяет: - Триггеры событий календаря - eventOpenи- eventUpdated.
- (Только Apps Script) Два решения для конференций «Календарь». 
- Два универсальных действия. 
- Диск - onItemsSelectedTrigger.
- Действие создания письма в Gmail и контекстный триггер. 
- Объект Docs - linkPreviewTriggers. Подробнее об этом триггере см. в статье Предварительный просмотр ссылок с помощью смарт-чипов .
- Объект Docs - createActionTriggers. Подробнее об этом триггере см. в разделе Создание сторонних ресурсов из меню @ .
- Специфические интерфейсы для документов, таблиц и слайдов. 
- Параметр Meet - sidePanelUriи- addOnOrigins.
- (Только HTTP) Два - HttpOptionsдля отправки заголовка авторизации и поддержки детального согласия.
 
- Поле - oauthScopesустанавливает области авторизации для проекта (обычно требуется для дополнений).
- (Только для Apps Script) Поле - urlFetchWhitelistгарантирует, что все выбранные конечные точки соответствуют указанному списку префиксов URL HTTPS. Подробнее см. в разделе «Разрешённые URL» .
Ссылки в примерах манифеста перенаправляют к описаниям этого поля в соответствующей справочной документации манифеста для дополнений Apps Script и HTTP Google Workspace.
Скрипт приложений
{
  "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://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"
        }
      ],
      "createActionTriggers": [
        {
          "id": "exampleId",
          "labelText": "Example label text",
          "localizedLabelText": {
            "es": "Label text localized in Spanish"
          },
          "runFunction": "exampleFunction",
          "logoUrl": "https://www.example.com/images/case.png"
        }
      ]
    },
    "sheets": {
      "homepageTrigger": {
        "runFunction": "onEditorsHomepage"
      },
      "onFileScopeGrantedTrigger": {
        "runFunction": "onFileScopeGrantedEditors"
      }
    },
    "slides": {
      "homepageTrigger": {
        "runFunction": "onEditorsHomepage"
      },
      "onFileScopeGrantedTrigger": {
        "runFunction": "onFileScopeGrantedEditors"
      }
    },
    "meet": {
      "homepageTrigger",
      "Web": [
        {
          "sidePanelUrl": "https://myownpersonaldomain.com/sidePanelUrl",
          "supportsScreenSharing": true,
          "addOnOrigins": [
            "https://www.myownpersonaldomain.com",
            "https://www.myownpersonaldomain.com:443"
          ],
          "logoUrl": "https://myownpersonaldomain.com/logoUrl",
          "darkModeLogoUrl": "https://myownpersonaldomain.com/darkModeLogoUrl"
        }
    },
  },
  "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/"
  ]
}HTTP
{ "addOns": { "calendar": { "currentEventAccess": "READ_WRITE", "eventOpenTrigger": { "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onCalendarEventOpen" }, "eventUpdateTrigger": { "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onCalendarEventUpdate" }, "eventAttachmentTrigger": { "label": "My Event Attachment", "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onCalendarEventAddAttachment" }, "homepageTrigger": { "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onCalendarHomePageOpen", "enabled": true } }, "common": { "homepageTrigger": { "runFunction": "https://myownpersonaldomain.com/mypage?trigger=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://www.example.com/" ], "universalActions": [{ "label": "Open settings", "runFunction": "https://myownpersonaldomain.com/mypage?trigger=getSettingsCard" }, { "label": "Open Help URL", "openLink": "https://www.example.com/help" }], "useLocaleFromApp": true }, "drive": { "homepageTrigger": { "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onDriveHomePageOpen", "enabled": true }, "onItemsSelectedTrigger": { "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onDriveItemsSelected" } }, "gmail": { "composeTrigger": { "actions": [ { "label": "Add images to email", "runFunction": "https://myownpersonaldomain.com/mypage?trigger=getInsertImageComposeCards" } ], "draftAccess": "METADATA" }, "contextualTriggers": [ { "unconditional": {}, "onTriggerFunction": "https://myownpersonaldomain.com/mypage?trigger=onGmailMessageOpen" } ] }, "docs": { "homepageTrigger": { "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onEditorsHomepage" }, "onFileScopeGrantedTrigger": { "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onFileScopeGrantedEditors" }, "linkPreviewTriggers": [ { "runFunction": "https://myownpersonaldomain.com/mypage?trigger=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" } ], "createActionTriggers": [ { "id": "exampleId", "labelText": "Example label text", "localizedLabelText": { "es": "Label text localized in Spanish" }, "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onCreateAction", "logoUrl": "https://www.example.com/images/case.png" } ] }, "sheets": { "homepageTrigger": { "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onEditorsHomepage" }, "onFileScopeGrantedTrigger": { "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onFileScopeGrantedEditors" } }, "slides": { "homepageTrigger": { "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onEditorsHomepage" }, "onFileScopeGrantedTrigger": { "runFunction": "https://myownpersonaldomain.com/mypage?trigger=onFileScopeGrantedEditors" } }, "meet": { "homepageTrigger", "Web": [ { "sidePanelUrl": "https://myownpersonaldomain.com/sidePanelUrl", "supportsScreenSharing": true, "addOnOrigins": [ "https://www.myownpersonaldomain.com", "https://www.myownpersonaldomain.com:443" ], "logoUrl": "https://myownpersonaldomain.com/meetWebLogoUrl", "darkModeLogoUrl": "https://myownpersonaldomain.com/darkModeLogoUrl" } ] }, "httpOptions": { "authorizationHeader": "SYSTEM_ID_TOKEN", "granularOauthPermissionSupport": "OPT_IN" } }, "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" ] }
Белый список URL-адресов
Списки разрешенных URL-адресов используются для указания определенных URL-адресов, доступ к которым предварительно одобрен вашим скриптом или дополнением. Списки разрешенных адресов помогают защитить пользовательские данные; при определении списка разрешенных адресов проекты скриптов не смогут получать доступ к URL-адресам, не добавленным в список разрешенных адресов.
Это поле необязательно при установке тестового развертывания, но является обязательным при создании версионного развертывания.
Вы используете белые списки, когда ваш скрипт или дополнение выполняет следующие действия:
-  Извлекает или извлекает информацию из внешнего источника (например, конечных точек HTTPS) с помощью сервиса Apps Script UrlFetch. Чтобы добавить URL-адреса для извлечения, включите полеurlFetchWhitelistв файл манифеста.
-  Открывает или отображает URL-адрес в ответ на действие пользователя (требуется для дополнений Google Workspace, которые открывают или отображают URL-адреса, не относящиеся к Google). Чтобы добавить URL-адреса в список разрешённых для открытия, включите поле addOns.common.openLinkUrlPrefixesв файл манифеста.
Добавление префиксов в ваш белый список
 При указании разрешённых списков в файле манифеста (путём включения поля addOns.common.openLinkUrlPrefixes или urlFetchWhitelist ) необходимо включить список префиксов URL. Добавляемые в манифест префиксы должны соответствовать следующим требованиям:
- Каждый префикс должен быть допустимым URL-адресом.
-  Каждый префикс должен использовать https://, а неhttp://.
- Каждый префикс должен иметь полный домен.
-  Каждый префикс должен иметь непустой путь. Например, https://www.google.com/допустим, аhttps://www.google.com— нет.
- Для сопоставления префиксов поддоменов URL можно использовать подстановочные знаки .
-  В поле addOns.common.openLinkUrlPrefixesможно использовать один подстановочный знак*для сопоставления всех ссылок, но это не рекомендуется, так как это может подвергнуть данные пользователя риску и увеличить время проверки дополнения . Используйте подстановочный знак только в том случае, если это требуется для функциональности вашего дополнения.
При определении соответствия URL-адреса префиксу в разрешенном списке применяются следующие правила:
- Сопоставление путей чувствительно к регистру.
- Если префикс идентичен URL-адресу, это совпадение.
- Если URL-адрес совпадает с префиксом или является его дочерним, то это совпадение.
 Например, префикс https://example.com/foo соответствует следующим URL-адресам:
-  https://example.com/foo
-  https://example.com/foo/
-  https://example.com/foo/bar
-  https://example.com/foo?bar
-  https://example.com/foo#bar
Использование подстановочных знаков
 Для сопоставления поддоменов в полях urlFetchWhitelist и addOns.common.openLinkUrlPrefixes можно использовать один подстановочный символ ( * ). Для сопоставления нескольких поддоменов можно использовать только один подстановочный символ, и он должен представлять собой начальный префикс URL-адреса.
 Например, префикс https://*.example.com/foo соответствует следующим URL-адресам:
-  https://subdomain.example.com/foo
-  https://any.number.of.subdomains.example.com/foo
 Префикс https://*.example.com/foo не соответствует следующим URL-адресам:
-  https://subdomain.example.com/bar(несовпадение суффикса)
-  https://example.com/foo(должен присутствовать хотя бы один поддомен)
Некоторые правила префиксов применяются при попытке сохранить манифест. Например, следующие префиксы вызывают ошибку, если они присутствуют в манифесте при попытке сохранить его:
-  https://*.*.example.com/foo(нельзя использовать несколько подстановочных знаков)
-  https://subdomain.*.example.com/foo(в качестве начального префикса необходимо использовать подстановочные знаки)