今天收到一封來自LINE信後,就立馬來寫一篇Telegram Bot教學文,因為信件內容是說LINE Notify在2025/04/01要結束服務了,想來之後陸續會有許多人也要找尋替代方案,目前的想法是,使用LINE的Messaging API但這個需要付費(未來估計也是會串),另一種則是用Telegram Bot API
簡單評估了一下我的需求,LINE Notify我主要是用來提醒我系統用戶有新的訂單,是附加的免費服務,假如改使用LINE Messaging API,每月起碼多好幾千的成本,這樣實在不划算。還是先使用Telegram Bot API,之後有想要LINE的Messaging API的用戶再來串。以下是Telegram Bot教學
步驟1.創建Telegram Bot
打開Telegram,在chat選單,點搜尋,輸入「@botfather」
找到BotFather這個Bot (Telegram的所有Bot,需要透過BotFather來創建)
進入BotFather後,點/start 初始化。(所有bot進入時都會需要點這個/start ,也就是發送/start 這個指令,來初始化觸發Bot )
它會顯示說可以建立新的bot 或者 編輯現有的bot,這邊我們點 /newbot
建立新bot
它會讓您替Bot取個名子
例如:Aidec Bot
接著替Bot取個使用者名稱(結果必須用 bot)
例如:myTestAidec_bot、myTestAidecBot 這樣的格式
假如使用者名稱沒人用過,就會顯示Done... ,然後點 t.me/使用者名稱,就能進入自己的Bot
其中token to access the HTTP API: yyyyyyy:xxxxxxxxxxxxxxxxxxxxxxxxxxxx 這串就是你的API Token (請妥善保管)
步驟2.寫個PHP與Telegram API互動
<?php // Telegram Bot API Token (就是上面建立好Bot時,它給的API Token) $apiToken = "72yyyyyyy:xxxxxxxxxxxxxxxxxxxx"; // Telegram 聊天 ID 或者群組 ID (這個下面給獲取教學) $chatId = "xxxxxxxxxx"; // 要發送的訊息內容 $message = "Hello, AidecBot Send something text"; // 發送訊息的網址 $url = "https://api.telegram.org/bot$apiToken/sendMessage"; // 構建發送的資料 $data = [ 'chat_id' => $chatId, 'text' => $message ]; // 使用 cURL 發送 POST 請求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); // 輸出結果 echo $response; ?>
獲取ChatID
方法一.使用userinfobot
第一種方式,是搜尋@userinfobot 這個bot (有幾個同名的),只要進入輸入 /start ,它就會回傳你的個人ChatID了
方法二.使用webhook (推薦)
可以設定bot的webhook,透過程式捕捉訊息
先設定Bot 對應的webhook Url
https://api.telegram.org/bot你的API_TOKEN/setWebhook?url=接收webhook的網址
對應的Webhook Url寫個PHP程式來處理接收
<?php $apiToken = "72yyyyyyy:xxxxxxxxxxxxxxxxxxxx"; function sendMessage($chatId, $message,$apiToken) { // Telegram 聊天 ID 或者群組 ID (例如從 @username 尋找聊天 ID) $chatId = $chatId; // 要發送的訊息內容 $message = $message; // 發送訊息的網址 $url = "https://api.telegram.org/bot$apiToken/sendMessage"; // 構建發送的資料 $data = [ 'chat_id' => $chatId, 'text' => $message ]; // 使用 cURL 發送 POST 請求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); // 輸出結果 return $response; } /* { "update_id": 845452945, "message": { "message_id": 5, "from": { "id": 700000007, "is_bot": false, "first_name": "Aidec", "last_name": "Li", "language_code": "zh-hans" }, "chat": { "id": 700000007, "first_name": "Aidec", "last_name": "Li", "type": "private" }, "date": 1728272461, "text": "test" } } */ $data = json_decode(file_get_contents('php://input'),true); $rData = []; //發送者的ID $senderID = (isset($data['message']['from']['id']))?$data['message']['from']['id']:''; //發送的文字 $text = (isset($data['message']['text']))?$data['message']['text']:''; //訊息的類型 $chatType = (isset($data['message']['chat']['type']))?$data['message']['chat']['type']:''; //chatID $chatID = (isset($data['message']['chat']['id']))?$data['message']['chat']['id']:''; //後續就看如何自行運用
這樣就能捕捉到發送者的ID、ChatID之類的,無論是個人發送或者群組發送都能用這個來捕捉。
要捕捉群組ID,需要先將Bot邀請到群組,然後再發送一筆訊息,這樣webhook也會接收到,其中就有群組的ID。
設定Bot Menu
建立一個PHP程式,執行此PHP。
<?php // Telegram Bot API Token $apiToken = "YOUR_BOT_API_TOKEN"; // API 請求的 URL $url = "https://api.telegram.org/bot$apiToken/setMyCommands"; // 定義菜單中的指令 $commands = [ [ 'command' => 'start', 'description' => '開始使用機器人' ], [ 'command' => 'getinfo', 'description' => '獲取你的用戶ID' ], [ 'command' => 'settings', 'description' => '修改設定' ] ]; // 使用 cURL 發送 POST 請求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['commands' => $commands])); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); // 輸出 API 回應 echo $response; ?>
文章轉載或引用,請先告知並保留原文出處與連結!!(單純分享或非營利的只需保留原文出處,不用告知)
原文連結:
https://blog.aidec.tw/post/telegram-bot-api
若有業務合作需求,可寫信至: opweb666@gmail.com
創業、網站經營相關內容未來將發布在 小易創業筆記