Bỏ qua, tới nội dung chính

Tự động hóa

Node lưu và xử lý dữ liệu

Mười node nhóm Biến: gán, xoá, tính toán, xử lý chuỗi, clipboard, gọi HTTP, đọc hộp thư, hỏi AI và sinh mã 2FA — kèm bẫy hay dính.

6 phút đọc

Mười trong mười hai node của nhóm Biến làm một trong ba việc: giữ một giá trị, biến đổi giá trị đó, hoặc lấy giá trị từ bên ngoài máy về. Đây chính là thứ biến một kịch bản chỉ chạy được cho một tài khoản thành kịch bản chạy được cho hai chục tài khoản. Hai node còn lại đều là đọc chữ — đọc trên màn hình, hoặc đọc từ tệp — và nằm ở Các node đọc màn hìnhNode cho ứng dụng và tệp.

Luật chung cho cả nhóm

Mọi node ở đây đều ghi kết quả vào một biến có sẵn từ trước, và ô chọn chỉ hiện biến của chính kịch bản, đúng kiểu: "Chỉ chọn được biến của kịch bản (không phải biến người chạy nhập) và đúng kiểu. Tạo biến mới ở panel Biến."

Tạo biến bằng nút Biến trên thanh công cụ; chọn loại biến nào thì đọc ở Biến và bộ dữ liệu.

Giữ giá trị, đổi giá trị

Gán biến (Set variable)

Dùng khi cần đặt giá trị đầu cho một biến, hoặc chép biến này sang biến khác. Ô Giá trị nhận chữ, và nhận cả biến nằm trong chữ đó: "Chữ cố định, chèn được {{tenBien}}. Muốn chép biến này sang biến khác thì để đúng một {{tenBienNguon}}. Biến đích kiểu Danh sách/JSON thì nhập JSON hợp lệ, ví dụ ["a","b"]".

Chỉ chép được khi trong ô có đúng một tham chiếu đó, không kèm gì khác. Chào {{name}} là một câu, không phải phép chép.

Xoá giá trị biến (Clear variable)

Dùng trong vòng lặp, nơi mỗi lượt biến được ghi lại một lần và giá trị sót của lượt trước sẽ bị đọc nhầm thành kết quả của lượt này. Node chỉ đưa giá trị về rỗng, không làm gì thêm: "Chỉ xoá giá trị. Khai báo biến vẫn nằm ở tab Biến".

Tính toán (Calculate)

Dùng để đếm và cộng dồn — số thứ tự lượt chạy, một tổng tiền, một vị trí: "Chỉ số học: + - * / %, ngoặc, và {{biến}}. Máy dùng bộ tính an toàn, không chạy code. Ví dụ: ({{price}} * {{qty}}) + 500".

Không chỗ nào khác {{ }} tính toán được — viết {{count + 1}} là không chạy — nên mọi phép tính đều qua node này.

Xử lý chuỗi (Transform text)

Bảng thuộc tính node Xử lý chuỗi với danh sách Phép xử lý đang mở: Trích theo regex, Cắt chuỗi, Thay thế, Cắt khoảng trắng đầu/cuối, Tách thành danh sách, IN HOA, in thường

Hễ node nào vừa đọc được chữ về là nghĩ tới node này, vì chữ thô hiếm khi đúng là phần bạn cần. Nó nhận một Chuỗi nguồn"Chuỗi cần xử lý — thường là {{biến}} do node khác ghi vào." — rồi:

  • Bóc một đoạn ra theo mẫu tìm kiếm nâng cao (gọi là regex: một công thức ngắn mô tả hình dạng đoạn chữ bạn muốn). (\d{6}) nghĩa là "sáu chữ số liền nhau" — đó là cách lấy mã trong một tin nhắn ra. "Regex — kết quả lưu là nhóm bắt (…) đầu tiên. Không khớp thì đi nhánh Lỗi."
  • Cắt theo vị trí, đếm từ 0.
  • Thay thế"Thay TẤT CẢ chỗ khớp. Bỏ trống = xoá chuỗi tìm được."
  • Tách thành danh sách"Tách chuỗi thành danh sách theo dấu này — biến đích phải là kiểu danh sách (string[])."
  • Đổi hoa thường.

Chữ không khớp mẫu không phải kết quả rỗng mà là một lần thất bại: lượt chạy đi ra bằng đầu ra Lỗi chứ không chạy tiếp.

Clipboard của máy

Đọc clipboard (Read clipboard)

Dùng khi chính app làm việc copy hộ bạn — một link chia sẻ, một mã giới thiệu. Nội dung đang nằm trong clipboard của máy được lấy vào biến.

Ghi clipboard (Write clipboard)

Dùng để khỏi phải gõ. Nạp sẵn clipboard thì app dán cả chuỗi dài một phát, thay vì để kịch bản gõ từng ký tự: nhanh hơn và không gõ sai. Ô nhập chứa "Nội dung sẽ nằm trong clipboard của máy, chèn được {{tenBien}}".

Lấy giá trị từ bên ngoài về

Gọi HTTP (HTTP request)

Dùng khi kịch bản cần hỏi hệ thống của chính bạn một điều gì đó — lượt này dùng tài khoản nào — hoặc cần báo ngược về.

"Máy Android gọi một địa chỉ HTTP" — lệnh gọi đi ra từ điện thoại, không phải từ máy chủ của chúng tôi, nên đầu bên kia nhìn thấy đúng đường mạng mà máy đó đang dùng. Nếu điều đó quan trọng thì kiểm trước: Kiểm tra proxy máy đang thật sự dùng.

Điền phương thức, liên kết, headers dạng JSON và nội dung gửi đi nếu cần, cùng biến để lưu kết quả. Hai thiết lập quyết định thế nào là thất bại: "Máy chủ không trả lời trong thời gian này thì đi nhánh Lỗi""Bật thì máy chủ trả mã lỗi sẽ đi nhánh Lỗi; tắt thì vẫn đi nhánh Tiếp".

Đọc hộp thư (Read mailbox)

Dùng cho mã hoặc link gửi qua email. Node đăng nhập hộp thư bằng IMAP và đọc "thư MỚI NHẤT khớp bộ lọc" — lọc theo tiêu đề hoặc người gửi. Cứ để Chỉ mail chưa đọc bật như mặc định: "tắt là dễ bắt nhầm OTP cũ". Mẫu bóc tách cắt lấy đúng đoạn mã trong thư: "Để trống thì lưu cả nội dung thư; có mẫu thì lưu phần trong ngoặc đầu tiên".

Ô mật khẩu ghi là Mật khẩu ứng dụng chứ không phải mật khẩu thường, và đó là cố ý: phần lớn nhà cung cấp mail bắt tạo mật khẩu riêng cho chương trình, thay vì đưa mật khẩu bạn vẫn dùng để đăng nhập.

Hỏi AI (Ask AI)

Dùng khi một bước cần suy xét chứ không theo được luật cứng. Bạn cấp nhà cung cấp, tên model viết đúng như nhà cung cấp đặt ("Gõ đúng tên model của nhà cung cấp, ví dụ gpt-4o-mini"), API key của bạn và câu hỏi; câu trả lời rơi vào một biến.

Câu trả lời mỗi lần một cách diễn đạt, nên đừng bao giờ rẽ nhánh theo đúng một câu chữ. Hãy hỏi một thứ thật ngắn rồi gọt tiếp bằng Xử lý chuỗi. Node này khác hẳn Tạo kịch bản bằng AI — cái kia viết ra kịch bản, cái này chạy bên trong kịch bản.

Mã có hạn sử dụng

Sinh mã 2FA (Generate 2FA code)

Dùng khi màn đăng nhập hỏi mã sáu số của ứng dụng xác thực. Bạn đưa cho nó chuỗi bí mật lấy từ hôm bật 2FA — "Chuỗi base32 lấy khi bật 2FA, chèn được {{tenBien}}. Mã sinh ra đổi mỗi 30 giây" — và mã hiện hành được ghi vào biến.

Hãy sinh mã ngay trước lúc gõ nó, đừng sinh ở đầu kịch bản. Mã sinh ra sớm một phút thì đã bị thay mất rồi.

Khoá bí mật 2FA không phải thứ để nằm sẵn trong kịch bản. Giá trị đầu của biến flow được lưu cùng kịch bản và có thể lộ ra qua tìm kiếm. Hãy đưa khoá vào bằng biến session, hoặc bằng bộ dữ liệu có đánh dấu secret — xem Biến và bộ dữ liệu. Mật khẩu ứng dụng của hộp thư ở trên cũng vậy.

Tóm tắt

  1. Mọi node ở đây đều ghi vào một biến flow mà bạn phải tạo trước ở tab Biến.
  2. Tính toán lo phần số học, Xử lý chuỗi lo phần cắt gọt — {{ }} không làm được việc nào trong hai việc đó.
  3. Mẫu không khớp thì đi ra đầu ra Lỗi; phải nối nhánh đó, không thì lượt chạy dừng ngay tại đấy.
  4. Gọi HTTP là điện thoại tự gọi, nên đầu bên kia thấy đường mạng của chính máy đó.
  5. Bí mật — khoá 2FA, mật khẩu ứng dụng của hộp thư — đi bằng biến session hoặc giá trị secret trong bộ dữ liệu, tuyệt đối không nằm trong biến flow.