Solução de problemas

Até o desenvolvedor mais experiente raramente escreve código corretamente na primeira tentativa, tornando a solução de problemas uma parte importante do processo de desenvolvimento. Nesta seção, abordaremos algumas técnicas que podem ajudar você a encontrar, entender e depurar erros nos scripts.

Mensagens de erro

Quando seu script encontra um erro, uma mensagem de erro é exibida. A mensagem é acompanhada por um número de linha usado para solução de problemas. Há dois tipos básicos de erros exibidos dessa maneira: erros de sintaxe e de execução.

Erros de sintaxe

Os erros de sintaxe são causados pela escrita de um código que não segue a gramática do JavaScript. Eles são detectados assim que você tenta salvar o script. Por exemplo, o snippet de código a seguir contém um erro de sintaxe:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ";
  MailApp.sendEmail('john@example.com',
                    'Data in row ' + rowNumber,
                    rowData);
}

O problema de sintaxe aqui é um caractere ) ausente no final da quarta linha. Ao tentar salvar o script, você receberá o seguinte erro:

Falta ) depois da lista de argumentos. (linha 4)

Esses tipos de erros geralmente são simples de solucionar, porque são encontrados imediatamente e geralmente têm causas simples. Não é possível salvar um arquivo que contenha erros de sintaxe, o que significa que apenas códigos válidos são salvos no projeto.

Erros de execução

Esses erros são causados pelo uso incorreto de uma função ou classe e só podem ser detectados depois que o script é executado. Por exemplo, o código a seguir causa um erro de tempo de execução:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ");
  MailApp.sendEmail('john',
                    'Data in row ' + rowNumber,
                    rowData);
}

O código está formatado corretamente, mas estamos transmitindo o valor "john" ao endereço de e-mail ao chamar MailApp.sendEmail. Como esse não é um endereço de e-mail válido, o seguinte erro é gerado ao executar o script:

E-mail inválido: joão (linha 5)

O que torna esses erros mais difíceis de solucionar é que muitas vezes os dados que você está passando para uma função não são escritos no código, mas extraídos de uma planilha, formulário ou outra fonte de dados externa. O uso das técnicas de depuração abaixo pode ajudar você a identificar a causa desses erros.

Erros comuns

Veja abaixo uma lista de erros comuns e as causas deles.

Serviço invocado muitas vezes: <nome da ação>

Esse erro indica que você excedeu sua cota diária para uma determinada ação. Por exemplo, talvez você encontre esse erro se enviar muitos e-mails em um único dia. As cotas são definidas em diferentes níveis para contas de consumidor, de domínio e Premier e estão sujeitas a alterações a qualquer momento sem aviso anterior do Google. Veja os limites de cota para várias ações na documentação de cota do Apps Script.

Servidor não disponível. ou Ocorreu um erro de servidor, tente novamente.

Existem algumas causas possíveis para esses erros:

  • Um servidor ou sistema do Google está temporariamente indisponível. Aguarde alguns instantes e tente executar o script novamente.
  • Há um erro no script que não tem uma mensagem de erro correspondente. Tente depurar o script e tente isolar o problema.
  • Há um bug no Google Apps Script que está causando esse erro. Para instruções sobre como pesquisar e preencher relatórios de bugs, consulte Bugs. Antes de informar um novo bug, pesquise para ver se ele já foi informado por outras pessoas.

É necessário ter autorização para realizar essa ação.

Esse erro indica que o script não tem a autorização necessária para ser executado. Quando um script é executado no editor de scripts ou em um item de menu personalizado, uma caixa de diálogo de autorização é apresentada ao usuário. No entanto, quando um script é executado em um gatilho, incorporado a uma página do Google Sites ou executado como serviço, a caixa de diálogo não é mostrada, e esse erro aparece.

Para autorizar o script, abra o Editor de scripts e execute qualquer função. O prompt de autorização é exibido para que você autorize o projeto de script. Se o script contiver novos serviços não autorizados, você precisará autorizá-lo novamente.

Esse erro geralmente é causado por acionadores que estão sendo acionados antes da autorização do usuário. Se você não tem acesso ao projeto de script (porque o erro está ocorrendo para um complemento que você usa, por exemplo), geralmente é possível autorizar o script usando o complemento novamente. Se um acionador continuar sendo disparado e causar esse erro, você poderá removê-lo fazendo o seguinte:

  1. À esquerda do projeto do Apps Script, clique em Acionadores .
  2. À direita do gatilho que você quer remover, clique em Mais > Excluir gatilho.

Também é possível remover acionadores de complementos problemáticos desinstalando o complemento.

Acesso negado: DriveApp ou A política do domínio desativou os apps de terceiros do Drive.

Os administradores de Google Workspace domínios podem desativar a API Drive no domínio, o que impede que os usuários instalem e usem os aplicativos do Google Drive. Essa configuração também impede que os usuários usem complementos do Apps Script que utilizam o serviço do Drive ou o serviço avançado do Drive, mesmo que o script tenha sido autorizado antes do administrador desativar a API Drive.

No entanto, se um complemento ou app da Web que usa o serviço do Drive for publicado para instalação em todo o domínio e instalado pelo administrador para alguns ou todos os usuários no domínio, o script funcionará para esses usuários, mesmo se a API Drive estiver desativada no domínio.

O script não tem permissão para conseguir a identidade do usuário ativo.

Indica que a identidade e o e-mail do usuário ativo não estão disponíveis para o script. Esse alerta é resultado de uma chamada para Session.getActiveUser(). Ela também pode resultar de uma chamada para Session.getEffectiveUser() se o script estiver sendo executado em um modo de autorização diferente de AuthMode.FULL. Se esse aviso for sinalizado, as chamadas subsequentes para User.getEmail() retornarão apenas "".

Há várias maneiras de solucionar esse aviso, dependendo do modo de autorização em que o script está sendo executado. O modo de autorização é exposto nas funções acionadas como a propriedade authMode do parâmetro de evento e.

  • Em AuthMode.FULL, use Session.getEffectiveUser().
  • Em AuthMode.LIMITED, verifique se o proprietário autorizou o script.
  • Em outros modos de autorização, evite chamar qualquer um dos métodos.
  • Se você for um Google Workspace cliente que recebeu recentemente esse aviso de um acionador instalável, verifique se o acionador está sendo executado como um usuário na sua organização.

Biblioteca ausente

Se você adicionar uma biblioteca conhecida ao script, poderá receber uma mensagem de erro informando que ela está ausente, mesmo que a biblioteca esteja listada como uma dependência do script. Isso pode ocorrer porque muitas pessoas acessam a biblioteca ao mesmo tempo. Para evitar esse erro, tente uma destas soluções:

  • Copie e cole o código da biblioteca no script e remova a dependência da biblioteca.
  • Copie o script da biblioteca e implante-o como uma biblioteca da sua conta. Atualize a dependência do script original para a nova biblioteca, em vez da pública.

Ocorreu um erro porque uma versão da biblioteca ou da implantação está ausente. código do erro Not_Found

Essa mensagem de erro indica uma das seguintes opções:

  • A versão implantada do script foi excluída. Para atualizar a versão implantada do script, consulte Editar uma implantação com controle de versão.
  • A versão de uma biblioteca que o script usa foi excluída. Para conferir qual biblioteca está ausente, ao lado do nome da biblioteca, clique em Mais > Abrir em uma nova guia. A biblioteca ausente exibe uma mensagem de erro. Depois de encontrar a biblioteca que precisa ser atualizada, realize uma das seguintes ações:
  • O script de uma biblioteca que seu script usa inclui outra biblioteca que usa uma versão excluída. Escolha uma das seguintes opções:
    • Se você tiver acesso para editar a biblioteca usada pelo script, atualize a biblioteca secundária do script para uma versão existente.
    • Atualize a biblioteca para usar uma versão diferente. Consulte Atualizar uma biblioteca.
    • Remova a biblioteca do projeto de script e do código. Consulte Remover uma biblioteca.

Error 400: invalid_scope ao chamar a API Google Chat com o serviço avançado

Se você encontrar Error 400: invalid_scope com a mensagem de erro Some requested scopes cannot be shown, isso significa que nenhum escopo de autorização foi especificado no arquivo appsscript.json do projeto do Apps Script. Na maioria dos casos, o Apps Script determina automaticamente de quais escopos um script precisa, mas, quando você usa o serviço avançado do Chat, precisa adicionar manualmente os escopos de autorização usados pelo script ao arquivo de manifesto do projeto do Apps Script. Consulte Como definir escopos explícitos.

Para resolver o erro, adicione os escopos de autorização apropriados ao arquivo appsscript.json do projeto do Apps Script como parte da matriz oauthScopes. Por exemplo, para chamar o método spaces.messages.create, adicione o seguinte:

"oauthScopes": [
  "https://www.googleapis.com/auth/chat.messages.create"
]

Depuração

Nem todos os erros geram a exibição de uma mensagem de erro. Pode haver um erro mais sutil em que o código está tecnicamente correto e pode ser executado, mas os resultados não são os esperados. Confira algumas estratégias para lidar com essas situações e investigar um script que não está sendo executado da maneira esperada.

Geração de registros

No processo de depuração, geralmente é útil registrar informações à medida que um projeto de script é executado. O Google Apps Script tem dois métodos para registrar informações: o serviço do Cloud Logging e os serviços de Logger e console mais básicos integrados ao editor do Apps Script.

Consulte o Guia de geração de registros para saber mais.

Error Reporting

As exceções que ocorrem devido a erros de ambiente de execução são registradas automaticamente usando o serviço do Google Cloud Error Reporting. Ele permite pesquisar e filtrar mensagens de exceção que o projeto de script cria.

Para acessar o Error Reporting, consulte Ver registros do Cloud e relatórios de erros no Console do Google Cloud Platform.

Execuções

Sempre que você executa um script, o Apps Script faz um registro da execução, incluindo os registros do Cloud. Esses registros podem ajudar você a entender quais ações seu script realizou.

Para ver as execuções do seu script no projeto do Apps Script, à esquerda, clique em Execuções .

Verificar o status do serviço do Apps Script

Embora serviços raros e às vezes específicos do Google Workspace, como o Gmail ou o Drive, encontrem problemas temporários que podem levar a interrupções do serviço. Quando isso ocorre, os projetos do Apps Script que interagem com esses serviços podem não funcionar como esperado.

É possível verificar se há uma interrupção do serviço do Google Workspace no Painel de status do Google Workspace. Se uma falha temporária estiver encontrando, aguarde a resolução ou procure ajuda na Central de Ajuda do Google Workspace ou na documentação de Problemas conhecidos do Google Workspace.

Usar o depurador e pontos de interrupção

Para localizar problemas no seu script, execute-o no modo de depuração. Quando executado no modo de depuração, um script é pausado quando atinge um ponto de interrupção, que é uma linha destacada no script e que você acha que pode apresentar um problema. Quando um script é pausado, ele exibe o valor de cada variável nesse momento, permitindo que você inspecione o funcionamento interno de um script sem precisar adicionar muitas instruções de geração de registros.

Adicionar um ponto de interrupção

Para adicionar um ponto de interrupção, passe o cursor sobre o número da linha à qual você quer adicionar o ponto de interrupção. À esquerda do número da linha, clique no círculo. A imagem abaixo mostra um exemplo de um ponto de interrupção adicionado a um script:

Adicionar um ponto de interrupção

Executar um script no modo de depuração

Para executar o script no modo de depuração, clique em Debug na parte de cima do editor.

Antes de o script executar a linha com o ponto de interrupção, ele pausa e exibe uma tabela de informações de depuração. Você pode usar essa tabela para inspecionar dados como os valores de parâmetros e as informações armazenadas em objetos.

Para controlar como o script é executado, na parte superior do painel do Debugger, use os botões "Step in", "Step over" e "Step out". Eles permitem executar o script uma linha de cada vez e inspecionar como os valores mudam ao longo do tempo.

Problemas com várias Contas do Google

Se você estiver conectado a várias Contas do Google ao mesmo tempo, pode ter problemas para acessar seus complementos e apps da Web. O login múltiplo, ou o login em várias Contas do Google de uma só vez, não é compatível com o Apps Script, complementos ou apps da Web.

  • Se você abrir o editor do Apps Script enquanto estiver conectado a mais de uma conta, o Google solicitará que você escolha a conta com que quer continuar.

  • Se você abrir um app da Web ou complemento e tiver problemas de login múltiplo, tente uma das seguintes soluções:

    • Saia de todas as suas Contas do Google e faça login apenas naquela que tem o complemento ou o app da Web que você quer acessar.
    • Abra uma janela anônima no Google Chrome ou em uma janela de navegação anônima equivalente e faça login na Conta do Google que tem o complemento ou o app da Web que você quer acessar.

Receber ajuda

Depurar um problema usando as ferramentas e técnicas listadas acima pode resolver uma variedade de problemas, mas pode haver problemas que exigem ajuda extra. Consulte nossa página de suporte para mais informações sobre onde fazer perguntas e registrar bugs.