Как обрабатывать нажатия кнопок в чат боте Telegram на ASP Net Core 2.0 в Azure
пишу Telegram бот на Asp NET Core. Приложение развернуто на платформе Azure.
Хочу чтобы при нажатии кнопки в сообщении от пользователя можно было получать ответное сообщение с текстом от бота. Задача довольно тривиальная, но пока не освоил отладку через Azure и не могу посмотреть дебагером значения переменных. В сообщении добавляю кнопки следующим образом:
public override async Task Execute(Message message, TelegramBotClient client)
{
var requests = await SQLiteAdapter.GetAllRequestsAsync();
var keyboard = new InlineKeyboardMarkup(new [] {
InlineKeyboardButton.WithCallbackData("Text1","callback1"),
InlineKeyboardButton.WithCallbackData("Text2","callback1"),
InlineKeyboardButton.WithCallbackData("Text3","callback1"),
});
await client.SendTextMessageAsync(message.Chat.Id, $"Текущий размер базы запросов: {requests.Count} ед.", replyMarkup: keyboard);
}
Для обработки Callback запросов создаю eventHandler в классе бота:
public class Bot
{
private static TelegramBotClient botClient;
private static List<Command> commandsList;
public static IReadOnlyList<Command> Commands => commandsList.AsReadOnly();
public static async Task<TelegramBotClient> GetBotClientAsync()
{
if (botClient != null)
{
return botClient;
}
commandsList = new List<Command>();
//Список команд
botClient = new TelegramBotClient(Settings.Key);
string hook = string.Format(Settings.GetUrl(Settings.DevParam.Azure), "api/message");
await botClient.SetWebhookAsync(hook);
botClient.OnCallbackQuery += BotClient_OnCallbackQueryAsync;
return botClient;
}
private static async void BotClient_OnCallbackQueryAsync(object sender, CallbackQueryEventArgs e)
{
await botClient.SendTextMessageAsync(e.CallbackQuery.Message.Chat.Id, "Received message " + e.CallbackQuery.Data);
}
}
Контроллер:
[Route("api/[controller]")]
[ApiController]
public class MessageController : ControllerBase
{
TelegramBotClient botClient;
[HttpPost]
public async Task<OkResult> Post([FromBody]Update update)
{
if (update == null) return Ok();
var commands = Bot.Commands;
var message = update.Message;
botClient = await Bot.GetBotClientAsync();
if (update.Type == Telegram.Bot.Types.Enums.UpdateType.Message)
{
foreach (var command in commands)
{
if (command.Contains(message))
{
await command.Execute(message, botClient);
break;
}
}
}
return Ok();
}
}
В ответ на нажатие ничего не происходит.
Пробовал в обработчике метод AnswerCallbackQueryAsync
Подскажите пожалуйста каким образом можно решить поставленную задачу, используя выбранный стек.
Asp NET Core v2.0
Telegram API https://github.com/TelegramBots/Telegram.Bot