上一篇文章 Telegram.Bot v19 回應訊息,回覆訊息的處理,我們寫最簡單的回應訊息,還有回覆訊息的方法
這一篇主要是使用另一個比較常用到的功能是關於實作 ReplyMarkup 的部份

1. 你得先跟 BotFather 建立一個機器人,並且跟拿到 TOKEN ,可以參考這裡 https://sendpulse.com/knowledge-base/chatbot/telegram/create-telegram-chatbot
我就不贅述了,我之所以不得不升級就上去就是因為你建新的機器人,拿到的 token ,在 Telegram.Bot SDK v15 版本裡面會被報錯誤,非正確格式的 token
2. Nuget Library : https://www.nuget.org/packages/Telegram.Bot 目前版本為 19.0.0

3. Init TelegramBotClient:
public static void InitTelegramBotClient()
{
_TelegramBotClient = new TelegramBotClient("1234567:4TT8bAc8GHUspu3ERYn-KGcvsvGB9u_n4ddy");
_TelegramBotClient.StartReceiving(
updateHandler: HandleUpdateAsync,
pollingErrorHandler: (botClient, exception, cancellationToken) =>
{
return Task.CompletedTask;
}, default);
}
4. 使用 ReplyKeyboardMarkup ,這是會出現在下方,直接讓用戶可以直接選擇,目的在於導引用戶可以使用哪些關鍵字
static async Task HandleUpdateKeyboardMarkupAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
{
if (update.Message == null)
return;
Console.WriteLine("收到訊息:" + update.Message.Text);
if (update.Message.Text == "功能A")
{
await botClient.SendTextMessageAsync(
chatId: update.Message.Chat.Id,
text: "您選中了功能A",
cancellationToken: cancellationToken);
return;
}
if (update.Message.Text == "功能B")
{
await botClient.SendTextMessageAsync(
chatId: update.Message.Chat.Id,
text: "您選中了功能B",
cancellationToken: cancellationToken);
return;
}
ReplyKeyboardMarkup replyKeyboardMarkup = new(new[]
{
new KeyboardButton[] { "功能A", "功能B" },
})
{
ResizeKeyboard = true
};
var sentMessage = await botClient.SendTextMessageAsync(
//該用戶或是群組的 Id
chatId: update.Message.Chat.Id,
text: update.Message.From.FirstName + " 您好,請選擇你要使用的功能",
replyMarkup: replyKeyboardMarkup,
cancellationToken: cancellationToken);
Console.WriteLine(update.Message.Chat.Id + ":" + sentMessage.Text);
}

5. 使用 InlineKeyboardButton,這主要是針對一個問題,對那個答案的回答,你可以透過 value 的方式去知道對方的選擇
static async Task HandleUpdateInlinebuttonsAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken)
{
if (update.Message != null)
{
Console.WriteLine("收到訊息:" + update.Message.Text);
InlineKeyboardMarkup inlineKeyboard = new(new[]
{
// first row
new []
{
InlineKeyboardButton.WithCallbackData(text: "同意", callbackData: "agree:VoteA"),
InlineKeyboardButton.WithCallbackData(text: "不同意", callbackData: "deny:VoteA"),
}
});
var sentMessage = await botClient.SendTextMessageAsync(
//該用戶或是群組的 Id
chatId: update.Message.Chat.Id,
text: "您是否同意這個決定?!", null,
null, null, null, null, null, null,
replyMarkup: inlineKeyboard,
cancellationToken: cancellationToken);
Console.WriteLine(update.Message.Chat.Id + ":" + sentMessage.Text);
}
if (update.CallbackQuery != null)
{
Console.WriteLine("收到回應:" + update.CallbackQuery.Data);
var sentMessage = await botClient.SendTextMessageAsync(
//該用戶或是群組的 Id
chatId: update.CallbackQuery.From.Id,
text: "收回應訊息 :" + update.CallbackQuery.Data,
cancellationToken: cancellationToken);
Console.WriteLine(update.CallbackQuery.From.Id + ":" + update.CallbackQuery.Data);
}
}

大概就紀錄到這裡,基本上有這兩個應用在一般商用實務上就很夠用了,其他有些花里胡哨,下一篇我在繼續分享。