Google Apps Script: решение проблем с таймаутами и задержками

При использовании Google Apps Script (GAS) в качестве обработчика вебхуков часто возникают задержки и таймауты. Это приводит к тому, что система разрывает соединение по таймауту, а скрипт либо не успевает отработать, либо создает дублирующие данные при повторных попытках.  

Основные причины задержек:

  1. «Холодный старт»: Если скрипт не вызывался 5–10 минут, Google выгружает его из кеша. Первый запуск после паузы всегда значительно медленнее.

  2. Медленный SSL-хендшейк: При установке нового соединения GAS может отвечать с задержкой в несколько секунд.

 

Решение  Использование прокси-сервиса 

Наиболее стабильный способ — разместить между вашей системой и Google Script «прокладку» на базе Cloudflare Workers или Yandex Cloud Functions. Это позволяет возвращать ответ отправителю мгновенно (1–2 сек) и стабильно обрабатывать данные.

 

Вариант 1: Cloudflare Workers 

Cloudflare лучше обрабатывает редиректы Google и обеспечивает минимальные задержки.

Инструкция:

1) Создаем проект в Google Workspace:
0546ae9584e4b0fe327bba4283514d09283449e7

 

2) Вставляем пример кода (template.GAS):

0d26a6a6814b89ecde18339ca300ea99b6cd0302

 

3) Разворачиваем веб-приложение:
1643afbdb454944a17e2052b2108738e95b3c008

 

И сохраняем полученную ссылку:


4) Далее переходим на https://workers.cloudflare.com и создаем приложение:
 

a4b713fa76ca909a6b3a70de1ac9dd9b9262a599


Деплоим приложение:
 

38e01167381f268d483ae53023b929278a06db56

 

5) Затем переходим в приложение и редактируем код.

Необходимо вставить содержание файла сf.txt в const response = await fetch('') необходимо вставить ссылку которую скопировали из 3 шага:

53c7162a2d30ca7b49e14c224f2b9d25b31f402e

6) Далее создаем правило для запросов. Ссылку берем тут:
 

7640c907d4b7ff0ef4c32a28483b9bbb7119ce95

Пример для POST:

3927747a5dd7ba7bd98f822fbd0c60c0593904b6

Пример для GET:

6d893fb545e00fd826a2c4501f2a9a5962d5c1e2

 

Вариант 2: Yandex Cloud Functions

Подходит как альтернатива, но имеет особенность: из-за специфики Node.js и обработки редиректов /exec, POST-запросы иногда могут приходить в GAS как GET.

Инструкция:

1) Создаем проект в Google Workspace:
0546ae9584e4b0fe327bba4283514d09283449e7

 

2) Вставляем пример кода (template.GAS):

0d26a6a6814b89ecde18339ca300ea99b6cd0302

 

3) Разворачиваем веб-приложение:
1643afbdb454944a17e2052b2108738e95b3c008

 

И сохраняем полученную ссылку:

 

4) Переходим в консоль Яндекс.Облако Functions и создаем функцию:

b6e447ca457d9b846a7bbfecec2488c5126ec847


5) Выбираем node.js и вставляем код из yandex.txt, также необходимо заменить в const gasResponse = await fetch ('') ссылку которую получали из 3 шага:

68e9ac8123805a49cb3c239cb0fe0c02fa6b56df

 

И выбираем или создаем сервисный аккаунт с functions.functionInvoker:

a1c52957495b87809268b9d3044179c874aac2e1

 

После сохраняем изменения и создаем правила в HelpDeskEddy. Ссылку берем отсюда:

71425f8671d674d48450cb31a4f006f55c0e6a97

 

Пример с POST:

25b4a0ec43b00b813990e8992c8d4cabce4ba651

Пример с GET:

bb0f2ffcfe013297465910671b768e2f6a83f6fe

Итоги и проверка

  • Как проверить: Используйте Postman или логи системы. При использовании прокси время ответа должно стабилизироваться в диапазоне 1–2 секунды даже при «холодном старте».

  • Важно: При использовании Cloudflare Workers или Яндекс.Функций убедитесь, что вы передаете все необходимые заголовки (Headers) и тело запроса (Body) без изменений.

cf.txt
Предпросмотр Загрузить
template.GAS.txt
Предпросмотр Загрузить
yandex.txt
Предпросмотр Загрузить