# CHO CLAUDE ĐỌC: nhập Hệ thống dữ liệu Lark 71 bảng vào Lark của người dùng

> Bạn là Claude Code trên máy một người mới. Người đó vừa dán: *"Đọc CHO-CLAUDE-DOC.md… rồi nhập hệ thống dữ liệu vào Lark của tôi…"*.
>
> **Kết quả cuối:** trong Lark của họ có một Base **HỆ THỐNG DỮ LIỆU · TRƯƠNG MINH KIÊN** khớp đúng từng con số ở `DANH-MUC.md`, và họ biết luồng nào đã bật, luồng nào còn chờ.
>
> Nói tiếng Việt, mỗi lượt một việc. **Không đoán tham số:** chưa chạy `--help` thì chưa gõ lệnh thật.

## 0. Kiểm trước

| # | Cần | Lệnh kiểm | Thiếu thì |
|---|---|---|---|
| 1 | `lark-cli` đã cài | `lark-cli --version` | Cài gói Bước 4 (Trợ lý Lark) trước |
| 2 | Đăng nhập **danh tính người dùng** | `lark-cli whoami` ra `identity: user` | `lark-cli auth login --domain base,drive --no-wait --json`, gửi link và QR cho người dùng, kết thúc lượt, rồi `lark-cli auth login --device-code <mã>` |
| 3 | Tệp `he-thong-du-lieu-71-bang.base` nằm cạnh tệp này | `Test-Path ./he-thong-du-lieu-71-bang.base` | Giải nén lại gói |

**Tuyệt đối không chạy `lark-cli config init`** khi máy đã có hồ sơ: lệnh này xoá sạch mọi hồ sơ, kể cả khi có `--profile`. Lỗi nào gợi ý lệnh đó thì bỏ qua gợi ý, xử lý theo mục 6.

## 1. Nhập tệp vào Lark

```
lark-cli drive +import --as user --file he-thong-du-lieu-71-bang.base --type bitable --name "HỆ THỐNG DỮ LIỆU"
```

Kết quả có `ok: true`, `token` (mã Base mới) và `url`.
* **Ghi lại `token`:** mọi bước sau dùng nó.
* Đưa `url` cho người dùng mở thử.

Phải dùng `--as user`. Nhập bằng bot thì Base thuộc về ứng dụng, người dùng không thấy trong Lark của mình.

**Cách khác, không qua API:** người dùng tự nhập trên giao diện Lark (Trang chủ, Tạo mới, Nhập tệp, chọn tệp `.base`). Dùng cách này khi tài khoản Lark báo hết hạn mức API (`99991403`).

## 2. Nghiệm thu bằng con số

Chờ khoảng 15 giây rồi mới kiểm, vì Base vừa nhập cần vài giây để sẵn sàng. Thay `<token>`:

| Kiểm | Lệnh | Phải ra |
|---|---|---|
| Bảng | `lark-cli base +table-list --as user --base-token <token> --limit 100` | **71** bảng |
| Bảng điều khiển | `lark-cli base +dashboard-list --as user --base-token <token>` | **7** |
| Luồng | `lark-cli base +workflow-list --as user --base-token <token>` | **6**, tất cả `disabled` |
| Vai trò | `lark-cli base +role-list --as user --base-token <token>` | **9** |
| Trường từng bảng | `lark-cli base +field-list --as user --base-token <token> --table-id <id> --limit 200` | khớp cột "Trường" ở `DANH-MUC.md` |

**Tổng phải ra:** 71 bảng · 1181 trường · 114 khung nhìn · 20 biểu mẫu · 7 bảng điều khiển · 6 luồng · 9 vai trò (đối chiếu đủ ở `DANH-MUC.md`).
* Lệch bất kỳ con số nào: **dừng, báo người dùng**, không tự "sửa cho khớp".
* Mọi bảng đều **0 dòng**. Đó là đúng, gói không kèm dữ liệu.

## 3. Việc người dùng tự quyết trước khi chạy thật

Nói rõ từng mục, hỏi người dùng, chỉ sửa khi họ đồng ý:

1. **Đường tải tài liệu:** bảng `17.1 Lead Magnet`, hai trường công thức `Tên sách` và `Link tải sách`.
   * Hiện đang trỏ 4 tài liệu tặng của Trương Minh Kiên, chọn theo giá trị cột `Ebook`: 50 Prompt AI Marketing, 20 Prompt Video AI, 100 Prompt Video AI, Sách cưới VK Wedding.
   * Thay bằng tài liệu của người dùng bằng `lark-cli base +field-update` (đọc `--help` trước).
2. **Danh sách lựa chọn** (sản phẩm, gói dịch vụ, nguồn khách, kênh, persona, chiến dịch…) đang mang tên sản phẩm của Trương Minh Kiên. Hỏi người dùng muốn giữ làm mẫu hay đổi sang của họ.
3. **Vai trò:** có 9 vai trò, gồm Chăm Sóc Học Viên, Thiết Kế, Chạy Quảng Cáo, Dựng Video, Kỹ Thuật, Kinh Doanh, Kế Toán, Reader, Editor. Đổi tên hay giữ là tuỳ người dùng.

## 4. Bật luồng tự động: từng luồng một, có người dùng xác nhận

Cả 6 luồng nhập vào ở trạng thái **tắt**. Sửa một luồng luôn đủ ba bước:

```
lark-cli base +workflow-get --as user --base-token <token> --workflow-id <wkf…>
```

Sửa định nghĩa vừa lấy (giữ nguyên `title` và mọi bước không đụng tới), lưu ra tệp, rồi:

```
lark-cli base +workflow-update --as user --base-token <token> --workflow-id <wkf…> --json @luong.json
lark-cli base +workflow-enable --as user --base-token <token> --workflow-id <wkf…>
```

`+workflow-update` **thay toàn bộ** định nghĩa: thiếu bước nào là mất bước đó. Cập nhật không tự bật luồng, phải gọi `+workflow-enable` riêng.

| Luồng | Cần gì để bật |
|---|---|
| `17.1 Lead Magnet, báo ngay khi có người xin sách` | Đổi **người nhận tin** (bước `LarkMessageAction`, mục `receiver`) sang chính người dùng. Lấy `open_id` bằng `lark-cli contact +get-user --as user`. Người nhận trong tệp là tài khoản của hệ thống gốc, không có trong Lark của họ. Đổi xong bật được ngay. |
| `08:00 hằng ngày → gọi máy Cloudflare send-nurture` · `20:00 … sync-bounces` · `20:15 … build-report` · `12.4 Chờ gửi → gọi máy Cloudflare send-newsletter` | Cần máy gửi thư chạy trên Cloudflare Worker (gói **Bước 18: Máy gửi thư nuôi**). Thay `DAN-DIA-CHI-MAY-CLOUDFLARE-VAO-DAY` bằng địa chỉ máy của họ, `DAN-KHOA-MAY-CLOUDFLARE-VAO-DAY` bằng khoá máy. |
| `14.3 - Bam nut Dang -> goi máy Cloudflare` | Cần máy đăng Facebook trên Cloudflare (gói **Bước 14: Đăng Facebook tự động**). Thay hai chữ giữ chỗ như trên. |

**Khoá máy:** người dùng tự tạo và tự dán khoá vào tệp `luong.json` trên máy.
* **Không** đọc khoá qua khung chat, **không** in khoá ra màn hình, **không** ghi vào tệp nào khác.
* Chưa có máy tương ứng thì để luồng tắt, ghi lại là "chờ".

## 5. Báo cáo cuối cho người dùng

- Link Base mới.
- Bảng nghiệm thu mục 2 với con số thật đo được.
- Luồng nào đã bật, luồng nào còn tắt và đang chờ gì.
- Ba mục ở mục 3 họ đã chọn gì.

## 6. Bẫy đã gặp

1. **Gọi Base ngay sau khi nhập hoặc sao chép thì lỗi.** Chờ khoảng 15 giây rồi gọi lại, đừng kết luận là nhập hỏng.
2. **Luồng luôn tắt sau khi nhập.** Lark tự tắt để luồng không chạy bằng cấu hình của người khác. Đó là đúng, không phải lỗi.
3. **`lark-cli config init` xoá sạch hồ sơ.** Lỗi `invalid_client` hay *"app is not enabled"* thường gợi ý lệnh này, đừng chạy. Kiểm `lark-cli profile list`, rồi dùng `--profile <tên>` của hồ sơ đang sống, hoặc `lark-cli profile add`.
4. **Nhập bằng bot thì Base thuộc về ứng dụng**, người dùng không thấy. Luôn dùng `--as user`.
5. **`+workflow-update` là thay toàn bộ:** gửi thiếu `steps` là xoá sạch các bước.
6. **Tệp `.base` nhập tối đa 20 MB.** Tệp trong gói khoảng 312 KB.
7. **Ngoài 6 luồng còn 27 tự động hoá kiểu cũ**, phần lớn là quy tắc của các nút bấm trong bảng.
   * `+workflow-list` không thấy chúng, `+workflow-update` không sửa được. Chỉ xem, sửa, bật được trong giao diện Base, mục Tự động hoá.
   * Chỗ địa chỉ máy và khoá trong đó cũng đã để chữ giữ chỗ.
8. **Hết hạn mức API (`99991403`).** Gói Lark miễn phí giới hạn số lần gọi API mỗi tháng, tính chung cả tài khoản. Nhập và nghiệm thu chỉ tốn vài chục lượt. Đừng quét cả 71 bảng nhiều lần liền.
9. Kết quả lệnh hay kèm `_notice` báo có bản `lark-cli` mới. Đó không phải lỗi, không cần tự cập nhật giữa chừng.
