# AI Models
Assistant Core hỗ trợ nhiều AI model cho chat, voice và realtime conversation. Tùy plan, bạn sẽ thấy các model phù hợp trong phần cấu hình assistant.
Providers [#providers]
| Provider | Hỗ trợ |
| ----------------- | ---------------------------------------------------- |
| OpenAI | Chat, Text to Speech, Speech to Text, Realtime Voice |
| Anthropic | Chat |
| Google AI | Chat, Realtime Voice |
| X.AI | Chat, Text to Speech, Speech to Text, Realtime Voice |
| DeepSeek | Chat |
| ElevenLabs | Text to Speech, Speech to Text |
| Soniox | Text to Speech, Speech to Text |
| Local/Open Source | Voice Activity Detection |
Model Types [#model-types]
| Type | Dùng để làm gì |
| ------------------------ | --------------------------------------------------------------------------------- |
| Chat | Trả lời câu hỏi, reasoning, tool use và xử lý multimodal content nếu model hỗ trợ |
| Voice Activity Detection | Phát hiện lúc user bắt đầu hoặc ngừng nói |
| Speech to Text | Transcribe audio thành text |
| Text to Speech | Tạo audio từ text |
| Realtime Voice | Voice conversation hai chiều với latency thấp |
Voice Models [#voice-models]
Voice Activity Detection [#voice-activity-detection]
| Provider | Models |
| ----------------- | ---------- |
| Local/Open Source | Silero VAD |
Speech To Text [#speech-to-text]
| Provider | Models |
| ---------- | ----------------------------------------- |
| OpenAI | GPT-4o Transcribe, GPT-4o Mini Transcribe |
| ElevenLabs | ElevenLabs Scribe v2 |
| Soniox | Soniox STT Real-Time v4 |
| X.AI | xAI Grok STT |
Text To Speech [#text-to-speech]
| Provider | Models |
| ---------- | --------------------- |
| OpenAI | GPT-4o Mini TTS |
| ElevenLabs | ElevenLabs Flash v2.5 |
| X.AI | Grok 2 TTS |
| Soniox | Soniox TTS RT v1 |
Realtime Voice [#realtime-voice]
| Provider | Models |
| --------- | ----------------------------------- |
| OpenAI | GPT Realtime 1.5, GPT Realtime Mini |
| Google AI | Gemini 2.5 Flash Live |
| X.AI | xAI Grok Voice Agent |
Chat Models [#chat-models]
| Provider | Models |
| --------- | --------------------------------------------------------------------------------- |
| OpenAI | GPT-5.4, GPT-5.4 Mini, GPT-5.4 Nano, GPT-5.1, GPT-4.1, GPT-4.1 Mini, GPT-4.1 Nano |
| Anthropic | Claude Sonnet 4.5, Claude Haiku 4.5 |
| Google AI | Gemini 2.5 Pro, Gemini 2.5 Flash, Gemma 4 31B |
| X.AI | Grok 4.3 |
| DeepSeek | DeepSeek V4 Flash, DeepSeek V4 Pro |
Plan Access [#plan-access]
| Plan | Models có thể dùng |
| ---------- | -------------------------------------------------------------------------------- |
| Free | Gemini 2.5 Flash, GPT-4.1 Mini |
| Go | Các Gemini models, gồm Gemini 2.5 Flash, Gemini 2.5 Pro và Gemini 2.5 Flash Live |
| Plus | OpenAI GPT models và Gemini models |
| Pro | Tất cả supported models |
| Enterprise | Tất cả supported models |
Default Models [#default-models]
Khi bạn tạo tài khoản hoặc join một assistant, các model sau sẽ được chọn sẵn. Bạn có thể thay đổi trong phần **Settings** bất kỳ lúc nào.
| Loại | Model mặc định |
| ------------------------ | -------------------- |
| Chat (LLM) | GPT-4.1 Mini |
| Text to Speech | Grok 2 TTS |
| Speech to Text | xAI Grok STT |
| Voice Activity Detection | Silero VAD |
| Realtime Voice | xAI Grok Voice Agent |
Default model giống nhau cho mọi plan. Sự khác biệt giữa các plan nằm ở **danh sách model khả dụng** — plan cao hơn mở khóa thêm nhiều model để bạn chuyển đổi.
Một số capability như realtime voice, daily messages, devices, Knowledge Base documents và voice minutes vẫn phụ thuộc vào quota của từng plan.
# Tạo Tài Khoản
Tùy Chọn Đăng Ký [#tùy-chọn-đăng-ký]
Bạn có thể tạo tài khoản bằng:
1. **Email & Mật khẩu** — Nhập email và tạo mật khẩu
2. **Google** — Đăng nhập bằng tài khoản Google (một chạm)
3. **GitHub** — Đăng nhập bằng tài khoản GitHub (một chạm)
Các Bước [#các-bước]
Cách 1: Email & Mật khẩu [#cách-1-email--mật-khẩu]
1. Truy cập **Bảng Điều Khiển** tại [admin.assistantcore.com](https://admin.assistantcore.com)
2. Nhấn **Đăng Ký**
3. Nhập địa chỉ email và tạo mật khẩu
4. Nhấn **Tạo Tài Khoản**
5. Bạn sẽ được chuyển đến bảng điều khiển
Cách 2: Google hoặc GitHub [#cách-2-google-hoặc-github]
1. Truy cập **Bảng Điều Khiển**
2. Nhấn **Tiếp tục với Google** hoặc **Tiếp tục với GitHub**
3. Cho phép ứng dụng truy cập
4. Bạn sẽ được chuyển đến bảng điều khiển tự động
Tạo tài khoản miễn phí. Mỗi trợ lý mới bắt đầu với **gói Miễn Phí** với các
tính năng cơ bản.
Tiếp Theo? [#tiếp-theo]
# Tạo Assistant Đầu Tiên
Tổng Quan [#tổng-quan]
**Assistant** là AI agent của bạn. Nó có Knowledge Base riêng, model config, voice settings, và có thể được share hoặc embed vào website.
Tạo Assistant [#tạo-assistant]
1. Trong **Admin Dashboard**, nhấn **New Assistant**
2. Điền thông tin:
* **Tên** — Đặt tên mô tả (ví dụ: "Bot Hỗ Trợ Khách Hàng")
* **Mô tả** — Miêu tả ngắn gọn chức năng
* **System Prompt** — Hướng dẫn cách assistant hoạt động
System prompt tốt là chìa khóa. Ví dụ: *"Bạn là nhân viên hỗ trợ thân thiện
của công ty ABC. Trả lời câu hỏi dựa trên tài liệu. Lịch sự và ngắn gọn."*
3. Nhấn **Tạo**
Cấu Hình AI Model [#cấu-hình-ai-model]
1. Vào **Assistant Settings → Models**
2. Chọn LLM model theo plan:
* **Gemini 2.5 Flash** — Có trong Free plan
* **Gemini 2.5 Pro** — Có trong Go plan trở lên
* **GPT-5.4 / GPT-4.1** — Có trong Plus plan trở lên
* **Claude Sonnet 4.5 / Grok 4.3 / DeepSeek V4 Pro** — Có trong Pro và Enterprise plan
3. Nhấn **Lưu**
Thêm Knowledge Base (Tùy chọn) [#thêm-knowledge-base-tùy-chọn]
1. Vào tab **Knowledge Base**
2. Nhấn **Upload Documents**
3. Kéo thả file (PDF, DOCX, TXT, XLSX)
4. Đợi xử lý hoàn tất
Tiếp Theo? [#tiếp-theo]
# Chào mừng đến với Assistant Core
Assistant Core là gì? [#assistant-core-là-gì]
Assistant Core là nền tảng giúp bạn tạo AI assistant sử dụng documents của riêng bạn, kết hợp voice và triển khai đa kênh.
Bạn có thể làm gì [#bạn-có-thể-làm-gì]
* **Upload documents** và để AI trả lời câu hỏi dựa trên nội dung
* **Bật voice** cho conversation tự nhiên (Auto hoặc Realtime mode)
* **Nhúng chatbot** vào bất kỳ website nào
* **Kết nối ESP32 device** cho hardware voice assistant
* **Chọn AI model** — GPT-5.4, Gemini, Claude, Grok, DeepSeek và nhiều hơn
Bắt Đầu Nhanh [#bắt-đầu-nhanh]
Khám Phá Tính Năng [#khám-phá-tính-năng]
# Quản Lý Đăng Ký
Tổng Quan [#tổng-quan]
Đăng ký của bạn là **toàn cục theo người dùng** — một gói áp dụng cho mức sử dụng của bạn trên tất cả trợ lý bạn tương tác.
Nâng Cấp [#nâng-cấp]
1. Vào **Tài Khoản** → **Đăng Ký Của Tôi**
2. Nhấn **Nâng Cấp Gói**
3. Chọn gói mong muốn (Plus, Pro, hoặc Enterprise)
4. Chọn chu kỳ thanh toán (Hàng tháng hoặc Hàng năm)
5. Hoàn tất thanh toán qua SePay
6. Gói mới được kích hoạt ngay lập tức
Hạ Cấp [#hạ-cấp]
1. Vào **Đăng Ký Của Tôi**
2. Nhấn **Đổi Gói**
3. Chọn gói thấp hơn
4. Việc hạ cấp có hiệu lực vào cuối kỳ thanh toán hiện tại
Khi hạ cấp, bạn có thể mất quyền truy cập tính năng và quota sẽ bị giảm.
Hãy đảm bảo điều chỉnh mức sử dụng trước khi thay đổi có hiệu lực.
Hủy [#hủy]
1. Vào **Đăng Ký Của Tôi**
2. Nhấn **Hủy Đăng Ký**
3. Xác nhận hủy
4. Tài khoản của bạn chuyển về gói **Miễn Phí** ngay lập tức
Chu Kỳ Thanh Toán [#chu-kỳ-thanh-toán]
* **Hàng tháng** — Gia hạn mỗi 30 ngày
* **Hàng năm** — Gia hạn mỗi 365 ngày (tiết kiệm \~20%)
* **Thời gian ân hạn** — 3 ngày sau khi hết hạn trước khi tự động hạ về gói Miễn Phí
Phương Thức Thanh Toán [#phương-thức-thanh-toán]
Hiện hỗ trợ qua cổng thanh toán **SePay** với chuyển khoản ngân hàng (VND).
# Plans & Pricing
Plan Comparison [#plan-comparison]
| Feature | Free | Plus | Pro | Enterprise |
| ------------------- | ----------- | ------------ | -------------- | -------------- |
| **Price** | $0/tháng | $9.99/tháng | $29.99/tháng | Liên hệ |
| **Messages/day** | 50 | 200 | 1,000 | Không giới hạn |
| **Auto Voice** | 5 phút/ngày | 30 phút/ngày | 120 phút/ngày | Không giới hạn |
| **Realtime Voice** | ❌ | 15 phút/ngày | 60 phút/ngày | Không giới hạn |
| **KB Documents** | 5 | 20 | 50 | Không giới hạn |
| **Devices** | 1 | 3 | 10 | Không giới hạn |
| **Users/assistant** | 1 | 6 | 22 | Không giới hạn |
| **Assistants** | 1 | 3 | 10 | Không giới hạn |
| **Memory** | 7 ngày | 30 ngày | Không giới hạn | Không giới hạn |
AI Model Access [#ai-model-access]
| Plan | Models khả dụng |
| -------------- | --------------------------------------------------- |
| **Miễn Phí** | Gemini 2.5 Flash, GPT-4.1 Mini |
| **Go** | Các Gemini models (Flash, Pro, Flash Live) |
| **Plus** | + GPT models, Gemini models |
| **Pro** | Tất cả models (GPT, Claude, Grok, DeepSeek, Gemini) |
| **Enterprise** | Tất cả models |
Feature Access [#feature-access]
| Feature | Free | Plus | Pro | Enterprise |
| -------------- | ---- | ---- | --- | ---------- |
| Public Share | ❌ | ✅ | ✅ | ✅ |
| Widget Embed | ❌ | ❌ | ✅ | ✅ |
| Custom Domain | ❌ | ❌ | ✅ | ✅ |
| White Labeling | ❌ | ❌ | ❌ | ✅ |
| API Access | ❌ | ❌ | ❌ | ✅ |
| MCP Tools | ❌ | ✅ | ✅ | ✅ |
| Realtime Voice | ❌ | ✅ | ✅ | ✅ |
Annual Pricing [#annual-pricing]
Tiết kiệm \~20% khi thanh toán hàng năm:
| Plan | Monthly | Annual (per month) |
| ---- | ------------ | ------------------ |
| Plus | $9.99/tháng | $7.99/tháng |
| Pro | $29.99/tháng | $23.99/tháng |
Subscription của bạn là **user-global** — một plan áp dụng cho mức sử dụng
của bạn và tất cả assistant bạn sở hữu.
# Sử Dụng & Quota
Xem Mức Sử Dụng [#xem-mức-sử-dụng]
1. Vào **Tài Khoản** → **Đăng Ký Của Tôi**
2. **Tổng quan sử dụng** hiển thị mức tiêu thụ hàng ngày của bạn:
* Tin nhắn đã gửi hôm nay / giới hạn ngày
* Phút Auto Voice đã dùng / giới hạn ngày
* Phút Realtime Voice đã dùng / giới hạn ngày
Quota Hàng Ngày [#quota-hàng-ngày]
Quota tính **theo người dùng** và được đặt lại mỗi ngày lúc 00:00 (UTC):
| Quota | Theo dõi gì |
| ------------------ | ---------------------------------------- |
| **Tin nhắn** | Tin nhắn chat bạn gửi trên tất cả trợ lý |
| **Auto Voice** | Phút hội thoại giọng nói theo lượt |
| **Realtime Voice** | Phút hội thoại giọng nói thời gian thực |
Quota sử dụng là toàn cục theo người dùng. Số tin nhắn hàng ngày được chia sẻ
trên tất cả trợ lý bạn tương tác.
Giới Hạn Tài Nguyên [#giới-hạn-tài-nguyên]
Đây là tổng số trên mỗi trợ lý (không theo ngày), dựa trên gói của **chủ sở hữu trợ lý**:
| Tài nguyên | Theo dõi gì |
| --------------- | ----------------------------------- |
| **Tài liệu KB** | Tổng số tệp trong cơ sở tri thức |
| **Thiết bị** | Thiết bị ESP32/phần cứng đã kết nối |
| **Người dùng** | Người có quyền truy cập trợ lý |
| **Trợ lý** | Tổng số trợ lý bạn có thể tạo |
Giới Hạn Theo Gói [#giới-hạn-theo-gói]
| Quota / Tài nguyên | Miễn Phí | Plus | Pro | Enterprise |
| ------------------- | -------- | ------- | ----- | ---------- |
| Tin nhắn/ngày | 50 | 200 | 1,000 | ∞ |
| Auto Voice/ngày | 5 phút | 30 phút | 2 giờ | ∞ |
| Realtime Voice/ngày | — | 15 phút | 1 giờ | ∞ |
| Tài liệu KB | 5 | 20 | 50 | ∞ |
| Thiết bị | 1 | 3 | 10 | ∞ |
| Người dùng/trợ lý | 1 | 6 | 22 | ∞ |
| **Trợ lý sở hữu** | 1 | 3 | 10 | ∞ |
| Lưu trữ bộ nhớ | 7 ngày | 30 ngày | ∞ | ∞ |
Khi Hết Giới Hạn? [#khi-hết-giới-hạn]
* **Tin nhắn** — Người dùng thấy thông báo "Đã hết giới hạn tin nhắn"
* **Giọng nói** — Nút micro bị vô hiệu trong ngày
* **Tài liệu KB** — Không thể tải thêm tệp cho đến khi xóa bớt hoặc nâng cấp
* **Thiết bị** — Không thể đăng ký thiết bị mới
* **Trợ lý** — Không thể tạo trợ lý mới cho đến khi xóa bớt hoặc nâng cấp
Cần Thêm? [#cần-thêm]
[So sánh các gói](/billing/plans-pricing) để tìm gói phù hợp với mức sử dụng của bạn, hoặc [liên hệ chúng tôi](mailto:support@assistantcore.com) để biết giá Enterprise.
# Tùy Chỉnh Giao Diện
import { Callout } from "fumadocs-ui/components/callout";
import { Steps } from "fumadocs-ui/components/steps";
Tổng Quan [#tổng-quan]
Một số thiết bị ESP32 có màn hình có thể hiển thị chữ, emoji cảm xúc, hình nền và trạng thái hội thoại. Tính năng tùy chỉnh giao diện cho phép bạn tạo một gói giao diện riêng rồi gửi xuống thiết bị.
Bạn có thể dùng tính năng này để:
* Chọn font phù hợp với ngôn ngữ của trợ lý.
* Đổi bộ emoji/cảm xúc hiển thị trên màn hình.
* Chọn màu nền hoặc ảnh nền cho chế độ sáng/tối.
* Cấu hình lệnh đánh thức nếu firmware và chip hỗ trợ.
Khi Nào Nên Tùy Chỉnh? [#khi-nào-nên-tùy-chỉnh]
| Nhu cầu | Gợi ý |
| ------------------------------------------------ | --------------------------------------------------------------- |
| Trợ lý dùng tiếng Việt | Chọn font hỗ trợ tiếng Việt tốt. |
| Thiết bị đặt ở cửa hàng, showroom hoặc văn phòng | Dùng màu nền, emoji và font khớp với thương hiệu. |
| Thiết bị có màn hình nhỏ | Ưu tiên font dễ đọc, emoji kích thước vừa phải và nền đơn giản. |
| Thiết bị dùng wake word riêng | Kiểm tra chip/firmware có hỗ trợ lệnh đánh thức tùy chỉnh. |
Quy Trình Tạo Giao Diện [#quy-trình-tạo-giao-diện]
Bước 1: Chọn thiết bị [#bước-1-chọn-thiết-bị]
Chọn đúng board, chip và kích thước màn hình. Nếu chọn sai độ phân giải, hình nền hoặc emoji có thể bị méo hoặc hiển thị không đúng vị trí.
Bước 2: Chọn font [#bước-2-chọn-font]
Chọn font có đủ ký tự cho ngôn ngữ trợ lý đang dùng. Với tiếng Việt, nên dùng font hỗ trợ dấu tiếng Việt đầy đủ.
Bước 3: Chọn emoji và hình nền [#bước-3-chọn-emoji-và-hình-nền]
Chọn bộ emoji biểu cảm và màu nền/ảnh nền cho màn hình. Hình nền càng đơn giản thì chữ và trạng thái hội thoại càng dễ đọc.
Bước 4: Xuất gói giao diện [#bước-4-xuất-gói-giao-diện]
Sau khi xem trước, xuất gói giao diện thành file `assets.bin`.
Bước 5: Gửi xuống thiết bị [#bước-5-gửi-xuống-thiết-bị]
Vào **Thiết Bị** trong Bảng Điều Khiển, chọn thiết bị ESP32 và upload file `assets.bin`. Thiết bị sẽ tải gói giao diện và áp dụng sau khi cập nhật xong.
Lưu Ý Khi Chọn Nội Dung [#lưu-ý-khi-chọn-nội-dung]
| Thành phần | Lưu ý |
| ------------- | ----------------------------------------------------------------------------------------------------- |
| **Font chữ** | Chọn font đủ ký tự cho ngôn ngữ chính của trợ lý. Font quá lớn có thể làm gói giao diện nặng hơn. |
| **Emoji** | Dùng bộ emoji có kích thước phù hợp với màn hình. Ảnh động đẹp hơn nhưng có thể cần nhiều bộ nhớ hơn. |
| **Hình nền** | Tránh ảnh quá nhiều chi tiết vì chữ trên màn hình sẽ khó đọc. |
| **Wake word** | Không phải chip/firmware nào cũng hỗ trợ lệnh đánh thức tùy chỉnh. |
Thiết Bị Hỗ Trợ [#thiết-bị-hỗ-trợ]
Tùy chỉnh giao diện chỉ áp dụng cho thiết bị ESP32 có màn hình và firmware hỗ trợ gói giao diện. Thiết bị không có màn hình, web chat hoặc watch client sẽ không dùng phần này.
Nếu thiết bị không áp dụng giao diện mới, hãy kiểm tra đúng board, đúng kích thước màn hình và phiên bản firmware. Sau đó khởi động lại thiết bị và thử upload lại gói giao diện.
# Tổng Quan
Thiết bị là phần cứng có thể kết nối với trợ lý để nghe, nói, hiển thị trạng thái, nhận lệnh và cung cấp khả năng riêng. Phổ biến nhất là các board ESP32 chạy firmware giọng nói, nhưng cùng một mô hình có thể mở rộng cho thiết bị có màn hình, cảm biến, đèn, loa hoặc module điều khiển ngoại vi.
Mỗi thiết bị được đăng ký trong Bảng Điều Khiển và liên kết với một trợ lý cụ thể. Sau khi liên kết, thiết bị sẽ nhận cấu hình từ nền tảng, bắt đầu hội thoại giọng nói và có thể thực hiện các lệnh mà trợ lý gửi xuống.
Thiết Bị Gồm Những Gì? [#thiết-bị-gồm-những-gì]
Một thiết bị thường bao gồm:
| Thành phần | Vai trò |
| ----------------------- | -------------------------------------------------------------------------------------------- |
| **Firmware** | Chạy trên ESP32 hoặc phần cứng tương thích, xử lý audio, màn hình, nút bấm và kết nối mạng |
| **Thông tin thiết bị** | Tên, MAC, board, phiên bản firmware, trợ lý đang liên kết và trạng thái online |
| **Phiên giọng nói** | Cuộc hội thoại thời gian thực giữa thiết bị và trợ lý |
| **Công cụ thiết bị** | Khả năng mà trợ lý có thể gọi, ví dụ đổi màu LED, đọc cảm biến hoặc điều khiển phần cứng |
| **Giao diện tùy chỉnh** | Font, emoji, nền chat và wake word được đóng gói thành `assets.bin` cho thiết bị có màn hình |
Kiến Trúc Kết Nối [#kiến-trúc-kết-nối]
|"Opus Audio"| UDP_T
UDP_T -->|"Voice Session"| VOICE
VOICE --> CHAT
CHAT --> TOOLS
CHAT --> KB
CHAT --> MEM
VOICE -->|"TTS Audio"| UDP_T
UDP_T -->|"Opus Audio"| SPK
Device <-->|"Status & Commands"| MQTT
MQTT <-->|"Admin API"| Core`}
/>
Thiết bị không nói chuyện trực tiếp với toàn bộ hệ thống phía sau. Nó chỉ cần kết nối tới MQTT Gateway; gateway chịu trách nhiệm chuyển tiếp trạng thái, âm thanh và lệnh tới đúng phiên trợ lý.
Vòng Đời Thiết Bị [#vòng-đời-thiết-bị]
B["2. Kết nối Wi-Fi"]
B --> C["3. Lấy cấu hình OTA"]
C --> D{"Đã liên kết?"}
D -->|"Chưa"| E["Hiển thị mã 6 số"]
E --> F["4. Nhập mã trong Admin"]
F --> G["5. Liên kết trợ lý"]
D -->|"Rồi"| G
G --> H["6. Sẵn sàng hội thoại"]
H --> I["7. Cập nhật OTA"]
I --> H`}
/>
Bạn Muốn Làm Gì? [#bạn-muốn-làm-gì]
| Nhu cầu | Trang liên quan |
| ------------------------------------------ | --------------------------------------------- |
| Thêm thiết bị mới vào workspace | [Đăng Ký Thiết Bị](/devices/register-device) |
| Cập nhật firmware từ xa | [Cập Nhật Firmware OTA](/devices/ota-updates) |
| Xem tài liệu kỹ thuật về giao thức kết nối | [Giao Thức MQTT](/devices/mqtt-protocol) |
| Tùy chỉnh font, emoji, nền và wake word | [Tùy Chỉnh Giao Diện](/devices/custom-assets) |
| Cho trợ lý gọi khả năng trên thiết bị | [Device Tools](/tools-mcp/device-tools) |
Nếu bạn chỉ muốn kết nối ESP32 để nói chuyện với trợ lý, hãy bắt đầu từ trang đăng ký thiết bị. Trang MQTT Protocol dành cho người đang phát triển firmware hoặc triển khai hạ tầng kết nối.
# Giao Thức MQTT
import { Callout } from "fumadocs-ui/components/callout";
import { Steps } from "fumadocs-ui/components/steps";
Tổng Quan [#tổng-quan]
Thiết bị ESP32 dùng **MQTT Gateway** để giữ kết nối thời gian thực với Assistant Core. Gateway đứng giữa thiết bị và nền tảng, giúp thiết bị gửi trạng thái, mở phiên giọng nói, truyền âm thanh và nhận lệnh điều khiển từ trợ lý.
Ở mức khái niệm, kết nối gồm ba phần:
* **MQTT**: kênh điều khiển cho trạng thái, sự kiện và lệnh.
* **UDP audio**: kênh truyền âm thanh độ trễ thấp cho phiên giọng nói.
* **Kết nối nội bộ tới Assistant Core**: gateway chuyển tiếp phiên thiết bị vào hệ thống xử lý hội thoại.
Kiến Trúc Kết Nối [#kiến-trúc-kết-nối]
Thiết bị không nói chuyện trực tiếp với toàn bộ hệ thống phía sau. Nó chỉ cần kết nối tới MQTT Gateway; gateway chịu trách nhiệm chuyển tiếp trạng thái, âm thanh và lệnh tới đúng phiên trợ lý.
Luồng Hoạt Động [#luồng-hoạt-động]
1. Thiết bị lấy cấu hình kết nối [#1-thiết-bị-lấy-cấu-hình-kết-nối]
Khi khởi động, thiết bị kiểm tra OTA để nhận thời gian hệ thống, thông tin firmware, mã kích hoạt nếu chưa liên kết và địa chỉ kết nối tới gateway.
2. Thiết bị mở kênh MQTT [#2-thiết-bị-mở-kênh-mqtt]
Thiết bị dùng MQTT để báo online, gửi sự kiện và nhận lệnh. Đây là kênh điều khiển chính, không dùng để truyền audio liên tục.
3. Thiết bị bắt đầu phiên giọng nói [#3-thiết-bị-bắt-đầu-phiên-giọng-nói]
Khi người dùng đánh thức thiết bị hoặc nhấn nút nói, thiết bị gửi tín hiệu bắt đầu phiên. Gateway tạo phiên tương ứng trong Assistant Core.
4. Âm thanh đi qua kênh UDP [#4-âm-thanh-đi-qua-kênh-udp]
Trong phiên giọng nói, audio từ micro được gửi qua UDP để giảm độ trễ. Phản hồi TTS từ trợ lý cũng được gửi ngược về thiết bị qua kênh audio.
5. Lệnh điều khiển đi qua MQTT [#5-lệnh-điều-khiển-đi-qua-mqtt]
Các lệnh như đổi trạng thái, cập nhật giao diện, gọi công cụ thiết bị hoặc kết thúc phiên được gửi qua MQTT để thiết bị xử lý.
MQTT Dùng Cho Việc Gì? [#mqtt-dùng-cho-việc-gì]
| Nhóm dữ liệu | Ví dụ |
| ----------------------- | ----------------------------------------------------- |
| **Trạng thái thiết bị** | Online/offline, sẵn sàng nói chuyện, đang trong phiên |
| **Sự kiện thiết bị** | Wake word, nhấn nút, bắt đầu/kết thúc phiên |
| **Lệnh từ trợ lý** | Hiển thị text, đổi trạng thái, gọi công cụ thiết bị |
| **Quản lý phiên** | Mở phiên giọng nói, đóng phiên, báo lỗi |
UDP Audio Dùng Cho Việc Gì? [#udp-audio-dùng-cho-việc-gì]
MQTT phù hợp cho tin nhắn điều khiển nhỏ, nhưng không phù hợp để truyền audio liên tục với độ trễ thấp. Vì vậy âm thanh được tách sang kênh UDP:
* Micro của thiết bị gửi audio lên gateway.
* Assistant Core xử lý hội thoại và tạo phản hồi.
* Audio phản hồi được gửi lại thiết bị để phát qua loa.
Thiết kế này giúp phiên giọng nói phản hồi nhanh hơn và tránh làm nghẽn kênh điều khiển MQTT.
Trạng Thái Kết Nối Thường Gặp [#trạng-thái-kết-nối-thường-gặp]
| Trạng thái | Ý nghĩa |
| -------------------- | ------------------------------------------------------------- |
| **Chưa liên kết** | Thiết bị đã lấy được cấu hình nhưng chưa gắn với trợ lý. |
| **Online** | Thiết bị đã kết nối MQTT Gateway và sẵn sàng nhận lệnh. |
| **Đang trong phiên** | Thiết bị đang truyền audio và nhận phản hồi từ trợ lý. |
| **Offline** | Thiết bị mất nguồn, mất mạng hoặc không kết nối được gateway. |
Khi Cần Troubleshoot [#khi-cần-troubleshoot]
1. Nếu thiết bị không online, kiểm tra Wi-Fi, nguồn và firmware.
2. Nếu thiết bị có mã kích hoạt nhưng chưa dùng được, kiểm tra đã liên kết đúng trợ lý chưa.
3. Nếu thiết bị online nhưng không nói chuyện được, kiểm tra giọng nói đã bật cho trợ lý và thiết bị có nhận được cấu hình OTA mới nhất.
4. Nếu âm thanh bị trễ hoặc ngắt quãng, kiểm tra chất lượng mạng và firewall có chặn kết nối audio không.
5. Nếu lệnh thiết bị không chạy, kiểm tra firmware có hỗ trợ công cụ tương ứng không.
Trang này mô tả kiến trúc giao thức ở mức vận hành. Các chi tiết như chữ ký xác thực, payload JSON đầy đủ hoặc cấu hình Docker là phần dành cho tài liệu triển khai nội bộ.
# Cập Nhật Firmware (OTA)
Tổng Quan [#tổng-quan]
OTA (Over-The-Air) cho phép thiết bị kiểm tra và nhận bản firmware mới từ nền tảng mà không cần cắm vào máy tính. Thiết bị có thể dùng thông tin này để tải firmware phù hợp với board và tự khởi động lại sau khi cập nhật.
Trong Assistant Core, OTA không chỉ dùng để cập nhật firmware. Đây cũng là bước thiết bị lấy thời gian hệ thống, thông tin kết nối, mã kích hoạt và trạng thái liên kết với trợ lý.
Cập Nhật Tự Động [#cập-nhật-tự-động]
Nếu bật **Cập Nhật Tự Động**:
1. Thiết bị kiểm tra OTA khi khởi động hoặc theo chu kỳ của firmware
2. Nền tảng trả về firmware mới nhất phù hợp với board
3. Thiết bị tải firmware, xác minh gói cập nhật và cài đặt
4. Thiết bị khởi động lại với phiên bản mới
Bật Cập Nhật Tự Động [#bật-cập-nhật-tự-động]
1. Vào **Thiết Bị** → chọn thiết bị
2. Bật **Cập Nhật Tự Động**
3. Nhấn **Lưu**
Cập Nhật Thủ Công [#cập-nhật-thủ-công]
1. Vào **Thiết Bị** → chọn thiết bị
2. So sánh phiên bản hiện tại với phiên bản mới nhất
3. Nhấn **Cập Nhật Ngay** nếu có bản mới
Quản Lý Firmware [#quản-lý-firmware]
Quản trị viên nền tảng có thể quản lý các bản firmware được phân phối qua OTA:
1. Vào **Admin → OTA Firmware**
2. Upload firmware package cho từng board hoặc target
3. Đặt phiên bản đang **active**
4. Thiết bị bật cập nhật tự động sẽ nhận phiên bản đang hoạt động trong lần kiểm tra tiếp theo
Thiết Bị Nhận Gì Khi Kiểm Tra OTA? [#thiết-bị-nhận-gì-khi-kiểm-tra-ota]
| Nhóm dữ liệu | Mục đích |
| -------------------------- | --------------------------------------------------- |
| **Thời gian hệ thống** | Đồng bộ thời gian cho thiết bị |
| **Firmware** | Phiên bản mới nhất và URL tải firmware |
| **Kết nối thời gian thực** | Thông tin kết nối để thiết bị nói chuyện với trợ lý |
| **Kích hoạt** | Mã kích hoạt nếu thiết bị chưa được liên kết |
Nếu thiết bị không online hoặc không bắt đầu được phiên giọng nói, hãy kiểm tra OTA trước. Kết nối thời gian thực phụ thuộc vào thông tin mà bước này trả về.
# Đăng Ký Thiết Bị
Tổng Quan [#tổng-quan]
Đăng ký thiết bị là bước thêm một board phần cứng vào Bảng Điều Khiển để trợ lý có thể nhận diện và sử dụng thiết bị đó. Sau khi đăng ký, nền tảng biết thiết bị thuộc không gian làm việc nào, đang dùng board và firmware nào, được liên kết với trợ lý nào và có thể nhận cấu hình, phiên giọng nói, giao diện tùy chỉnh hoặc lệnh điều khiển.
Với thiết bị ESP32, cách khuyến nghị là dùng **mã kích hoạt 6 số**. Mã này xuất hiện khi thiết bị đã online nhưng chưa được liên kết với trợ lý.
Trước Khi Bắt Đầu [#trước-khi-bắt-đầu]
* Thiết bị đã được flash firmware tương thích.
* Thiết bị đã kết nối Wi-Fi và có thể lấy cấu hình từ nền tảng.
* Bạn có quyền quản lý trợ lý hoặc thiết bị trong Bảng Điều Khiển.
* Nếu đăng ký thủ công, bạn cần biết địa chỉ MAC và model board.
Đăng Ký Bằng Mã Kích Hoạt [#đăng-ký-bằng-mã-kích-hoạt]
1. Bật nguồn ESP32
2. Chờ thiết bị kết nối Wi-Fi và hiển thị **mã 6 số**
3. Vào **Thiết Bị** trong Bảng Điều Khiển
4. Nhấn **Thêm Thiết Bị → Nhập Mã**
5. Nhập mã kích hoạt
6. Chọn trợ lý để liên kết
7. Nhấn **Liên Kết**
Sau khi liên kết, thiết bị sẽ nhận cấu hình trợ lý trong lần kiểm tra OTA tiếp theo và có thể bắt đầu phiên giọng nói.
Đăng Ký Thủ Công [#đăng-ký-thủ-công]
Đăng ký thủ công phù hợp khi thiết bị không có màn hình, không hiển thị được mã kích hoạt hoặc bạn muốn tạo thông tin thiết bị trước khi thiết bị online.
1. Vào **Thiết Bị** → **Thêm → Thủ Công**
2. Nhập **MAC**, **tên gọi** và **mẫu board**
3. Chọn trợ lý để liên kết
4. Nhấn **Đăng Ký**
Thông Tin Thiết Bị [#thông-tin-thiết-bị]
| Trường | Mô tả |
| -------------------- | ------------------------------------------------------ |
| **Tên gọi** | Tên thân thiện trong Bảng Điều Khiển |
| **Trợ lý** | Trợ lý đang xử lý phiên giọng nói và lệnh cho thiết bị |
| **Board** | Mẫu phần cứng hoặc loại firmware |
| **MAC** | Định danh phần cứng duy nhất |
| **Firmware** | Phiên bản firmware hiện tại |
| **Lần online cuối** | Thời điểm thiết bị gần nhất kết nối với nền tảng |
| **Cập nhật tự động** | Bật/tắt cập nhật firmware qua OTA |
Chuyển Thiết Bị Sang Trợ Lý Khác [#chuyển-thiết-bị-sang-trợ-lý-khác]
1. Vào **Thiết Bị** và chọn thiết bị cần đổi
2. Nhấn **Đổi trợ lý**
3. Chọn trợ lý mới
4. Nhấn **Lưu**
Một thiết bị chỉ nên được liên kết với một trợ lý tại một thời điểm để phiên giọng nói, bộ nhớ và công cụ thiết bị không bị trộn ngữ cảnh.
# Tên Miền Riêng
Yêu Cầu [#yêu-cầu]
* Gói **Pro** trở lên
* Quyền quản lý DNS của tên miền
Cài Đặt [#cài-đặt]
1. Vào **Cài Đặt Trợ Lý → Thương Hiệu**
2. Nhập tên miền tại ô **Tên miền riêng** (ví dụ: `chat.congty.com`)
3. Hướng dẫn DNS sẽ hiển thị ngay bên dưới — thêm bản ghi theo hướng dẫn
Cấu Hình DNS [#cấu-hình-dns]
**Subdomain** (khuyến nghị, ví dụ: `chat.congty.com`):
| Loại | Name | Value | TTL |
| :---- | :----- | :------------------------------------ | :--- |
| CNAME | `chat` | `5c2806ade7622a0e.vercel-dns-017.com` | Auto |
**Apex domain** (ví dụ: `myassistant.ai`):
| Loại | Name | Value | TTL |
| :--- | :--- | :------------- | :--- |
| A | `@` | `216.198.79.1` | Auto |
4. Lưu cài đặt trợ lý
5. Chứng chỉ **SSL** được cấp tự động bởi Vercel (Let's Encrypt)
DNS có thể mất tới 24–48 giờ để lan truyền. Trong thời gian chờ, trợ lý vẫn truy cập được qua subdomain mặc định.
Quản trị viên hệ thống cần thêm tên miền vào
**Vercel Dashboard → Settings → Domains**
trước khi người dùng cấu hình DNS.
White Labeling [#white-labeling]
* Thay **logo** riêng tại mục Thương Hiệu
* Đặt **màu chủ đạo** tùy chỉnh
* Xóa "Powered by Assistant Core" (gói Enterprise)
# Nhúng Chatbot
Lấy Mã Nhúng [#lấy-mã-nhúng]
1. Vào **Cài Đặt Trợ Lý → Nhúng**
2. Sao chép đoạn mã:
```html
```
3. Dán vào HTML website, trước thẻ đóng `