Wiii integration

Wiii được tích hợp như AI assistant/embed bên trong LMS, đặc biệt ở teacher surface.

Frontend

File quan trọng:

  • fe/src/app/features/ai-chat/infrastructure/api/wiii-context.service.ts
  • fe/src/app/features/ai-chat/presentation/components
  • fe/src/app/features/teacher/shared/teacher-layout-simple.component.ts
  • fe/src/environments/environment.ts
  • fe/src/environments/environment.prod.ts
  • fe/src/index.html cho CSP/frame/connect origins

Backend

File quan trọng:

  • WiiiChatAdapter
  • WiiiTokenExchangeAdapter
  • AiTokenControllerV3
  • WiiiIntegrationConfig
  • WiiiServiceAuthFilter
  • WiiiCourseGenerationController
  • WiiiDataControllerV3
  • WiiiWebhookEmitter

Safe action boundary

Wiii/Pointy chỉ nên click các target LMS đánh dấu an toàn:

data-wiii-id="continue-lesson"
data-wiii-click-safe="true"
data-wiii-click-kind="navigation"

Không tự động submit quiz, delete, publish, enroll, grade, payment hoặc mutate dữ liệu nguy hiểm.

Preview trước apply

Luồng đúng cho nội dung AI sinh:

Wiii tạo draft/patch -> LMS preview/diff -> Teacher xem -> Teacher bấm apply -> LMS mutate dữ liệu

Sequence contract

Teacher/Student đăng nhập LMS
-> LMS giữ JWT/session hiện tại
-> FE mở Wiii iframe từ environment.wiiiEmbedUrl
-> ChatPanel connect iframe vào WiiiContextService
-> WiiiContextService gửi wiii:page-context + host capabilities qua postMessage
-> Khi cần token AI: POST /api/v3/ai/token
-> AiTokenControllerV3 gọi WiiiTokenExchangeAdapter
-> Wiii trả JWT riêng cho AI service

Host action contract

Action group Có được tự chạy? Ghi chú
pointy.highlight, pointy.scroll_to, pointy.show_tour Có, nếu target tồn tại Không mutate dữ liệu
pointy.click Chỉ khi DOM target có data-wiii-click-safe="true" Dùng cho navigation/open-panel an toàn
authoring.preview_lesson_patch Tạo preview token và diff
authoring.apply_lesson_patch Chỉ sau approval Cần preview_token/approval
authoring.generate_course_from_document Có thể mở flow/preview Không tự publish
assessment.preview_quiz_commit Preview quiz commit
assessment.apply_quiz_commit Chỉ sau approval Không tự submit bài của student
publish.apply_quiz Chỉ sau preview + explicit approval Không tự publish lặng lẽ

Service-to-service

File Vai trò
WiiiServiceAuthFilter Validate Bearer token cho /api/v3/integration/**
WiiiCourseGenerationController Nhận structured JSON từ Wiii để tạo course/chapter/lesson draft
WiiiDataControllerV3 Data API cho Wiii đọc ngữ cảnh được phép
WiiiWebhookEmitter LMS bắn webhook sang Wiii
WiiiEventBridge Map domain events như quiz submitted/enrolled/assignment submitted

Không được để Wiii tự làm

  • Submit quiz của học viên.
  • Delete course/lesson/quiz/question/submission.
  • Publish course/quiz không có preview/approval.
  • Enroll student hoặc kích hoạt payment.
  • Grade submission hoặc sửa điểm.
  • Mutate dữ liệu nguy hiểm chỉ từ iframe message.

Thông điệp bảo vệ: “Wiii được giúp quan sát, gợi ý, highlight và tạo draft. Quyết định mutate dữ liệu quan trọng vẫn đi qua LMS preview/diff, quyền người dùng và approval rõ ràng.”