稍微看一下 Telegram 官方文件,哇!好強喔,功能說明的第一項赫然出現「可以取代整個網站」!口氣真的很大。雖然我的需求應該很低,但能夠確認前面是一座豐富的寶藏,還是很令人興奮的,待基本功能掌握之後,可以再評估和決定要不要往下挖。
要建立一個新的 bot,就是透過 /newbot 指令,經過兩三個對話就完成了,非常方便:
token 已得,這表示輪到程式上場了,先來發個訊息給自己。這時要先搞定一項資訊:我的 id 是什麼?這讓我們再次運用 Telegram 的對話式操作模式。先搜尋「userinfobot」,對他發送「/start」指令,即可取得自己的 id。
填入以下 CHAT_ID 欄位:
import requests
TOKEN = "809700110011:AAGVtTU8xxyyxxyyxx"
CHAT_ID = "89500110011"
MESSAGE = "Hello from Python!"
url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
payload = {"chat_id": CHAT_ID, "text": MESSAGE}
response = requests.post(url, json=payload)
print(response.json())
幾行程式,手機的 app 立馬收到訊息,感覺超快的,沒有延遲的問題,這樣已經滿足了首階段的需求。把這段程式包一包,整合到系統中,已經可以完全取代即將下線的 line notify,或貴森森的 line messaging api,或延遲嚴重的 discord api。對比之前的測試:
Telegram 的便利程度,完全大勝,就是他了。
有兩種方法可以回應訊息,一是 webhook,之前測試 Line Messaging Api 用過,必須架設自己的 web application 來回應訊息。Telegrame 貼心的提供了第二種方式,就是 long pooling,一段時間問一次 server,嗨,有沒有新訊息?雖不是最好,但應急時或即時性要求不高時,還是可以使用。以下我用真人傳送一個測試訊息給我的 bot,然後讓程式代表的 bot 的角色,讀取所收到的訊息,可以取得 24 小時內收到的訊息:
url = f"https://api.telegram.org/bot{TOKEN}/getUpdates"
response = requests.get(url)
print(response.json())
----------------------
{'ok': True, 'result': [{'update_id': 347541729, 'message':
{'message_id': 49, 'from': {'id': 895660150, 'is_bot': False,
'first_name': 'Newman', 'last_name': 'Chen', 'language_code': 'zh-hans'},
'chat': {'id': 895660150, 'first_name': 'Newman', 'last_name': 'Chen',
'type': 'private'}, 'date': 1741422768, 'text': 'Newman here'}}]}
解開 json 讓資訊清晰:
回覆訊息的方法,與 sendMessage 的方法一樣,只是多夾帶一個參數,其實只是多一樣資訊 message_id = 49 而已,注意參數的結構要符合規定。
url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
payload = {"chat_id": CHAT_ID,
"text": "reply msg",
"reply_parameters": {
"message_id": 49
}}
response = requests.post(url, json=payload)
print(response.json())
以上已經完成發送和回覆訊息的實作工作,這相對於官網所說明的功能,可能百分之一都不到,但在平常的系統開發工作中,其實也只會用到發送訊息而已,所以就暫告一段落了。將來是否會有新的 idea 來激盪,保持開放心態,隨緣囉。
Newman 2025/3/8
導覽頁:紐曼的技術筆記-索引
參考連結: