PULSE
1990 Agency operating guide
Admin Technical plan Open tool
Dành cho team non-tech

Hướng dẫn vận hành PULSE cho 1990 Agency

Cách hiểu đơn giản: PULSE là nơi team 1990 quản lý campaign và xem report. n8n là người điều phối lịch chạy và log. ScrapeCreators là dịch vụ lấy số liệu public từ post. API key nằm trong n8n/backend, không nằm trong browser.

1. Tạo dữ liệu campaign trong Admin

Vào Admin.html. Đây là nơi team 1990 thêm, sửa, xoá dữ liệu nội bộ trước khi có backend thật.

Client

Client là khách hàng hoặc brand. Nhập tên công ty, ngành hàng, email liên hệ.

Campaign

Campaign là chiến dịch. Nhập ngày bắt đầu/kết thúc, ngân sách, KPI views, KPI engagement.

Influencer

Influencer là creator/KOL. Nhập tên, handle, platform chính, follower, engagement rate.

Booking

Booking nối campaign với influencer. Nhập fee, committed views và số post/video đã cam kết với brand.

Users + i18n

Users quản lý người dùng mock. Translations cho phép sửa text tiếng Việt/English trong UI.

Lưu ý về conversion: v1 chưa hiển thị conversion tracking. Phần này sẽ quay lại sau khi 1990 chốt rõ nguồn đo conversion như pixel, UTM, promo code hoặc dữ liệu từ client.

2. KPI, timeline và alert hoạt động thế nào?

PULSE so sánh KPI đã cam kết với số liệu thực tế lấy từ đúng public posts/videos đã book. Influencer không cần login hay connect account; team 1990 chỉ cần nhập đúng URL public để ScrapeCreators/n8n pull metrics.

Mốc timelineKhi nào alert?SeverityTeam nên làm gì?
50%Campaign đã qua 50% thời gian nhưng KPI thấp hơn 50%.LowNhắc account kiểm tra post đã live đủ chưa.
80%Campaign đã qua 80% thời gian nhưng KPI thấp hơn 80%.MediumFollow up influencer, đề xuất boost hoặc thêm post nếu cần.
95%Campaign gần kết thúc nhưng KPI vẫn chưa đạt.HighEscalate nội bộ trước khi gửi report cuối cho khách.

Sau khi xử lý xong, vào Alerts.html và bấm resolve. Trạng thái này được lưu trong localStorage để refresh vẫn còn.

3. Thêm public post URL để n8n lấy số liệu

Mỗi booking nên có URL bài public của influencer. Ví dụ TikTok video URL, Instagram reel/post URL, Facebook post URL.

URL hợp lệ

Link public, mở được bằng browser ẩn danh, không cần đăng nhập đặc biệt, đúng bài nằm trong campaign.

Missing URL

Nếu thiếu URL, n8n không biết cần kéo bài nào. Admin/Data sẽ đếm Missing URL posts để team sửa.

4. n8n lấy data social mỗi ngày như thế nào?

n8n không gọi social platform trực tiếp từ browser. Cách đơn giản và dễ debug hơn là để n8n chạy lịch, gọi ScrapeCreators API, kiểm tra dữ liệu trả về, rồi gửi JSON chuẩn vào backend/PULSE.

Schedule TriggerChạy 5-6 lần/ngày cho campaign đang live.
Load URLsLấy danh sách post URL từ backend/PULSE.
Call ScrapeCreatorsGọi API TikTok, Instagram hoặc Facebook theo URL public.
ValidateKiểm tra thiếu URL, thiếu metric, lỗi platform hoặc quota.
NormalizeĐổi raw data thành schema chuẩn của PULSE.
Upsert + AlertLưu vào backend, ghi log, báo lỗi/stale nếu có.

Workflow family nên có trong n8n

WorkflowDùng để làm gì?
PULSE-Core-Pull-PostsWorkflow lõi: nhận campaign/post URLs, gọi ScrapeCreators, normalize JSON.
PULSE-Auto-DailyChạy tự động 5-6 lần/ngày cho campaign live.
PULSE-Backfill-YesterdayChạy lại dữ liệu hôm qua nếu job fail.
PULSE-Manual-RunTeam bấm chạy lại một campaign hoặc một URL cụ thể.
PULSE-Error-HandlerNhận lỗi workflow; Google Chat webhook sẽ build sau khi core system chạy ổn định.
PULSE-Health-CheckĐếm post stale, missing URL, failed run.

5. Payload chuẩn để import thử trong Admin/Data

Trong phase front-end, bạn có thể bấm Nạp payload mẫu trong Admin/Data hoặc paste JSON đã normalize để mô phỏng backend/n8n sync. File mẫu nằm ở sample-scrapecreators-payload.json. PULSE mặc định merge dữ liệu vào localStorage; khi test pilot thật, mở app với ?api=1 để đọc/ghi qua backend tối thiểu.

Dành cho team kỹ thuật: xem backend/README.md để chạy API local, docs/PILOT_RUNBOOK.md để làm checklist campaign thật, và import workflow mẫu n8n/PULSE-Core-Pull-Posts.workflow.json vào n8n trước khi chỉnh endpoint ScrapeCreators thật.

{
  "syncMeta": {
    "source": "scrapecreators",
    "orchestrator": "n8n",
    "runId": "n8n-scrapecreators-sample-20260428-0900",
    "lastSyncedAt": "2026-04-28T09:00:00+07:00",
    "staleAfterHours": 6
  },
  "posts": [
    {
      "id": "post_bk1_1",
      "bookingId": "bk1",
      "campaignId": "c1",
      "influencerId": "inf1",
      "platform": "tiktok",
      "url": "https://www.tiktok.com/@creator/video/123",
      "platformPostId": "123",
      "caption": "Public campaign video pulled by ScrapeCreators",
      "thumbnailUrl": "https://cdn.example.com/thumbs/123.jpg",
      "pullStatus": "ok",
      "views": 950000,
      "likes": 43000,
      "comments": 1200,
      "shares": 3100,
      "saves": 900,
      "reach": 700000,
      "lastPulledAt": "2026-04-28T09:00:00+07:00",
      "source": "scrapecreators",
      "errorMessage": ""
    },
    {
      "id": "post_bk4_missing_url",
      "bookingId": "bk4",
      "campaignId": "c1",
      "influencerId": "inf4",
      "platform": "tiktok",
      "url": "",
      "pullStatus": "missing_url",
      "errorMessage": "Staff must add the public post URL before n8n can pull metrics."
    }
  ]
}

6. Debug n8n khi số liệu không cập nhật

Triệu chứngKiểm tra ở đâu?Cách xử lý
Post bị staleAdmin/Data xem Posts staleRun ID.Mở n8n Executions, tìm runId gần nhất, xem node nào đỏ.
Thiếu URLAdmin/Data xem Missing URL posts.Bổ sung public post URL vào booking rồi chạy manual run.
ScrapeCreators trả lỗin8n node HTTP Request tới ScrapeCreators.Xem status code, response body, quota/API key, rồi retry failed execution.
Payload sai schemaNode Normalize hoặc Admin import báo invalid.So payload với contract trong Admin/Data, sửa key như campaignId, bookingId, lastPulledAt.

Rule dễ nhớ: n8n trả lời câu hỏi "job nào chạy, chạy lúc nào, lỗi ở node nào?". ScrapeCreators trả lời câu hỏi "platform trả metric gì?". PULSE trả lời câu hỏi "report và alert đang hiển thị gì?".

7. Share report cho khách hàng

Client View chỉ là campaign-level, read-only. Khách không được edit, không thấy admin, không thấy booking fee/cost nội bộ.

Expiry

Link có ngày hết hạn để tránh khách mở report cũ quá lâu.

Password

Có thể bật password mock cho link nhạy cảm.

Read-only

Khách chỉ xem performance campaign, không sửa được booking hay KPI.

8. Vì sao chọn ScrapeCreators + n8n?

Giải phápKhi nào nên dùng?Ưu điểmĐiểm cần lưu ý
n8n + ScrapeCreatorsDùng chính cho 1990 khi cần kéo public post metrics nhiều lần/ngày.Dễ setup, ít code vận hành, pay-as-you-go, log rõ trong n8n.API key phải nằm trong n8n/backend; cần kiểm soát quota và retry.
Manual CSV importKhi cần nhập nhanh số liệu đã có từ team hoặc client.Không cần API, phù hợp cho campaign nhỏ hoặc dữ liệu bổ sung.Dễ sai tay nếu không chuẩn hoá cột trước khi import.
Connect account/API tokenChưa dùng trong v1 vì KPI dựa trên public post URLs.Có thể phù hợp về sau nếu brand cần dữ liệu sâu hơn.Tăng onboarding và permission complexity.

9. Step-by-step để go live với 1 campaign thật

Go live nên làm theo kiểu "pilot nhỏ nhưng thật": chọn một campaign, nối dữ liệu thật, kiểm tra report với internal team trước, rồi mới share cho client.

Bước 1 - Chốt campaign pilot

Chọn đúng 1 campaign đang live hoặc sắp live. Chuẩn bị client name, campaign name, ngày bắt đầu/kết thúc, danh sách influencer, KPI cam kết và public post URLs.

Bước 2 - Nhập dữ liệu trong Admin

Vào Admin, tạo client, campaign, influencer, booking. Nhập KPI theo platform, contract info, checklist deliverables và những field nào client được xem.

Bước 3 - Chạy backend tối thiểu

Team kỹ thuật chạy backend/API để thay localStorage. Front-end mở bằng ?api=1 để đọc/ghi dữ liệu thật qua API.

Bước 4 - Import workflow n8n

Import workflow mẫu PULSE-Core-Pull-Posts, điền endpoint backend và API key ScrapeCreators trong n8n. API key tuyệt đối không đưa vào browser.

Bước 5 - Chạy manual run trước

Chạy thử 1 campaign bằng manual trigger. Kiểm tra runId, số post OK, missing URL, private/removed, rate limited và payload normalized.

Bước 6 - Kiểm tra PULSE

Mở Campaign Detail, Influencer Detail, Alerts và Client View. KPI actual phải tính từ public posts, layout không vỡ, client không thấy fee/cost/admin.

Bước 7 - Bật lịch tự động

Khi manual run ổn, bật schedule 5-6 lần/ngày trong n8n. Theo dõi execution history trong 24-48 giờ đầu để bắt lỗi quota, timeout hoặc URL sai.

Bước 8 - Share cho client

Tạo client share link read-only, đặt expiry/password nếu cần, mở thử bằng tab ẩn danh, rồi mới gửi cho khách. Google Chat alert để sau khi core data pipeline đã ổn.

Checklist trước khi gửi link: campaign đúng ngày, KPI đúng platform, đủ URL public, n8n run thành công, không có post stale nghiêm trọng, client view không lộ fee/cost, mobile đọc được.