on
Trang này mô tả hàm on() trong zalo-bot-js, dùng để đăng ký listener theo loại event đã được SDK chuẩn hóa.
Đây là cách chính để viết bot theo mô hình event listener.
Chữ ký hàm
ts
on(event: BotEvent, callback: BotEventCallback): thisCác event hiện có
messagetextphotostickercommand
Callback nhận gì
Callback nhận hai tham số:
message: Messagemetadata: { update: Update }
Ví dụ dữ liệu thực tế:
ts
bot.on("message", async (message, metadata) => {
console.log("[message]", {
updateId: metadata.update.updateId,
chatId: message.chat.id,
messageId: message.messageId,
fromUserId: message.fromUser?.id,
messageType: message.messageType,
eventTypes: metadata.update.eventTypes,
text: message.text ?? null,
sticker: message.sticker ?? null,
photoUrl: message.photoUrl ?? null,
});
});Khi nào nên dùng
- tách xử lý theo loại event
- viết bot rõ ràng hơn thay vì tự parse payload thô
- gắn nhiều listener cho các loại nội dung khác nhau
Ví dụ với text
ts
bot.on("text", async (message) => {
console.log("[text]", {
chatId: message.chat.id,
text: message.text,
});
});Cách eventTypes được suy ra
SDK không trả raw event name từ Bot API. Thay vào đó:
- nếu có
messagethì có eventmessage - nếu có
message.textthì có eventtext - nếu
textbắt đầu bằng/thì có thêmcommand - nếu có
photoUrlthì cóphoto - nếu có
stickerthì cósticker
Lưu ý thực tế
on("message")là listener tổng quát nhấton("text")chỉ chạy khi message có text- nếu cần regex matching, dùng onText
Kế tiếp
- Xem onText để match bằng regex.
- Xem processUpdate để hiểu event được phát ra từ đâu.
Cập nhật lần cuối: 05/04/2026