Telegram Bot API
大家好,這篇文章簡單的紀錄一下我學習 Telegram Bot 時閱讀 Telegram Bot API 的心得這個 API 可以讓大機去建立一個自己的Telegram Bot。文章的大標會與文件內的標題一致,方便之後去文件中查訊對應的資訊。接下來就開始啦~
Authorizing your bot
這個步驟要做的事情是在Telegram中建造一個屬於自己的Bot,因此需要先註冊一個Telegram的帳號,加 BotFather 為好友
之後再聊天對話筐輸入 /newbot ,建立一個新的 bot ,成功後 BotFather 會給你一個 token
這個token是telegram給的授權,之後操作我們自己的bot都會需要這個token,詳細的步驟可以看這裡
. . . . . . . . .
Making requests
Telegram Bot API 是 HTTP-based 的,所有的 API 都需要透過 Https 協定傳送 , 格式如下:
https://api.telegram.org/bot<token>/METHOD_NAME
token 處要放自己申請到的token,METHOD_NAME則放API提供的方法,吝外注意tpken前的bot要記得不要誤刪掉惹,那時爬文很多人 API 打不過都是因為誤刪了這個部分。
而 Telegram Bot API 的一些特性如下:
- 支援 Get 與 Pos
- 所有的方法都是case-insensitive(不區分大小寫的)
- 使用 UTF-8 編碼
. . . . . . . . .
Getting updates
Update 是一個 Telegram Bot API 中的 Object,包含有使用者傳訊息給 bot,或是有使用者傳加入 bot好友,都算是一個Update
每個Update Object 會有兩個物件,一定會有一個update_id的property,以及一個optional property
這個 optional property 有很多種 ,下面列出其中三種,有興趣的話可以去翻看看文件。
message Message 新的訊息,包含文字、影像、貼圖等等。 channel_post Message 如果 bot 有加入 channel 的話,拿到 channel 中的信息 inline_query InlineQuery 如果有使用者使用 @yourbotname 去呼叫 bot的話,拿到使用者所傳的訊息
在 Telegram Bot API 中要如何接到 Bot 的 Update 通知呢,Telegram 提供兩種方法:
1. getUpdates:
設定一個url告訴telegram當收到update時把訊息傳到我們設定的url去,使用 long polling 去更新拿新的資料,還有提供刪除webhook以及查看webhook的資訊的方法
新的updates會點在的存在telegram的server裡面,但24小時內便會被刪除
如果有使用 outgoing webhook 的話 getUpdates 不會起作用
呼叫 getUpdates() 會回傳一個array的update物件,getUpdates Method 的文件如下:
parameter ---------------------------------------------------------------- url : HTTPS url certificate : your public key certificate,self-signed guide max_connections : 同時可以連接的connections數量,1~100,預設40 allowed_updates : 一個json去設定希望拿到update的property,預設 Null,拿全部的
2. setWebhook:
設定一個url告訴telegram當收到update時把訊息傳到我們設定的url去
如果想要確定收到的訊息是來自telegram的話,可以將我們取得的token設定在網路裡, 像是 https://www.example.com/<token>
支援的port: 443, 80, 88, 8443
還有提供刪除webhook以及查看webhook的資訊的方法,可以去文件裡看
setWebhook Method 的文件如下:
parameter ---------------------------------------------------------------- url : HTTPS url certificate : your public key certificate,self-signed guide max_connections : 同時可以連接的connections數量,1~100,預設40 allowed_updates : 一個json去設定希望拿到update的property,預設 Null,拿全部的
. . . . . . . . .
Available types
telegram api 中的type都是json object,像是User object代表有使用者的資訊first_name、last_name等等,Message object 裡面則有message_id、from(來自哪個user等等,一個User的object),可以在文件中看到每個type的定義
. . . . . . . . .
Available method
Telegram 提供的 API有以下的特性:
所有的API都是case-insensitive(不區分大小寫)
支持Get或是Post的方法
成功時會回傳一個Json object
Telegram API 提供很多method,像是傳訊息的方法sendMessage、sendPhoto、sendAud-io、sendVideo,也包含操控bot做一些動作,像是leaveChat、kickChatMember,對bot管控的chat做一些設定setChatPhoto、setChatTitle,也可以取得資訊,getMe、getChat。
. . . . . . . . .
Stickers
管理bot貼圖的功能
. . . . . . . . .
Inline Mode
Inline mode 是指可以讓使用者在使用者自己任意的頻道,使用@botname去呼叫bot,要起用者個功能的話可以傳送 /setinline 給@BotFather。Intergram 也有提供回覆 Inline Query的API。
. . . . . . . . .
Payments
bot 可以接收使用者的付款,使用者會需要Telegram v 4.0以上的版本才可以使用,本bot本身需要Bot API v.3.0 以上才可以使用這個功能,可以加BotNew好友去看目前使用的版本。