MVP Node.js + TypeScript để test tự động publish một video private lên TikTok bằng TikTok Content Posting API.
access_token và refresh_token local vào tokens.json./v1/chat/completions.storage/videos/test.mp4 dài 8 giây.SELF_ONLY.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
⚠️ 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).
https://your-ngrok-url.ngrok-free.app/callback/tiktok
user.info.basic (mặc định, không cần review)video.publish (cần app review)video.upload (cần app review)Lưu ý:
.envvideo.publish và video.upload thường cần app review/approval trước khi productionnpm install
cp .env.example .env
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 đó.
.envPORT=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_URL và TIKTOK_REDIRECT_URI phải dùng ngrok/localtunnel URL, KHÔNG phải localhost.
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.
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.
npm run generate-video
Output:
storage/videos/test.mp4
npm run publish
Hoặc truyền topic để 9router sinh caption:
npm run publish -- "AI Content Agent demo"
npm run test-flow
Lệnh này sẽ generate video rồi publish.
.env..env và token nằm trong tokens.json.SELF_ONLY / private trước.video.publish và video.upload đã được bật chưa..env chưa.client_keycode_challengevideo.publish / video.upload cần app review từ TikTok.user.info.basic trước để verify OAuth hoạt động.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.