grammY 教學:打造強大又靈活的 Telegram 機器人新利器

作者: Calpa Liu
字數:2648
出版:2025 年 4 月 28 日
想開發功能強大又高效的 Telegram 機器人?本文深入介紹現代化框架 Grammy(grammY),解析其技術特點、TypeScript 支援、靈活中間件架構與豐富插件生態,助你快速上手並打造專業機器人應用!

什麼是 Grammy?

grammY 是一個現代化的 Telegram 機器人開發框架,專為提升開發效率與程式碼可維護性而設計。 它基於 Telegram 官方 Bot API 打造,提供了一層直覺且高效的開發介面,讓開發者無需直接處理底層的 HTTP 請求或複雜的更新處理機制。

grammY 支援 TypeScript 和 JavaScript,並可在 Node.js、Deno,甚至瀏覽器中運行,適用於各種開發環境。 透過簡潔的 API 設計,grammY 讓開發者能夠快速建構功能豐富的 Telegram 機器人,從小型通知服務到大型交互式應用皆適用。

若你曾經直接操作 Telegram Bot API,就會體會 grammY 所帶來的抽象化好處:它簡化了 webhook 管理、訊息處理與錯誤處理, 讓開發者能專注於功能設計,而非底層通訊細節。

https://assets.calpa.me/普通和理所當然是什麼呢.avif
https://assets.calpa.me/普通和理所當然是什麼呢.avif

如果你想看一個實際應用 grammY 框架開發的真實案例,可以參考我之前分享的 MyGO!!!!! Telegram 機器人開發實錄 —— 結合 Cloudflare Workers 和 Hono,打造高速且具互動性的動漫圖片搜索機器人!

為什麼選擇 Grammy?

grammY 之所以成為眾多開發者首選,主要源於以下四大優勢:

  1. 簡潔直覺的 API 設計:讓機器人開發快速上手,降低學習曲線
  2. 卓越的 TypeScript 支援:提升開發效率與專案可維護性
  3. 同步更新 Telegram Bot API:確保支援最新平台功能
  4. 靈活的中間件架構:提供高彈性且模組化的程式組織方式

接下來,我們將逐一深入探討這些特點。

簡單易用的 API

grammY 的核心優勢之一是其簡潔的 API 設計。它使得創建 Telegram 機器人變得異常簡單:

// 建立一個回覆任意訊息的基本機器人
import { Bot } from "grammy";

const bot = new Bot(""); // 在引號中放入你的機器人令牌 (https://t.me/BotFather)

// 回覆任何消息
bot.on("message", (ctx) => ctx.reply("你好!"));

bot.start();

這種簡潔性使得 grammY 成為初學者和經驗豐富的開發者的理想選擇。

卓越的 TypeScript 支持

作為一個從零開始使用 TypeScript 構建的框架,grammY 提供了出色的類型安全和推斷功能。這對於大型專案尤為重要,可以顯著提高開發速度並減少錯誤。

與 Telegraf 等其他框架相比,grammY 的類型系統更加直觀且易於使用。當你編寫代碼時,grammY 能夠提供更好的編輯器支持和自動完成功能。

始終保持最新狀態

grammY 始終與最新版本的 Telegram Bot API 保持同步。這確保你可以立即使用 Telegram 平台提供的最新功能,而不必等待框架更新。

靈活的中間件架構

grammY 採用靈活的中間件架構,允許開發者輕鬆組織代碼和處理各種類型的更新:

// 使用會話中間件
bot.use(session());

// 處理命令
bot.command("start", (ctx) => ctx.reply("已啟動!"));
bot.command("help", (ctx) => ctx.reply("幫助文本"));

// 處理文本消息
bot.on(":text", (ctx) => ctx.reply("收到文本!"));

// 處理照片
bot.on(":photo", (ctx) => ctx.reply("收到照片!"));

這種架構使代碼組織更加清晰,並且可以根據需要進行擴展。

豐富的插件生態系統

想要擴充你的機器人功能?grammY 擁有完善的官方與社群插件,讓你快速實現各種需求!

官方插件總覽

grammY 團隊與社群提供了豐富的官方插件,涵蓋資料管理、國際化、多語系、錯誤處理等各種開發需求。以下整理官方分類與常見插件,方便選擇合適的擴展功能:

Built-in 內建插件

  • Sessions and Storing Data:提供 session 管理與資料存儲能力,輕鬆保存用戶狀態。
  • Inline and Custom Keyboards:簡單生成各式回覆鍵盤與內聯鍵盤。
  • Media Groups:支援管理 Telegram 的多媒體訊息群組(Media Groups)。
  • Inline Queries:快速處理內聯查詢 (Inline Mode) 的回應。

Official 官方插件

  • Conversations (@grammyjs/conversations):建構多步驟、可中斷恢復的對話流程。
  • Interactive Menus (@grammyjs/menu):定義動態可互動的選單,輕鬆管理內聯鍵盤結構。
  • Stateless Question (@grammyjs/stateless-question):以輕量方式提問並處理回覆,無需持久 session。
  • Concurrency (@grammyjs/runner):提升大規模機器人的併發處理能力。
  • Hydration (@grammyjs/hydrate):自動豐富 Context,讓訊息與回覆 API 更直覺易用。
  • Retry API Requests (@grammyjs/auto-retry):自動重新嘗試失敗的 API 請求,提高穩定性。
  • Flood Control (@grammyjs/transformer-throttler):控制傳送頻率,避免因超過速率限制而被封鎖。
  • Rate Limit Users (@grammyjs/ratelimiter):限制單一用戶的請求頻率,防止濫用。
  • Files (@grammyjs/files):簡化檔案上傳與管理功能。
  • Internationalization (@grammyjs/i18n):輕量級國際化支援,讓機器人多語系切換更方便。
  • Internationalization (fluent) (@grammyjs/fluent):整合 Mozilla Fluent 系統的強大國際化支援。
  • Router (@grammyjs/router):根據不同條件(命令、狀態)分派處理邏輯,適合大型專案架構。
  • Emoji (@grammyjs/emoji):輕鬆插入、處理 Telegram 特有 emoji 表情符號。
  • Parse Mode (@grammyjs/parse-mode):簡化文字格式處理(HTML、Markdown 解析設定)。
  • Chat Members (@grammyjs/chat-members):操作、管理聊天群組成員資訊與權限。
  • Commands (@grammyjs/commands):統一管理 bot 指令註冊與說明,提升指令易用性。

✨ 更多插件資訊與完整 API 文件,可參考官方網站:grammy.dev/plugins

這些插件模組化、設計簡潔,讓你可以依需求靈活組合,快速打造出功能強大且維護性高的 Telegram 機器人應用。

對話管理能力

grammY 的對話插件(conversations)允許開發者創建複雜的交互式對話,而無需使用大量的配置對象。這使得代碼更加可讀和易於維護:

// 使用對話插件創建交互式對話
async function orderPizza(conversation, ctx) {
  await ctx.reply("您想要什麼尺寸的披薩?");
  const size = await conversation.form.select(["小", "中", "大"]);

  await ctx.reply("您想要哪種配料?");
  const toppings = await conversation.form.select(
    ["起司", "蘑菇", "火腿", "鳳梨"],
    {
      multiselect: true,
    }
  );

  await ctx.reply(`您已訂購${size}號披薩,配料:${toppings.join("、")}`);
}

這種方式使開發者能夠創建更加自然和流暢的用戶體驗。

與其他框架的比較

與 Telegraf 的比較

Telegraf 是另一個流行的 Telegram 機器人框架,但 grammY 在多個方面提供了顯著優勢:

  1. API 更新:grammY 始終支持最新版本的 Bot API,而 Telegraf 經常落後幾個版本
  2. 文檔質量:grammY 擁有更完整、更易於理解的文檔
  3. TypeScript 支持:grammY 的 TypeScript 類型更加直觀,能更好地跟隨代碼邏輯
  4. 內聯提示:grammY 集成了來自官方 Bot API 參考的內聯提示,在編寫代碼時提供幫助

性能比較

在性能方面,grammY 被設計為輕量級且高效,使其適合需要快速響應時間的機器人。其架構最小化了開銷,允許高效處理 Telegram 更新。

對於大規模使用,grammY 提供了專門的工具如 runner 插件,用於處理高負載場景。

部署選項

grammY 機器人可以輕鬆部署到各種平台。現代部署推薦使用 Cloudflare Workers,能充分發揮 grammY 輕量、高效的特性。以下是部署到 Cloudflare 的基本流程:

  1. 安裝 Wrangler CLI:
npm install -g wrangler
  1. 初始化專案並選擇適合的模板(建議使用 TypeScript 專案):
wrangler init my-bot
cd my-bot
  1. 設定 wrangler.toml,並將 Telegram Bot Token 設為環境變數。
name = "my-bot"
main = "src/index.ts" # 如果是 TypeScript 專案
compatibility_date = "2025-04-28"

使用 wrangler secret put BOT_TOKEN 上傳 Telegram Bot Token 會更加安全

  1. 撰寫機器人邏輯,確保使用 Cloudflare 相容的 API,例如透過 fetch 處理 Telegram webhook 請求。
import { Bot, webhookCallback } from "grammy";
import { Hono } from "hono"; // 可選,使用 Hono 管理 routing

// 讀取環境變數
const bot = new Bot(BOT_TOKEN);

// 定義機器人邏輯
bot.command("start", (ctx) =>
  ctx.reply("🤖 歡迎來到我的 Cloudflare Workers 機器人!")
);
bot.on("message:text", (ctx) => ctx.reply(`你說了:${ctx.message.text}`));

// 使用 Hono 框架處理 Webhook 請求
const app = new Hono();

// 設置 webhook 處理路徑
app.post("/webhook", async (c) => {
  const handler = webhookCallback(bot, "cloudflare-mod");
  return await handler(c.req.raw);
});

export default app;

如果不想用 Hono,只用原生 Fetch API,也可以這樣簡寫:

import { Bot, webhookCallback } from "grammy";

const bot = new Bot(BOT_TOKEN);

bot.command("start", (ctx) => ctx.reply("🤖 歡迎使用 Workers Bot!"));

const handle = webhookCallback(bot, "cloudflare-mod");

export default {
  async fetch(request: Request): Promise<Response> {
    if (
      request.method === "POST" &&
      new URL(request.url).pathname === "/webhook"
    ) {
      return handle(request);
    }
    return new Response("OK", { status: 200 });
  },
};
  1. 部署到 Cloudflare:
wrangler deploy

部署完成後,會給你一個網址,例如:

https://my-bot.<your-subdomain>.workers.dev/webhook
  1. 設定 Telegram Webhook

最後,使用下面的指令把你的 bot 接到 Workers 的 webhook:

curl "https://api.telegram.org/bot<你的BOT_TOKEN>/setWebhook?url=https://my-bot.<your-subdomain>.workers.dev/webhook

記得把 <你的BOT_TOKEN><your-subdomain> 換成自己的。

Cloudflare Workers 支援高併發、低延遲回應,非常適合 Telegram 機器人需要快速處理訊息的場景。

記得在 Telegram 上設定你的 Webhook URL 指向 Cloudflare Workers 部署的網址。

Workers 有執行時間限制(一般 10 秒),建議只做快速回應,若有長時間處理需求,可以搭配 Durable Objects 或外部後端服務。

社區和生態系統

grammY 擁有一個不斷成長的社區和豐富的生態系統:

  1. 優秀的文檔:詳細的指南、教程和 API 參考
  2. 社區支持:友好的 Telegram 社區聊天群組,歡迎新成員和問題討論
  3. 豐富的示例:包含各種用例的示例機器人
  4. 與其他工具的集成:與數據庫和 Web 框架的良好集成

結論

https://assets.calpa.me/感謝您讓我占用的寶貴時間.avif
https://assets.calpa.me/感謝您讓我占用的寶貴時間.avif

Grammy 是一個強大、現代且易於使用的 Telegram 機器人框架,適合各種規模的項目。其卓越的 TypeScript 支持、豐富的插件生態系統和全面的文檔使其成為開發 Telegram 機器人的理想選擇。

對於喜歡使用 TypeScript 進行開發的全棧工程師來說,Grammy 提供了熟悉的開發體驗和出色的工具支持,使機器人開發過程更加愉快和高效。無論是簡單的通知機器人還是複雜的交互式應用,Grammy 都能幫助你快速實現目標。

如果你正在尋找一個現代、可靠且功能豐富的 Telegram 機器人框架,Grammy 絕對值得一試。它不僅簡化了機器人開發流程,還提供了擴展性和性能,使其成為長期項目的理想選擇。

關於 Calpa

Calpa 擅長使用 TypeScriptReact.jsVue.js 建立 Responsive Website。

他積極參與開源社區,曾在 2019 年的香港開源大會上擔任講者,提供工作經驗和見解。此外,他也在 GitHub 上公開分享個人博客程式碼,已獲得超過 300 顆星星和 60 個分支的支持。

他熱愛學習新技術,並樂意分享經驗。他相信,唯有不斷學習才能跟上快速演變的技術環境。

熱門文章

最新文章

圖片管理中心
管理圖片資源
IP 查詢
快速查詢和定位 IP 地址的地理位置和相關信息
Python 運行器
無需後端、無需登入,只需打開瀏覽器即可運行 Python 代碼(由 Pyodide 提供支持)
封面圖生成器
自動創建適合各種平台的文章封面圖
原作(青山剛昌)產生器
一鍵創建原作(青山剛昌)的封面圖
日本色彩
探索和使用傳統日本色彩
部落格內容洞察儀表板
以視覺化儀表板方式追蹤文章成效、分享熱度與分類分布,協助創作者掌握內容表現。
蒙特卡羅估算 π
使用蒙特卡羅方法演示 π 值的估算過程
LLM
使用 LLM 模型進行聊天
活動圖生成器
一鍵創建活動的封面圖
Wagmi Card
一鍵創建 Wagmi 的封面圖
Facebook Quote
Facebook Quote
Music Macro Language (MML) Studio
用程式語法編寫旋律,用音符構築想像
Blurhash
一鍵創建 Blurhash
文字分類器
使用 MediaPipe TextClassifier 分類文字
前端工程師免費工具資源
前端工程師免費工具資源
後端工程師免費工具資源
後端工程師免費工具資源
全端工程師免費工具資源
全端工程師免費工具資源
Web3 工程師免費工具資源
Web3 工程師免費工具資源
紫微斗數排盤系統|結合 AI 的命盤性格與事業財務分析生成器
紫微斗數排盤工具,輸入生日與時辰,自動生成完整命盤分析提示(Prompt)。結合最專業紫微理論與 AI 助力,助你深入解析性格、事業、財務與人際課題。免費使用,適合命理師及紫微愛好者。