Zapee Automation Engine — Architecture

Hover vào một node để xem giải thích. Click vào node để giữ nội dung ở thanh phía dưới.

01. Kiến trúc một Core Engine dùng chung

DB active được ưu tiên, file JSON là fallback

flowchart LR
  subgraph KNOWLEDGE["Kiến thức từng nền tảng"]
    DB["Recipe active trong
PostgreSQL"] BHX["bhx.json
Đã có"] COOP["coop.json
Mục tiêu"] WAL["walmart.json
Mục tiêu"] CK["circlek.json
Mục tiêu"] end subgraph SERVER["Agent Server"] WS["WebSocket Session"] RES["Recipe Resolver"] ENGINE["Core Automation Engine
dùng chung"] LEGACY["Legacy Playbook /
Controller"] end subgraph BROWSER["Một Playwright Page duy nhất"] ACTION["Click / Fill / Navigate / Wait"] PAGE["Trang nhà bán thật"] CDP["CDP Screencast"] end subgraph ZAPEE["Zapee Web / CBS"] CART["Giỏ hàng Zapee"] INPUT["Input đơn hàng theo phiên"] USER["Người dùng thao tác"] SCREEN["Màn hình stream"] end DB -->|"Ưu tiên"| RES BHX -->|"Fallback file"| RES COOP -.-> RES WAL -.-> RES CK -.-> RES RES -->|"Có recipe và chain được bật"| ENGINE RES -->|"Chưa có recipe"| LEGACY ENGINE --> ACTION LEGACY --> ACTION ACTION --> PAGE PAGE --> CDP CDP --> WS CART --> INPUT INPUT --> WS WS --> RES WS --> SCREEN USER --> SCREEN SCREEN -->|"Click / gõ / scroll"| WS WS --> PAGE click DB showDetail "Deployment active trong PostgreSQL được ưu tiên cho production." click BHX showDetail "BHX là pilot đã có recipe JSON chạy bằng Automation Engine." click COOP showDetail "Mục tiêu chuyển dần logic Co.op sang coop.json dùng cùng schema." click WAL showDetail "Walmart hiện vẫn còn nhiều playbook riêng; walmart.json chưa có." click CK showDetail "Circle K có thể dùng chung Engine sau khi có recipe đã review." click RES showDetail "Resolver chọn recipe theo chain và environment: DB trước, file fallback sau." click ENGINE showDetail "Engine chỉ đọc checkpoint, condition, locator, action và retry; không chứa logic riêng của shop." click LEGACY showDetail "Khi chưa có recipe, server tiếp tục dùng playbook/controller hiện tại." click WS showDetail "WebSocket mang run_order, status, screencast và remote input trong cùng session." click PAGE showDetail "Automation, training, stream và human takeover đều bám đúng một Playwright page." click CDP showDetail "CDP gửi frame JPEG của page về frontend để người dùng quan sát." click INPUT showDetail "Dữ liệu người mua và đơn hàng chỉ nằm trong session, không ghi cứng vào recipe." click SCREEN showDetail "Canvas hiển thị frame và gửi ngược click, bàn phím, scroll về browser."
Kiến trúc chungChọn một node để xem mô tả chi tiết.

02. Luồng training tạo Automation Recipe

AI dùng khi training, không dùng khi production chạy recipe

flowchart LR
  subgraph OPS["Ops / QC"]
    SELECT["1. Chọn chain, sản phẩm,
worker và artifact"] REVIEW["8. Review / Reject"] ACTIVATE["9. Activate version
theo environment"] end subgraph SESSION["Training Session"] TOKEN["2. Signed training token"] OPEN["3. Mở Playwright page
đang screencast"] OBSERVE["4. Codex / Claude
observe_page"] PROPOSE["5. propose_action"] GATEWAY["6. Action Gateway
kiểm tra và thực thi"] HUMAN{"Gặp OTP / CAPTCHA /
login / review?"} TAKEOVER["Human takeover
và resume"] COMPLETE["7. complete
automationRecipe JSON"] end subgraph DATABASE["PostgreSQL"] VALIDATE["Validate schema,
chain và allowedHosts"] CANDIDATE["Recipe version
candidate"] DEPLOY["Deployment active"] end SELECT --> TOKEN --> OPEN --> OBSERVE --> PROPOSE --> GATEWAY GATEWAY --> HUMAN HUMAN -->|"Không"| OBSERVE HUMAN -->|"Có"| TAKEOVER --> OBSERVE OBSERVE -->|"Tới ready_for_user_place_order"| COMPLETE COMPLETE --> VALIDATE --> CANDIDATE CANDIDATE --> REVIEW --> ACTIVATE --> DEPLOY click SELECT showDetail "Operator chọn dữ liệu training trong /ops/training." click TOKEN showDetail "Token có chữ ký khóa đúng controller và artifact được phép." click OPEN showDetail "Training mở website thật trên cùng page đang stream." click OBSERVE showDetail "AI đọc URL và DOM đã lọc qua zapee_browser MCP." click PROPOSE showDetail "Mỗi lượt AI chỉ đề xuất một action để dễ kiểm soát." click GATEWAY showDetail "Gateway kiểm tra action trước khi click, fill, navigate hoặc wait." click HUMAN showDetail "Bước nhạy cảm luôn có thể dừng để operator thao tác trực tiếp." click TAKEOVER showDetail "Operator xử lý trên stream rồi resume, không mở browser khác." click COMPLETE showDetail "AI trả về automationRecipe JSON khi đã tới ranh giới review." click VALIDATE showDetail "Agent-server kiểm tra schema, canonical chain và hostname." click CANDIDATE showDetail "Recipe được lưu thành version candidate bất biến, không tự ghi đè file local." click REVIEW showDetail "Operator xem JSON và quyết định review hoặc reject." click ACTIVATE showDetail "Chỉ version reviewed mới được activate cho môi trường."
TrainingChọn một node để xem mô tả chi tiết.

03. Luồng đặt hàng bằng recipe đã review

Session pin một version và dừng trước xác nhận cuối

flowchart LR
  subgraph CLIENT["Zapee / CBS"]
    START["1. Người dùng bấm
Tiếp tục đặt hàng"] PAYLOAD["2. run_order
dữ liệu theo session"] STATUS["Status / checkpoint /
event về UI"] MANUAL["Người dùng takeover
trên stream"] end subgraph SERVER["Agent Server"] RESOLVE["3. Resolve recipe
chain + environment"] PIN["4. Pin recipe version
cho cả session"] DETECT["5. Detect URL / DOM
chọn checkpoint"] ACTION["6. Chạy action"] COMPLETE{"Checkpoint
complete?"} PAUSE{"Cần người dùng?"} RESUME["Detect lại và resume
từ checkpoint phù hợp"] READY["7. checkout_ready
boundary review"] end subgraph SHOP["Website nhà bán"] PAGE["Playwright Page"] REVIEW["Trang review đơn"] FINAL["Xác nhận cuối
do người dùng quyết định"] end START --> PAYLOAD --> RESOLVE --> PIN --> DETECT --> ACTION --> PAGE PAGE --> COMPLETE COMPLETE -->|"Chưa"| ACTION COMPLETE -->|"Xong"| PAUSE PAUSE -->|"Còn checkpoint"| DETECT PAUSE -->|"OTP / CAPTCHA / manual"| STATUS --> MANUAL --> PAGE MANUAL --> RESUME --> DETECT PAUSE -->|"Đã chuẩn bị checkout"| READY --> REVIEW --> FINAL ACTION --> STATUS click START showDetail "Đơn bắt đầu khi người dùng xác nhận tiếp tục từ Zapee/CBS." click PAYLOAD showDetail "Tên, điện thoại, địa chỉ, sản phẩm, slot và payment đi theo run_order." click RESOLVE showDetail "Server lấy recipe active từ DB, nếu chưa có thì dùng file fallback." click PIN showDetail "Version được giữ cố định trong suốt session đang chạy." click DETECT showDetail "Engine đọc URL/DOM để biết đang ở checkpoint nào." click ACTION showDetail "Action deterministic gồm navigate, click, fill, check, press, wait, foreach, branch và send_event." click COMPLETE showDetail "Engine chỉ đi tiếp khi điều kiện complete của checkpoint đã thỏa." click PAUSE showDetail "Auto có thể pause; manual guide chỉ hướng dẫn và không tự click/fill." click MANUAL showDetail "Người dùng thao tác trực tiếp trên đúng page qua stream." click RESUME showDetail "Resume không chạy lại từ đầu và không replay action/item đã hoàn tất." click READY showDetail "Engine kết thúc tại checkout_ready hoặc boundary review." click FINAL showDetail "Engine không được tự bấm nút xác nhận đặt hàng cuối."
Đặt hàngChọn một node để xem mô tả chi tiết.

04. Luồng stream và thao tác hai chiều

Một Playwright page là nguồn trạng thái duy nhất

flowchart LR
  subgraph BROWSER["Agent Server / Browser"]
    PAGE["Playwright Page"]
    CDP["Page.startScreencast"]
    FRAME["JPEG frame + URL +
viewport metadata"] DISPATCH["Dispatch remote input
vào Playwright"] ENGINE["Automation Engine"] end subgraph SOCKET["WebSocket Session"] OUT["screencast / status / event"] IN["remote_click / remote_key /
insert_text / remote_scroll"] end subgraph CLIENT["Zapee Frontend"] CANVAS["Canvas stream"] COORD["Quy đổi tọa độ
canvas → browser"] USER["Người dùng"] BOTLINE["Botline / timeline /
checkpoint UI"] end PAGE --> CDP --> FRAME --> OUT --> CANVAS ENGINE --> PAGE ENGINE --> OUT OUT --> BOTLINE USER -->|"Quan sát"| CANVAS USER -->|"Click / gõ / scroll"| COORD --> IN --> DISPATCH --> PAGE PAGE -->|"Frame mới"| CDP click PAGE showDetail "Trang nhà bán thật; mọi automation và input người dùng đều tác động lên page này." click CDP showDetail "Chrome DevTools Protocol chụp các frame JPEG liên tục." click FRAME showDetail "Server gửi đúng kích thước frame, URL và metadata cần thiết." click OUT showDetail "Kênh đi xuống mang hình ảnh, trạng thái Engine và event nghiệp vụ." click CANVAS showDetail "Frontend vẽ frame lên canvas để người dùng theo dõi." click BOTLINE showDetail "Status và checkpoint được hiển thị thành hướng dẫn trong UI." click USER showDetail "Người dùng có thể takeover khi cần xác minh hoặc chọn thủ công." click COORD showDetail "Tọa độ trên canvas được quy đổi về viewport thật của browser." click IN showDetail "Kênh đi lên mang click, phím, text và scroll." click DISPATCH showDetail "Agent-server gọi Playwright mouse/keyboard trên page đang active." click ENGINE showDetail "Engine và người dùng dùng chung page, không có browser thứ hai."
StreamChọn một node để xem mô tả chi tiết.