500 мың теңгенің дашборды: Скаут Looker Studio мен Cloud Functions арқылы селлерге өтпелі аналитиканы қалай жинай алады
Жұма, 23:00. Алматыдағы барахолкадағы ірі селлердің кеңсесі. Көзі қызарған менеджер Kaspi Pay кабинетінен бүгінгі бесінші CSV-есепті жүктеп алып, Facebook Ads-тен шығындарды тартып, МойСклад-тан қалдықтарды алып, осының бәрін үлкен Google Кестеде ВПР (VLOOKUP) көмегімен біріктіруге тырысуда. Кесте қатып қалады, браузер аяушылық сұрайды, ал бизнес иесі шашын жұлып отыр: «Біз бір айда 25 миллион теңге айналым жасадық, біздің ақшамыз қайда?!». Таныс ауыртпалық па? Дәл осы сәтте сахнаға OZAT Скауттар Академиясының түлегі шығады, ол бұл мәселенің шешімін 500 000 теңгеге сатады. Ең күлкілісі — бұл шешімге арналған бұлтты инфрақұрылым бизнеске айына шамамен екі долларға түседі.
Нақты бизнес-проблема қандай болды?
Қазақстандағы E-commerce, мейлі ол Kaspi-де чехол сату болсын, Wildberries-ке шығу немесе Instagram-дағы жеке интернет-дүкен болсын, бір жүйелі аурудан — деректердің фрагментациясынан зардап шегеді. Селлер жалпы түсімді (Gross Revenue) көреді, бірақ юнит-экономика (Unit Economics) мен таза маржиналдылыққа (Net Profit Margin) келгенде мүлдем соқыр.
Бұл неліктен орын алады?
- Шашыраңқы көздер (Data Silos): Тапсырыстар CRM-ге (AmoCRM немесе Bitrix24) түседі, транзакциялар Kaspi Pay немесе интернет-эквайринг арқылы өтеді, жарнама Meta (Instagram) мен Google Ads-те айналады, ал қоймалық есеп 1С немесе МойСклад-та жүргізіледі.
- Жасырын комиссиялар: Маркетплейстер комиссияларды, логистика құнын, қайтарулар мен айыппұлдарды ұстап қалады. Банк интерфейсінде селлер әрбір SKU бойынша бөлшектеуді емес, тек қорытынды түсімді (Payout) көреді.
- Соқыр маркетинг: Өтпелі аналитикасыз "Smartphones_Sale" жарнамалық науқаны бюджеттің 300 000 теңгесін жеп қойғанын, бірақ тек қайтарымы жоғары, шығынды тапсырыстар әкелгенін түсіну мүмкін емес.
Бизнес «сезіммен» өмір сүреді. Шотта ақша бар — демек, бәрі жақсы. Кассалық үзіліс — демек, бір жерде қателесті. OZAT Скауты үшін мұндай селлер — мінсіз клиент. Проблема өте үлкен, ал техникалық шешім, егер Google Cloud-тың дұрыс стегін меңгерген болсаңыз, бір-екі демалыс күнінде жиналады.
Неліктен қарапайым шешімдер (Google Sheets және дайын коннекторлар) жұмыс істемейді?
Селлер проблеманы түсінген кезде, ол әдетте екі тұйық жолдың бірімен жүреді:
№1 тұйық: Google Кестелер + Қол еңбегі (немесе Make/Zapier)
Деректер базасының не қажеті бар сияқты көрінуі мүмкін? Жай ғана Make (бұрынғы Integromat) арқылы барлық вебхуктерді Google Кестеге құйып, сол жерде графиктер тұрғызайық.
Мәселе мынада, Google Sheets — деректер базасы емес. Ресми шектеу — 10 миллион ұяшық, бірақ іс жүзінде, егер онда SUMIFS немесе QUERY сияқты формулалар болса, кесте 50 мың жолдың өзінде төзбестей қата бастайды. Мұндай кестеге тікелей қосылған Looker Studio-дағы дашборд 40 секунд бойы жүктеледі. Басшы оны пайдалануды жай ғана тоқтатады.
№2 тұйық: Ақылы ETL-коннекторлар (Supermetrics, OWOX, Power My Analytics)
Екінші жол — жарнамалық кабинеттер мен CRM-нен деректерді тікелей Looker Studio-ға тартатын дайын коннекторларды сатып алу. Кемшіліктері: Біріншіден, бұл қымбат. 3-4 коннекторға жазылу ай сайын кемінде $150-300 тұрады. Шағын бизнес үшін бұл айтарлықтай OpEx. Екіншіден, коннекторлар көбінесе Direct Query режимінде жұмыс істейді. Сіз дашбордта күні бойынша сүзгіні өзгерткен сайын, коннектор көзге API-сұрау жасайды. Сіз Rate Limits ұстап аласыз да, дашборд «Quota Exceeded» қатесімен сынып қалады. Сіз өзіңіздің тарихи деректеріңізге иелік етпейсіз.
«Кофе тұнбасымен бал ашу vs BigQuery ML»: Кофехана круассандарды тастауды тоқтатып, сұранысты қалай болжай алады
Дұрыс архитектура: Google Cloud-тағы өтпелі аналитика
Масштабталатын, ақауларға төзімді және іс жүзінде тегін шешім құру үшін біз ELT (Extract, Load, Transform) тәсілін және заманауи бұлтты стекті пайдаланамыз: Cloud Scheduler + Cloud Functions + BigQuery + Looker Studio.
Дәл осындай архитектураны енгізу үшін селлерлер 500 000-нан 1 500 000 теңгеге дейін чек төлеуге дайын. Скаут пайплайнды бір рет баптайтын архитектор ретінде әрекет етеді, ал одан әрі жүйе автономды түрде жұмыс істейді.
┌────────────────┐ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Көздер │ │ Cloud Scheduler │ │ BigQuery │ │ Looker Studio │
│ (Kaspi, 1C, │ ──> │ + │ ──> │ (Data Warehouse) │ ──> │ (Dashboard) │
│ Meta, CRM) │ │ Cloud Functions │ │ Raw -> Staging │ │ (BI Engine Cache)│
└────────────────┘ └──────────────────┘ └──────────────────┘ └──────────────────┘1-сурет. E-commerce аналитикасына арналған серверсіз пайплайн
Бұл кезең-кезеңімен қалай жұмыс істейді:
- Оркестрация: Cloud Scheduler cron-кестесі бойынша (мысалы, тапсырыстар үшін әр 15 минут сайын және жарнама шығындары үшін күніне бір рет) біздің Cloud Functions HTTP-триггерлерін іске қосады.
- Экстракция (Extract & Load): Node.js Cloud Functions Kaspi, МойСклад немесе Facebook API-іне жүгініп, жаңа деректерді (
updated_atбойынша инкременталды жүктеу) алады және оларды қаз қалпында (Raw Data) Streaming Inserts (немесе үлкен батчтар үшін Load Jobs) арқылы BigQuery кестелеріне тастайды. - Трансформация (Transform): BigQuery ішіндегі SQL-көріністер (Views) немесе Scheduled Queries көмегімен шикі JSON-деректер тазартылады, тапсырыс ID-і бойынша біріктіріледі (join) және юнит-экономикаға арналған әдемі деректер витринасына (Data Mart) айналады.
- Визуализация: Looker Studio BigQuery-дегі дайын витринаға қосылады. BI Engine (in-memory кэш) технологиясының арқасында дашбордтар миллисекундтар ішінде жүктеліп, ұшып тұрады.
Инженерлік іске асыру: Код және SQL
Шартты CRM-нен (мысалы, AmoCRM немесе МойСклад) тапсырыстарды тартып, оларды BigQuery-ге салатын Node.js-тегі (TypeScript) базалық Cloud Function қалай көрінетінін қарайық. Біз қателерді өңдеу және идемпотенттілігі бар production-ready код жазамыз.
import { BigQuery } from '@google-cloud/bigquery';
import axios from 'axios';
import { Request, Response } from 'express';
const bigquery = new BigQuery();
const datasetId = 'ecommerce_raw';
const tableId = 'crm_orders';
// Тапсырыстарды инкременталды жүктеу мысалы
export const fetchOrdersToBQ = async (req: Request, res: Response) => {
try {
// 1. BQ-дан соңғы жаңарту күнін аламыз (High-water mark)
const [lastSyncRows] = await bigquery.query(`
SELECT MAX(updated_at) as last_sync
FROM \`ozatkz-project.${datasetId}.${tableId}\`
`);
const lastSyncDate = lastSyncRows[0]?.last_sync?.value
? new Date(lastSyncRows[0].last_sync.value).toISOString()
: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString(); // Fallback: 7 күн
console.log(`Fetching orders updated since: ${lastSyncDate}`);
// 2. Көздің API-іне сұрау жасаймыз (мысалы, CRM)
const response = await axios.get('https://api.example-crm.com/v1/orders', {
headers: { 'Authorization': `Bearer ${process.env.CRM_API_KEY}` },
params: { updated_after: lastSyncDate, limit: 1000 }
});
const orders = response.data.items;
if (orders.length === 0) {
return res.status(200).send('No new orders to sync.');
}
// 3. Деректерді BigQuery үшін форматтаймыз
const rowsToInsert = orders.map((order: any) => ({
order_id: order.id,
status: order.status,
total_amount: order.price,
created_at: bigquery.datetime(order.created_at),
updated_at: bigquery.datetime(order.updated_at),
raw_json: JSON.stringify(order) // Қандай жағдай болмасын шикі JSON-ды сақтаймыз
}));
// 4. Деректерді BigQuery-ге стриминг жасаймыз
await bigquery
.dataset(datasetId)
.table(tableId)
.insert(rowsToInsert);
res.status(200).send(`Successfully synced ${orders.length} orders.`);
} catch (error) {
console.error('Error syncing orders:', error);
res.status(500).send('Internal Server Error');
}
};GitHub-тағы кодты көру (OZAT-kz)
Маңызды бөлшекке назар аударыңыз: біз raw_json өрісін қолданамыз. Бұл деректер қоймасын (Data Lakehouse) жобалау паттерні. Егер ертең бизнес біз бастапқыда жеке бағанға бөлмеген клиенттің телефон нөмірі қажет деп шешсе, бізге бір жылдық барлық базаны API арқылы қайта жүктеп алудың қажеті болмайды. Біз жай ғана телефонды JSON_EXTRACT_SCALAR(raw_json, '$.customer.phone') функциясы арқылы шығарып, BigQuery-дегі SQL-сұрауды жаңартамыз. Бұл дебаг жасауға кететін апталаған уақытты үнемдейді.
CRM, жарнамалық кабинеттер мен қоймалардан алынған деректер BigQuery-ге түскеннен кейін, біз барлығын біріктіретін SQL-витрина жазамыз:
-- Өтпелі аналитикаға арналған деректер витринасы (Юнит-экономика)
CREATE OR REPLACE VIEW `ozatkz-project.ecommerce_mart.unit_economics` AS
SELECT
o.order_id,
o.created_at AS order_date,
o.status,
o.total_amount AS revenue,
COALESCE(c.cogs_amount, 0) AS cogs, -- Қоймалық жүйеден алынған тауардың өзіндік құны
(o.total_amount * 0.12) AS marketplace_commission, -- Маркетплейстің 12% комиссиясы (мысал)
COALESCE(a.ad_spend_attributed, 0) AS ad_spend, -- Атрибутталған жарнама шығындары
-- Жалпы және таза пайданы есептейміз
(o.total_amount - COALESCE(c.cogs_amount, 0)) AS gross_profit,
(o.total_amount - COALESCE(c.cogs_amount, 0) - (o.total_amount * 0.12) - COALESCE(a.ad_spend_attributed, 0)) AS net_profit
FROM
`ozatkz-project.ecommerce_raw.crm_orders` o
LEFT JOIN
`ozatkz-project.ecommerce_raw.inventory_cogs` c ON o.sku_id = c.sku_id
LEFT JOIN
`ozatkz-project.ecommerce_raw.marketing_attribution` a ON o.order_id = a.order_id
WHERE
o.status IN ('DELIVERED', 'COMPLETED');GitHub-тағы кодты көру (OZAT-kz)
Метрикалар және FinOps: Инженерлік профит
Енді ең жағымдысы — ақша туралы сөйлесейік. Неліктен Скаут мұндай жұмыс үшін 500 000 ₸ батыл ала алады және бұл бизнеске неліктен тиімді?
- Бизнеске арналған ROI: Дашбордты енгізген селлер әдетте бірінші айда-ақ бюджеттегі «тесіктерді» табады (мысалы, ROMI -50% болатын жарнамалық науқандар немесе логистикаға байланысты минусқа сатылатын тауарлар). Үнемдеу миллиондаған теңгені құрайды. Дашборд бір-екі аптада өзін-өзі ақтайды.
- Есептердің жылдамдығы: Менеджер енді кестелерді біріктіруге күніне 3 сағат жұмсамайды. Деректер әр 15 минут сайын автоматты түрде жаңартылады.
Жылына аналитика шығындарын салыстыру (мың ₸)
FinOps (Бұлтты иелену құны): Шағын және орта бизнес үшін (айына 10 000 тапсырысқа дейін) Google Cloud инфрақұрылымы іс жүзінде тегін жұмыс істейді. Cloud Functions айына 2 миллион тегін шақыруды ұсынады. Cloud Scheduler 3 тегін джоб береді. BigQuery 10 ГБ тегін сақтауды және айына 1 ТБ сұрауларды ұсынады.
Мұндай жоба үшін Google Cloud-тан келетін қорытынды ай сайынғы шот (OpEx) шамамен $1.50 - $2.00 құрайды (негізінен Secret Manager-де құпияларды сақтағаны немесе логтар бойынша шамалы асып кеткені үшін). Мұны айына $200 тұратын дайын коннекторларға жазылумен салыстырыңыз. Пайдасы айқын.
Шешімнің шынайы шектеулері мен компромисстері
- API Rate Limits: Маркетплейстер сұраныстар санын қатаң шектеуі мүмкін (мысалы, секундына 5 сұраныстан аспауы керек). Cloud Function-дағы кодыңыз exponential backoff жасай алуы және 429 (Too Many Requests) статустарын дұрыс өңдей алуы тиіс.
- Инфрақұрылымды қолдау: Егер дереккөз API құрылымын өзгертсе (мысалы,
total_priceөрісінamountдеп өзгертсе), жүктеу сынуы мүмкін. Парсерді уақытында жөндеу үшін Скаут Cloud Monitoring-те алерттерді (ескертулерді) баптауы керек. Бизнеске айына тұрақты сомаға техқолдау көрсетуге SLA сатыңыз. - Нағыз Real-Time емес: Деректер микробатчтармен (15 минутта немесе сағатына бір рет) жүктеледі. Егер бизнеске секундқа дейінгі хардкорлы реалтайм қажет болса, Pub/Sub пен Dataflow енгізуге тура келеді, бұл күрделірек және сізді Free Tier-ден шығарады. Бірақ e-commerce-тің 99%-ы үшін 15 минуттық кідіріс — өте жақсы көрсеткіш.
Деректер қоймаларын (Data Warehousing) жинау — бұрыннан банктер мен корпорациялардың ғана артықшылығы емес. Serverless технологияларының арқасында Қазақстандағы кез келген шағын бизнес Enterprise деңгейіндегі аналитиканы ала алады, ал дарынды инженер — шешімді бір рет жинап және оны басқа клиенттерге масштабтай отырып, бұдан тамаша ақша таба алады.
Егер сіз осындай архитектураларды құруды және оларды бизнеске сатуды үйренгіңіз келсе, Скауттар Академиясына қош келдіңіз. Біз тек код жазуды ғана емес, бұлттың көмегімен бизнес-проблемаларды шешуді үйретеміз.
💡 ОЗАТ кеңесі: Енгізуге дайынсыз ба? Архитектура мен бюджетті Scope Builder арқылы есептеңіз немесе тегін ЖИ-аудиттен өтіңіз.

Рустам Шарафутдинов
Google Cloud архитектурасы саласындағы сарапшы және 15 жылдан астам тәжірибесі бар Senior Full-Stack әзірлеушісі. Ақауға төзімді архитектураларға, жоғары жүктемелі жобаларды оңтайландыруға және AI (Vertex AI) интеграциясына маманданған.