iT邦幫忙

2025 iThome 鐵人賽

DAY 29
0
Build on AWS

最適合小型工作室精打細算的服務使用法系列 第 29

Day 29 - API Gateway、Lambda 與 Telegram 衝撞的火花 之 Telegram Bot 的建立

  • 分享至 

  • xImage
  •  

從「好像寫不完」到「哎呀剩兩天」

剛開始寫這系列的時候,我滿懷信心地想:「三十天?簡單啦~AWS 這麼多坑可以寫三百天!」
結果沒幾天就開始懷疑人生,再來就開始懷疑自己,第二十九天開始突然意識到快跑完了,但想寫的東西似乎還沒寫完。
https://ithelp.ithome.com.tw/upload/images/20251009/20141071VZdfDS9B7b.png

但既然都講到 API Gateway 跟 Lambda 了,就不得不講到跟「訊息軟體整合」這件事。
畢竟身為一個 IT 工程師,我們每天都在被訊息淹沒:

  • Slack ping 一下:「可以幫我看一下 production 嗎?」
  • Jira ping 一下:「有空幫我估個點數嗎?」
  • Telegram ping 一下:「Lambda 爆炸了。」

所以,能自動回覆、能主動推播錯誤訊息的 Bot,根本就是維運人生的救贖。

LINE vs Telegram:貧窮限制了自動化

講到訊息整合,大家第一個想到的不是 LINE 就是 Telegram。
不過呢……LINE 的免費訊息額度就像你的 AWS 免費額度一樣,講究但用不久
再加上 LINE 的 API 開放程度沒有 Telegram 的好,相較之下,Telegram 就像開放世界遊戲,
API 文件清楚、彈性高、開放友善,
最重要的是:可能是我比較偏心Telegram吧!

Lambda + API Gateway + Telegram:省錢又好用的自動化夢想組合

以前我們想讓 Telegram Bot 自動回訊息,
必須開一台伺服器,24 小時待命接收 Telegram 的通知。
結果伺服器每天閒著沒事幹,月初 AWS 帳單就寄來說:「你好,我又來收保護費了。」

但現在有了 API Gateway + Lambda,這一切都不一樣了!
伺服器可以下班、錢包也能喘口氣。

簡單講:

  • API Gateway 就像你家門口的保全,負責接外來訊息。
  • Lambda 就是裡面那位聰明又窮的工程師,訊息進來他才醒來幫你處理。

整個流程超像:

Telegram:「嘿,有人跟你 bot 說話!」
API Gateway:「好我收到了,Lambda 幫我回一下!」
Lambda(被吵醒):「幹...好啦好啦。」然後回一個訊息回去。

超省電、超有效率、超適合懶人工程師。
當然,如果訊息量暴增,你帳單的 Lambda 部分也會暴增。
(AWS 說:「你省伺服器費沒錯啊,但我會從別的地方收回來。」)

建立 Telegram Bot(向 BotFather 祈禱吧)

好,前戲講完,我們正式動工。

Telegram 的機器人世界裡,有個傳說中的 NPC —— BotFather
它是所有 Telegram Bot 的爸爸。
你要建立新的 Bot,一定得先拜他。

打開 Telegram 搜尋「BotFather」,
看到有藍勾勾的那個才是正版,
沒有藍勾的那些是「假爸爸」,拜了會出事。
點進去,按下「Open」。
https://ithelp.ithome.com.tw/upload/images/20251009/201410718wh0cWXpfZ.png

你就會看到這個傳說中的介面👇, 要先增加一個 Bot ,請點擊畫面中間的 Create New Bot
https://ithelp.ithome.com.tw/upload/images/20251009/20141071ouu1UezsB5.png

  1. 幫你的 Bot 取個名字,例如「大黃蜂」(太長了,英文不好就簡單用個 bee)
  2. 幫它設定一個 username,重點是結尾一定要是 bot,因為試了好幾個都重覆有人用了,最後試出一個 smallbee123_bot (UserName 的後面必須要以 bot 作為結尾)
  3. 確認都沒有問題之後按下紅框 3 的 Create Bot
    https://ithelp.ithome.com.tw/upload/images/20251009/20141071vCsLNFF7kM.png

創好以後,BotFather 會送你一個神秘代碼 —— Bot Token
就是紅框框起來看不到內容的部份,只要對著模糊不清的地方點一下,原本看不清楚的Token就會顯現出來。它長得像一串密碼:1234567890:ABCdefGHIjklMNOpqRSTuvwxyz ,只要點一下藍色的Copy按鈕,就可以將 Token 複製到剪貼簿中。千萬別亂貼出來,不然你的 Bot 可能會被別人拿去跟別人聊天(比被盜帳號還悲劇)。
https://ithelp.ithome.com.tw/upload/images/20251009/20141071cquOY754KA.png
到這裡就算成功的建立一個 Telegram 的 Bot,至於其他BOT的相關資訊,可以到官方文件當中參考詳細的資料 - Bots: An introduction for developers

Webhook,那個「Bot 的耳朵」

接下來進入重頭戲:Webhook
簡單講,Webhook 就是「Telegram Bot 的耳朵」。

它會幫你聽使用者在 Telegram 上說了什麼,
然後把那些訊息轉送到你指定的 URL。

也就是說:

使用者:「嗨!」
Telegram:「收到,我幫你丟去這個 URL」
Lambda:「幹嘛啦?哦,你要回嗨啊,OK。」

Webhook 的設定方式也超工程師:
不用 GUI、不用按按鈕,
只要在瀏覽器網址列打這段:

https://api.telegram.org/bot[Bot_Token]/setWebhook?url=[你的API Gateway網址]

就可以設定完成。

是不是感覺很熟悉?
沒錯,這就跟打 curl 指令差不多的浪漫(如果你是 GUI 派的工程師那請忽略)。

唯一要注意的是:
Webhook URL 必須是 HTTPS(Telegram 很重視安全感),
所以別拿那種在 localhost 跑的 API 來騙它,
Telegram 會直接已讀不回。

因為我們的 API Gateway 尚未設定好,所以還不知道設定好之後的 URL。我們會在API Gateway設定好後再來進行這項設定。

明天我們會繼續讓這個 Telegram Bot 學會回話。
也就是說 —— Telegram 傳訊息 → API Gateway → Lambda → 回傳結果 → Telegram。
這條通訊鍊,讓你從「被通知」變成「主動通知別人」。

到時候我們會讓 Lambda 開口說話,
只要再加上你天馬行空的想法,讓你的 Telegram Bot 成為團隊裡那個不請自來的「自動化小助理」不再是夢想。


上一篇
Day 28 - API Gatway 與 Lambda 的參數傳遞指南 - POST 篇
系列文
最適合小型工作室精打細算的服務使用法29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言