⚠ = case solo (đổi/cần state) — bỏ tick sẵn nhưng TICK ĐƯỢC để trộn; bạn tự đảm bảo phù hợp. Trộn solo → cảnh báo khi Chạy.
Chỉ hiện case reactive (single/auto). Monitor chạy riêng — xem Testcase Editor.
Tùy chọn — để trống thì AI/bot tự xử như cũ.
—
Điều khiển ẩn (do màn hẹp)
Chuyển phiên
Công cụ
đang kết nối…
⚠
🔑 Đăng nhập Zalo bằng mã QR
⚠ Bỏ dấu check "Đồng bộ tin nhắn sang thiết bị này" trên màn hình đăng nhập Zalo.
Bấm 🔳 Tạo QR để bắt đầu.
Mở Zalo trên điện thoại → Quét mã QR.
💡 Đề xuất nội dung phù hợp màn hình điện thoại
🔍 Nhận xét tin gốc (trong ngữ cảnh hội thoại)
đang phân tích…
✨ Nội dung đề xuất (giữ văn phong & ngôn ngữ gốc)
đang tạo đề xuất…
🖼 Đề xuất về hình ảnh
🗂 Phiên đang chạy
Chưa có phiên nào đang chạy.
⏳ Phiên chờ (RAM/slot)
🎭 Persona Studio
⚠️ Ảnh giấy tờ là dữ liệu cá nhân nhạy cảm (NĐ13). Khuyến nghị
dùng giấy tờ mẫu/giả lập để test; không dùng giấy tờ thật của người khác khi chưa được
đồng ý. Ảnh chỉ lưu local dưới config/personas/documents/ — đã gitignore,
TUYỆT ĐỐI không commit lên GitHub. AI có thể đọc sai → hãy kiểm tra & sửa tay trước khi lưu.
📝 Testcase Editor — Thư viện testcase
ID
Mode
Phase
Capability
Tiền đề
Mục tiêu
Thông tin chung
expectationsByCapability — mỗi dòng 1 tiêu chí bắt buộc (mustHave) theo từng mức:
Mode SINGLE
Mode AUTO (role-play khách)
successCriteria — tiêu chí thành công (mỗi dòng 1 ý):
Mode MONITOR (lắng nghe proactive)
Monitor chấm bằng từ khóa + cửa sổ thời gian + số lần, KHÔNG dùng AI. passCriteria/failConditions ở chế độ này chỉ hiển thị, không ảnh hưởng kết quả. ⚠ Trong lúc monitor chạy, KHÔNG chat tay với OA này từ Zalo app — bot trả lời tin đó sẽ bị tính nhầm thành tin chủ động.
monitorConfig:
Tổng thời lượng lắng nghe (giờ). Mặc định 24 nếu bỏ trống. Chạy trong journey thì lấy theo đồng hồ journey.
Bao lâu quét màn hình chat một lần để tìm tin mới của bot (giây). Mặc định 15. Nhỏ hơn = nhạy hơn nhưng tốn CPU.
Bao lâu chụp ảnh màn hình + báo còn sống một lần (giây). Mặc định 300. Đây là ảnh hiển thị trên Console.
Bao lâu ghi điểm khôi phục một lần (giây). Mặc định 60. Dùng để chạy tiếp đúng chỗ nếu service khởi động lại.
Chỉ là nhãn hiển thị — đặt tên cho mốc thời gian (vd 'deposit'). Không ảnh hưởng việc chấm.
⚠ NÊN ĐỂ TRỐNG — khi trống, mốc gốc = thời điểm bấm Chạy. Nếu điền một thời điểm đã qua, mọi cửa sổ kỳ vọng cũng đã qua → case chắc chắn trượt mà không có cảnh báo.
expectedEvents
negativeEvents
Sự kiện KHÔNG được phép xảy ra — bot nhắn tin chứa từ khóa cấm là case trượt. Áp dụng suốt toàn bộ thời lượng nghe (không có cửa sổ thời gian). ⚠ Chỉ cần có 1 sự kiện cấm, monitor sẽ nghe hết durationHours chứ không dừng sớm khi đã đủ kỳ vọng.
🗑 Xóa testcase
⚙️ Cấu hình
Tông màu (giao diện)
✓ Áp ngay · lưu trên trình duyệt
Đổi tông áp dụng ngay (không cần restart). Lưu ở trình duyệt này (localStorage), không ảnh hưởng người khác.
Hành vi test & OA
✓ Có hiệu lực ngay (lần chạy sau)
Ghi vào config/runtime.json — runner đọc MỖI lần chạy, không cần restart.
Chỉ để hiển thị — OA thật lấy từ file testcase. Đổi ở đây không ảnh hưởng lần chạy.
Khách "suy nghĩ" bao lâu trước khi gõ mỗi tin (ms, ngẫu nhiên trong khoảng). Tăng = giống người thật hơn nhưng chạy chậm; quá nhỏ dễ bị chặn vì nhắn dồn.
Khách "suy nghĩ" bao lâu trước khi gõ mỗi tin (ms, ngẫu nhiên trong khoảng). Tăng = giống người thật hơn nhưng chạy chậm; quá nhỏ dễ bị chặn vì nhắn dồn.
Tốc độ gõ: số mili-giây cho mỗi ký tự. Tăng = gõ chậm, tin dài lâu gửi hơn.
Trần tổng thời gian gõ 1 tin (ms), dù tin dài mấy. Chỉ có tác dụng khi tin quá dài so với tốc độ gõ ở trên.
Nghỉ giữa 2 testcase khi chạy nhiều case (ms, ngẫu nhiên trong khoảng). Tăng = an toàn hơn với giới hạn của Zalo/bot; giảm = chạy nhanh nhưng dễ bị chặn.
Nghỉ giữa 2 testcase khi chạy nhiều case (ms, ngẫu nhiên trong khoảng). Tăng = an toàn hơn với giới hạn của Zalo/bot; giảm = chạy nhanh nhưng dễ bị chặn.
Bot im lặng bao lâu thì coi là đã trả lời xong (ms) — dùng để gộp nhiều tin bot gửi liên tiếp thành 1 lượt chấm. Giảm quá nhỏ sẽ cắt ngang, chấm thiếu ý bot đang nói dở.
(Chỉ cho chế độ theo dõi) Hai tin bot cách nhau dưới mức này được tính là cùng 1 lần bot chủ động nhắn. Phải nhỏ hơn 15 giây.
Ngưỡng thời gian phản hồi đầu (ms) — chỉ áp cho testcase chế độ "single". ⚠ Điền số ở đây sẽ áp cho MỌI case single không tự khai ngưỡng riêng; bot hiện trả lời khoảng 8-16s nên đặt dưới ~16000 sẽ khiến các case FAIL vì thời gian dù nội dung đúng. Để trống = không ràng buộc thời gian (mặc định).
Review ảnh (assessImages)
Tắt để tiết kiệm chi phí AI — ảnh bot vẫn hiển thị, chỉ KHÔNG chấm điểm.
Đánh giá nội dung (assessContent) — PP4
Tắt để verify HẠ TẦNG rẻ nhất (spawn/pool/grid/restart chạy được không) — BỎ chấm AI pass/fail (analyzeReply/judgeSingle/summarize). Khách VẪN role-play (auto/journey vẫn sinh tin, gửi/nhận/đo). Kết quả = "skip-đánh-giá" (không pass/fail). Tắt = mọi lượt thành "không chấm", chỉ chạy hội thoại (tiết kiệm chi phí AI).
Bỏ dấu tin khách (applyDiacriticsTransform)
Bật để test khả năng hiểu ngôn ngữ — khách có persona "bỏ dấu" sẽ gõ KHÔNG DẤU thật (vd "phòng đêm"→"phong dem"). Tắt = tin sạch (demo). Chỉ áp tin AUTO/journey (AI sinh); case single dùng input viết sẵn — muốn không dấu thì viết input không dấu. Chỉ áp khi khách có thiết lập bỏ dấu + tiếng Việt + chế độ tự động (case "single" dùng câu viết sẵn nên không bị đổi).
Hiện khi chạy phase/case CẦN trạng thái (đã đặt/nhận/trả phòng) mà ô mã booking để trống. Hiệu lực ngay.
Môi trường (.env)
⚠ Cần restart để áp dụng
⚠ Đổi xong phải khởi động lại dịch vụ mới có hiệu lực.
Ghi vào .env (backup .env.bak trước) — chỉ có hiệu lực sau khi restart Console/test.
để trống = giữ key cũ
🔄 Cần restart thủ công
node index.js console
🎯 Capability Editor — chỉnh mức
Chỉ đổi MỨC key có sẵn — đổi xong áp ngay từ lần chạy sau (không cần restart).