TF
T-Fluencers Docs
Quay lại Wiki

Thông báo ngân sách đạt ngưỡng#

Mục tiêu: DevOps hiểu cơ chế budget alert — ngưỡng, channel gửi, và troubleshoot.

Mục tiêu#

  • Hiểu flow alert: budget campaign chạm ngưỡng → notify Finance + Admin.
  • Biết các alert threshold mặc định.
  • Debug khi alert không tới.

Điều kiện tiên quyết#

  • DevOps role.
  • Access backend logs.

Cơ chế alert#

Trigger#

Job budget_check chạy mỗi 15 phút:

  1. Query tất cả campaigns active, isUnlimited=false.
  2. Tính used / limit * 100.
  3. Nếu ≥ alert threshold (config per-campaign) → trigger alert event.
  4. Insert vào notification queue.

Levels#

Ngưỡng mặc định (có thể override per-campaign):

Level%ChannelAudience
Warning70%Slack + EmailAdmin
Critical90%Slack + Email + SMSFinance + Admin
Exhausted100%Slack + Email + SMS + PagerDutyOn-call

Khi đạt 100%, job block_create_reward auto-trigger để pause cộng tiền.

Các kênh gửi#

Email#

  • Template: budget_alert.html.
  • Target: staff có role Finance/Admin, email nội bộ.

Slack#

  • Channel: #tcb-budget-alert (hoặc tùy config).
  • Webhook config trong env SLACK_BUDGET_WEBHOOK.

SMS (via Twilio/provider)#

  • Chỉ dùng cho Critical + Exhausted.
  • Danh sách số điện thoại staff trong config.

PagerDuty#

  • Chỉ Exhausted.
  • Service key trong secret.

Cấu hình#

Per campaign#

Trong Admin Portal → Chi tiết thử thách → Ngân sách:

  • Alert threshold — % (default 80 nếu không set).

Global (per partner)#

Config service level:

  • Channels enabled.
  • Threshold levels.
  • Audience routing.

File config: config/budget-alert.yaml (ví dụ).

Cách debug#

1. Alert không tới — verify job#

# Check job log
kubectl logs -l app=tf-worker | grep "budget_check"

# Expected output mỗi 15 phút

Nếu không có log → job không chạy. Check cron scheduler.

2. Job chạy nhưng không trigger alert#

  • Check alert threshold per campaign có set không.
  • Check % current: used/limit * 100 có thực sự ≥ threshold?

3. Alert triggered nhưng không tới Slack#

  • Webhook URL đúng?
  • Channel tồn tại?
  • Test manual: curl webhook + message test.

4. Email không tới#

  • SMTP config.
  • Check spam.
  • Email của staff có active?

5. SMS không tới#

  • Số điện thoại format đúng (+84...).
  • Twilio balance đủ?
  • Rate limit?

Các bước thực hiện (ad-hoc)#

1. Test alert pipeline#

# Force trigger budget check với campaign test
kubectl exec -it worker -- \
  go run cmd/admin/main.go trigger-budget-check --campaign=test123

2. Xem lịch sử alert đã gửi#

# Query DB
db.budget_alerts.find({
  campaign_id: ObjectId("..."),
  sent_at: {$gte: new Date("2026-04-01")}
})

3. Resend alert (sau fix bug)#

kubectl exec -it worker -- \
  go run cmd/admin/main.go resend-alert --alert_id=<id>

Chi tiết từng bước#

De-duplication#

Hệ thống không gửi alert trùng:

  • Mỗi campaign chỉ gửi 1 alert/level/ngày.
  • Nếu đã alert Warning, không gửi lại Warning trong 24h.
  • Upgrade level (Warning → Critical) thì gửi mới.

Alert fatigue prevention#

  • Gộp multiple campaigns vào 1 email digest (hourly).
  • Slack threading.
  • SMS chỉ cho critical level.

Integration với Block Reward#

Khi level Exhausted:

  • Auto set blockCreateReward=true cho campaign.
  • Notify Admin "Budget exhausted, reward cộng tiền đã pause".
  • Admin phải top-up + unblock manual.

Lỗi thường gặp#

1. Alert "chạm 100%" nhưng thực tế 90%#

  • Budget calculation bug. Check code calculate_budget_used.
  • Có reconciliation chạy không? Đã cộng tiền chưa?

2. Job budget_check lag (chạy > 15 phút 1 lần)#

  • Queue backlog. Scale worker.
  • DB query chậm. Index missing?

3. Staff complain "tôi không nhận được alert"#

  • Check họ trong audience list?
  • Email đúng không?
  • Slack channel join chưa?

4. Alert spam (gửi cùng 1 alert nhiều lần)#

  • De-dup logic fail. Check DB có record sent không.
  • Có thể nhiều worker chạy parallel → race condition. Lock DB.

5. Alert chậm (budget 100% rồi mới alert 20 phút sau)#

  • Job frequency thấp (15 phút). Acceptable hay cần tăng?
  • Trade-off: tần suất cao = load DB cao.

Câu hỏi thường gặp (FAQ)#

Per-user budget alert có không?

Không. Hệ thống alert theo campaign, không theo Influencer. Khi user chạm budgetPerUser, backend block reward cá nhân, không gửi alert ra ngoài.

Influencer có biết budget sắp hết không?

Không direct. Nhưng khi budget hết, họ submit bài vẫn nhận (chờ duyệt) nhưng không được cộng tiền → sẽ thấy trên UI "Đang chờ duyệt" nhưng không cộng.

Custom channel (Zalo) cho alert?

Có thể setup — cần DevOps thêm integration. Hiện mặc định Slack/Email/SMS.

Xóa alert đã gửi có được không?

Không cần xóa. Để lại cho audit.

On-call rotation cho Exhausted level?

Setup qua PagerDuty với schedule rotation.

Liên kết liên quan#


Tham khảo SRS: admin-portal/08-thanh-toan