PHP&Telegram:建立一個機器人並發送訊息至指定對話或頻道中

2022/03/11 3,999 3 網路應用 , 網站技術 , PHP

Telegram 是個人非常喜歡用的通訊社群軟體,它的機器人(Bot)API 非常完善,且不管是申請、使用都完全免費,對開發者來說可是一大福音,不過由於在台灣使用人數仍比起主流的 LINE 少得多,所以相關的教學也偏稀少,於是決定來研究如何使用 PHP 來整理資料,並使用 POST 傳送請求至 Telegram Bot API,來請機器人將我們整理的訊息發送至指定的對話(個人、群組都可)或頻道中。


▲ 首先,我們必須先申請一個機器人,這時候就要來使用 BotFather(@botfather)來申請了!啟動後,請輸入 /newbot 建立新機器人,接著傳送機器人的名稱,再來是機器人的 username,注意!這邊結尾一定要為「bot」。註冊完後,您會取得一段 token,這個要妥善保管避免不肖人士控制了您的機器人,這可以用來去存取 HTTP API,也就是此次會用到的重要資訊之一。


▲ 我們稍後要來使用 API 中的 sendMessage 方法,目前會用到「chat_id」及「text」兩個參數,前者稍後說明、後者為要機器人發送的訊息內容。

關於「chat_id」這部分,我們有了機器人,只要任何人啟動它,就可以指定訊息給任一個人使用者,只要知道其 uid 即可,個人可以透過 userinfobot(@userinfobot)來取得自己的 uid 喔!再來您也可以將機器人加入群組,就能指定發送訊息至群組,當然頻道也可以,不過機器人加到頻道是要設定其為管理員的,這部分若只要它發送訊息,也就只要開給它這個權限即可。群組或頻道是公開的就用它的 username 即可(https://t.me/[這一串就是 username]),給 API 就這樣輸入「@username」,若為私人群組或頻道怎麼辦呢?簡單,先將其設為公開,用暫時的 username 傳訊息,回傳的 JSON 檔中就會出現其真正的 uid,這樣就可以切換成用 uid 抓群組及頻道,就能切回私人了!


▲ 機器人傳訊息到公開群組所回傳的 JSON,可以看到 chat 有 id 跟 username 出現。

▲ 機器人傳訊息到私人群組所回傳的 JSON,可以看到 chat 只有 id,username 就沒有出現了!

大家可以先用網址的方式直接請機器人傳訊息並回傳 JSON:

https://api.telegram.org/bot[token]/sendMessage?chat_id=[@username or uid]&text=[content]

其實這就是直接用 GET 傳送請求,那麼以下就直接秀出 PHP 程式碼示範用 POST 傳送請求啦!

<?php

// Telegram API 資訊
define('BOT_TOKEN', '[token]');
define('API_URL', 'https://api.telegram.org/bot' . BOT_TOKEN . '/sendMessage');

// 傳送 POST 請求
function send_post($url, $post_data)
{
    $postdata = http_build_query($post_data);
    $options = array('http' => array(
        'method' => 'POST', // 發送方法為 POST
        'header' => 'Content-type:application/x-www-form-urlencoded', // 發送的頭
        'content' => $postdata, // 發送的資料
        'timeout' => 15 * 60, // 超時時間
    ));
    $context = stream_context_create($options);
    $result = file_get_contents($url, false, $context);
    return $result;
}

// 先用陣列將參數及資料放入
$data = array(
    'chat_id' => '[@username or uid]', // uid
    'text' => '[content]', // 發送訊息
);

// 把資料用 POST 傳到 Telegram Bot API
send_post(API_URL, $data);

試著瀏覽或執行這個 PHP 腳本,再檢查您指定的對話,就會看見機器人發送訊息囉!這只是開頭而已,多多研究其他 API 提供的方法還能做到更多的應用,現在開始都不嫌晚,因為還很多尚未成真的應用值得開發!


▲ 機器人發訊息到群組中的測試截圖。

贊助廣告 ‧ Sponsor advertisements

留言區 / Comments

萌芽論壇