В процессе разработки и эксплуатации Google Apps Script-проектов, разработчики часто сталкиваются с ситуацией, когда при попытке запуска скрипта появляется сообщение об ошибке: ‘Скрипт не найден’. Это может произойти в различных сценариях: при запуске скрипта из Google Sheets, Docs, Forms, или при срабатывании триггера. Разберем, что означает эта ошибка, каковы ее основные причины и как её устранить.
Что означает ошибка ‘Скрипт не найден’?
Ошибка ‘Скрипт не найден’ указывает на то, что Google Apps Script не может найти скрипт, на который ссылается запрос. Это означает, что скрипт либо не существует, либо недоступен для текущего пользователя или контекста выполнения.
Почему эта ошибка возникает?
Существует несколько основных причин возникновения этой ошибки, которые мы подробно рассмотрим ниже.
Основные причины возникновения ошибки ‘Скрипт не найден’
Удаление скрипта или проекта
Самая очевидная причина – скрипт или содержащий его проект был удален. Это может произойти случайно или намеренно, и в этом случае скрипт, естественно, не может быть найден.
Отсутствие прав доступа к скрипту
Если скрипт существует, но у пользователя, пытающегося его запустить, нет соответствующих прав доступа, возникнет ошибка ‘Скрипт не найден’. Это часто встречается в ситуациях, когда скрипт является частью общего проекта и не все пользователи имеют права на его выполнение.
Изменение ID скрипта (project key) при копировании или переносе
Каждый Google Apps Script-проект имеет уникальный ID, также известный как project key. При копировании или переносе проекта этот ID может измениться. Если в триггерах или других скриптах осталась ссылка на старый ID, возникнет ошибка.
Ошибка в URL или триггере, ссылающемся на скрипт
Если скрипт вызывается через URL (например, Web App) или активируется триггером, ошибка в URL или конфигурации триггера, указывающая на несуществующий или неправильно идентифицированный скрипт, также приведет к ошибке ‘Скрипт не найден’.
Диагностика и устранение ошибки ‘Скрипт не найден’
Проверка существования скрипта в Google Drive
Первым шагом является проверка, существует ли скрипт в Google Drive. Убедитесь, что он не был случайно удален или перемещен в другую папку. Поиск по названию скрипта может помочь.
Проверка прав доступа и общего доступа к скрипту
Если скрипт найден, проверьте права доступа. Убедитесь, что у вас есть как минимум права на просмотр скрипта. Если это общий скрипт, проверьте, предоставлен ли вам доступ на выполнение. Пример кода для проверки доступа (требует Apps Script API):
/**
* @param {string} scriptId The ID of the script.
* @return {boolean} True if the user has access, false otherwise.
*/
function hasAccess(scriptId: string): boolean {
try {
// Attempt to get the script's metadata. If successful, the user has access.
ScriptApp.getProjectTriggers(); //This will cause an error if the user doesn't have access
return true;
} catch (e) {
Logger.log(e);
return false;
}
}Обновление ID скрипта (project key) в настройках проекта
Если ID скрипта изменился (например, после копирования проекта), необходимо обновить его во всех местах, где он используется: в триггерах, URL-адресах и других скриптах. ID проекта можно найти в настройках проекта Apps Script (Project Settings).
Анализ и исправление триггеров и URL, использующих скрипт
Проверьте все триггеры, связанные со скриптом. Убедитесь, что они настроены правильно и ссылаются на правильный ID скрипта и функцию. Аналогично, проверьте все URL-адреса Web App, использующие скрипт, и убедитесь, что они корректны. Пример:
/**
* Lists all triggers for the current project.
*/
function listProjectTriggers() {
const triggers: GoogleAppsScript.Script.Trigger[] = ScriptApp.getProjectTriggers();
triggers.forEach((trigger: GoogleAppsScript.Script.Trigger) => {
Logger.log(`Trigger ID: ${trigger.getUniqueId()}, Function: ${trigger.getHandlerFunction()}`);
});
}
Альтернативные решения и обходные пути
Восстановление предыдущей версии скрипта (если возможно)
Google Apps Script автоматически сохраняет версии скриптов. Если скрипт был случайно удален или изменен, можно попытаться восстановить предыдущую версию через меню ‘Файл’ -> ‘Управление версиями’ -> ‘Посмотреть историю версий’.
Создание нового скрипта и перенос логики из резервной копии (если имеется)
Если восстановить скрипт не удалось, создайте новый скрипт и перенесите логику из резервной копии (если она есть). Регулярное создание резервных копий — важная практика.
Использование Apps Script API для управления скриптами (для продвинутых пользователей)
Для более продвинутого управления скриптами можно использовать Apps Script API. Это позволяет автоматизировать многие задачи, включая создание, удаление и управление скриптами и триггерами. Например, можно использовать API для массового обновления ID скриптов после переноса проекта. Для этого потребуется настроить OAuth 2.0 аутентификацию.
Превентивные меры для избежания ошибки ‘Скрипт не найден’
Регулярное создание резервных копий скриптов
Регулярно создавайте резервные копии своих скриптов. Это может быть простой экспорт скрипта в файл или использование системы контроля версий, такой как Git.
Аккуратное управление правами доступа и общим доступом
Тщательно управляйте правами доступа к скриптам. Предоставляйте доступ только тем пользователям, которым он действительно необходим. Избегайте предоставления избыточных прав.
Осторожное изменение ID скрипта и URL
Избегайте изменения ID скрипта и URL без крайней необходимости. Если это необходимо, убедитесь, что все связанные компоненты (триггеры, URL-адреса, другие скрипты) обновлены.
Документирование зависимостей скриптов и триггеров
Ведите документацию, в которой указаны все зависимости скриптов и триггеров. Это поможет быстро выявить и устранить проблемы, связанные с ошибкой ‘Скрипт не найден’.