Kiến trúc
Tổng quan
SDK hiện tại được chia theo các lớp rõ ràng:
src/request: xử lý HTTP transport và map lỗi APIsrc/models: parse payload thànhUser,Chat,Message,Update,WebhookInfosrc/core:Bot,Application,ApplicationBuilder,CallbackContextsrc/handlers: xử lý command và messagesrc/filters: các bộ lọc có thể kết hợpsrc/i18n: hệ thông điệp runtime chovi/en
Luồng chạy cơ bản
text
Mã ứng dụng
-> ApplicationBuilder
-> Application
-> Bot
-> Lớp request
-> Zalo Bot API
-> Update model
-> Handler layer
-> Callback của bạnMapping từ Python sang TypeScript
Project này được tham chiếu từ python_zalo_bot, nhưng không copy cơ học. Một số phần đã được đơn giản hóa:
- bỏ các pattern Python-only như
__slots__, sentinel defaults, freeze object - giữ lifecycle rõ ràng qua
initialize()vàshutdown() - ưu tiên object và parser TypeScript gọn hơn
- fallback parse cho response gửi tin nhắn nếu API trả payload mỏng
Vai trò của từng khối chính
src/request
Đây là lớp đáy của SDK. Nó chịu trách nhiệm:
- gọi HTTP tới Zalo Bot API
- xử lý timeout
- map HTTP status sang custom error
src/models
Các model nhận payload thô và chuyển thành object dễ dùng hơn trong code, ví dụ:
UpdateMessageUserChat
src/core
Đây là phần điều phối chính:
Bot: client gọi APIApplication: vòng polling và dispatch updateApplicationBuilder: cách khởi tạo app rõ ràng hơn
src/handlers và src/filters
Hai phần này tạo ra kiểu lập trình event-driven:
CommandHandlerdùng cho command như/startMessageHandlerdùng cho text, photo hoặc các filter khácfilterscho phép kết hợp điều kiện theo kiểu dễ đọc
src/i18n
Phần này đọc ZALO_BOT_LANG và quyết định log/runtime message nên hiển thị bằng tiếng Việt hay tiếng Anh.
Giới hạn hiện tại
- chưa có media upload abstraction đầy đủ
- chưa có worker queue layer
- webhook framework adapters chưa tách thành package riêng
Luồng chạy khi polling
- App được tạo từ
ApplicationBuilder Application.runPolling()gọiBot.initialize()Bot.initialize()kiểm tra token quagetMe()ApplicationlặpgetUpdate()Updateđược parse thành model- Handler đầu tiên match sẽ xử lý update
- Callback của bạn có thể gọi
replyText()hoặc các method gửi message khác