Інтеграція 1С-Бітрікс з Google Looker Studio
Google Looker Studio (раніше Google Data Studio) — це інструмент візуалізації даних, який будує дашборди з різних джерел. Дані з Бітрикса можна передати у Looker Studio трьома способами: через Google Sheets як проміжний шар, через BigQuery або через користувацький коннектор. Вибір залежить від обсягу даних та частоти оновлення.
Архітектура передачі даних
Схема 1 — через Google Sheets (для невеликих обсягів):
Бітрікс → PHP-агент → Google Sheets API → Looker Studio
Підходить для 5 000–50 000 рядків, оновлення раз на кілька годин. Найшвидший шлях до дашборду без складної інфраструктури.
Схема 2 — через BigQuery (для великих обсягів):
Бітрікс → PHP-агент → BigQuery API → Looker Studio
BigQuery оптимальний при мільйонах рядків (історія замовлень протягом кількох років, события аналітики поведінки). Looker Studio має вбудований коннектор до BigQuery.
Схема 3 — користувацький коннектор Looker Studio:
Looker Studio → REST API Бітрикса → Looker Studio
Looker Studio запитує дані напряму з API за розписанням. Не потребує проміжних сховищ, але навантажує сервер Бітрикса при частих запитах.
Реалізація через Google Sheets
Найбільш практичний варіант для e-commerce проектів. Google Sheets API приймає дані через OAuth 2.0 сервісний аккаунт.
Крок 1. Створюємо сервісний аккаунт в Google Cloud Console, завантажуємо JSON з ключами, надаємо доступ до потрібної таблиці.
Крок 2. Встановлюємо бібліотеку через Composer або підключаємо вручну:
composer require google/apiclient
Крок 3. Агент Бітрикса збирає дані й відправляє в Sheets:
function syncOrdersToSheetsAgent(): string
{
$ordersData = collectOrdersData(); // масив даних з b_sale_order
updateGoogleSheet(SHEETS_SPREADSHEET_ID, 'Замовлення!A1', $ordersData);
return __FUNCTION__ . '();';
}
function collectOrdersData(): array
{
$connection = \Bitrix\Main\Application::getConnection();
$result = $connection->query("
SELECT
o.ID,
o.DATE_INSERT,
o.PRICE,
o.CURRENCY,
o.STATUS_ID,
o.USER_ID,
u.LOGIN,
u.EMAIL
FROM b_sale_order o
LEFT JOIN b_user u ON u.ID = o.USER_ID
WHERE o.DATE_INSERT >= DATE_SUB(NOW(), INTERVAL 90 DAY)
ORDER BY o.DATE_INSERT DESC
LIMIT 10000
");
$rows = [['ID', 'Дата', 'Сума', 'Валюта', 'Статус', 'ID клієнта', 'Логін', 'Email']];
while ($row = $result->fetch()) {
$rows[] = array_values($row);
}
return $rows;
}
function updateGoogleSheet(string $spreadsheetId, string $range, array $data): void
{
$client = new \Google\Client();
$client->setAuthConfig(APPLICATION_ROOT . '/local/config/google-service-account.json');
$client->addScope(\Google\Service\Sheets::SPREADSHEETS);
$service = new \Google\Service\Sheets($client);
$body = new \Google\Service\Sheets\ValueRange(['values' => $data]);
$params = ['valueInputOption' => 'USER_ENTERED'];
$service->spreadsheets_values->update($spreadsheetId, $range, $body, $params);
}
Структура даних для типових дашбордів
Для e-commerce дашборду в Looker Studio зазвичай потрібні такі листи в Google Sheets:
| Лист | Джерело в Бітриксі | Таблиці |
|---|---|---|
| Замовлення | Список замовлень з сумами | b_sale_order |
| Товари в замовленнях | Склад замовлень | b_sale_basket |
| Клієнти | Дані покупців | b_user, b_sale_order |
| Джерела трафіку | UTM-мітки | b_sale_order (поле REASON_MARKED) |
| Скасування та повернення | Статуси замовлень | b_sale_order, b_sale_status |
Для CRM-дашборду:
| Лист | Джерело | Таблиці |
|---|---|---|
| Угоди | CRM угоди | b_crm_deal |
| Воронка | Стадії угод | b_crm_deal, b_crm_status |
| Активності | Дзвінки, листи | b_crm_activity |
Налаштування Looker Studio
- Відкрийте
lookerstudio.google.com→ створіть джерело даних - Виберіть коннектор Google Sheets
- Вкажіть таблицю й лист з даними Бітрикса
- Looker Studio визначить типи стовпців: числа, текст, дати
- Створіть звіт з потрібними діаграмами
Важливі налаштування в Looker Studio:
- Поле дати (
DATE_INSERT) повинно мати тип "Дата і час" — Looker Studio автоматично визначить, якщо форматYYYY-MM-DD HH:MM:SS - Поле суми (
PRICE) — тип "Число", формат "Валюта" - Для агрегації за періодами додайте обчислюване поле
DATE_TRUNC(DATE_INSERT, MONTH)
Автоматичне оновлення даних
Агент Бітрикса запускається за розписанням:
// Реєстрація агента в init.php або встановленні модуля
\CAgent::AddAgent(
'syncOrdersToSheetsAgent();',
'my_analytics',
'N',
3600, // кожну годину
'',
'Y',
\ConvertTimeStamp(time() + 3600, 'FULL')
);
При інкрементальному оновленні (тільки нові дані) додайте в запит WHERE o.DATE_INSERT >= ? з датою останньої синхронізації, збереженою в b_option.
Безпека
JSON-ключ сервісного аккаунта — конфіденційний файл. Зберігати в /local/config/ з заборогою на HTTP-доступ через .htaccess:
<Files "google-service-account.json">
Deny from all
</Files>
В Google Cloud Console обмежте права сервісного аккаунта: тільки roles/sheets.editor на конкретну таблицю, не на весь проект.
Терміни реалізації
| Варіант | Склад | Термін |
|---|---|---|
| Один лист (замовлення за 90 днів) | Агент + Sheets API + базовий дашборд | 1–2 дні |
| Повний e-commerce дашборд (5–7 листів) | Кілька агентів + трансформація даних | 3–5 днів |
| Історичні дані + BigQuery | Первинне завантаження + інкрементальна синхронізація | 1–2 тижні |







