# Công thức cho app nhiều tài khoản

> App đăng bài, đọc hộp thư hay thu thập dữ liệu cho nhiều tài khoản mạng xã hội nên dùng Browlix thế nào — mỗi tài khoản một liên kết, kiểm danh tính trước, giữ trình duyệt theo việc, thử thách giao cho người, trạng thái của app do app giữ.

Các công thức này dành cho app làm việc với nhiều tài khoản trên các trang như Facebook, Instagram, LinkedIn hay X. Chúng mô tả cách dùng Browlix, không phải cách tự động hoá một trang cụ thể. Mọi đoạn code chúng dựa vào nằm trong [app mẫu](https://browlix.com/docs/sample-app) và [Chuyển từ hồ sơ Chrome trên máy](https://browlix.com/docs/migrate-from-chrome), đều chạy thật trên máy lab của Browlix.

Hãy dùng trong phạm vi điều khoản của từng trang và [chính sách sử dụng](https://browlix.com/legal/acceptable-use). Browlix không hứa rằng trang sẽ không bao giờ hạn chế tài khoản.

## 1. Mỗi tài khoản một liên kết

Gắn mỗi tài khoản một lần: `bindings.create` với `app_id` của anh và `external_account_id` của tài khoản, trỏ tới hồ sơ của nó. Tìm bằng `bindings.list` trước khi tạo, và khi gặp `CONFLICT` thì dùng liên kết đã được tạo trước (app mẫu có đoạn này). Giữ `metadata` gọn và không chứa bí mật — khoá trông như thông tin đăng nhập bị từ chối.

Gom hồ sơ theo nhóm hoặc khách hàng bằng `groups.*` và gắn nhãn bằng `tags.*`; cả hai đều đổi tên hoặc xoá được qua API.

## 2. Kiểm danh tính trước mọi thao tác

Trình duyệt mở được không chứng minh tài khoản nào đang đăng nhập. Sau khi gắn vào, đọc tài khoản đang đăng nhập từ chính trang và so với `external_account_id` của liên kết trước khi làm gì:

| Trang | Đọc từ trang sau khi tải xong |
|---|---|
| Facebook | ID số của người dùng đang đăng nhập |
| Instagram | Tài khoản người xem đang đăng nhập |
| LinkedIn | Mã định danh (URN) của thành viên đang đăng nhập |
| X | Người xem đang đăng nhập, đọc lại sau mỗi lần mở |

Nếu không khớp, hoặc chưa ai đăng nhập, hãy dừng: không đăng, không đọc, không thử lại dưới liên kết đó. Đánh dấu tài khoản trong app và để một người xem.

## 3. Giữ trình duyệt theo từng việc

- `acquireSession` với `holderRef` là tên tiến trình worker. SDK tự gia hạn trong lúc việc chạy.
- Giữa hai việc của cùng tài khoản, `detach({ keepWarmSeconds })` giữ trình duyệt mở để việc sau bắt đầu ngay.
- Cuối ngày, nhả với `keepWarmSeconds: 0` rồi `stopSession`: dữ liệu được niêm phong và đồng bộ sau khi trình duyệt đóng.
- `BUSY` nghĩa là một người hoặc app khác đang giữ trình duyệt. Chờ rồi thử lại; không bao giờ giành.
- `FENCED` nghĩa là quyền giữ của anh đã bị thay. Dừng thao tác trên trang đó ngay — worker khác đang giữ.

Xem [App giữ trình duyệt](https://browlix.com/docs/app-sessions) cho đủ luật giữ phiên.

## 4. Thử thách giao cho người

Khi trang hỏi mã, xác nhận, captcha hay kiểm tra danh tính, hãy dừng việc và giao tài khoản cho một người, họ hoàn tất qua màn xem trực tiếp trên web trong lúc app chờ. Browlix không giải captcha và app của anh cũng không nên thêm.

## 5. Trạng thái của app do app giữ

Hàng đợi việc, lịch chạy, danh sách không liên hệ, hạn mức theo tài khoản và hộp thư chờ gửi thuộc về app. Phiên đóng không có nghĩa việc xong: ghi kết quả việc trong app trước khi nhả trình duyệt, và làm việc gửi đi có khoá chống lặp ở phía app để một việc chạy lại không bao giờ gửi hai lần.

## 6. Khi có sự cố

| Tín hiệu | Cách làm |
|---|---|
| `RECOVERY_REQUIRED` | Phiên trước kết thúc không chắc chắn. Quyết định bằng `sessions.recover` rồi mở lại — xem [Phiên](https://browlix.com/docs/sessions) |
| Sự kiện `session.failed`, hoặc phiên rời trạng thái `ready` | Dừng việc; thử lại sau |
| Máy mất kết nối | Quyền giữ hết hạn. Hồ sơ mở được trên máy khác khi dữ liệu của phiên cuối đã đồng bộ; trước đó mở sẽ nhận `SYNC_PENDING` |

Theo dõi sự kiện bằng [`sessions.events`](https://browlix.com/en/docs/reference/sessions.events) hoặc [webhook](https://browlix.com/docs/webhooks).

## 7. Chuyển tài khoản vào

Chuyển tài khoản từ thư mục Chrome trên máy từng cái một, kiểm danh tính từng cái và giữ thư mục cũ đến khi chắc chắn — [Chuyển từ hồ sơ Chrome trên máy](https://browlix.com/docs/migrate-from-chrome).

## Báo cho Browlix điều còn thiếu

Nếu thao tác anh cần chưa có trong API, agent AI đang làm tích hợp có thể gửi bằng `feedback_submit`, hoặc anh tự gửi — xem [Phản hồi từ agent](https://browlix.com/docs/feedback).
