Um projeto do Apps Script usa um arquivo de manifesto para configurar determinados detalhes sobre o script e a operação dele. Para saber como visualizar e editar um manifesto, consulte Manifestos.
Nesta documentação, abordamos os detalhes da configuração de um manifesto para um complemento do Google Workspace.
Estrutura do manifesto para complementos do Google Workspace
Os complementos do Google Workspace usam o arquivo de manifesto do projeto do Apps Script para definir vários aspectos da aparência e do comportamento dos complementos. As propriedades do manifesto para complementos do Google Workspace são
organizadas na
seção addOns
da estrutura do objeto de manifesto.
Exemplo de configuração do manifesto de complementos do Google Workspace
O exemplo de manifesto a seguir mostra a seção de um arquivo de manifesto que define complementos do Google Workspace, incluindo os seguintes aspectos:
- A seção
addOns.common
do manifesto define o nome, o URL do logotipo, as cores e outras configurações gerais independentes do host para o complemento. - O manifesto define uma página inicial comum, mas também define páginas iniciais específicas dos apps Agenda, Drive, Documentos, Planilhas e Apresentações. O Gmail usa a página inicial padrão.
- As configurações do manifesto de exemplo permitem:
- Acionadores
eventOpen
eeventUpdated
e duas soluções de conferência do Google Agenda. - Duas ações universais.
- Um
onItemsSelectedTrigger
de unidade. - Uma ação de escrita e um acionador contextual do Gmail.
linkPreviewTrigger
do app Documentos. Para saber mais sobre esse acionador, consulte Visualizar links com ícones inteligentes.- Interfaces específicas de arquivos para Documentos, Planilhas e Apresentações.
- Acionadores
- O campo
oauthScopes
define escopos de autorização para o projeto (normalmente necessário para complementos). - O campo
urlFetchWhitelist
garante que os endpoints buscados correspondam a uma lista especificada de prefixos de URL HTTPS. Para mais informações, consulte Adicionar URLs à lista de permissões.
Os links no exemplo direcionam para as descrições desse campo na documentação de referência do manifesto.
{ "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/" ] }
Adicionar URLs à lista de permissões
Use listas de permissões para designar URLs específicos pré-aprovados para acesso pelo script ou complemento. Essas listas ajudam a proteger os dados do usuário. Quando você define uma lista de permissões, os projetos de script não podem acessar URLs que não estão na lista.
Esse campo é opcional quando você instala uma implantação de teste, mas é obrigatório ao criar uma implantação com controle de versão.
Elas são usadas quando o script ou complemento realiza as seguintes ações:
- Recupera ou busca informações de um local externo (como endpoints HTTPS) usando o serviço
UrlFetch
do Apps Script. Para adicionar URLs de busca à lista de permissões, inclua o campourlFetchWhitelist
no arquivo de manifesto. - Abre ou exibe um URL em resposta a uma ação do usuário (obrigatório para
complementos do Google Workspace que abrem ou exibem URLs externos ao
Google). Para adicionar URLs que podem ser abertos na lista de permissões, inclua o campo
addOns.common.openLinkUrlPrefixes
no seu arquivo de manifesto.
Adicionar prefixos à lista de permissões
Ao especificar listas de permissões no arquivo de manifesto (incluindo o campo
addOns.common.openLinkUrlPrefixes
ou urlFetchWhitelist
), você precisa
incluir uma lista de prefixos de URL. Os prefixos adicionados ao manifesto precisam
atender aos seguintes requisitos:
- Cada prefixo precisa ser um URL válido.
- Cada prefixo precisa usar
https://
, nãohttp://
. - Cada prefixo precisa ter um domínio completo.
- Cada prefixo precisa ter um caminho não vazio. Por exemplo,
https://www.google.com/
é válido, mashttps://www.google.com
não. - Você pode usar caracteres curinga para corresponder a prefixos de subdomínio de URL.
- Um único caractere curinga
*
pode ser usado no campoaddOns.common.openLinkUrlPrefixes
para corresponder a todos os links, mas isso não é recomendado, porque pode expor os dados do usuário a risco e prolongar o processo de revisão de complementos. Use um caractere curinga apenas se ele for necessário para a funcionalidade do complemento.
Ao determinar se um URL corresponde a um prefixo da lista de permissões, as seguintes regras se aplicam:
- A correspondência de caminho diferencia maiúsculas de minúsculas.
- Se o prefixo for idêntico ao URL, é uma correspondência.
- Se o URL for igual ou filho do prefixo, ele será uma correspondência.
Por exemplo, o prefixo https://example.com/foo
corresponde aos seguintes URLs:
https://example.com/foo
https://example.com/foo/
https://example.com/foo/bar
https://example.com/foo?bar
https://example.com/foo#bar
Uso de caracteres curinga
É possível usar um único caractere curinga (*
) para corresponder a um subdomínio nos campos urlFetchWhitelist
e addOns.common.openLinkUrlPrefixes
. Não é possível usar mais de um caractere curinga para corresponder a vários subdomínios, e
ele precisa representar o prefixo inicial do URL.
Por exemplo, o prefixo https://*.example.com/foo
corresponde aos seguintes
URLs:
https://subdomain.example.com/foo
https://any.number.of.subdomains.example.com/foo
O prefixo https://*.example.com/foo
não corresponde aos seguintes
URLs:
https://subdomain.example.com/bar
(incompatibilidade de sufixo)https://example.com/foo
(pelo menos um subdomínio precisa estar presente)
Algumas das regras de prefixo são aplicadas quando você tenta salvar seu manifesto. Por exemplo, os prefixos a seguir causam um erro se estiverem presentes no manifesto quando você tenta salvar:
https://*.*.example.com/foo
(vários caracteres curinga são proibidos)https://subdomain.*.example.com/foo
(caracteres curinga precisam ser usados como prefixo inicial)