Telegram Bot 的大頭照要另外取得
Telegram Bot 跟 LINE Bot有一個不同,LINE Bot 取得的使用者基本資料就有大頭照,而 Telegram Bot 卻沒有,要取得的話要另外調用 API 取,而且圖片檔案一次只會存活 1 小時,不愧是保密性高的通訊 App。
要拿使用者大頭照,無法單純的只調用一個 API 就取得,實做的結果是調用了 3 個 API 才成功。
取得使用者大頭照的流程
要取得使用者大頭照,需要 3 個參數:
- user_id
- file_id
- file_path
有 user_id
才能取得 file_id
,有 file_id
才能取得 file_path
,有了 file_path
,就可以拿到大頭照的圖檔路徑。
以下開始寫的部份,會需要一些 Telegram Bot API 的基本使用,可先參考以下 2 篇:
用 Google Apps Script 接收 / 推播訊息
user_id
user_id
在前幾篇筆記文都有寫到,收到使用者傳的訊息時,機器人紀錄的 JSON 就有 user_id
了,訊息的 JSON 如下:
JSON 中的 from.id
就是 user_id
。
file_id
有了 user_id
,POST 到 Telegram Bot API 便可以取得 file_id
,本篇用 Axios 來 POST,取得 file_id
的 code 如下:
console.log(userPhoto.data)
的結果會有 2 種,一種是使用者有設大頭照,一種則是沒有設定。
有大頭照:
沒有大頭照:
有設定大頭照,才能取得 file_id
,Telegram 會回傳 3 種尺寸的圖檔 id。
file_path
有了 file_id
,就可以拿 file_id
去取 file_path
,一樣是 POST 取得,取得 file_path
的 code 如下:
console.log(filePath.data)
的結果如下圖:
result.file_path
就是最後需要的 file_path
。
取得大頭照
有了 file_path
,輸入以下網址就可以取得大頭照:
https://api.telegram.org/file/bot${token}/${file_path}
${token}
換成 Telegram Bot 的 token,${file_path}
換成上一段取得的 file_path
,瀏覽器直接輸入網址按下 Enter,就會直接下載圖片,也可以拿網址當 img 的 src。
完整示範程式碼
最後附上 August 寫的 取得使用者大頭照 的程式碼:
參考資源
Telegram Bot API:getUserProfilePhotos
stack overflow:How can i get file_path of telegram bot
Telegram Bot 學習筆記系列
- 用 GCP + Node.js 接收 / 推播訊息
- 用 Google Apps Script 接收 / 推播訊息
- 鍵盤 Keyboard
- 命令列 Commands
- 取得使用者大頭照
- Google 表單提交時收到通知