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.tsfe/src/app/features/ai-chat/presentation/componentsfe/src/app/features/teacher/shared/teacher-layout-simple.component.tsfe/src/environments/environment.tsfe/src/environments/environment.prod.tsfe/src/index.htmlcho CSP/frame/connect origins
Backend
File quan trọng:
WiiiChatAdapterWiiiTokenExchangeAdapterAiTokenControllerV3WiiiIntegrationConfigWiiiServiceAuthFilterWiiiCourseGenerationControllerWiiiDataControllerV3WiiiWebhookEmitter
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 |
Có | 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 |
Có | 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.”