Bỏ qua

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:

  1. 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ăng retry_rate, giảm gián đoạn.

  2. 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 khi significance_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ụng dashboard_session_id để phân biệt với session_id bê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_score chuẩn hóa về [0,1]; threshold_used cấu hình qua feature flag để dễ A/B. - Với share_report, nếu channel="email", cần thêm recipient_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 [ ] ✔ / [ ] ✘