TG-Staff 团队 avatar TG-Staff 团队

Telegram 內聯按鈕限制全解析:避開鍵盤限制設計高效選單

Telegram 按鈕 設計 內聯鍵盤 Bot開發

Telegram 內聯按鈕限制全解析:如何避開鍵盤限制設計高效選單

如果你正在開發或運營一個 Telegram Bot,你一定遇過內聯按鈕(Inline Keyboard)。它是 Bot 與使用者互動的核心入口:點擊按鈕觸發訂單查詢、切換語言、提交工單……幾乎所有高效選單都離不開它。

但很多開發者直到上線後才發現,精心設計的選單在 Telegram 客戶端上「缺胳膊少腿」——按鈕消失、點擊無回應、多語言翻譯後佈局崩掉。這些問題的根源,往往是對 Telegram 內聯按鈕限制不夠了解。

本文會逐一拆解 Telegram Bot API 中與內聯鍵盤相關的 5 個核心限制參數,然後給出 4 個從實際運營場景中總結的避坑方案。最後你會看到,如何用 TG-Staff 這樣的可視化工具在開發階段就提前規避這些限制,避免線上事故。

為什麼 Telegram 內聯按鈕限制會影響你的 Bot 選單設計

先看一個真實場景:你的 Bot 為跨境電商客戶提供多語言客服。選單裡有「查看訂單」「聯絡客服」「切換語言」「常見問題」四個主按鈕。中文版看起來完美,但切換到德語版本後,按鈕文字變長了,一行 2 個按鈕變成了一行 1 個,使用者需要多滑一屏才能看到所有選項。

這還不是最嚴重的。如果你在程式碼裡不小心給某一行分配了 9 個按鈕,或者 callback_data 寫了一個超過 64 位元組的字串,Telegram 會直接忽略超出的部分——使用者看到的選單不完整,點擊某些按鈕毫無反應,而你從伺服器端日誌裡什麼都查不到。

這種問題在開發階段很難重現,因為開發者往往只測試自己常用的語言和按鈕數量。一旦進入多語言、多裝置、多使用者的真實環境,內聯按鈕限制就成了一個「隱藏的坑」。

提前了解這些限制參數,並在設計選單時主動做驗證,是避免線上故障的最有效手段。

Telegram 內聯按鈕的 5 個核心限制參數(官方文件解讀)

Telegram Bot API 文件中對內聯鍵盤的限制有明確說明。以下是五個最關鍵的參數,每個參數都可能成為你選單設計的瓶頸。

數量與佈局限制:每行最多 8 個按鈕,總鍵盤最多 100 個

這是最直觀的限制,也是開發者最容易忽略的。

  • 每行按鈕數:≤ 8 個。如果你在一行中放了 9 個按鈕,Telegram 會忽略第 9 個及之後的按鈕。
  • 總按鈕數:≤ 100 個。整個內聯鍵盤(所有行加起來)不能超過 100 個按鈕。
  • 行數:API 文件沒有明確限制行數,但受到總按鈕數 ≤ 100 的制約。比如你每行放 5 個按鈕,最多可以放 20 行;每行放 8 個按鈕,最多只能放 12 行(8 × 12 = 96,剩餘空間不足一行)。

在實際開發中,建議你主動限制每行按鈕數 ≤ 5 個,尤其是在行動端。因為 Telegram 客戶端會根據螢幕寬度自動調整按鈕寬度:一行 8 個按鈕在桌面端勉強能看,但在手機螢幕上會變得非常窄,使用者很難點擊準確。

回呼資料(callback_data)長度限制:1–64 位元組

這是內聯按鈕的「隱藏命門」。callback_data 是按鈕被點擊後回傳給 Bot 的資料,Telegram 要求其長度必須在 1 到 64 位元組 之間。

超過 64 位元組時,Telegram 不會回傳任何錯誤資訊,但按鈕點擊後會無回應——使用者不知道發生了什麼,你也不知道為什麼日誌裡沒有記錄。

位元組計算時要注意:

  • 英文字母和數字:每個字元佔 1 位元組
  • 中文字元:每個字元佔 3 位元組(UTF-8 編碼下)
  • Emoji:每個佔 4 位元組

舉個例子,callback_data = "order_20250315_zh_cn_001" 看起來不長,但實際長度是 29 位元組。而 callback_data = "查询订单_2025年3月15日_中文版" 中文字元太多,很容易超過 64 位元組。

最佳實踐:使用短代碼對映。比如資料庫裡存一個短 ID,callback_data 只傳 id=12345,然後 Bot 根據 ID 查資料庫拿到完整資料。TG-Staff 的自動翻譯功能也可以幫你把長文字轉成短標識,避免超長問題。

按鈕文字長度與多行支援的隱性規則

Telegram 官方對按鈕文字長度沒有硬性上限,但實際使用中你會發現:

  • 文字過長時,Telegram 客戶端會自動換行,但換行位置不可控,可能導致按鈕高度不一致。
  • 文字超過 64 個字元時,部分客戶端版本會截斷顯示(末尾加省略號)。

建議將按鈕文字控制在 20 個字元以內(英文)或 10 個中文字元以內。這樣在大多數螢幕上都夠完整顯示,且不會因換行導致佈局錯亂。

多語言場景下,不同語言的文字長度差異很大。比如「查看訂單」在中文裡是 4 個字元,在德語裡是 12 個字元(„Bestellung anzeigen“)。如果你不針對每種語言單獨設計按鈕文字,就可能出現按鈕寬度不均、排版難看的問題。

選單設計避坑:4 個因限制引發的常見問題與解決方案

下面這 4 個問題,是運營 Bot 的團隊最容易踩的坑。每個問題都附帶可落地的解決方案。

問題 1:選單按鈕「消失」或「多出一行」

現象:你明明在程式碼裡定義了 6 個按鈕在一行,但使用者看到的只有 5 個;或者總按鈕數超過 100 個,最後幾個按鈕直接消失。

原因:違反了每行 ≤ 8 個、總按鈕數 ≤ 100 個的限制。Telegram 不會報錯,只是靜默忽略超出部分。

解決方案

  • 在程式碼中硬性驗證:發送鍵盤前,遍歷陣列檢查每行數量 ≤ 8 且總數量 ≤ 100。
  • 如果使用 TG-Staff 的可視化流程編輯器,拖拽按鈕時右側面板會即時顯示當前鍵盤的按鈕總數與每行數量。超出限制時,編輯器會自動提示並禁止儲存。

問題 2:使用者點擊按鈕無回應(callback_data 超長)

現象:使用者點擊按鈕後,Bot 沒有收到任何回呼,也不回傳錯誤。排查後發現是 callback_data 超過 64 位元組。

原因callback_data 長度超過 64 位元組,Telegram 丟棄了該資料。

解決方案

  • 改用短代碼對映。例如,將 callback_data = "order_detail_20250315_zh_cn_001" 改為 callback_data = "od_12345",然後在伺服器端用 ID 查詢資料庫取得完整資訊。
  • 利用 TG-Staff 的自動翻譯功能,將長文字自動轉為短標識,避免手動處理。

問題 3:多語言選單在翻譯後按鈕錯位

現象:同一套選單,中文版看起來整齊,切換到德語或俄語後,按鈕寬度不一致,甚至出現「按鈕重疊」的視覺效果。

原因:不同語言的文字長度差異導致 Telegram 客戶端自動調整按鈕寬度,但調整邏輯不可控。

解決方案

  • 為每種語言單獨設計按鈕文字長度。中文按鈕控制在 4-6 個字,英文控制在 8-12 個字元,德語控制在 10-15 個字元。
  • 使用圖示+短文字的組合。比如用 📦 + „Order“ 而不是 „View Order Details“。圖示佔位穩定,短文字適配性好。
  • 在 TG-Staff 編輯器中,可以為每個語言版本獨立設定按鈕文字,避免全域統一文字帶來的錯位問題。

問題 4:動態更新按鈕時,新鍵盤超出限制

現象:你在使用者點擊按鈕後動態更新鍵盤(比如分頁顯示),結果新鍵盤的按鈕數超過了 100 個,導致部分按鈕不顯示。

原因:動態生成的鍵盤沒有重新驗證限制。

解決方案

  • 在每次生成新鍵盤前,驗證總按鈕數 ≤ 100 且每行 ≤ 8。
  • 如果資料量較大,考慮分頁:每頁顯示 50 個按鈕(5 行 × 10 列),使用者點擊「下一頁」時更新鍵盤。
  • TG-Staff 的編輯器支援自動分頁,你可以設定「每頁最多顯示 N 個按鈕」,超出後自動生成翻頁按鈕。

實戰案例:用 TG-Staff 的拖拽式編輯器規避內聯按鈕限制

假設你正在設計一個多語言客服選單,包含以下功能:

  • 查看訂單(3 種狀態:待付款、已付款、已出貨)
  • 聯絡客服
  • 切換語言(支援 8 種語言)
  • 常見問題(5 個分類)

如果不加限制,這個選單的總按鈕數會達到 3 + 1 + 8 + 5 = 17 個,每行按鈕數也可能超過 8 個。如果手動編寫 JSON 程式碼,很容易漏掉驗證。

在 TG-Staff 的拖拽式命令流程編輯器中,你可以這樣做:

  1. 拖拽一個「內聯鍵盤」節點到畫布上。
  2. 在右側面板中,依次加入按鈕:第一行放「查看訂單」「聯絡客服」「常見問題」,第二行放 8 個語言切換按鈕。
  3. 編輯器會即時顯示當前鍵盤的按鈕總數(11 個)和每行數量(第一行 3 個,第二行 8 個)。如果某行超過 8 個,編輯器會標紅並禁止儲存。
  4. 如果你需要加入更多按鈕(比如「待付款」「已付款」「已出貨」作為子選單),可以建立一個新的鍵盤節點,用「跳轉」動作連接,而不是把所有按鈕擠在一個鍵盤裡。

小提示

在 TG-Staff 編輯器中拖曳按鈕時,右側面板會即時顯示當前鍵盤的按鈕總數與每行數量,超出限制時會自動提示並禁止儲存。這可以幫你避免發布後才發現選單「缺按鈕」的尷尬。

內聯按鈕 vs 回覆鍵盤:何時該用哪種互動方式?

很多開發者會混淆內聯按鈕和回覆鍵盤(Reply Keyboard)。兩者的核心區別在於:

對比維度內聯按鈕回覆鍵盤
顯示位置訊息下方,與訊息綁定輸入框上方,獨立於訊息
按鈕數量限制≤ 100 個(每行 ≤ 8 個)無明確上限,但建議 ≤ 20 個
回調數據支援 callback_data(≤64 字節)不支援,點擊後直接發送文字
適用場景多步驟選擇、資料查詢、分頁文字輸入引導、快速回覆
使用者體驗不佔用輸入框,可保留歷史訊息會遮擋輸入框,適合簡短回覆

決策標準

  • 如果使用者需要選擇多個選項(例如選擇訂單狀態、切換語言),使用內聯按鈕。
  • 如果使用者只需要輸入簡短文字(例如回覆「是」「否」、輸入關鍵詞),使用回覆鍵盤。
  • 如果選單內容超過 100 個按鈕(例如商品列表),考慮分頁內聯按鈕,或者改用輸入引導+關鍵詞匹配。

常見 FAQ:關於內聯按鈕限制的 4 個高頻疑問

Q1:動態更新按鈕時,會重新計算限制嗎? A:是的。每次透過 editMessageReplyMarkupeditMessageText 更新鍵盤時,Telegram 都會重新驗證新鍵盤的按鈕數、每行數、callback_data 長度。如果新鍵盤超出限制,更新會失敗並返回錯誤。

Q2:限制是否因客戶端版本不同而變化? A:不變化。這些限制是 Telegram Bot API 的硬性規範,所有客戶端版本(iOS、Android、桌面版)都遵守相同的限制。但不同客戶端的顯示效果可能略有差異(例如按鈕寬度、換行行為)。

Q3:付費 Bot 有更高上限嗎? A:沒有。Telegram Bot API 對所有 Bot 一視同仁,無論是否付費、是否使用第三方平台(如 TG-Staff),限制完全相同。

Q4:callback_data 可以用中文嗎? A:可以,但要小心字節長度。中文字元佔 3 字節,emoji 佔 4 字節。建議使用短代碼映射,避免直接傳遞中文文字。

注意

Telegram Bot API 的限制對所有 Bot 一視同仁,無論是否付費、是否使用第三方平台(如 TG-Staff)。但好的工具可以幫助你在開發階段就檢測出越界風險,避免線上事故。

總結與下一步行動

Telegram 內聯按鈕限制看似簡單,但實際開發中經常被忽略。記住三個核心數字:每行 ≤ 8 個按鈕、總鍵盤 ≤ 100 個按鈕、callback_data ≤ 64 位元組

如果你想立即檢查現有 Bot 選單是否存在超限風險,可以這樣做:

  1. 打開你的 Bot,截圖所有選單頁面。
  2. 逐行統計按鈕數量,確認每行 ≤ 8 個、總按鈕數 ≤ 100 個。
  3. 檢查所有 callback_data 長度(尤其注意中文和 emoji 的位元組佔用)。
  4. 如果發現問題,用 TG-Staff 的拖拽編輯器快速重構選單——它是目前為止少數能在 UI 層面即時校驗內聯按鈕限制的工具。

下一步行動