Что такое Google Apps Script и зачем его развертывать?
Google Apps Script (GAS) — это облачная платформа для разработки на JavaScript, позволяющая расширять функциональность приложений Google Workspace (Sheets, Docs, Drive, Gmail и др.) и создавать автоматизированные рабочие процессы. Изначально скрипты работают только в среде разработки и доступны лишь автору.
Развертывание — это процесс публикации скрипта, делающий его доступным для других пользователей или систем в контролируемом режиме. Без развертывания скрипт остается инструментом для личного пользования, неспособным служить веб-приложением, API или дополнением.
Обзор различных типов развертываний (веб-приложения, API, дополнения)
Существует несколько основных способов развертывания скриптов GAS:
- Веб-приложение: Скрипт становится доступным по уникальному URL и может генерировать HTML-интерфейсы или обрабатывать HTTP-запросы (GET/POST). Подходит для создания интерактивных инструментов, дашбордов, форм.
- API Executable: Скрипт предоставляет программный интерфейс (API), который могут вызывать другие приложения (веб-сервисы, мобильные приложения) для выполнения функций скрипта и обмена данными. Использует стандартные методы аутентификации и авторизации.
- Дополнение Google Workspace (Add-on): Интегрирует функциональность скрипта непосредственно в интерфейс приложений Google Workspace (например, боковая панель в Google Sheets). Распространяется через Google Workspace Marketplace.
- Библиотека (Library): Позволяет повторно использовать код одного скрипта в других скриптах GAS. Хотя это не развертывание в классическом смысле, управление версиями библиотек схоже с процессом развертывания.
Необходимые условия для развертывания скрипта
- Google Аккаунт: Для создания и управления скриптами.
- Проект Google Apps Script: Скрипт, который вы планируете развернуть.
- Понимание областей действия (Scopes): Необходимо определить, к каким данным и сервисам Google скрипт будет запрашивать доступ.
- Настроенный проект Google Cloud Platform (GCP) (опционально, но часто необходимо): Требуется для расширенных сценариев, таких как использование API Executable, управление OAuth-клиентами для дополнений и веб-приложений с определенными настройками доступа.
Развертывание скрипта как веб-приложения
Веб-приложения — популярный способ сделать функциональность скрипта доступной через браузер.
Создание нового развертывания веб-приложения
- Откройте редактор скриптов.
- В правом верхнем углу нажмите Развертывание > Новое развертывание.
- Выберите тип развертывания: Веб-приложение.
Настройка параметров развертывания (доступ пользователей, версии)
При создании развертывания необходимо настроить:
- Описание (необязательно): Помогает идентифицировать развертывание.
- Веб-приложение:
- Выполнять как:
- Я (ваш email@gmail.com): Скрипт всегда выполняется от вашего имени, используя ваши разрешения. Пользователям не нужно авторизовать скрипт, но все действия (изменение файлов, отправка писем) будут выполняться от вашего аккаунта.
- Пользователь, обращающийся к веб-приложению: Каждый пользователь должен будет авторизовать скрипт при первом доступе. Скрипт выполняется от имени текущего пользователя.
- Доступ:
- Только я: Доступно только вам.
- Все пользователи в домене .com: Доступно только пользователям вашего Google Workspace домена (требуется авторизация).
- Все: Доступно любому пользователю в интернете (анонимно или с авторизацией Google, в зависимости от настройки «Выполнять как»).
- Выполнять как:
Права доступа и авторизация скрипта
Скрипт запрашивает разрешения (scopes) при первой авторизации пользователем (если выбрано «Выполнять как: Пользователь…») или при первом запуске развертывания (если «Выполнять как: Я»). Важно запрашивать только необходимые разрешения.
Публикация веб-приложения и получение URL
После настройки параметров нажмите Развернуть. Система сгенерирует уникальный URL для вашего веб-приложения. Этот URL используется для доступа к приложению.
Пример простого веб-приложения для отображения данных из Google Sheets:
/**
* Идентификатор таблицы Google Sheets с данными.
* @type {string}
*/
const SPREADSHEET_ID = 'YOUR_SPREADSHEET_ID';
/**
* Имя листа с данными.
* @type {string}
*/
const SHEET_NAME = 'CampaignData';
/**
* Обрабатывает GET-запросы к веб-приложению.
* @param {GoogleAppsScript.Events.DoGet} e - Объект события GET-запроса.
* @returns {GoogleAppsScript.HTML.HtmlOutput} HTML-страница.
*/
function doGet(e: GoogleAppsScript.Events.DoGet): GoogleAppsScript.HTML.HtmlOutput {
try {
const ss = SpreadsheetApp.openById(SPREADSHEET_ID);
const sheet = ss.getSheetByName(SHEET_NAME);
if (!sheet) {
throw new Error(`Лист с именем '${SHEET_NAME}' не найден.`);
}
const data = sheet.getDataRange().getDisplayValues();
// Пропускаем заголовок
const campaigns = data.slice(1);
let html = '<h1>Список Рекламных Кампаний</h1><ul>';
campaigns.forEach(row => {
// Предполагаем, что название кампании в первом столбце
if (row[0]) {
html += `<li>${row[0]}</li>`;
}
});
html += '</ul>';
return HtmlService.createHtmlOutput(html)
.setTitle('Данные Кампаний');
} catch (error) {
Logger.log(`Ошибка в doGet: ${error.message}`);
return HtmlService.createHtmlOutput(`<p>Произошла ошибка: ${error.message}</p>`);
}
}
Обновление и управление версиями веб-приложения
При внесении изменений в код скрипта существующее развертывание не обновляется автоматически. Чтобы применить изменения:
- Перейдите в Развертывание > Управление развертываниями.
- Выберите активное развертывание и нажмите на значок карандаша (Редактировать).
- В выпадающем списке Версия выберите Новая версия.
- Нажмите Развернуть.
Старый URL развертывания остается прежним, но теперь он указывает на новую версию кода. Это позволяет тестировать изменения в тестовом развертывании перед обновлением основного.
Устранение неполадок при развертывании веб-приложения
- Проверка журналов: Используйте
Logger.log()илиconsole.log()в коде и проверяйте логи выполнения в редакторе скриптов (Выполнения). - Права доступа: Убедитесь, что настройки доступа («Доступ») и выполнения («Выполнять как») соответствуют вашим требованиям. Проверьте, авторизован ли скрипт с нужными областями.
- Ошибки кода: Отлаживайте функции
doGet(e)иdoPost(e)локально в редакторе, передавая тестовые объекты событийe. - Квоты Google Apps Script: Веб-приложения имеют ограничения на время выполнения, количество запросов и т.д.
Развертывание скрипта в качестве API (endpoint)
Позволяет внешним системам взаимодействовать с вашим скриптом программно.
Подготовка скрипта для использования в качестве API
Функции, которые вы хотите сделать доступными через API, должны принимать параметры и возвращать данные в формате, понятном вызывающей системе (часто JSON).
Пример функции для API, возвращающей данные кампании по ID:
«`javascript
/**
- Возвращает метрики для указанной рекламной кампании.
- @param {string} campaignId Идентификатор кампании.
- @returns {object | null} Объект с данными кампании или null, если не найдено.
*/
function getCampaignMetrics(campaignId: string): { id: string; name: string; clicks: number; ctr: number } | null {
// Здесь должна быть логика получения данных, например, из Google Ads API или Google Sheet
// Для примера вернем заглушку
if (campaignId === ‘cmp-123’) {
return {
id: campaignId,
name: ‘Тестовая кампания’,
clicks: 1500,
ctr: 0.05
};
} else {
return null;
}
}
// Функции doPost и doGet могут служить точками входа для API
/**
-
Обрабатывает POST-запросы к API.
-
@param {GoogleAppsScript.Events.DoPost} e Объект события POST-запроса.
-
@returns {GoogleAppsScript.Content.TextOutput} Ответ в формате JSON.
*/
function doPost(e: GoogleAppsScript.Events.DoPost): GoogleAppsScript.Content.TextOutput {
try {
const params = JSON.parse(e.postData.contents);
const campaignId = params.campaignId;if (!campaignId || typeof campaignId !== ‘string’) {
throw new Error(‘Параметр