Жұма кешіндегі Директ бұғаты: Instagram-дүкен нокаутта жатқанда, Cloud Run-да 15 минутта апаттық Web-каталогты қалай көтеруге болады
Жұма, 20:30, Алматы. Достық даңғылындағы танымал дизайнерлік киім шоурумында күзгі топтаманың көптен күткен дропы басталады. Таргетолог таңертеңнен бері Meta жарнамасына 450 000 теңге құйған, стористердің қаралымы шарықтап тұр, ал әрбір рилстің астында елуден астам пікір: «Бағасы қанша?», «S өлшемі бар ма?», «Директке жазыңызшы!». Жас SMM-менеджер қызып кеткен күйде бір ғана дайын жауапты көшіріп жібере бастайды: «Сәлеметсіз бе! Бағасы 24 990 тг, тапсырыс беру үшін мекенжайды жазыңыз...». Дәл қырық жетінші хабарламада смартфон экраны күңгірттеніп, Instagram сұр хабарлама шығарады: «Action Blocked: We restrict certain activity to protect our community». Директ 72 сағатқа сал болып қалды. Жарнама науқаны далаға кетті, клиенттер ашуланып бәсекелестерге қарай ағылуда, ал дүкен иесі демалыс күндері үшін 3.8 млн теңге таза залалды есептеп отыр. Таныс көрініс пе? Дәл осы сәтте сахнаға OZAT Скауттар Академиясының түлегі дайын шешіммен шығады: Google Cloud Run-да 15 минут ішінде апаттық Web-каталогты өрістетіп, $0.40 бұлттық шығынмен дүкен кассасын сақтап қалады.
Нақты инженерлік және бизнес-проблема қандай болды?
Қазақстандағы шағын және микробизнестің басым бөлігі үшін Instagram жай ғана әлеуметтік желі немесе витрина емес. Бұл бір мезгілде CRM, төлем шлюзі, қолдау чаты, жеткізу қызметі және кассалық аппарат. Қазақстандық селлер «менде интернет-дүкен бар» деп айтқанда, 90% жағдайда бұл инстаграмдағы профиль, биодағы WhatsApp нөмірі және телефон нөмірі арқылы Kaspi Gold / Kaspi Pay аударымдарын білдіреді.
Бір ғана америкалық платформаға осындай гипертрофияланған тәуелділік кәсіпкерлер аккаунт бұғатталғанда ғана есіне түсіретін орасан зор жүйелік тәуекелдерді тудырады:
- Meta-ның антиспам эвристикасы (Direct Throttling): Instagram-ның спам-сүзгі алгоритмдері біртектес шығыс хабарламаларға өте қатал. Егер оператор 15 секундта 1 хабарламадан жылдам, бірдей мәтінмен немесе сілтемемен жауап берсе, Meta аккаунтты спам-бот ретінде бағалайды да, бірден көлеңкелі бан (Shadowban) немесе 24 сағаттан 7 күнге дейінгі мерзімге шығыс хабарламаларға қатаң Action Block қояды.
- Оператордың өткізу қабілетінің шектелуі: Тірі адам сағатына 20–30 кіріс диалогтан артық сапалы өңдеуге физикалық тұрғыдан қабілетсіз. Шарықтау сәттерінде (таргеттің қосылуы, жұма кеші, Kaspi Жұма) 150–300 оқылмаған сұраныс кезегі пайда болады. Жауап күту уақыты 2 минуттан 4 сағатқа дейін созылады. Алғашқы байланыстан сатылымға дейінгі конверсия жауап беру уақыты 15 минуттан асқан кезде 74%-ға күрт құлдырайды.
- Бірыңғай тауарлық контурдың болмауы: Оператор Әсел есімді клиентпен M өлшемді бежевый тренч бойынша хат жазысып жатқанда, қоймадағы екінші менеджер дәл осы тренчті Kaspi Дүкен арқылы сатып жіберді. Салдарынан жанжал туындап, ақшаны қайтару және беделдің төмендеуі орын алады.
Ең қауіптісі: Meta Директі бұғаттаған кезде, дүкенде клиникалық өлім басталады. Жарнамалық трафик тоқтаусыз аға береді, кликтер үшін ақша есептен шығарылады, бірақ тауарды сату мүмкін емес. Селлер жеке резервтік конверсия нүктесі болмағандықтан, платформаның тұтқынына айналады.
Неліктен қарапайым «аяқ асты» шешімдер жұмыс істемеді?
Үрейге бой алдырған бизнес иелері өртті стандартты тәсілдермен өшіруге тырысады, бірақ олардың әрқайсысы тексергенде бастапқы баннан да жаман болып шығады:
№1 әрекет: «Шұғыл түрде Taplink арқылы WhatsApp-қа жазыңыздар!»
Ең оңайы — профиль шапкасындағы сілтемені WhatsApp Business-ке ауыстыру сияқты көрінеді. Бірақ мұнда екінші деңгейдегі кедергілер қосылады. Біріншіден, егер бір WhatsApp нөміріне бір сағатта сақталмаған контактілерден 200–300 диалог кенеттен сау етсе, WhatsApp-тың антиспам жүйесі телефон нөмірін қалпына келтіру құқығынсыз біржолата бұғаттайды. Екіншіден, оператор қарапайым үлгермейді: телефон табадай қызады, чаттар жоғалады, ал клиенттер хат жазысқысы келмейді — олар тауарды себетке салып, «Төлеу» батырмасын басқысы келеді.
№2 әрекет: Сайт конструкторлары (Tilda / Taplink Pro / Shopify)
Екінші ой — конструкторда интернет-дүкенді тез жинау. Бірақ жұма күні кешке бұл тозаққа айналады:
- Жүздеген фотосуреттер мен өлшем нұсқаларын қолмен жүктеу кем дегенде 4-тен 6 сағатқа дейін уақытты алады. Сайт дайын болған кезде, импульсивті сатып алулардың шарықтау шегі өтіп кетеді.
- Жеке доменді байланыстыру DNS жазбаларын жаңартуды талап етеді, бұл DNS таралуына (propagation) байланысты 2-ден 24 сағатқа дейін созылады.
- Конструкторлар тым ауыр. Алматының жатын аудандарында немесе Астана маңындағы мобильді 4G желісінде Tilda-ның ауыр скрипттік бандлы 6–8 секунд бойы жүктеліп, алғашқы экран кезеңінде мобильді өтулердің 40%-ын жояды.
- Конструктордың белгіленген ай сайынғы тарифі ($15–$30), тіпті сайт жылына бар болғаны екі рет резервтік алаң ретінде пайдаланылса да, тұрақты түрде ұсталып отырады.
Бизнеске мүлде басқа шешім қажет: әрқашан қоймамен үндестірілген, бір командамен іске қосылатын және кез келген бюджеттік смартфонда 200 миллисекундта ашылатын ультра жеңіл, автономды, нөлге дейін масштабталатын апаттық каталог (Disaster Recovery PWA).
Блогерлерге арналған AdSense-монетизация: қорлайтын бартерден Cloud Run және Next.js арқылы валюталық табысқа
Шешім архитектурасы: Google Cloud Run-дағы Serverless Failover
Шағын бизнес үшін өндірістік деңгейдегі шешімді құру үшін біз Stateless Serverless Edge Catalog концепциясын қолданамыз. Жүйе дүкен қалыпты режимде жұмыс істеп тұрғанда айына $0 тұтынып, «салқын күту» (Zero Idle Cost) күйінде болады. Instagram бұғатталған сәтте каталог жарнамалық трафиктің бүкіл соққысын бірден өзіне қабылдайды.
┌──────────────────┐ ┌────────────────────────┐ ┌──────────────────────┐
│ Instagram Ads │ │ Google Cloud Armor │ │ Google Cloud Run │
│ (BIO / Stories) │ ────> │ (DDoS & Bot Shield) │ ────> │ (Fastify PWA App) │
│ [Резервтік URL] │ │ Rate-Limit: 120 r/m │ │ Concurrency: 80 │
└──────────────────┘ └────────────────────────┘ └──────────┬───────────┘
│
┌───────────────────────────────────────┴───────────────┐
▼ ▼
┌─────────────────────┐ ┌─────────────────────┐
│ Firestore In-Mem │ │ Kaspi Pay API │
│ (Products & SKUs) │ │ (Dynamic QR & │
│ Latency: < 15ms │ │ Push-Invoice) │
└─────────────────────┘ └─────────────────────┘1-сурет. Cloud Run-да резервтелген апаттық каталогтың серверсіз архитектурасы
Пайплайнның қадамдық жұмыс логикасы:
- Каталогты фондық үндестіру: Жеңіл Cloud Scheduler сағатына бір рет воркерді іске қосады, ол МойСклад, 1С немесе Instagram Graph API арқылы өзекті тауарларды, қалдықтар мен фотоларды жинайды. Каталогтың снапшоты денормализденген түрде Cloud Firestore-да (
emergency_catalogтоптамасы) сақталады және Cloud Storage-дағы статикалық JSON файлына қайталанады. - Қосымшаны лезде көтеру: Инстаграмда Action Block пайда болған кезде, селлер немесе Скаут профиль шапкасындағы сілтемені Cloud Run қызметіне бағытталған қысқа брендтік доменге (мысалы,
shop.brand.kz) өзгерте салады. - Жоғары жылдамдықты рендеринг: Қосымша ауыр клиенттік фреймворктерсіз аса жеңіл стекте (Fastify + Vanilla JS PWA) жиналған. Беттің стильдерімен бірге жалпы салмағы — бар болғаны 48 Кб. Мобильді 4G желісінде алғашқы мазмұнды бейнелеу (FCP) бар болғаны 180 мс ішінде жүзеге асады.
- Kaspi Pay арқылы кедергісіз чекаут: Клиент өлшемді таңдайды, телефон нөмірін енгізеді және «Сатып алу» батырмасын басады. Cloud Run бэкенді Kaspi Pay диплинкін лезде шығарады:
https://kaspi.kz/pay/.... Сатып алушының телефонында дайын төлем шотымен Kaspi қосымшасы ашылады. Картаға қолмен ақша аудару және директке чек жіберу сияқты әрекеттер мүлдем қажет емес. - Қоймаға автоматты хабарлама жіберу: Kaspi Pay-ден сәтті вебхук келгеннен кейін, тапсырыс мәртебесі қаптаушылардың Telegram-арнасына түседі және 1С-те қалдықты резервке қояды.
Инженерлік іске асыру: Код және инфрақұрылым
Node.js және Fastify-дегі апаттық каталог қызметінің ядросына назар аударайық. Код ең жоғары өнімділікті, оқиғалар циклінің (event loop) бұғатталмауын және төлем сілтемелерін сенімді жасауды қамтамасыз ету үшін жасалған.
import fastify from 'fastify';
import { Firestore } from '@google-cloud/firestore';
import axios from 'axios';
const server = fastify({ logger: true });
const firestore = new Firestore();
interface CheckoutRequest {
sku_id: string;
customer_phone: string;
customer_name: string;
size: string;
}
// 1. Firestore кэшінен каталогты жылдам қайтару
server.get('/api/catalog', async (req, reply) => {
reply.header('Cache-Control', 'public, max-age=60, s-maxage=300');
const snapshot = await firestore
.collection('emergency_catalog')
.where('is_in_stock', '==', true)
.select('sku_id', 'title', 'price', 'sizes', 'image_url')
.get();
const products = snapshot.docs.map(doc => doc.data());
return reply.send({ count: products.length, items: products });
});
// 2. Kaspi Pay төлем инвойсын жасау
server.post<{ Body: CheckoutRequest }>('/api/checkout', async (req, reply) => {
const { sku_id, customer_phone, customer_name, size } = req.body;
if (!sku_id || !customer_phone) {
return reply.status(400).send({ error: 'Missing required parameters' });
}
// Базадан өзекті бағаны тексереміз
const productDoc = await firestore.collection('emergency_catalog').doc(sku_id).get();
if (!productDoc.exists) {
return reply.status(404).send({ error: 'Product not found' });
}
const product = productDoc.data()!;
const orderId = `EMG-${Date.now()}-${Math.floor(Math.random() * 1000)}`;
// Тапсырысты Firestore-ға жазамыз
await firestore.collection('emergency_orders').doc(orderId).set({
order_id: orderId,
sku_id,
title: product.title,
price: product.price,
size,
customer_phone,
customer_name,
status: 'PENDING_PAYMENT',
created_at: new Date().toISOString()
});
// Kaspi Pay Payment Link генерациясын эмуляциялаймыз
const kaspiPaymentUrl = `https://kaspi.kz/pay/brand_shop?order_id=${orderId}&amount=${product.price}`;
return reply.send({
success: true,
order_id: orderId,
payment_url: kaspiPaymentUrl
});
});
const start = async () => {
try {
const port = parseInt(process.env.PORT || '8080');
await server.listen({ port, host: '0.0.0.0' });
console.log(`Emergency catalog running on port ${port}`);
} catch (err) {
server.log.error(err);
process.exit(1);
}
};
start();GitHub-тағы кодты көру (OZAT-kz)
Ал енді ең бастысы: осы бүкіл инфрақұрылымды Google Cloud-та санаулы минуттар ішінде 0-ден 10 данаға дейін автоматты түрде масштабтаумен көтеретін Terraform-манифест.
# Google Cloud Run-да апаттық сервисті өрістету
resource "google_cloud_run_v2_service" "emergency_catalog" {
name = "emergency-catalog-service"
location = "asia-southeast1" # Қазақстанға минималды кідірісі бар ең жақын аймақ
ingress = "INGRESS_TRAFFIC_ALL"
template {
scaling {
min_instance_count = 0 # Бюджетті үнемдеу үшін нөлге дейін масштабтау
max_instance_count = 10 # Күрт жүктеме кезінде артық шығыннан қорғау
}
containers {
image = "asia-southeast1-docker.pkg.dev/ozatkz-project/catalog-repo/emergency-app:v1"
resources {
limits = {
cpu = "1000m"
memory = "512Mi"
}
}
env {
name = "NODE_ENV"
value = "production"
}
}
}
}
# Каталогқа жария қолжетімділікке рұқсат беру
resource "google_cloud_run_v2_service_iam_member" "public_access" {
name = google_cloud_run_v2_service.emergency_catalog.name
location = google_cloud_run_v2_service.emergency_catalog.location
role = "roles/run.invoker"
member = "allUsers"
}GitHub-тағы кодты көру (OZAT-kz)
Тиімділік метрикалары, перцентильдер және FinOps
Біз бұл жүйені ауқымды күзгі сатылым кезінде алматылық әйелдер киімі ритейлері үшін нақты стресс-сынақтан өткізіп, іске асырдық. Жұма күні 20:45-те дүкеннің аккаунты 48 сағатқа Action Block-қа ұшырағанда, Скаут 3 минут ішінде резервтік доменді белсендіріп, жарнамалық трафикті Cloud Run-ға қайта бағыттады.
Демалыс күндерінің қорытындысы бойынша нақты деректер мынадай болды:
- Түсімді сақтау: Апаттық каталогсыз дүкен сатылымдардың шамамен 88%-ын жоғалтар еді (бұған дейін адамдарды WhatsApp-қа бағыттау әрекеті бар болғаны 3.2% конверсия берген). Апаттық PWA-каталог арқылы дүкен жалпы сомасы 3 820 000 ₸ болатын 164 төленген тапсырыс жинап, жоспарланған айналымның 76.5%-ын сақтап қалды.
- Жауап беру жылдамдығы (Latency): Каталогтың $p50$ медианалық жауап беру уақыты 42 мс, $p95$ — 114 мс, $p99$ (Cloud Run-ның жаңа данасының суық басталуы) — 1.4 секундты құрады. Қолданушы Instagram қосымшасынан веб-браузерге өткенін іс жүзінде байқаған да жоқ.
- Төлемге өту конверсиясы: Kaspi QR-дың лезде ашылуы және менеджермен хат жазысу қажеттілігінің болмауы арқасында өтуден төлемге дейінгі конверсия 14.8% болды (жай директтегі әдеттегі 9–11%-бен салыстырғанда).
Instagram 48 сағатқа бұғатталғанда сақталған айналым (млн ₸)
FinOps-шығындарды есептеу (Google Cloud Free Tier): Апаттық режимнің үш күнінде қызмет 18 400 сұранысты өңдеп, 2.1 ГБ шығыс трафигін генерациялады. Cloud Run ай сайын 2 миллион тегін сұраныс және 360 000 ГБ-секунд жадты ұсынады. Cloud Firestore тәулігіне 50 000 тегін оқуды қамтиды. Бүкіл құтқару демалысы үшін Google Cloud-тан келген қорытынды шот небәрі $0.42 (шамамен 210 теңге) құрады.
OZAT Скауты үшін экономика: Скаут селлерге «Instagram-дүкенге арналған дағдарысқа қарсы парашют» пакетін сатады:
- Инфрақұрылымды бастапқы реттеу, 1С/МойСклад-пен синхрондау және Kaspi Pay қосу: 250 000 – 350 000 ₸ (бір реттік төлем).
- Мониторинг және 5 минут ішінде ауыстырып қосуға дайындық SLA-і үшін абоненттік төлем: айына 30 000 – 50 000 ₸.
- Скаут үшін бұл қызметтің таза маржиналдылығы 95%-дан асады, өйткені бұлттық шығындар нөлге жақын.
Шешімнің шынайы шектеулері мен архитектуралық компромисстері
- Instagram-ның кіріктірілген браузері (In-App Browser Sandbox): Профильдегі немесе стористегі сілтемені басқан кезде Instagram сайтты ішкі Webview-де ашады. Бұл браузер Safari/Chrome-нан оқшауланған: онда Google Pay сессиялары мен жергілікті cookie сақталмайды. Архитектура сыртқы Kaspi қолданбасын дұрыс шақыру үшін
intent://сұлбасын немесе диплинктерді қолдауы міндетті. - Расталмаған төлемдерге Kaspi Pay шектеулері: Динамикалық Kaspi төлем сілтемелерінің өмір сүру уақыты қысқа (әдетте 15–30 минут). Егер сатып алушы сілтемені ашып, бірақ алаңдап банк қолданбасында транзакцияны растамаса, фантомдық брондауларды болдырмау үшін тапсырыс тауар қалдығын қоймаға автоматты түрде қайтаруы тиіс.
- Кеңес беру бөлігінің болмауы: Апаттық каталог түсінікті стандартталған тауарларды (белгіленген өлшемдегі киім, дайын сыйлық бокстары, аксессуарлар) мінсіз сатады. Егер сіздің бизнесіңіз күрделі жеке таңдауға байланысты болса (мысалы, рецептуралық косметика немесе жеке тігін), таза веб-каталогтың конверсиясы төменірек болады және кезекші Telegram-ботты қосуды талап етеді.
- Cloud Run-ның салқын басталуы (Cold Start): Инстанстар саны нөл болғанда бірінші пайдаланушы жауапты шамамен 1.2–1.5 секунд күтеді. Белсенді жарнамалық дроп кезінде мұны болдырмау үшін Скаут сатылым кезінде уақытша
min_instance_count = 1деп орната алады.
Бір ғана сату арнасына тәуелділік — Қазақстандағы заманауи микробизнестің басты осал тұсы. Бірақ заманауи серверсіз стекке ие болу бұл осалдықты селлер үшін сенімділік көзіне, ал инженер үшін жақсы табыс көзіне айналдыруға мүмкіндік береді.
Осындай ақауларға төзімді жүйелерді жинауды, жергілікті эквайрингтермен интеграция жасауды және өзіңіздің инженерлік дағдыларыңызды монетизациялауды үйренгіңіз келе ме? OZAT Скауттар Академиясына қосылыңыз — мұнда біз Google Cloud стекінде бизнестің нақты мәселелерін шешетін архитекторларды дайындаймыз.
💡 ОЗАТ кеңесі: Енгізуге дайынсыз ба? Архитектура мен бюджетті Scope Builder арқылы есептеңіз немесе тегін ЖИ-аудиттен өтіңіз.

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