Install
openclaw skills install @thinhbuiii/meta-long-lived-tokenĐổi Meta short-lived token (~1-2h) sang long-lived token (~60 ngày) qua Graph API, kiểm tra hạn, lưu vào env gateway và nhắc gia hạn. READ-ONLY với ads.
openclaw skills install @thinhbuiii/meta-long-lived-tokenĐổi short-lived user token (~1–2 giờ) thành long-lived token (~60 ngày) qua Graph API chính thức, kiểm tra hạn và lưu an toàn vào env của gateway.
🔒 An toàn: skill này CHỈ gọi endpoint
oauth/access_token(đổi token) +debug_token(kiểm tra). KHÔNG đọc/sửa dữ liệu quảng cáo. KHÔNG gọi POST/DELETE tới ads.
Khi người dùng gửi tin nhắn dạng:
Em gia hạn token thêm 60 ngày nhé.
ID App: <APP_ID>
Secrect key: <APP_SECRET>
Agent PHẢI hiểu là: đổi token hiện tại (short-lived) sang long-lived bằng App ID + App Secret đã cung cấp.
APP_ID và APP_SECRET từ tin nhắn (chấp nhận ghi đúng/sai chính tả như "Secrect key", "Secret", "App Secret").META_ACCESS_TOKEN). Đây là fb_exchange_token đầu vào.
exec: echo $META_ACCESS_TOKEN — KHÔNG echo ra chat.debug_token (mục 4).expires_at), số ngày còn lại.⚠️ Nếu THIẾU
APP_IDhoặcAPP_SECRET→ hỏi lại đúng cái còn thiếu, KHÔNG tự đoán. ⚠️ Nếu token hiện tại đã là long-lived (expires_at=0hoặc còn xa) → vẫn thực thi re-exchange để "gia hạn thêm 60 ngày" như yêu cầu, và báo rõ hạn mới. ⚠️ Chỉ thực thi khi người gửi là owner. Nếu không chắc → hỏi xác nhận trước khi ghi config.
| Thứ | Lấy ở đâu |
|---|---|
SHORT_LIVED_TOKEN | Token tạm từ Graph API Explorer (xem mục 2) — sống ~1–2h |
APP_ID | App ID của app Facebook (developers.facebook.com → App settings → Basic) |
APP_SECRET | App Secret cùng trang (bấm "Show") |
⚠️ Cần cả APP_SECRET — không có secret thì KHÔNG đổi được sang long-lived. Nếu app chưa có secret → vào App settings → Basic để lấy.
developers.facebook.com/tools/explorerads_read (thêm ads_management nếu cần ghi; thêm pages_manage_posts, pages_read_engagement nếu dùng page)EAA...) — token này chỉ sống ~1–2hcurl -s -G "https://graph.facebook.com/v21.0/oauth/access_token" \
--data-urlencode "grant_type=fb_exchange_token" \
--data-urlencode "client_id=$APP_ID" \
--data-urlencode "client_secret=$APP_SECRET" \
--data-urlencode "fb_exchange_token=$SHORT_LIVED_TOKEN"
Kết quả trả JSON: {"access_token":"EAA...","token_type":"bearer","expires_in":5184000}
→ expires_in ~5.184.000 giây ≈ 60 ngày. Đây là token long-lived cần lưu.
⚠️ Không bao giờ nhét token thẳng vào URL bằng dấu ngoặc kép → shell cắt chuỗi → lỗi 4xx GIẢ. Luôn dùng
curl -G --data-urlencode "...=$TOKEN".
curl -s -G "https://graph.facebook.com/v21.0/debug_token" \
--data-urlencode "input_token=$LONG_LIVED_TOKEN" \
--data-urlencode "access_token=$LONG_LIVED_TOKEN"
Đọc data:
is_valid: true → OKexpires_at: epoch giây ngày hết hạn (~60 ngày tới). Nếu 0 → token không đặt ngày hết hạn (một số app dev/test).data_access_expires_at: mốc chặn truy cập dữ liệu (thường xa hơn expires_at) — theo dõi mốc này làm mốc phụ.scopes: phải có quyền cần dùng (ads_read...).META_ACCESS_TOKEN (và META_AD_ACCOUNT_ID nếu có).debug_token với $META_ACCESS_TOKEN để xác nhận.debug_token, tính số ngày còn lại:
is_valid: false hoặc lỗi 190 → token chết, báo owner lấy token mới ngay.| Câu hỏi | Trả lời |
|---|---|
| Đổi long-lived gia hạn thêm bao nhiêu? | Từ ~1–2h lên ~60 ngày → thêm ~59 ngày |
| Trần tối đa được bao nhiêu? | ~60 ngày cho token user, không vượt được |
| Hết 60 ngày thì sao? | Đổi lại (re-exchange) → thêm ~60 ngày/lần |
| Có loại nào không hết hạn? | System User token (Business Manager) — tuỳ cấu hình |
| Lỗi | Nguyên nhân | Cách xử lý |
|---|---|---|
(#190) Error validating access token | Token chết/sai | Lấy short-lived mới ở Graph Explorer, đổi lại từ mục 3 |
(#200) Provide valid app ID | Thiếu access_token hoặc sai client_id | Kiểm tra lại APP_ID + có truyền access_token |
| Lỗi 4xx "giả" dù token đúng | Token nhét thẳng vào URL bị shell cắt | Dùng curl -G --data-urlencode |
expires_in trả về rất ngắn | Đang đổi từ token đã là long-lived, hoặc app chưa cấu hình đúng | Thử lại với short-lived token mới |
| Không có APP_SECRET | App thiếu secret | App settings → Basic → Show secret |