← Tất cả bài viết
Hướng dẫn

Trả lời bình luận TikTok qua API: xác minh bài đăng và bình luận cấp cao nhất

Để trả lời bình luận TikTok qua UnifyPort, hãy chọn bài đăng đã xác minh thuộc tài khoản đang kết nối, chọn bình luận đã xác nhận ở cấp cao nhất, rồi gọi POST /v1/accounts/{account_id}/posts/comments/reply với post_id, comment_id và text. Đây không phải thao tác gửi DM hay công cụ trả lời trên video bất kỳ. accepted chỉ xác nhận yêu cầu được chấp nhận, không bảo đảm hiển thị công khai, gửi đến người dùng hoặc phát sinh webhook.

Điểm chính

  • Lưu tài khoản, bài đăng và bình luận cùng nhau; giữ ID của nền tảng dưới dạng chuỗi.
  • Danh sách chỉ bao gồm bình luận cấp cao nhất trên bài đăng của chính tài khoản, không phải toàn bộ lịch sử trả lời lồng nhau.
  • Thiếu parent_comment_id không đủ để kết luận mục tiêu là bình luận cấp cao nhất.
  • Tách lần đọc có thể thử lại khỏi lần ghi chưa rõ kết quả. Không tự gửi lại khi yêu cầu trả lời hết thời gian chờ hoặc chưa xác nhận được kết quả ghi.

Phân biệt API bình luận với API hộp thư

Tài liệu chính thức Query Video Comments của TikTok mô tả thao tác đọc của Research API: video_id chọn bình luận, comment_id chọn câu trả lời, sử dụng scope research.data.basic. Đây là hợp đồng API khác với việc đăng câu trả lời qua tài khoản đã kết nối. Không sao chép ID dạng số, tham số phân trang hay header xác thực của API đó sang UnifyPort.

Bài so sánh TikTok Business Messaging với hộp thư kết nối bằng QR cũng giải quyết kiến trúc tin nhắn riêng. Bình luận công khai không phải đích hội thoại của API gửi tin nhắn thông thường.

Hướng dẫn này dùng giao diện không chính thức của UnifyPort cho bài đăng thuộc chính tài khoản TikTok đang đăng nhập. Nếu chưa kết nối, hãy hoàn thành quy trình xác thực TikTok bằng QR trước. Kiểm tra trạng thái đã xác thực và runtime_status: running trước khi thao tác. Giữ API key của workspace ở backend và kiểm tra quyền của nhân viên đối với tài khoản đã chọn. Dù dùng chung giao diện với WhatsApp hoặc Zalo, không suy ra rằng các kênh đó có cùng khả năng xử lý bình luận.

Đọc bài đăng và bình luận trước khi bật nút Trả lời

Công việcPhương thức và đường dẫn APIGiới hạn
Tìm bài đăng của tài khoảnGET /v1/accounts/{account_id}/postsChỉ bài đăng của tài khoản đang đăng nhập
Kiểm tra một bài đăngPOST /v1/accounts/{account_id}/posts/infoGửi post_id trong JSON và xác minh quyền sở hữu
Liệt kê bình luậnPOST /v1/accounts/{account_id}/posts/comments/listChỉ cấp cao nhất; tham số phân trang nằm trong JSON
Trả lờiPOST /v1/accounts/{account_id}/posts/comments/replyMục tiêu cấp cao nhất đã xác nhận trên bài đăng của tài khoản

Bắt đầu bằng liệt kê bài đăng, sau đó dùng lấy thông tin bài đăng cho mục đã chọn. Một URL video được dán vào không phải bằng chứng sở hữu.

Với danh sách bình luận cấp cao nhất, gửi post_id và limit. Giá trị mặc định của limit là 20, phạm vi hợp lệ 1–50. Bỏ cursor ở trang đầu; chuỗi rỗng không hợp lệ. Khi data.has_more là true, truyền nguyên data.next_cursor thành cursor của yêu cầu tiếp theo. Trang cuối không trả về cursor.

Gắn từng chuỗi phân trang với tài khoản và bài đăng ban đầu. Chọn theo ID được trả về, không dùng vị trí trong mảng hay tên hiển thị. Một trang ít mục không phải lý do bỏ qua has_more; đọc thất bại cũng không có nghĩa là danh sách rỗng.

Các trường nội dung và tác giả chỉ xuất hiện khi có dữ liệu đáng tin cậy. Thiếu text nghĩa là chưa biết, không phải bình luận rỗng. Không thay created_at bị thiếu bằng thời điểm ứng dụng quan sát dữ liệu. Giữ post_id là chuỗi số nguyên dương thập phân không có số 0 ở đầu; đừng chuyển ID bài đăng hoặc bình luận thành JavaScript number.

Gửi một câu trả lời đã duyệt

Trước khi gửi, hiển thị bài đăng, bình luận, danh tính tài khoản và bản nháp cho người thao tác. Nên lưu các mục tiêu cùng nội dung đã duyệt trong một bản ghi ứng dụng để việc tải lại danh sách không đổi đích ghi.

Hàm minh họa dưới đây gọi API trả lời bình luận cấp cao nhất đúng một lần. Truyền ID thật từ lựa chọn đã kiểm tra và API key phía máy chủ. Đây không phải hệ thống duyệt hoàn chỉnh, không xác minh quyền sở hữu tại máy cục bộ và không tự thử lại.

async function replyToTikTokComment({
  apiKey, accountId, postId, commentId, text
}) {
  if (typeof postId !== 'string' || !/^[1-9][0-9]*$/.test(postId)) {
    throw new Error('Use the returned post ID string');
  }
  if (typeof commentId !== 'string' || !commentId.trim() ||
      typeof text !== 'string' || !text.trim()) {
    throw new Error('Select a comment and provide reply text');
  }
  if (typeof accountId !== 'string' || !accountId.trim()) {
    throw new Error('Select the connected account');
  }
  const response = await fetch(
    `https://api.unifyport.ai/v1/accounts/${encodeURIComponent(accountId)}/posts/comments/reply`,
    {
      method: 'POST',
      headers: {
        'X-Api-Key': apiKey,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        post_id: postId, comment_id: commentId, text
      })
    }
  );
  const result = await response.json();
  return { httpStatus: response.status, result };
}

Kiểm tra khoảng trắng chỉ từ chối đầu vào trống, không thay đổi nội dung đã duyệt. Nếu lỗi mạng hoặc lỗi phân tích phản hồi xảy ra sau khi gửi, hãy giữ kết quả ở trạng thái chưa xác định. Không bọc hàm trong vòng lặp tự thử lại POST.

Diễn giải đúng kết quả

Kết quảÝ nghĩaCách xử lý đề xuất
200, data.status: acceptedYêu cầu được chấp nhậnLưu kết quả, không gắn nhãn “đã hiển thị công khai”
data.comment tùy chọnCó thông tin xác nhận đáng tin cậy về bình luận mớiLưu nếu có; không coi là điều kiện bắt buộc để công nhận đã chấp nhận
403 post_inaccessibleKhông truy cập được bài đăng; chưa xác định nguyên nhânDừng và kiểm tra quyền truy cập, không đánh dấu đã xóa
404 post_not_foundĐã xác minh bài đăng không tồn tạiLàm mới lựa chọn
404 comment_not_foundKhông tìm thấy mục tiêu sau xác minhChọn lại; không có nghĩa đã tìm mọi câu trả lời lồng nhau
501 unsupported_by_providerKênh không hỗ trợ hoặc mục tiêu được xác nhận là câu trả lời lồng nhauDừng thao tác, không âm thầm chuyển sang DM
502 reply_post_comment_failed khi chưa xác nhận được kết quả sau ghiChưa biết kết quả ghiGiữ để kiểm tra, không tự gửi lại

Xác minh chưa đầy đủ sẽ chặn thao tác ghi. Có thể thử lại việc đọc khi xác minh chưa hoàn tất, nhưng không vì thế mà lần trả lời chưa rõ kết quả có thể gửi lại an toàn. Lần đọc sau không thấy câu trả lời không chứng minh rằng nó chưa từng được tạo, đặc biệt khi API danh sách chỉ trả bình luận cấp cao nhất.

Tuần tự hóa các lần ghi cho cùng mục tiêu trong ứng dụng, chặn nhấp đúp và lưu request_id cùng kết quả HTTP. Đây là biện pháp cục bộ, không phải bảo đảm idempotency của API. Tránh đưa nội dung bình luận khách hàng hay API key vào log dùng chung.

Thêm thông báo như một lớp tiếp nhận riêng

Danh mục sự kiện chuẩn có post.comment.created. Chỉ đăng ký sự kiện không bật polling bình luận: mặc định polling bị tắt. Đặt provider_data.enable_comment: true cần khởi động hoặc kết nối lại; thay đổi khi đang online cần kết nối lại. Trước hết xác nhận môi trường hỗ trợ và bộ nhận đã sẵn sàng. Khởi động thành công không tự chứng minh cấu hình đã áp dụng; tắt polling cũng không thu hồi sự kiện đang nằm trong hàng đợi.

Coi thông báo là tín hiệu best-effort có thể chậm, trùng, sai thứ tự hoặc thiếu, không phải lịch sử đầy đủ hay xác nhận bảo đảm cho mỗi câu trả lời. Kiểm tra chữ ký theo hợp đồng gửi webhook và loại trùng theo ID sự kiện. Thông báo không có parent_comment_id vẫn cần xác minh mục tiêu trước khi trả lời.

Câu hỏi thường gặp

Có thể trả lời bình luận trên video TikTok bất kỳ không?

Không qua quy trình này. Các thao tác xác minh bài đăng thuộc tài khoản đang đăng nhập và chỉ cho phép trả lời bình luận cấp cao nhất đã xác nhận.

accepted có nghĩa câu trả lời đã hiển thị không?

Không. Chấp nhận không bảo đảm hiển thị hay gửi đến người dùng. Thông tin xác nhận bình luận là tùy chọn và webhook cũng không được bảo đảm.

Có thể phân trang toàn bộ câu trả lời lồng nhau không?

Không. API danh sách của UnifyPort chỉ bao gồm cấp cao nhất. Research API của TikTok là hợp đồng đọc riêng, không phải endpoint có thể thay thế trực tiếp.

Cần kiểm thử gì trước khi bật tính năng?

Kiểm thử bài đăng của tài khoản, bài đăng không truy cập được, nhiều trang, giữ nguyên ID dạng chuỗi, mục tiêu lồng nhau, nhấp nhiều lần và kết quả mạng chưa rõ. Đây là các kiểm tra nghiệm thu đề xuất, không phải kết quả đã chạy.

Bước tiếp theo và nguồn

Trước tiên xây dựng chức năng chọn chỉ đọc bằng danh sách bình luận cấp cao nhất, sau đó mới bật gửi trả lời.

Nguồn được kiểm tra ngày 2026-10-26:

UnifyPort API

Biến tích hợp nhắn tin thành một pipeline sản phẩm ổn định.

Bắt đầu bằng cách gửi qua một API, rồi đưa mọi tin nhắn inbound trở lại hệ thống kinh doanh bằng sự kiện chuẩn.