Làm thế nào để xây dựng Modern Data Stack cho eCommerce với dbt và BigQuery, biến đổi dữ liệu thô từ Shopify/WooCommerce thành bảng dashboard báo cáo kinh doanh chuẩn chỉnh?

Xây dựng Modern Data Stack cho eCommerce với dbt & BigQuery

Từ dữ liệu thô Shopify / WooCommerce tới dashboard báo cáo kinh doanh chuẩn chỉnh – “cầm lên làm được” ngay hôm nay


1. Tổng quan Modern Data Stack cho eCommerce

Thị trường eCommerce Việt Nam dự kiến đạt 2,4 tỷ USD vào Q4‑2025 (Statista, 2024) và tốc độ tăng trưởng CAGR 13 % so với 2023. Để duy trì lợi thế cạnh tranh, các doanh nghiệp cần:

Yếu tố Mô tả Ảnh hưởng tới KPI
Tốc độ quyết định Dữ liệu phải sẵn sàng trong < 5 phút sau giao dịch Tăng conversion rate 2‑3 %
Độ tin cậy Sai lệch dữ liệu < 0,5 % Giảm rủi ro tài chính, tránh phạt GDPR/PDPA
Khả năng mở rộng Xử lý 10 k giao dịch/giây trong đợt flash sale Đảm bảo uptime ≥ 99,9 %

Modern Data Stack (MDS) đáp ứng ba trụ cột: Ingestion → Transformation → Visualization. Với eCommerce, nguồn dữ liệu chính là Shopify hoặc WooCommerce (REST API, webhook), và BigQuery là kho dữ liệu “đám mây” nhanh, chi phí tính theo TB lưu trữ và TB truy vấn. dbt (data build tool) thực hiện ELT (Extract‑Load‑Transform) ở lớp trung gian, cho phép quản lý mô hình dữ liệu dưới dạng code (SQL + Jinja).


2. Kiến trúc tổng thể & Workflow (text‑art)

┌─────────────────────┐      ┌─────────────────────┐
│  Shopify / WooCommerce │──►│  Cloud Storage (GCS) │
└─────────────────────┘      └─────────────────────┘
          │                         │
          ▼                         ▼
   ┌───────────────┐        ┌─────────────────┐
   │  Airbyte /    │        │  BigQuery       │
   │  Fivetran     │───────►│  (Raw Layer)    │
   └───────────────┘        └─────────────────┘
          │                         │
          ▼                         ▼
   ┌─────────────────────┐   ┌─────────────────────┐
   │  dbt (Docker)       │   │  dbt (Cloud Run)    │
   │  Transform Layer    │──►│  (Staging + Mart)   │
   └─────────────────────┘   └─────────────────────┘
          │                         │
          ▼                         ▼
   ┌─────────────────────┐   ┌─────────────────────┐
   │  Looker / Metabase │   │  Data Studio /      │
   │  (BI Layer)        │──►│  PowerBI (Dashboard)│
   └─────────────────────┘   └─────────────────────┘

⚡ Lưu ý: Airbyte/Fivetran chịu trách nhiệm Extract & Load (EL), dbt chỉ Transform. Việc tách rời này giúp giảm chi phí BigQuery vì chỉ lưu trữ dữ liệu thô một lần, sau đó chuyển đổi trong‑place.


3. Lựa chọn công nghệ – So sánh 4 stack tiêu biểu

Thành phần Stack A (Open‑Source) Stack B (Google Cloud) Stack C (AWS) Stack D (Azure)
Ingestion Airbyte (Free) Fivetran (Enterprise) AWS DMS Azure Data Factory
Warehouse Snowflake (Pay‑as‑you‑go) BigQuery (Serverless) Redshift Synapse
Transformation dbt Core (Docker) dbt Cloud (Managed) dbt on EMR dbt on Azure Synapse
Orchestration Apache Airflow (Celery) Cloud Composer (Managed) Step Functions Azure Data Factory
BI Metabase Looker (Native) QuickSight PowerBI
Chi phí (USD/tháng) 1 200 1 050 1 400 1 300
Độ trễ trung bình 8‑10 phút ≤ 5 phút 9‑12 phút 8‑10 phút
Tính mở rộng Tốt (K8s) Tuyệt vời (Serverless) Tốt Tốt

🛡️ Đánh giá: Đối với doanh nghiệp eCommerce có giao dịch cao và cần độ trễ < 5 phút, Stack B (Google Cloud) là lựa chọn tối ưu vì BigQuery tự động scaling và tích hợp sẵn với dbt Cloud.


4. Chi phí chi tiết 30 tháng (phân bổ theo năm)

Khoản mục Năm 1 Năm 2 Năm 3 Tổng cộng 30 tháng
Ingestion (Airbyte + GCS) 1 200 USD 1 200 USD 1 200 USD 3 600 USD
Warehouse (BigQuery) 2 400 USD 2 800 USD 3 200 USD 8 400 USD
Transformation (dbt Cloud) 1 500 USD 1 800 USD 2 100 USD 5 400 USD
Orchestration (Cloud Composer) 900 USD 1 050 USD 1 200 USD 3 150 USD
BI (Looker) 1 800 USD 2 100 USD 2 400 USD 6 300 USD
Giám sát (Stackdriver) 300 USD 350 USD 400 USD 1 050 USD
Dự phòng & License 600 USD 650 USD 700 USD 1 950 USD
Tổng 8 700 USD 9 950 USD 11 200 USD 29 850 USD

⚡ Công thức tính chi phí BigQuery
Chi phí truy vấn = (Số TB quét) × 5 USD/TB
Chi phí lưu trữ = (Số GB) × 0,02 USD/GB/tháng

Ví dụ: 2 TB dữ liệu thô + 0,5 TB truy vấn mỗi ngày →
Chi phí truy vấn = 0,5 TB × 30 ngày × 5 USD/TB = 75 USD/tháng
Chi phí lưu trữ = 2 TB × 1 024 GB/TB × 0,02 USD/GB = 40,96 USD/tháng


5. Timeline triển khai – Gantt chart chi tiết

gantt
    title Triển khai Modern Data Stack (30 tháng)
    dateFormat  YYYY-MM-DD
    section Phase 1: Khởi tạo
        Thiết kế kiến trúc                :a1, 2024-07-01, 2w
        Đặt mua dịch vụ Cloud              :a2, after a1, 1w
    section Phase 2: Ingestion
        Cấu hình Airbyte connector         :b1, 2024-07-22, 2w
        Kiểm thử webhook Shopify           :b2, after b1, 1w
    section Phase 3: Warehouse
        Tạo dataset & bảng raw trong BQ    :c1, 2024-08-12, 1w
        Thiết lập partition & clustering  :c2, after c1, 1w
    section Phase 4: Transformation
        Viết dbt models (stg, mart)        :d1, 2024-08-26, 3w
        Thiết lập CI/CD (GitHub Actions)  :d2, after d1, 1w
    section Phase 5: Orchestration
        Airflow DAGs cho daily run         :e1, 2024-09-23, 2w
        Alerting & monitoring (Stackdriver):e2, after e1, 1w
    section Phase 6: BI & Dashboard
        Xây dựng Looker explores           :f1, 2024-10-14, 2w
        Thiết kế dashboard KPI            :f2, after f1, 2w
    section Phase 7: Go‑Live & Handover
        UAT & performance testing          :g1, 2024-11-04, 2w
        Chuyển giao tài liệu & training    :g2, after g1, 1w

🛡️ Rủi ro: Nếu Airbyte connector gặp lỗi API (rate‑limit), chuyển sang Fivetran (Phase 2 → B) để giảm downtime.


6. Các bước triển khai – 7 Phase chi tiết

Phase Mục tiêu Công việc con (6‑12) Người chịu trách nhiệm Thời gian (tuần) Dependency
1. Khởi tạo Đảm bảo hạ tầng Cloud sẵn sàng 1. Đăng ký GCP project
2. Thiết lập IAM roles
3. Kích hoạt Billing
4. Tạo VPC & subnet
5. Cài đặt Terraform
6. Kiểm tra quota
Cloud Architect 3
2. Ingestion Đưa dữ liệu thô vào GCS → BigQuery 1. Cài Docker Airbyte
2. Tạo source connector Shopify
3. Định nghĩa destination GCS
4. Thiết lập incremental sync
5. Kiểm tra webhook order_created
6. Lưu log Cloud Logging
Data Engineer 2 Phase 1
3. Warehouse Xây dựng raw layer trong BQ 1. Tạo dataset raw_shopify
2. Định nghĩa bảng partition theo order_created_at
3. Áp dụng clustering customer_id
4. Thiết lập IAM policy cho dbt
5. Kiểm tra dữ liệu mẫu
Data Engineer 2 Phase 2
4. Transformation Chuyển đổi thành chuẩn BI 1. Khởi tạo repo dbt (GitHub)
2. Viết model stg_orders.sql
3. Viết model mart_sales.sql
4. Định nghĩa tests (unique, not_null)
5. Thiết lập CI (GitHub Actions)
6. Deploy lên Cloud Run
7. Kiểm tra snapshot
Lead Data Analyst 4 Phase 3
5. Orchestration Tự động hoá pipeline hàng ngày 1. Cài Airflow trên Cloud Composer
2. Tạo DAG shopify_daily_sync
3. Thiết lập SLA 5 phút
4. Cấu hình alert Slack
5. Kiểm tra retry policy
6. Document DAGs
Data Ops Lead 2 Phase 4
6. BI & Dashboard Cung cấp báo cáo thời gian thực 1. Kết nối Looker tới dataset mart_sales
2. Định nghĩa view order_funnel
3. Xây dựng dashboard KPI (GMV, AOV, Conversion)
4. Thiết lập row‑level security
5. Kiểm thử truy vấn
6. Đào tạo người dùng
BI Manager 3 Phase 5
7. Go‑Live & Handover Đưa vào vận hành & bàn giao 1. Thực hiện UAT (load test 10 k TPS)
2. Đánh giá SLA
3. Kiểm tra backup & restore
4. Soạn SOP & runbook
5. Đào tạo team support
6. Chốt sign‑off
Project Manager 2 Phase 6

⚡ Tổng thời gian: 18 tuần ≈ 4,5 tháng, phù hợp với mục tiêu 30 tháng triển khai toàn diện.


7. Rủi ro & phương án dự phòng

Rủi ro Mức độ Phương án B Phương án C
Rate‑limit API Shopify Cao Chuyển sang Fivetran (quota cao) Sử dụng Shopify Bulk API (đặt lịch 2 h/lần)
Chi phí BigQuery vượt dự toán Trung bình Áp dụng partition pruning & materialized views Di chuyển dữ liệu ít truy vấn sang Cloud Storage và query bằng BigQuery External Tables
Failure Airflow DAG Trung bình Thiết lập fallback Airbyte sync bằng cron Sử dụng Google Cloud Scheduler để trigger dbt trực tiếp
Lỗi dữ liệu không đồng nhất Cao Thêm dbt tests (unique, not_null, relationships) Xây dựng data quality dashboard trong Looker để giám sát
Gián đoạn dịch vụ BI Thấp Deploy Looker trên multiple regions Sử dụng Metabase làm backup UI

🛡️ Best Practice: Luôn bật Stackdriver alerts cho lỗi DAG, quota exceed, và query cost spikes.


8. KPI, công cụ đo & tần suất

KPI Định nghĩa Công cụ đo Tần suất
Data Freshness Thời gian từ order được tạo → có trong mart BigQuery last_updated_at 5 phút (real‑time)
Query Cost Tổng chi phí truy vấn BigQuery Cloud Billing Export → Data Studio Hàng ngày
Pipeline Success Rate % DAG chạy thành công Airflow UI Hàng giờ
Dashboard Load Time Thời gian tải dashboard Looker Looker Performance Dashboard Hàng ngày
Data Quality Defects Số lỗi dbt test (fail) dbt Cloud test results Hàng ngày
User Adoption Số người dùng active trên BI Looker Usage Logs Hàng tuần

Công thức tính Data Freshness
Data Freshness = (Thời gian hiện tại – Thời gian order_created_at cuối cùng trong mart) × 60 (đơn vị: giây)

Ví dụ: Nếu order_created_at mới nhất là 12:03:45 và thời gian hiện tại 12:08:00 → Data Freshness = (12:08:00 – 12:03:45) × 60 = 255 giây ≈ 4,25 phút.


9. Tài liệu bàn giao cuối dự án

STT Tài liệu Người viết Nội dung bắt buộc
1 Architecture Diagram Cloud Architect Diagram toàn bộ stack, network, IAM, data flow
2 Data Dictionary Lead Data Analyst Định nghĩa bảng, cột, kiểu dữ liệu, mô tả business
3 dbt Project Docs Data Engineer Model lineage, tests, snapshots, macros
4 Airflow DAG Documentation Data Ops Lead Mô tả DAG, schedule, SLA, alerting
5 BI Dashboard Guide BI Manager Hướng dẫn truy cập, filter, export, row‑level security
6 Runbook – Incident Response Project Manager Các bước xử lý sự cố, rollback, contact list
7 Cost Monitoring SOP Finance Analyst Cách đọc Billing Export, alert thresholds
8 Security & Compliance Checklist Security Officer GDPR/PDPA, IAM policies, audit logs
9 Backup & Restore Procedure Data Engineer Export/Import BigQuery, GCS versioning
10 Training Slides Trainer Nội dung đào tạo cho người dùng cuối
11 Change Management Log PM Lịch sử thay đổi cấu hình, version
12 Test Cases & Results QA Engineer Danh sách test, kết quả pass/fail
13 Service Level Agreement (SLA) PM Mốc thời gian, uptime, support windows
14 API Integration Docs Integration Engineer Webhook payload, error handling
15 Project Closure Report PM Tổng kết chi phí, KPI, lessons learned

10. Checklist Go‑Live (42 item)

10.1 Security & Compliance

# Item Trạng thái
1 IAM role chỉ cho phép read vào dataset mart_sales
2 Đặt VPC Service Controls cho BigQuery
3 Kích hoạt Data Loss Prevention cho logs
4 Kiểm tra GDPR/PDPA data masking (PII)
5 Thiết lập OAuth scopes cho Looker
6 Kiểm tra SSL/TLS trên Airbyte & Airflow
7 Đánh giá penetration test cho API webhook
8 Đảm bảo audit logs được lưu 90 ngày
9 Kiểm tra secret manager cho API keys
10 Định kỳ password rotation cho service accounts

10.2 Performance & Scalability

# Item Trạng thái
11 Partitioning & clustering đúng trên bảng raw
12 Materialized view daily_sales được refresh mỗi 5 phút
13 Airflow DAG có parallelism ≥ 4
14 BigQuery slot reservation đủ cho peak load (≥ 200 TB query/month)
15 Load test 10 k TPS qua webhook
16 Nginx reverse‑proxy cấu hình keepalive
17 Cloud Run autoscaling max‑instances 100
18 Cache layer (Redis) cho Looker explore
19 Monitoring latency < 2 giây cho dashboard
20 Backup job hoàn thành < 30 phút

10.3 Business & Data Accuracy

# Item Trạng thái
21 dbt tests all_pass (unique, not_null, relationships)
22 Reconciliation script so sánh order_total giữa Shopify & mart
23 KPI dashboard phản ánh GMV đúng ±0,5 %
24 Row‑level security đúng cho region
25 Data lineage diagram cập nhật
26 Documentation version = 1.0
27 User acceptance test (UAT) sign‑off
28 Data quality dashboard hiển thị error count = 0

10.4 Payment & Finance

# Item Trạng thái
29 Script đối soát payment_status (Shopify ↔ Stripe)
30 Kiểm tra currency conversion chính xác
31 Alert khi refund_rate > 2 %
32 Audit trail cho financial reports
33 Backup bảng transactions hàng ngày
34 Kiểm tra tax calculation theo luật VN

10.5 Monitoring & Rollback

# Item Trạng thái
35 Stackdriver alert cho pipeline failure > 5 %
36 Dashboard health check (Airflow, dbt, Looker)
37 Log aggregation (Fluentd → GCS)
38 Rollback plan: revert dbt version → previous tag
39 Snapshot backup trước mỗi deploy
40 Test cold start Cloud Run < 2 s
41 DR drill‑down mỗi 3 tháng
42 Post‑mortem template sẵn sàng

🛡️ Lưu ý: Tất cả mục phải được đánh dấu “Done” trước khi chuyển sang production.


11. Các đoạn code / config thực tế

11.1 Docker Compose cho dbt (local dev)

version: "3.8"
services:
  dbt:
    image: ghcr.io/dbt-labs/dbt:1.7
    container_name: dbt_local
    volumes:
      - ./dbt_project:/usr/app
    environment:
      - BIGQUERY_PROJECT=your-gcp-project
      - BIGQUERY_DATASET=raw_shopify
    command: ["run"]

11.2 Airbyte connector config (JSON)

{
  "source_type": "shopify",
  "api_key": "{{ env.AIRBYTE_SHOPIFY_API_KEY }}",
  "api_secret": "{{ env.AIRBYTE_SHOPIFY_API_SECRET }}",
  "start_date": "2024-01-01T00:00:00Z",
  "streams": ["orders", "customers", "products"]
}

11.3 BigQuery table DDL (partition & clustering)

CREATE TABLE `ecom.raw_shopify.orders` (
  order_id STRING,
  customer_id STRING,
  order_total NUMERIC,
  order_created_at TIMESTAMP,
  currency STRING,
  status STRING
)
PARTITION BY DATE(order_created_at)
CLUSTER BY customer_id;

11.4 dbt model stg_orders.sql

{{ config(
    materialized='view',
    tags=['staging'],
    unique_key='order_id'
) }}

WITH source AS (
    SELECT *
    FROM {{ source('raw_shopify', 'orders') }}
)

SELECT
    order_id,
    customer_id,
    order_total,
    TIMESTAMP_TRUNC(order_created_at, SECOND) AS order_created_at,
    currency,
    status
FROM source
WHERE status NOT IN ('cancelled', 'refunded')

11.5 dbt test unique_order_id.sql

version: 2

models:
  - name: stg_orders
    tests:
      - unique:
          column_name: order_id
      - not_null:
          column_name: order_created_at

11.6 GitHub Actions CI/CD cho dbt

name: dbt CI

on:
  push:
    branches: [ main ]

jobs:
  dbt-run:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'
      - name: Install dbt
        run: pip install dbt-bigquery
      - name: Run dbt models
        env:
          BIGQUERY_PROJECT: ${{ secrets.BQ_PROJECT }}
          BIGQUERY_DATASET: raw_shopify
        run: dbt run --profiles-dir .

11.7 Airflow DAG (Python)

from airflow import DAG
from airflow.providers.google.cloud.operators.bigquery import BigQueryInsertJobOperator
from airflow.providers.google.cloud.transfers.gcs_to_bigquery import GCSToBigQueryOperator
from airflow.utils.dates import days_ago

default_args = {
    'owner': 'data-ops',
    'retries': 2,
    'retry_delay': timedelta(minutes=5),
}

with DAG(
    dag_id='shopify_daily_sync',
    schedule_interval='0 */5 * * *',   # mỗi 5 phút
    start_date=days_ago(1),
    default_args=default_args,
    catchup=False,
) as dag:

    load_to_gcs = GCSToBigQueryOperator(
        task_id='load_raw_orders',
        bucket='ecom-shopify-raw',
        source_objects=['orders/{{ ds_nodash }}/*.json'],
        destination_project_dataset_table='ecom.raw_shopify.orders',
        source_format='NEWLINE_DELIMITED_JSON',
        write_disposition='WRITE_APPEND',
        autodetect=True,
    )

    run_dbt = BigQueryInsertJobOperator(
        task_id='run_dbt_transform',
        configuration={
            "query": {
                "query": "CALL `ecom.dbt.run_transform`();",
                "useLegacySql": False,
            }
        },
    )

    load_to_gcs >> run_dbt

11.8 Nginx reverse‑proxy (SSL termination)

server {
    listen 443 ssl http2;
    server_name analytics.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/analytics.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/analytics.yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;   # Looker container
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

11.9 Cloudflare Worker – CORS proxy cho webhook

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const url = new URL(request.url)
  const target = `https://api.shopify.com${url.pathname}${url.search}`
  const resp = await fetch(target, {
    method: request.method,
    headers: request.headers,
    body: request.body,
  })
  const newHeaders = new Headers(resp.headers)
  newHeaders.set('Access-Control-Allow-Origin', '*')
  return new Response(resp.body, {
    status: resp.status,
    headers: newHeaders,
  })
}

11.10 Script đối soát payment (Python)

import requests, pandas as pd

shopify_orders = pd.read_json('gs://ecom-shopify-raw/orders/2024-10-01.json')
stripe_charges = pd.read_csv('gs://ecom-stripe/charges/2024-10-01.csv')

merged = shopify_orders.merge(stripe_charges,
                              left_on='order_id',
                              right_on='metadata_order_id',
                              how='inner')

diff = merged[abs(merged['order_total'] - merged['amount']) > 0.01]
if not diff.empty:
    diff.to_csv('gs://ecom-reconciliation/diff_2024-10-01.csv')
    raise ValueError('Payment mismatch detected!')

11.11 Medusa plugin – Sync product stock

// plugins/medusa-bigquery-sync/index.js
module.exports = (container) => {
  const { ProductService } = container.resolve('productService')
  const { bigquery } = require('@google-cloud/bigquery')()

  ProductService.prototype.update = async function (productId, update) {
    const result = await this.originalUpdate(productId, update)
    await bigquery
      .dataset('ecom')
      .table('product_stock')
      .insert([{ product_id: productId, stock: update.stock }])
    return result
  }
}

11.12 Terraform – Provision BigQuery dataset

resource "google_bigquery_dataset" "raw_shopify" {
  dataset_id = "raw_shopify"
  location   = "US"
  description = "Raw data from Shopify"
  default_table_expiration_ms = 2592000000  # 30 ngày
}

12. Gantt chart chi tiết (phụ thuộc)

⚡ Gantt ở mục 5. Timeline đã mô tả chi tiết các phase và dependency. Đối với phụ thuộc (dependency) trong mỗi phase, ví dụ:

  • Phase 4 (Transformation) phụ thuộc Phase 3 (Warehouse) vì dbt cần dataset raw_shopify để tạo model.
  • Phase 6 (BI) phụ thuộc Phase 5 (Orchestration) để dữ liệu đã được cập nhật thường xuyên.

13. Kết luận – Key Takeaways

Điểm cốt lõi Thực thi
MDS = Ingestion → Warehouse → Transformation → BI Áp dụng Airbyte + BigQuery + dbt + Looker
Data Freshness ≤ 5 phút Đặt Airflow DAG mỗi 5 phút, partitioning + clustering
Chi phí dự toán 30 tháng ≈ 30 k USD Kiểm soát bằng partition pruning, materialized view
Rủi ro API rate‑limit Dự phòng Fivetran hoặc Bulk API
KPI đo lường liên tục Data Freshness, Pipeline Success Rate, Query Cost
Bàn giao tài liệu đầy đủ 15 tài liệu, SOP, runbook, training

🛡️ Best Practice: Đừng để “data lake” trở thành “data swamp”. Mỗi bảng trong mart_ phải có dbt testdocumentation. Khi có lỗi, rollback chỉ cần revert tag Git và chạy lại dbt.


14. Câu hỏi thảo luận

Anh em đã từng gặp “pipeline latency > 10 phút” trong môi trường Shopify chưa? Các biện pháp tối ưu nào đã hiệu quả?

Có ai đã triển khai Fivetran thay cho Airbyte trong giai đoạn scaling? Kinh nghiệm cấu hình rate‑limit như thế nào?


15. Kêu gọi hành động

Nếu bạn đang lên kế hoạch xây dựng data pipeline cho shop Shopify hoặc WooCommerce, hãy bắt tay vào ngay bằng cách:

  1. Clone repo mẫu (Docker + dbt) từ GitHub (link trong phần tài liệu).
  2. Triển khai Airbyte trên Cloud Run, kết nối API key Shopify.
  3. Chạy dbt run và kiểm tra dashboard Looker.

⚡ Thử ngay và chia sẻ kết quả trong cộng đồng – mỗi thành công là một bước tiến cho toàn bộ ngành eCommerce Việt Nam.


16. Đoạn chốt marketing

Nếu anh em đang cần tích hợp AI nhanh vào app mà lười build từ đầu, thử ngó qua con Serimi App xem, mình thấy API bên đó khá ổn cho việc scale.

Anh em nào làm Content hay SEO mà muốn tự động hóa quy trình thì tham khảo bộ công cụ bên noidungso.io.vn nhé, đỡ tốn cơm gạo thuê nhân sự part‑time.


Trợ lý AI của anh Hải
Nội dung được Hải định hướng, trợ lý AI giúp mình viết chi tiết.
Chia sẻ tới bạn bè và gia đình