2016年6月25日 星期六

關於Telegram bot

最近telegram很紅,有興趣的話可以google一下,特別是有人拿Telegram與Line做了一個比較: https://blog.birkhoff.me/move-to-telegram-from-line/

對Telegram有興趣,是因為聽說它整個open source,除此之外API也是最開放的,由於最近幾個案子要做bot,但對於自己寫一個IM Client敬謝不敏,因此Telegram是一個很可以考慮的選擇。

Telegram的API分為兩種,主要的資訊可以參考這邊: https://core.telegram.org/

Telegram API : 讓你可以做一個自己的Telegram Client
Bot API : 讓你可以控制一個Telegram Bot

我們先來看Bot API,要玩Bot API,你得先有一個Telegram Bot,如何產生一個Telegram Bot呢? 得透過一個Bot,你沒聽錯,要建立Telegram Bot,你得跟BotFather這個bot打交道。(Telegram是透過bot產生一個bot,順帶一提,整個Telegram API文件當中,非常多搞幽默的冷笑話,和一般你看MSDN文件的精準風格很是不同)

當然,跟BotFahter溝通,你得先申請一個Telegram帳號並安裝Telegram Client,它是一個IM,所以當然有iOS/Android的版本,也有Desktop的版本。你可以在底下找到Client的下載位置:
https://telegram.org/apps

Telegram主要是用電話號碼來驗證身分和申請帳號,建議你申請完帳號之後,建立一個Telegram ID,如同Line/Skype ID一樣,以後這ID就代表你了。

我們先來看如何建立一個Bot,首先,你可以透過搜尋功能找到BotFather:

找到之後就可以跟他對談,Telegram的通訊和其他IM不同,沒有什麼加入好友的,你可以和找到的任何人通話。當你點選BotFather之後,會看到:

你可以對BotFather下/newbot的指令來建立一個bot,BotFather會問你該bot要叫什麼名字,以及該bot的Username,注意username必須包含bot,bot和一般帳號的區隔,可以參考底下文件:
https://core.telegram.org/bots#4-how-are-bots-different-from-humans

建立完成之後,你會取得該bot的token,格式類似底下這樣:
123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

取得該Token之後,你就可以用HTTP API了,在Nuget上有些其他開發人員已經整理好的sdk,你可以考慮用底下這套: (請留意,我沒法擔保這個套件沒有問題,請自行留意使用)

Telegram API挺有趣,和其他SDK需要建立一個http服務或WebAPI不用,Telegram可以接透過Events來監聽傳送給bot的訊息,參考底下程式碼(留意這是一個Windows Application,而非WebSite):

private async void  button1_Click(object sender, EventArgs e)
{
    Telegram.Bot.TelegramBotClient tc =
        new Telegram.Bot.TelegramBotClient("bot的token");

    tc.MessageReceived += Tc_MessageReceived;
    tc.StartReceiving();
}

private void Tc_MessageReceived(object sender, Telegram.Bot.Args.MessageEventArgs e)
{
    MessageBox.Show(e.Message.Text);
}

上面這段程式碼,讓你建立一個BotClient,接著hook MessageReceieved事件,只要bot收到任何訊息,就會觸發這個事件,然後我們把事件中抓取到的訊息顯示出來,執行結果如下:

如果要做一個Echo Bot,也很簡單,只需要把程式碼改成:

        private void Tc_MessageReceived(object sender, Telegram.Bot.Args.MessageEventArgs e)
        {
            tc.SendTextMessageAsync(e.Message.Chat.Id, "你剛才說:" + e.Message.Text);
            //MessageBox.Show(e.Message.Text);
        }

執行結果如下:

坦白說,Telegram的bot寫法是最近測過的幾種裡面最簡單單純的了…再加上他整個open source,不失為企業應用的理想選擇…有興趣的朋友可以試試看。

沒有留言: