今天收到一封來自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」

telegram 搜尋botfather

找到BotFather這個Bot (Telegram的所有Bot,需要透過BotFather來創建)

telegram botfather

進入BotFather後,點/start 初始化。(所有bot進入時都會需要點這個/start ,也就是發送/start 這個指令,來初始化觸發Bot )

telegram bot start

它會顯示說可以建立新的bot 或者 編輯現有的bot,這邊我們點 /newbot

建立新bot

IMG_3269.PNG

telegram 建立bot 與api token

  1. 它會讓您替Bot取個名子

    例如:Aidec Bot

  2. 接著替Bot取個使用者名稱(結果必須用 bot)

    例如:myTestAidec_bot、myTestAidecBot 這樣的格式

  3. 假如使用者名稱沒人用過,就會顯示Done... ,然後點 t.me/使用者名稱,就能進入自己的Bot

  4. 其中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
創業、網站經營相關內容未來將發布在 小易創業筆記