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 提供的方法還能做到更多的應用,現在開始都不嫌晚,因為還很多尚未成真的應用值得開發!
▲ 機器人發訊息到群組中的測試截圖。
留言區 / Comments
萌芽論壇