Интеграция сайта с Google Таблицами через API: как сделать
Чтобы заявки, заказы или данные с сайта сами попадали в Google Таблицу, нужны три вещи: доступ к Google Sheets API, серверный код, который пишет строки, и защита от сбоев, чтобы ни одна запись не потерялась. Разбираем, как это устроено и где обычно ломается.
Три способа связать сайт с Google Таблицей
Способ выбирают по тому, где живёт сайт и сколько данных идёт в таблицу.
- Google Sheets API с сервисным аккаунтом. Ваш сервер сам отправляет запросы в таблицу. Это самый надёжный вариант: вы управляете повторами, очередью и форматом данных.
- Google Apps Script как веб-приложение. Внутри таблицы пишется скрипт с функцией doPost, его публикуют по ссылке, и форма сайта отправляет туда данные. Сервер не нужен, но у Apps Script есть свои суточные квоты, а ошибки видно хуже.
- Сервисы-посредники. Быстро настраиваются без кода, но данные проходят через ещё одну компанию, тариф растёт с объёмом, а при сбое у посредника вы узнаёте о проблеме последним.
Если сайт на своём хостинге или VPS и данные важны (заявки, заказы, остатки), лучше выбрать первый вариант.
Как подключить Sheets API: по шагам
Порядок действий одинаков для любого языка: PHP, Python или Node.js.
- В Google Cloud Console создать проект и включить в нём Google Sheets API.
- Создать сервисный аккаунт и скачать его ключ в формате JSON. Ключ хранится только на сервере и никогда не попадает в JavaScript страницы: кто его увидит, тот получит доступ к таблице.
- Открыть нужную таблицу и выдать доступ редактора на почту сервисного аккаунта (адрес вида имя@проект.iam.gserviceaccount.com).
- Из ID таблицы (часть адреса между /d/ и /edit) и названия листа собрать диапазон, например Заявки!A:F.
- Добавлять строки методом spreadsheets.values.append, читать методом values.get, обновлять методом values.update.
Обратите внимание на параметр valueInputOption. При значении USER_ENTERED таблица разбирает данные так, будто их ввёл человек. Телефон +79991234567 тогда станет числом, а строка, начинающаяся со знака «=», выполнится как формула. Для данных из форм надёжнее RAW: что пришло, то и записано.
Где такая интеграция ломается
Простой вызов API работает на тестах, а в работе обычно возникают одни и те же проблемы.
- Лимиты запросов. У Sheets API есть квота на число запросов в минуту. Если её превысить, вернётся ошибка 429. Поэтому нужна очередь и повторная отправка с паузой, а когда записей много, их лучше отправлять пачкой, а не по одной.
- Потеря данных при сбое. Если Google не ответил, а сайт уже сказал посетителю «спасибо», заявка пропала. Правильный порядок такой: сначала сохранить запись в своей базе, потом отправить в таблицу и отметить, что отправка прошла.
- Дубли. Посетитель нажал кнопку дважды, или повтор сработал после запроса, который на самом деле дошёл. Помогает уникальный номер у каждой записи и проверка перед вставкой.
- Ручные правки таблицы. Сотрудник вставил столбец или переименовал лист, и данные поехали не туда. Структуру листа для записи лучше закрепить, а для работы людей сделать отдельный лист с формулами или сводной таблицей.
- Тихие поломки. Ключ отозвали, доступ сняли, а узнают об этом через неделю. Нужно уведомление о сбое, например в Телеграм.
Персональные данные и когда таблицы мало
Если в таблицу попадают имена и телефоны клиентов, учитывайте 152-ФЗ: персональные данные граждан РФ при сборе нужно первично записывать в базу на территории России. Серверы Google Таблиц к ней не относятся. Рабочая схема такая: сначала запись в базу на российском сервере, а в таблицу идёт рабочая копия или данные без лишних полей. Окончательное решение лучше сверить с вашим юристом.
Таблица хорошо подходит как витрина: менеджеры видят заявки, руководитель видит сводку. Но если записей становятся десятки тысяч, их пишут несколько систем сразу или нужна история за годы, то основное хранилище стоит перенести в базу данных, а в таблицу выводить только нужный срез.
Так мы работаем и сами. Выгрузки из 1С, CRM и с сайтов идут в таблицы с нашего сервера по расписанию, без участия людей, а о сбоях приходят уведомления в Телеграм. Для мониторинга цен данные собираются настоящим браузером с российского адреса, поэтому антибот-защита сайтов их не блокирует. Вся история хранится в собственной базе (сейчас около 3,8 ГБ), а в таблицу попадает только актуальная выборка.
Соберём под ваш случай и покажем на ваших данных.
Сбор данных →