Back to Posts

第一次寫 Telegram bot 就上手

Posted in Telegram

此為舊文章,可參考這裡的新內容

新文章連結

Telegram 簡介

Telegram 是一款集成眾多優點 (Ex. 自由, 快速, 輕量 etc.) 的通訊軟體
不管是親友間閒聊,或是社群間討論,用 Telegram 都較 LINE 適合

如何產生 bot

想要一隻 bot 需要先有一個 Telegram 帳號 (電話簡訊驗證)
私訊 @BotFather 輸入 /newbot 他將會請您依序輸入 bot 顯示的名稱、 bot 的 username (必須為 bot 結尾) ,且長度需介於 6-32 字元
完成後, BotFather 會顯示您的 Token (格式: 12345:AAJqs_w-4) ,您可利用此 Token 透過 HTTPS 發送請求

取得訊息

Telegram bot API 的請求 (大部分) 都是 https://api.telegram.org/botTOKEN/METHOD 的格式
目前 Telegram 支援兩種取得更新的方法,分別為

  • setWebhook 設定 webhook 在有人傳送訊息給您的 bot (或加入、離開群組等) 時, Telegram 將會使用 JSON 格式 POST 到您的伺服器,需使用下列指令設定

    curl https://api.telegram.org/bot12345:AAJqs_w4/setWebhook?url=sean.taipei/telegram/hook.php

  • getUpdates 分為兩種

    • GET GET https://api.telegram.org/bot12345:AAJqs_w4/getUpdates?offset=LAST_UPDATE_ID 將會回傳一個 JSON 陣列 (範例)
    • Long polling 詳見 WiKi

傳送訊息

Telegram 是藉由下列請求傳送訊息給使用者 GET https://api.telegram.org/bot12345:AAJqs_w-4/sendMessage?chat_id=-1001033293696&text=Hello

  • chat_id
    • 群組 (Group) 為負數 (例如 -79897268)
    • 超級群組 (Supergroup) 為負數 (例如 -1001033293696) 或是 @頻道名
    • 私訊 (Private) 為正數 (例如 109780439)
    • 頻道 (Channel) 為 @頻道名 (例如 @Telegram)
  • parse_mode 此為選擇性參數,未設定則為純文字 皆支援複合使用 (像是 <b><i>重要</i></b>)
    • Markdown 可以用 [連結](url), *粗體*, _斜體_, `等寬字`, ```程式碼 (等寬區塊)``` 在有使用者輸入資料得環境不建議使用,如果解析錯誤 Telegram Server 會出現錯誤,無法發送訊息
    • HTML 同一般 HTML 用法,支援 b, strong, i, em, a, code, pre 非標籤的 <, >, &, " 需要 HTML entity 後使用
  • text 傳送訊息內容

Inline bot

Telegram 有一大特色是可以在私訊、群組,甚至是頻道使用 @botname query_string 來發送 inline query 給 bot
像是輸入 “@bold Hello” 之後會出現選項,這就是 Telegram 送 inline_query (不同於一般訊息的 message 欄位) 然後 bot 透過 answerInlineQuery 提供選項 (至多 50 筆) ,由於較為複雜,請參見官方文件

HTML5 Game

Telegram 在 2016 十月加入了此功能支援,利用 in app browser 開啟遊戲網頁
Example: Foxmosa 推星星

相關連結

重寫過的新文章

官方 API 文件
Telegram 傳奇
Android 版 API 發送器 可用來體驗 Methods 用法
範例 (PHP, 作者自用)

Telegram 機器人應用交流 測試、討論 Bot 相關問題
Telegram 推廣特區

Telegram Geeks
Bot News
Bots Channel

@RawDataBot 可以藉此簡單查看 bot API 收到的訊息長什麼樣子
Telegram Store Bot (Bots list & rate)
Bot Father
Bot Support

本名韋詠祥,習慣用英文 Sean 暱稱。
自國中開始接觸程式,至今善於組合各種技巧,用來解決生活周遭的問題。
以資安競賽、網路治理、個人專案為興趣。

Read Next

Screen Mesaage - 簡潔的線上大字報