C# 透過 Telegram Bot 發送訊息

Telegram 完全由杜羅夫(和他的親人、親信)私人擁有,不引入其他投資人,並且號稱絕不出售。維持著 Telegram 軟體日常營運的,是規模極為精簡,但開發實力世界一流的一支技術團隊。在電子前線基金會對聊天軟體安全性的評測中,Telegram 滿足了所有標準。

科技新報 ── 「俄國臉書」創辦人從失勢、自我流放再創 Telegram 的傳奇故事

在本篇文章中,將會建立 Telegram Bot,並以 C# 透過 Private Channel 來發送訊息。

Preparation

  • 一個 Telegram 帳戶

New a Bot

  1. 私訊 @BotFather 並輸入 /newbot,接著依序輸入 Bot 的名稱、ID,需要注意的是 ID 必須以 bot 結尾,如:example_bot
  2. 若建立成功,@BotFather 會給予我們一個 Token,往後我們便可利用此 Token 透過 HTTPS 發送 Request

Create Channel

由於 Telegram Bot 無法直接私訊使用者,因此必須透過頻道(Channel)來廣播。

  1. 至 Telegram Chats 畫面,點擊右上角的 New Message 圖示
  2. 點擊 New Channel
  3. 輸入 Channel Name,Description 為選填
  4. 這裡要選擇 Channel Type,因為等等會需要找 Channel Numeric ID,所以暫時先設定為 Public,並給予該 Channel 一個 ID(也就是網址的後綴)
  5. 接著我們可以選擇是否要將其他使用者加入 Channel,如果不需要則直接 Next
  6. Channel 建立完成

Add the Bot to Channel

  1. 進入 Channel 聊天室窗並點擊右上角的圖示
  2. 點擊 Admin,之後點擊 Add Admin
  3. 在搜尋欄位輸入 Bot ID,記得要加 @ 符號,如:@example_bot
  4. 加入 Bot 並設定權限,以本例來說只需要給予 Post Messages 權限即可
  5. 完成加入

Get the Channel Numeric ID

如果是 Public Channel,我們可以直接透過 Channel ID 來發送訊息。但若是 Private Channel,因為沒有 Channel ID,所以我們必須取得 Channel 的 Numeric ID。

我們先在瀏覽器上輸入這段網址:https://api.telegram.org/bot{token}/sendMessage?chat_id={@channelId}&text=Hello+World,若前面操作步驟都正確,則應該會回傳一 JSON 如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"ok":true,
"result":{
"message_id":3,
"chat":{
"id":-123456789,
"title":"Exmaple Channel",
"username":"exampleChannel",
"type":"channel"
},
"date":1504079580,
"text":"Hello World"
}
}

其中的 result->chat->id 便是 Channel 的 Numeric ID。在取得這 ID 之後便可以把 Channel 改為 Private。改為 Private 的方式很簡單,把 Share Link 刪掉就可以了!

  1. 進入 Channel 聊天室窗並點擊右上角的圖示
  2. 點擊右上角的 Edit
  3. 點擊 Link 標籤
  4. 刪除 Link,並按下 Done
  5. 完成

Send Messages from Bot with C#

首先我們先建立一個 ConsoleApplication 專案,並從 Nuget 將 Telegram.Bot 加入至專案。之後我們便可以透過這方便的 SDK 來利用 Bot 發送訊息,程式碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var botClient = new Telegram.Bot.TelegramBotClient("{Bot Token}");
var t = botClient.SendTextMessageAsync(
chatId: "{Channel Numeric ID}",
text: "C# Test message");
}
}
}