[Telegram] Telegram(七) 以 C# 實作對談式 Telegram bot 機器人

  • 還是使用 Windows Application 的方式建立專案,但是這個對談式的機器人只能說是一個簡易性的機器人,只能回答制式的答案,需要再 LUIS (Language Understanding Intelligent Service),才能做到如真人般的交談。
private static readonly Telegram.Bot.TelegramBotClient tg = new Telegram.Bot.TelegramBotClient(apiToken);

private async void butBot_Click(object sender, EventArgs e)
{
   tc.OnMessage += Tc_MessageReceived;
   tc.StartReceiving();
}

private void Tc_MessageReceived(object sendor, Telegram.Bot.Args.MessageEventArgs e)
{
   // 機器人收到什麼訊息,就在訊息前面加上「你剛才說:」,然後回傳
   tg.SendTextMessageAsync(e.Message.Chat.Id, "你剛才說:" + e.Message.Text);

   // 機器人如果收到「/早安」或「/你好嗎?」這兩個訊息,則會回傳相對應的訊息;如果收到其他訊息,則回傳列出可以回答的選項
   /*if (e.Message.Type == Telegram.Bot.Types.Enums.MessageType.Text)
   {
      if (e.Message.Text == "/你好嗎?")
         tg.SendTextMessageAsync(e.Message.Chat.Id, "我很好,謝謝你!你呢?");
      else if (e.Message.Text == "/早安")
         tg.SendTextMessageAsync(e.Message.Chat.Id, "早安 " + e.Message.Chat.Username);
      else
      {
         tg.SendTextMessageAsync(e.Message.Chat.Id, @"Usage : 
            /你好嗎?
            /早安
            ");
      }
   }*/
}
  • 程式畫面,僅需要一個按鈕,按下按鈕後,即開始執行對談式機器人。

程式畫面

  • 執行結果

執行結果

 

 

 

[Telegram] Telegram(六) 以 C# 透過 Telegram bot 廣播訊息到 Channel

  • 在 Nuget上有些其他開發人員已經整理好的 SDK,我是使用這套:(但沒法擔保這個套件沒有問題,如果要使用,請自行留意)

Nuget SDK

  • 透過 Telegram bot 廣播訊息到 Channel 有兩種方式:WebRequest 及 上述的 SDK 。不管是用什麼方式,皆可以使用 Windows Application 來開發,這也是我覺得很方便的一點。
  • 使用 WebRequest 的程式碼如下:
string urlString = "https://api.telegram.org/bot{0}/sendMessage?chat_id={1}&text={2}";
string text = txtMessage.Text;
urlString = String.Format(urlString, apiToken, chatId, text);

// 如果使用的 .net framework 版本是低於 4.6 ,那麼需要加下面這行程式碼,如果高於 4.6 (含4.6),則可以不需要這行,原因可以參考這裡 https://blog.darkthread.net/blog/disable-tls-1-0-issues
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
WebRequest request = WebRequest.Create(urlString);
Stream rs = request.GetResponse().GetResponseStream();
StreamReader reader = new StreamReader(rs);
string line = "";
StringBuilder sb = new StringBuilder();
while (line != null)
{
	line = reader.ReadLine();
	if (line != null)
	sb.Append(line);
}
  • 使用 SDK 的方法:
private static readonly Telegram.Bot.TelegramBotClient tg = new Telegram.Bot.TelegramBotClient(apiToken);
var r = tg.SendTextMessageAsync(chatId, txtMessage.Text).Result;上述是傳送文字的方法,其中使用到的參數 apiToken 、 chatId 皆可使用前面的方法取得,參數的型態都可以宣告為 string 。
  • 再來介紹傳送圖片或影片的方法:
private void butSendImage_Click(object sender, EventArgs e)
{
    Stream stream = File.OpenRead(txtImagePath.Text);
    stream.Position = 0;
            
    var r = tg.SendPhotoAsync(chatId, stream).Result;
}

private void butSendVideo_Click(object sender, EventArgs e)
{
    Stream video = File.OpenRead(txtVideoPath.Text);
    video.Position = 0;

    var r = tg.SendVideoAsync(chatId, video).Result;
}
  • C# Windows Application 程式畫面

程式畫面

  • C# Windows Application 程式執行結果

程式執行結果

[Telegram] Telegram(四) 將 Bot (機器人) 加入 Channel (頻道)

  • 進到頻道的聊天室窗,點擊右邊「加入成員」的圖示。

加入成員

  • 在搜尋欄位輸入 Bot username(機器人的名稱),包含@的符號,例如:@tzuhuabot,找到後,加入他。

查詢機器人

  • Telegram 規定機器人只能是管理員,但還是可以各別給予管理員的權限。

設定管理員

  • 設定機器人的權限,這裡只需要給予「發布訊息」的權限即可。

設定權限

  • 儲存後,就完成將機器人加入頻道的步驟了。
  • 一般如果沒有要寫程式跟 telegram 溝通的話,到這裡使用起來就跟 Line@ 的使用方式差不多了。只是使用 Line@ 的話,一般使用者可以傳送訊息,而 telegram 的頻道不可以,需要另外開一個討論群組才可以雙向溝通。