tiktok-legal-docs

TikTok Auto Publish MVP

MVP Node.js + TypeScript để test tự động publish một video private lên TikTok bằng TikTok Content Posting API.

Features

Prerequisites

Cài FFmpeg trên macOS:

brew install ffmpeg

Cài ngrok:

brew install ngrok
# hoặc tải từ https://ngrok.com/download

Hoặc dùng localtunnel (không cần cài):

npx localtunnel --port 3000

Tạo TikTok Developer App

⚠️ QUAN TRỌNG: TikTok OAuth KHÔNG hỗ trợ localhost hoặc http://.

Bạn phải dùng public HTTPS redirect URI qua tunnel (ngrok/localtunnel).

  1. Truy cập TikTok for Developers.
  2. Tạo app mới hoặc chọn app đã có.
  3. Bật Login Kit trong phần Products/Add-ons.
  4. Vào Login Kit settings hoặc Web platform config.
  5. Thêm Redirect URI (phải là HTTPS public URL):
https://your-ngrok-url.ngrok-free.app/callback/tiktok
  1. Request/enable các scope:
    • user.info.basic (mặc định, không cần review)
    • video.publish (cần app review)
    • video.upload (cần app review)
  2. Lưu lại Client KeyClient Secret.

Lưu ý:

Setup

1. Cài dependencies

npm install
cp .env.example .env

2. Chạy HTTPS tunnel

Option A: Dùng ngrok

ngrok http 3000

Bạn sẽ thấy output kiểu:

Forwarding  https://abc123.ngrok-free.app -> http://localhost:3000

Copy URL https://abc123.ngrok-free.app.

Option B: Dùng localtunnel

npx localtunnel --port 3000

Output:

your url is: https://your-tunnel-id.loca.lt

Copy URL đó.

3. Điền .env

PORT=3000
BASE_URL=https://abc123.ngrok-free.app
TIKTOK_CLIENT_KEY=awetjwf1heg156ci
TIKTOK_CLIENT_SECRET=zj3i0JJa98H2t0W1HXp1Qbwd1Nftjxwc
TIKTOK_REDIRECT_URI=https://abc123.ngrok-free.app/callback/tiktok
ROUTER9_BASE_URL=https://api.9router.com
ROUTER9_API_KEY=your_9router_api_key
ROUTER9_MODEL=gpt-4o-mini
ROUTER9_PROVIDER=openai

⚠️ BASE_URLTIKTOK_REDIRECT_URI phải dùng ngrok/localtunnel URL, KHÔNG phải localhost.

4. Cập nhật TikTok Developer Portal

Vào app TikTok của bạn → Login Kit settings → thêm redirect URI:

https://abc123.ngrok-free.app/callback/tiktok

Phải khớp 100% với .env.

Chạy OAuth server

Terminal 1 - chạy ngrok:

ngrok http 3000

Terminal 2 - chạy app:

npm run dev

Mở trình duyệt với ngrok URL (không phải localhost):

https://abc123.ngrok-free.app/auth/tiktok

Sau khi TikTok callback thành công, token sẽ được lưu vào tokens.json.

Tạo video test

npm run generate-video

Output:

storage/videos/test.mp4

Publish video private lên TikTok

npm run publish

Hoặc truyền topic để 9router sinh caption:

npm run publish -- "AI Content Agent demo"

Test end-to-end flow

npm run test-flow

Lệnh này sẽ generate video rồi publish.

Lưu ý quan trọng

Troubleshooting

Lỗi client_key

Lỗi code_challenge

OAuth success nhưng publish lỗi permission

TikTok API note

TikTok Content Posting API có thể thay đổi endpoint/flow theo thời gian. Code đã tách abstraction trong src/tiktok-publish.ts và có TODO để verify endpoint với docs hiện hành trước khi production.