LUỒNG NGƯỜI DÙNG CHI TIẾT – DETAILED USER FLOWS
| Mã tài liệu: | EZD-PJT-FLW | Phiên bản: | 1.0 |
|---|---|---|---|
| Ngày hiệu lực: | 06/09/2025 | Người soạn: | Stephen |
| Người phê duyệt: | Stephen | Trang: | 1/4 |
1.0 MỤC ĐÍCH
Tài liệu này mô tả chi tiết các luồng người dùng chính khi tương tác với EZD AI Booth (MVP), bao gồm cả các kịch bản thành công và thất bại. Mục tiêu:
- Đảm bảo định nghĩa logic rõ ràng, có thể kiểm thử và trace log.
- Làm cơ sở để thiết kế UI, Prototype và đặc tả kỹ thuật.
- Là đầu ra chính thức cho IRP-01 theo quy trình ISO 9001.
2.0 PHẠM VI
Tập trung vào hai persona đã được định nghĩa trong tài liệu EZD-PJT-PER:
- “Chị An – Người Mua Sắm Thông Minh” (End User):
Bao gồm các kịch bản: - Luồng chính: Hỏi đường → Nhận câu trả lời + bản đồ.
- Fail Path 1: Hỏi ngoài phạm vi.
-
Fail Path 2: Booth offline (mất kết nối).
-
“Anh Phong – Giám đốc Marketing TTTM” (Tenant):
Bao gồm các kịch bản: - Luồng chính: Đăng nhập Dashboard → Xem dữ liệu → Export báo cáo.
- Fail Path 1: Dashboard rỗng (booth mới lắp đặt).
- Fail Path 2: Xu hướng yếu (weak signal).
- Fail Path 3: Khôi phục mật khẩu.
Ghi chú Chiến lược: Tại sao bổ sung “Anh Phong” vào phạm vi FLW?
Trong giai đoạn MVP, chúng ta cần kiểm chứng đồng thời 2 giả định cốt lõi đã nêu trong EZD-MVP-SPEC:
-
Giá trị cho Người dùng cuối (User Value Hypothesis):
Được đại diện bởi “Chị An”, kiểm chứng thông qua chỉ số >50 lượt tương tác/ngày.
→ Các luồng booth (Happy Path + Fail Path) tập trung vào việc đảm bảo trải nghiệm mượt mà, tăngretry_rate, giảm gián đoạn. -
Giá trị cho Tenant/Đối tác (Business Value Hypothesis):
Được đại diện bởi “Anh Phong”, kiểm chứng thông qua adoption của Dashboard.
→ Các luồng dashboard (Happy Path + Fail Path) đảm bảo tenant có dữ liệu để ra quyết định, với tiêu chí ≥80% active tenants/tuần và ≥1 báo cáo/tuần.
Do đó, việc bổ sung “Anh Phong” vào FLW giúp chúng ta đảm bảo traceability end-to-end:
Từ tương tác nhỏ nhất của người dùng cuối → đến quyết định chiến lược ở cấp tenant.
3.0 LUỒNG NGƯỜI DÙNG
3.1 Chị An – Người Mua Sắm Thông Minh
3.1.1 Happy Path – Tìm cửa hàng thành công
graph TD
A(ONB-01: Avatar thu hút) --> B(OBS-01: Người dùng tiến lại gần);
B --> C(ASK-01: Hỏi - Uniqlo ở đâu?);
C --> D(ANS-01: AI trả lời chính xác + bản đồ);
D --> E(SUG-01: AI gợi ý khuyến mãi);
E --> F(FBK-01: Người dùng phản hồi 👍/👎);
F --> G(EXIT-01: Avatar cảm ơn, người dùng rời đi);
3.1.2 Fail Path 1 – Hỏi ngoài phạm vi
graph TD
A(ASK-00: Hỏi ngoài phạm vi) --> B(RES-00: KB miss);
B --> C(ERR-01: AI xin lỗi ngắn gọn ≤14 từ);
C --> D(SCOPE-REMIND: Định hướng lại phạm vi);
D --> E{Người dùng retry trong 60s?};
E -- Có --> F(RETRY-01: Hỏi trong phạm vi) --> G(ANS-01: Trả lời chính xác);
E -- Không --> H(EXIT-00: Kết thúc phiên sau timeout);
Metric:
retry_rate ≥ 70%để đạt tiêu chí MVP.
3.1.3 Fail Path 2 – Booth offline
graph TD
A(OBS-01: Người dùng tiến lại gần) --> B(ASK-01: Người dùng hỏi);
B --> C(ERR-SYS-01: Booth không phản hồi);
C --> D(UI-ALT-01: Màn hình hiển thị thông báo lỗi 'Xin lỗi, hệ thống tạm ngưng hoạt động. Vui lòng quay lại sau.);
D --> E(LOG-ERR-01: Ghi log booth_offline, alert gửi cho Tech Lead);
E --> F(EXIT-02: Người dùng rời đi thất vọng);
Guardrail kỹ thuật: Alert phải kích hoạt trong vòng 15 phút downtime.
3.2 Anh Phong (Tenant Dashboard)
3.2.1 Happy Path – Tenant Dashboard sử dụng thành công
graph TD
A(LOGIN-01: Đăng nhập Dashboard) --> B(OVW-01: Xem tổng quan lượt tương tác);
B --> C(INS-01: Khám phá Top 10 câu hỏi);
C --> D(HEAT-01: Mở Heatmap ngày/giờ);
D --> E(TREND-01: Phát hiện xu hướng bất thường);
E --> F(REP-01: Xuất báo cáo PDF gửi BGD);
F --> G(DEC-01: Đề xuất quyết định marketing);
3.2.2 Fail Path 1 – Dashboard rỗng (Booth mới lắp đặt)
graph TD
A(LOGIN-01: Đăng nhập) --> B(OVW-00: Dashboard rỗng);
B --> C(MSG-00: Hiển thị thông báo 'Chưa có dữ liệu');
C --> D(ACT-00: Gợi ý kiểm tra lại sau hoặc xem tài liệu hướng dẫn);
D --> E(EXIT-TEN-01: Kết thúc phiên với empty state);
Acceptance: Luôn hiển thị empty state rõ ràng, không để màn hình trống.
3.2.3 Fail Path 2 – Xu hướng yếu (Weak Signal)
graph TD
A(HEAT-01: Xem heatmap) --> B(TREND-01: Phát hiện xu hướng bất thường);
B --> C(CHK-01: Kiểm tra độ tin cậy dữ liệu);
C -- Dữ liệu yếu --> D(WARN-01: Hiển thị cảnh báo 'Trend chưa đủ ý nghĩa');
D --> E(ACT-01: Khuyến khích kiểm tra thêm kỳ sau);
C -- Dữ liệu đủ mạnh --> F(REP-01: Xuất báo cáo như Happy Path);
Acceptance: Hệ thống chỉ highlight xu hướng khi vượt ngưỡng dữ liệu định nghĩa.
3.2.4 Fail Path 3 – Quên mật khẩu / Khôi phục tài khoản
graph TD
A(LOGIN-FAIL: Sai mật khẩu) --> B(ACT-RECOVER: Chọn 'Quên mật khẩu');
B --> C(INPUT-EMAIL: Nhập email đăng ký);
C --> D(SEND-OTP: Gửi mã xác nhận / link reset);
D --> E(USER-RESET: Tạo mật khẩu mới);
E --> F(LOGIN-SUCCESS: Đăng nhập lại thành công);
Acceptance: Luồng khôi phục mật khẩu phải hoàn tất <5 phút end-to-end, OTP/email luôn hoạt động.
3.2.5 Guardrails Định lượng cho Fail Paths – Tenant Dashboard
Để đảm bảo chất lượng trải nghiệm và tính đo lường được khi audit, mỗi fail path của Anh Phong phải tuân thủ các guardrails sau:
Fail Path 1 – Dashboard rỗng (Booth mới lắp đặt)
- Metric:
empty_state_rate= (số phiên empty state / tổng số phiên dashboard). - Guardrail:
empty_state_rate ≤ 10%trong tuần đầu triển khai. - Acceptance: Empty state luôn kèm thông điệp + CTA, không để màn hình trống.
Fail Path 2 – Xu hướng yếu (Weak Signal)
- Metric:
weak_signal_rate= (số trend bị cảnh báo yếu / tổng số trend_detected). - Guardrail:
weak_signal_rate ≤ 30%và chỉ xảy ra khisignificance_score < 0.3. - Acceptance: Luôn hiển thị cảnh báo rõ ràng và gợi ý kiểm tra thêm kỳ sau.
Fail Path 3 – Quên mật khẩu / Khôi phục tài khoản
- Metric 1:
reset_success_rate= (số lần reset thành công / tổng số yêu cầu reset). - Guardrail:
reset_success_rate ≥ 95%. - Metric 2:
reset_time_avg= thời gian trung bình từ lúc gửi yêu cầu → login thành công. - Guardrail:
reset_time_avg < 5 phút. - Acceptance: OTP/email luôn hoạt động, không để tenant bị chặn quá 1 lần retry.
Các guardrails này cần được log đầy đủ và báo cáo định kỳ trong dashboard QA nội bộ, để đảm bảo traceability và phục vụ audit theo EZD-QMS-P01.
4.0 BẢNG TRACE MAPPING (Step ↔ Log Event)
4.1 Chị An – Người Mua Sắm Thông Minh
| Step Code | Tên sự kiện log (Event Name) | Trường dữ liệu bắt buộc |
|---|---|---|
| ONB-01 | avatar_wake_impression | session_id, booth_id |
| OBS-01 | approach_detected | session_id, booth_id, sensor_type |
| ASK-01 | ask_in_scope | session_id, utterance_text, scope_tag |
| ASK-00 | ask_out_of_scope | session_id, utterance_text, scope_tag |
| ANS-01 | answer_given | session_id, answer_template_id |
| SUG-01 | promo_suggested | session_id, promo_id |
| FBK-01 | feedback_collected | session_id, rating (👍/👎) |
| ERR-01 | oos_response_shown | session_id, response_template_id |
| SCOPE-REMIND | scope_reminder_shown | session_id, scope_tag |
| RETRY-01 | retry_in_scope | session_id, utterance_text, scope_tag |
| ERR-SYS-01 | booth_no_response | session_id, error_code |
| UI-ALT-01 | offline_message_shown | booth_id, timestamp |
| LOG-ERR-01 | booth_offline_alert_sent | booth_id, timestamp |
| EXIT-01 | session_end_success | session_id |
| EXIT-00 | session_end_no_retry | session_id |
| EXIT-02 | session_end_system_error | session_id |
4.2 Anh Phong (Tenant Dashboard)
Các mã bước (Step Code) khớp với mục 3.2 Trường dữ liệu thống nhất dạng
snake_case.
Sử dụngdashboard_session_idđể phân biệt vớisession_idbên booth.
| Step Code | Event Name | Trường dữ liệu bắt buộc |
|---|---|---|
| LOGIN-01 | login_success | dashboard_session_id, tenant_id, user_id, auth_method |
| OVW-01 | dashboard_page_view | dashboard_session_id, tenant_id, user_id, page_id="overview", time_range |
| INS-01 | insights_view | dashboard_session_id, tenant_id, user_id, widget="top_questions", time_range |
| HEAT-01 | heatmap_view | dashboard_session_id, tenant_id, user_id, time_range, granularity (hour/day) |
| TREND-01 | trend_detected | dashboard_session_id, tenant_id, user_id, topic_id, significance_score, threshold_used |
| REP-01 | export_report | dashboard_session_id, tenant_id, user_id, report_id, format (pdf/csv), time_range |
| SHR-01 | share_report | dashboard_session_id, tenant_id, user_id, report_id, channel (email/link), recipients_count |
| DEC-01 | decision_proposal_created | dashboard_session_id, tenant_id, user_id, proposal_id, source (trend/report) |
Fail Path – Dashboard rỗng (Booth mới lắp đặt)
| Step Code | Event Name | Trường dữ liệu bắt buộc |
|---|---|---|
| OVW-00 | dashboard_empty_state | dashboard_session_id, tenant_id, user_id, booth_ids[], reason="no_data" |
| MSG-00 | empty_state_message_shown | dashboard_session_id, tenant_id, message_id |
| ACT-00 | guidance_shown | dashboard_session_id, tenant_id, cta (doc_link/try_later), doc_id? |
| EXIT-TEN-01 | dashboard_session_end | dashboard_session_id, tenant_id, outcome="empty_state" |
Fail Path – Xu hướng yếu (Weak Signal)
| Step Code | Event Name | Trường dữ liệu bắt buộc |
|---|---|---|
| TREND-01 | trend_validated | dashboard_session_id, tenant_id, topic_id, significance_score, threshold_used, valid? |
| CHK-01 | trend_confidence_checked | dashboard_session_id, tenant_id, method (ztest/heuristic), sample_size |
| WARN-01 | weak_signal_warning_shown | dashboard_session_id, tenant_id, topic_id, warning_id |
| ACT-01 | followup_recommendation_shown | dashboard_session_id, tenant_id, topic_id, recommended_window (days) |
| REP-01 | export_report | dashboard_session_id, tenant_id, user_id, report_id, format (pdf/csv), time_range |
Fail Path – Quên mật khẩu / Khôi phục tài khoản
| Step Code | Event Name | Trường dữ liệu bắt buộc |
|---|---|---|
| LOGIN-FAIL | login_failed | tenant_id, user_id?, reason (wrong_password/locked), attempts_count |
| ACT-RECOVER | password_reset_request | tenant_id, identifier (email), channel (email/sms), locale |
| INPUT-EMAIL | password_reset_identity_ok | tenant_id, identifier (email), method (otp/link) |
| SEND-OTP | verification_sent | tenant_id, identifier, method (otp/link), latency_ms |
| USER-RESET | password_reset_success | tenant_id, user_id, method (otp/link), password_policy_passed? |
| LOGIN-SUCCESS | login_success | dashboard_session_id, tenant_id, user_id, auth_method="password_reset" |
Ghi chú triển khai: - Tất cả event phải kèm
ts(timestamp ISO 8601) ở tầng logging; có thể không liệt kê trong bảng cho gọn. -significance_scorechuẩn hóa về [0,1];threshold_usedcấu hình qua feature flag để dễ A/B. - Vớishare_report, nếuchannel="email", cần thêmrecipient_domain_countsđể theo dõi B2B reach.
5.0 CHECKLIST KIỂM TRA & PHÊ DUYỆT (ISO 9001)
| Mã biểu mẫu: | EZD-CHK-FLW-V1 | Phiên bản: | 1.0 |
|---|---|---|---|
| Dành cho sản phẩm: | EZD-PJT-FLW | Người kiểm tra: | Stephen |
| STT | Tiêu chí Kiểm tra | Tiêu chí Chấp nhận | Nguồn tham chiếu | Kết quả | Evidence |
|---|---|---|---|---|---|
| 1 | Có luồng chính (Happy Path) | Đầy đủ các bước từ ONB → EXIT | EZD-MVP-SPEC, 4.1 | [ ] ✔ / [ ] ✘ | |
| 2 | Có ≥2 Fail Paths / persona | Mỗi persona có ít nhất 2 kịch bản thất bại rõ ràng | EZD-QMS-P01, 5.1 | [ ] ✔ / [ ] ✘ | |
| 3 | Có bảng Trace Mapping | Mỗi step ↔ event log | EZD-PJT-PER, 4.2.1 | [ ] ✔ / [ ] ✘ | |
| 4 | Liên kết đến KPI | Fail Path có metric retry_rate ≥70% | EZD-PJT-PER, 4.2 | [ ] ✔ / [ ] ✘ | |
| 5 | Có guardrail kỹ thuật | Alert downtime ≤15 phút | EZD-MVP-SPEC, 5.0 | [ ] ✔ / [ ] ✘ | |
| 6 | Voice & Tone Fail Path | ERR-01 ≤14 từ, không kỹ thuật | EZD-PJT-PER, 4.3 | [ ] ✔ / [ ] ✘ | |
| 7 | Tenant Dashboard có Happy Path & ≥3 Fail Paths | Bao gồm Dashboard rỗng, Xu hướng yếu, Khôi phục mật khẩu | EZD-PJT-JNY 4.2, EZD-PJT-FLW 3.2.x | [ ] ✔ / [ ] ✘ | |
| 8 | Trace Mapping cho Tenant đầy đủ | Mỗi step có event log tương ứng, field bắt buộc rõ ràng | EZD-PJT-FLW 4.2 | [ ] ✔ / [ ] ✘ | |
| 9 | KPI adoption của Tenant được phản ánh | ≥80% active tenants weekly & ≥1 báo cáo/tuần | EZD-PJT-PER 3.2.1, EZD-PJT-JNY 5.2 | [ ] ✔ / [ ] ✘ | |
| 10 | Empty state phải có thông điệp rõ ràng | Luôn hiển thị message + CTA hành động | EZD-PJT-FLW 3.2.2 | [ ] ✔ / [ ] ✘ | |
| 11 | Weak signal cảnh báo chính xác | Xu hướng yếu phải có nhãn cảnh báo + gợi ý tiếp theo | EZD-PJT-FLW 3.2.3 | [ ] ✔ / [ ] ✘ | |
| 12 | Password reset flow tuân thủ SLA | Hoàn tất <5 phút end-to-end, OTP/email hoạt động | EZD-PJT-FLW 3.2.4 | [ ] ✔ / [ ] ✘ | |
| 13 | Guardrail: Empty state rate | empty_state_rate ≤ 10% trong tuần đầu triển khai | EZD-PJT-FLW 3.2.2 | [ ] ✔ / [ ] ✘ | |
| 14 | Guardrail: Weak signal rate & threshold | weak_signal_rate ≤ 30% khi significance_score <0.3 | EZD-PJT-FLW 3.2.3 | [ ] ✔ / [ ] ✘ | |
| 15 | Guardrail: Password reset SLA | reset_success_rate ≥95% & reset_time_avg <5 phút | EZD-PJT-FLW 3.2.4 | [ ] ✔ / [ ] ✘ |