← Tất cả bài viết
Cẩm nang

Nút inline Telegram tải mãi? Kiểm tra answerCallbackQuery

Nếu nút inline dạng callback của Telegram cứ hiển thị trạng thái đang tải, hãy kiểm tra bot có gọi answerCallbackQuery cho callback_query đã nhận hay không. Trả HTTP 200 từ webhook không thay thế lời gọi này. Telegram yêu cầu trả lời callback ngay cả khi không cần hiển thị thông báo. Hãy phản hồi thao tác sớm và theo dõi kết quả của tác vụ chậm bằng một luồng riêng.

Điểm chính

  • Nút callback tạo callback_query, không phải tin nhắn văn bản thông thường cho bộ xử lý tin nhắn.
  • Truyền id của query vào callback_query_id, không dùng ID tin nhắn, cuộc trò chuyện hay update.
  • Nội dung thông báo là tùy chọn; vẫn có thể trả lời mà không hiển thị chữ.
  • Biểu tượng tải biến mất không chứng minh thanh toán, phê duyệt hay tác vụ hỗ trợ đã hoàn tất.

Vì sao nút đang tải cần answerCallbackQuery

Tài liệu Telegram Bot API chính thức phân biệt nút callback và nút URL. callback_data được gửi đến bot trong callback query, còn nút URL mở liên kết đã cấu hình. Trước tiên, hãy xác định đúng loại nút bạn đã tạo.

Một thao tác callback có ba kết quả cần tách biệt:

Kết quảCăn cứ xác nhậnChưa chứng minh được điều gì
Đã xác nhận nhận webhookHTTP response thành công từ bộ nhậnCallback đã được trả lời
Đã phản hồi thao tác nútGọi answerCallbackQuery cho query đóNghiệp vụ đã thành công
Nghiệp vụ đã hoàn tấtKết quả thực tế được ứng dụng lưu chắc chắnChỉ nhận hoặc trả lời lượt bấm là chưa đủ

Telegram mô tả answerCallbackQuery có thể hiển thị thông báo hoặc hộp cảnh báo, và trả về True khi thành công. Tham số bắt buộc là callback_query_id; text là tùy chọn. Xác nhận webhook thông thường không thay thế được phương thức này.

Nếu bạn đang cân nhắc gọi phương thức Bot API trong phần thân phản hồi webhook hay gửi yêu cầu riêng, hãy đọc so sánh phản hồi webhook với yêu cầu API riêng. Đó là lựa chọn cách gọi API; bài này tập trung vào việc thiếu phản hồi cho tương tác với nút.

Xác định điểm xảy ra lỗi

Callback không đến bộ xử lý

Kiểm tra loại update nhận được thay vì chỉ tìm trong log tin nhắn. Xác nhận bộ phân luồng xử lý callback_query và bộ lọc allowed_updates được cấu hình tường minh có chứa loại này. Telegram quy định rằng nếu không truyền allowed_updates, hệ thống giữ thiết lập trước đó. Vì vậy, bỏ tham số này trong lần cấu hình sau không có nghĩa là đặt lại bộ lọc.

Nếu cả update không đến, hãy dùng hướng dẫn chẩn đoán chuyển phát bằng getWebhookInfo. Lỗi chuyển phát và việc ứng dụng âm thầm bỏ qua callback cần được sửa ở hai nơi khác nhau.

Callback đã đến nhưng nút vẫn tải

Đối chiếu các trường với update nhận được thực tế:

Trường đầu vàoCách dùng
callback_query.idTruyền vào callback_query_id của answerCallbackQuery
callback_query.dataXử lý như dữ liệu đầu vào của ứng dụng khi có
callback_query.messageNgữ cảnh tin nhắn khi có; không được yêu cầu mọi callback đều có trường này
callback_query.inline_message_idNhận diện tin nhắn gửi qua inline mode khi có

Telegram cung cấp ngữ cảnh khác nhau cho tin nhắn bot thông thường và tin nhắn qua inline mode. Bộ xử lý luôn truy cập callback_query.message.chat có thể gặp lỗi trước khi kịp trả lời callback.

Khi cần kiểm tra kết quả, hãy gửi yêu cầu answerCallbackQuery riêng. Ghi nhận thành công hoặc lỗi thực tế nhưng không để lộ token của bot. Đừng đợi AI, CRM hoặc dịch vụ chậm khác hoàn tất rồi mới phản hồi thao tác.

Đã hết tải nhưng nghiệp vụ thực hiện sai

Dữ liệu callback là đầu vào, không phải bằng chứng cấp quyền. Telegram cảnh báo rằng tin nhắn gốc có thể không còn chứa nút mang dữ liệu vừa nhận. Nên kiểm tra danh sách thao tác được phép, quyền người dùng và trạng thái hiện tại của đối tượng trên máy chủ.

Trong một quy trình phê duyệt giả định, trả lời lượt bấm không được tự động đánh dấu hồ sơ là đã duyệt. Hãy xác thực yêu cầu, thực hiện chuyển trạng thái hợp lệ một lần, rồi hiển thị kết quả thực tế riêng. Loại bỏ update được chuyển phát lặp và ngăn người dùng bấm lặp là hai việc khác nhau; trường hợp thứ hai cần điều kiện bảo vệ ở cấp nghiệp vụ.

Kiểm thử tương tác, không chỉ webhook

Trước khi đưa vào sử dụng, hãy kiểm tra:

  • Callback hợp lệ được trả lời mà không cần nội dung thông báo.
  • Tác vụ chậm không chặn phản hồi thao tác.
  • Thiếu message không làm bộ xử lý dừng vì lỗi.
  • Dữ liệu không nhận diện được hoặc đã cũ không kích hoạt thao tác trái quyền.
  • Chuyển phát lặp hoặc bấm lặp không thực hiện lại tác vụ không thể hoàn tác.

Đây là các kiểm thử nghiệm thu được đề xuất, không phải kết quả đã kiểm thử hay cam kết thời gian phản hồi của Telegram.

Vai trò của UnifyPort

Hãy tiếp tục dùng Telegram Bot API chính thức cho bàn phím inline của bot và việc trả lời callback. Giao diện không chính thức của UnifyPort phục vụ các tài khoản nhắn tin được kết nối, với hợp đồng sự kiện chuẩn hóa riêng. Danh mục sự kiện webhook công khaimessage.received, nhưng không mô tả sự kiện callback_query hay thao tác answerCallbackQuery. Đừng đổi tên sự kiện tin nhắn thành callback hoặc cho rằng webhook hợp nhất sẽ trả lời nút của bot.

Nếu ứng dụng còn cần nhận tin nhắn cấp tài khoản, chẳng hạn từ WhatsApp và Zalo, hãy tách bộ nhận đó khỏi bộ xử lý tương tác của bot. Tài liệu chuyển phát UnifyPort quy định phần thân phản hồi sẽ bị bỏ đi. Trả JSON chứa phương thức Bot API tại đây không thực thi việc trả lời callback.

Câu hỏi thường gặp

HTTP 200 có làm nút Telegram ngừng tải không?

Không, nếu chỉ trả trạng thái này. HTTP xác nhận nhận update, còn callback cần answerCallbackQuery.

Có bắt buộc gửi nội dung với answerCallbackQuery không?

Không. text là tham số tùy chọn nên có thể trả lời mà không hiển thị thông báo.

Có dùng ID tin nhắn làm callback_query_id được không?

Không. Hãy dùng id của đối tượng CallbackQuery đã nhận.

Webhook tin nhắn hợp nhất có thay bộ xử lý này được không?

Không theo hợp đồng được UnifyPort công bố. Giữ việc xử lý callback trong tích hợp bot Telegram chính thức.

Bước tiếp theo và nguồn

Thực hiện một lượt bấm có kiểm soát, rồi theo dõi từ lúc nhận callback_query đến kết quả thực tế của answerCallbackQuery. Nếu cũng cần nhận tin nhắn cấp tài khoản, hãy xem hợp đồng sự kiện webhook chuẩn trước khi dùng chung logic ứng dụng giữa hai bộ nhận.

Nguồn chính thức được kiểm tra ngày 2026-09-22: Telegram Bot API — CallbackQuery, answerCallbackQuery, InlineKeyboardButton và allowed_updates.

UnifyPort API

Biến tích hợp nhắn tin thành một pipeline sản phẩm ổn định.

Bắt đầu bằng cách gửi qua một API, rồi đưa mọi tin nhắn inbound trở lại hệ thống kinh doanh bằng sự kiện chuẩn.