如何在Telegram中建立機器人並新增指令?

為什麼要為機器人設定指令?
對許多開發者來說,在 Telegram 中建立機器人只是第一步,但真正的關鍵在於讓用戶一眼就知道你的機器人能做些什麼。透過指令選單(Command Menu),開發者可以定義一組斜線命令(如 /start、/help),讓用戶在對話框中點選即可觸發對應功能。視覺化的指令選單不僅大幅降低新手使用者的學習門檻,也能幫助開發者規範互動流程,減少不必要的文字解析。本文將以當前最新版本的 Telegram 用戶端與 BotFather 為基礎,逐步拆解從零建立機器人、新增與管理指令的完整流程,並涵蓋平台差異、邊界條件與常見問題。
前置準備:你需要的東西
在開始之前,請確認你具備以下條件。若你計劃後續透過 API 設定指令,建議也先了解基礎 HTTP 請求或程式語言經驗。
- 一個有效的 Telegram 帳號(手機或桌面版皆可)。
- 能夠存取 BotFather(官方機器人管理員,ID 為 @BotFather)。
- 若後續需要透過 API 設定指令,則需準備機器人 Token(由 BotFather 建立時提供)與基本程式開發環境。
第一步:透過 BotFather 建立新機器人
BotFather 是 Telegram 官方提供的機器人生成器,所有公開機器人皆必須先在此註冊才能取得 API 權限,可謂機器人開發的起點。操作非常簡潔:
- 在 Telegram 搜尋欄輸入
@BotFather並進入對話,或直接開啟 t.me/botfather。 - 發送指令
/newbot,BotFather 會要求你提供機器人顯示名稱(例如「天氣助手」)和使用者名稱(需以bot結尾,例如WeatherHelperBot)。 - 成功建立後,BotFather 會回傳一組 HTTP API Token,請立即妥善保存(後續無法再次查詢完整 Token,僅能透過
/token指令重設)。
💡 提示:機器人名稱可隨時修改,但使用者名稱一旦建立即無法刪除,僅能透過 /setname 修改顯示名稱。若需要完全重新建立,請另行使用 /newbot 建立新身份。
第二步:為機器人新增指令(透過 BotFather)
建立機器人後,指令選單預設只有 /start(由 Telegram 自動添加)與 /help(若啟用了 Privacy Mode 則需自行定義)。要新增自訂指令,請繼續使用 BotFather,操作如下:
- 在與 BotFather 的對話中發送
/setcommands。 - BotFather 會要求你選擇一個機器人(如果只有一個,它會自動選取)。
- 輸入指令列表,格式為每行一條:
command - 簡短描述。例如:
start - 開始使用 help - 取得幫助 weather - 查詢今日天氣 feedback - 提交意見
發送後,BotFather 會回應「Success! Command list updated.」,表示指令已生效。此時返回與你的機器人的對話,輸入 / 即可看到下拉選單包含以上指令。指令選單是使用者與機器人互動的主要入口,精心設計指令能顯著提升使用者體驗。
⚠️ 注意:指令名稱(command)只能包含小寫英文字母、數字及底線,且不可超過 32 個字符。描述最多 256 個字符。此外,雖然可以定義多個指令,但一般建議不超過 10 個,以免選單過長影響使用者體驗。
平台差異:手機 vs 桌面
BotFather 的操作在 Android、iOS 與桌面版上幾乎完全相同,唯一的差別在於輸入方式與便利性:
- 手機版(Android / iOS):點擊輸入框下方的斜線圖示可快速插入指令,或者直接在輸入框中手動鍵入。複製貼上指令列表時,建議使用長按選取後貼上,較不易出錯。
- 桌面版(Windows / macOS / Linux):可直接使用鍵盤輸入,支援複製貼上,對於需要編輯大量指令文字的情境更為便利。
整體而言,桌面版在批次操作上佔優勢,手機版則適合快速單條測試。若你希望指令選單在你的機器人對話中即時顯示,請確保用戶端版本至少為 2020 年之後的更新,舊版可能不支援動態指令選單。
進階指令管理:修改、刪除與分組
修改既有指令
重複執行 /setcommands,輸入新的列表即可完全覆蓋舊的指令。由於 BotFather 不支援局部修改,每次都是全量覆蓋,因此建議自行備份常用指令列表,以便快速恢復或比對。
刪除所有指令
發送 /setcommands 後,只輸入一個空格或發送空內容,BotFather 會回應「No commands set.」從而清空指令選單。清空後,使用者在對話中輸入 / 將不會看到任何建議指令,僅能手動輸入已知指令觸發功能。
為不同對話情境設定專屬指令
從 2021 年起,Telegram Bot API 支援透過 setMyCommands 方法針對不同對話類型(群組、頻道、私人對話)或特定語言設定不同指令集。這項功能對於大型機器人尤為重要,例如在群組中只顯示管理指令,避免個人化指令干擾。雖然 BotFather 目前僅提供全域指令設定,但開發者可透過 API 實現細粒度控制。範例情境如下:
- 在私人對話中顯示
/start、/help。 - 在群組中新增
/admin、/ban等管理指令。 - 使用
scope參數指定all_private_chats或all_group_chats。
這部分需要撰寫程式碼(如使用 Python 的 python-telegram-bot 或直接發送 HTTP POST 請求),不熟悉開發的使用者仍可維持使用 BotFather 統一設定。
# 範例:透過 API 將指令限於群組(以目前最新 API 為準)
POST https://api.telegram.org/bot<YOUR_TOKEN>/setMyCommands
Content-Type: application/json
{
"commands": [
{"command": "ban", "description": "封鎖使用者"},
{"command": "unban", "description": "解除封鎖"}
],
"scope": {"type": "all_group_chats"}
}
方案A vs 方案B:BotFather vs API
| 比較維度 | 方案A:BotFather | 方案B:API setMyCommands |
|---|---|---|
| 適用對象 | 非技術使用者、快速測試 | 開發者、需要細粒度控制 |
| 指令範圍 | 全域(所有對話) | 可依對話類型/語言/使用者區分 |
| 更新方式 | 手動輸入 | 自動化腳本或程式 |
| 生效時間 | 即時(約1-2秒) | 即時,無延遲 |
| 版本依賴 | 無需編程,BotFather 已內建 | 需支援 Bot API 4.8+(約2020年後) |
驗證指令是否生效
完成設定後,可以透過以下方法確認指令已正確載入。從使用者視角驗證是最直觀的方式,但若指令未即時出現,可能是用戶端快取導致。
- 使用者視角:開啟與該機器人的私人對話,在輸入框中輸入
/,觀察彈出的選單是否包含你設定的指令。若僅顯示空白,請稍候約10秒後重新輸入。 - 開發者視角:發送
getMyCommandsAPI 請求(需帶 Token),檢查回應中的 commands 陣列是否正確。
📌 經驗性觀察:部分舊版用戶端(如 2021 年以前的版本)可能不會立即更新指令選單,建議用戶更新至最新版。若使用 BotFather 後指令未出現,可嘗試重新啟動 Telegram 應用程式或清除快取(設定 > 進階 > 清除快取)。
常見錯誤與排除
BotFather 回應「Invalid command format」
原因:指令列表的格式不符合規範。每一行必須嚴格為 command - description,注意中間的「空格-空格」不可省略。此外,指令名稱只能使用小寫字母、數字和底線,且不可包含空格或特殊符號。解決方案:檢查是否誤用了全形符號或多餘空格。
指令選單未更新
可能原因:用戶端快取或舊版客戶端不支援動態選單。請關閉 Telegram 並重新開啟;若問題持續,可嘗試清除應用程式快取(設定 > 進階 > 清除快取)。若仍無效,請確認用戶端版本是否過舊,並考慮更新。
多個機器人共用同一組指令
每個機器人的指令是獨立儲存的,使用 /setcommands 時請確認選取了正確的機器人。若不慎選錯,可再次執行 /setcommands 並選擇正確目標。另外,透過 API 設定時則不會有混淆問題,因為 Token 已明確指定機器人身份。
適用與不適用場景
建議使用 BotFather 設定的情況
- 非技術背景的機器人管理者,只需基本互動指令,無需程式介入。
- 快速原型驗證,需要在幾分鐘內上線測試,例如開發初期的概念驗證。
- 機器人僅服務單一群組或頻道,無需區分語言或對話類型,全域指令已足夠。
建議使用 API 或避免此設定方式的情況
- 需要根據使用者語言顯示不同語言的指令描述(例如 /start 在英文下顯示 Start,日文下顯示開始)。
- 需要針對頻道、群組、私人聊天分別提供不同指令集,避免互相干擾。
- 指令列表頻繁變更(超過每日一次),手動更新效率低,適合自動化。
- 機器人服務數百萬用戶,需要指令選單動態調整,例如根據A/B測試呈現不同指令。
最佳實踐與檢查清單
- 指令命名一貫性:採用小寫英文、單字間以底線分隔(如
get_weather)。避免使用縮寫過度簡化的名稱,例如gw會讓使用者難以理解。 - 描述精準:在 256 字限制內說明用途,讓使用者不需要猜測。例如
subscribe - 每日早上8點推送天氣預報優於subscribe - 訂閱。 - 限制指令數量:實務上 5~8 個指令最適合,超過 10 個會讓選單難以瀏覽。可使用巢狀選單(透過 Inline Keyboard)或透過機器人內指令列舉次要功能。
- 定期審視使用統計:透過 API 或其他分析工具觀察哪些指令最常被使用,移除或合併低使用率的指令,保持選單精簡。
- 保留 /start 與 /help:即使你沒有自定義,Telegram 預設會顯示這兩個指令,建議不要覆蓋 /start 的標準功能(初始化對話),而 /help 則可自訂為功能說明入口。
- 版本相容性:若你的機器人需支援舊版用戶端(如 iOS 8.0 以前的 Telegram),請注意指令選單可能無法正常顯示,請在機器人回覆中提示使用者手動輸入指令。
版本演進與遷移建議
回顧 Telegram Bot API 的發展歷程,指令管理經歷了以下重要變化:
- 2015 年(API 1.0):指令只能由開發者在 BotFather 中硬編碼,無法動態調整。
- 2019 年(API 4.8):支援
setMyCommands和deleteMyCommands,開發者可透過程式動態管理指令。 - 2020 年(API 5.2):新增
scope參數,允許按對話類型(私人、群組、頻道)區分指令。 - 2021 年(API 5.6):支援語言代碼參數,實現多語言指令描述,提升國際化體驗。
若你的機器人仍完全依賴 BotFather 設定且未使用 API,建議逐步遷移至程式化管理,以便靈活運用上述新特性。遷移步驟如下:
- 先透過 BotFather 的
/setcommands設定全域基礎指令作為 fallback,確保遷移過程中不會中斷服務。 - 在機器人程式碼中加入啟動時呼叫
setMyCommands的邏輯,覆蓋 BotFather 設定(API 設定的優先級高於 BotFather 設定)。 - 根據回報與使用數據,逐步引入 scope 與語言參數,實現精細化指令管理。
FAQ 常見問題
已經建立的指令可以修改嗎?
可以。重複執行 /setcommands 並輸入新的列表即可完全覆蓋。或者使用 API 的 setMyCommands 方法。注意 BotFather 不支援局部修改,每次都是全量覆蓋,因此建議先備份舊列表。
指令最少需要設定幾個?
可以為 0 個。如果不設定任何指令,用戶仍可手動輸入 /start 觸發,但不會顯示建議選單。建議至少設定 /start 與 /help,以引導新用戶入門。
指令對群組管理員和非管理員有區別嗎?
指令本身沒有權限限制,任何群組成員都能輸入。若需區分權限,必須在後端處理器中檢查使用者角色。BotFather 不提供基於角色的指令顯示功能,但可透過 API 搭配自訂 scope 實現部分控制。
可以為指令設定中文名稱嗎?
指令名稱只能使用小寫英文字母、數字和底線。描述可以使用任何 Unicode 字元,包括中文。因此指令顯示的說明文字可以完全中文化,但斜線命令本身仍需維持英文。
為什麼我設定了指令,但在群組中輸入 / 沒有出現?
請確認你是在正確的對話中(機器人必須是群組成員)。此外,某些用戶端可能因隱私設定而未啟用建議指令,請檢查 Telegram 設定 > 語言與輸入 > 建議指令是否開啟。若仍無效,可嘗試重新啟動應用程式。
結語:下一步行動建議
現在你已經學會如何透過 BotFather 建立 Telegram 機器人並新增指令。接下來可以嘗試:
- 為機器人設定隱私模式(透過 BotFather 的
/setprivacy),決定是否接收群組中所有訊息。 - 使用
/setuserpic為機器人上傳頭像,提升品牌辨識度。 - 研究 Bot API 文件,將指令管理自動化並加入更多動態功能,例如根據使用者行為動態調整指令。
掌握指令設定,等於掌握了機器人與使用者溝通的捷徑。無論你是新手還是老手,建議定期審視指令使用數據,持續優化。展望未來,Telegram Bot API 持續演進,可能引入更細緻的指令權限控制或動態建議功能,開發者應保持關注官方更新日誌。立刻打開 Telegram 與 @BotFather 對話,建立你的第一個指令吧!