Как обработать нажатие inline кнопки в Telegram боте
Пишу бота на C#, используя Telegram Bot API. Как я могу обработать нажатие inline кнопки, чтобы пользователю отправилось сообщение? Мой вариант не работает:
private async Task HandleUpdateAsync(ITelegramBotClient client, Update update, CancellationToken cancellationToken)
{
Console.WriteLine(JsonConvert.SerializeObject(update));
switch (update.Type)
{
case Telegram.Bot.Types.Enums.UpdateType.Message:
Message message = update.Message;
switch (update.Message.Text.ToLower())
{
case "/start":
await client.SendTextMessageAsync(message.Chat, "Добро пожаловать на борт!",
replyMarkup: GetStartMenuButtons(),
cancellationToken: cancellationToken);
return;
default:
break;
}
break;
case Telegram.Bot.Types.Enums.UpdateType.CallbackQuery:
CallbackQuery query = update.CallbackQuery;
if (query.Data == "ask_question")
{
await client.SendTextMessageAsync(update.Message.Chat, "Напишите свой вопрос",
cancellationToken: cancellationToken);
}
break;
default:
break;
}
}
Здесь, когда я обращаюсь к объекту update, чтобы выцепить ChatId, мне выкидывается исключение, что ChatId null.
Ответы (1 шт):
Автор решения: Дмитрогон Демьянов
→ Ссылка
Дело в том, что вы не оттуда хватаете chatId. Его следует брать из CallbackQuery, в коде ниже правильный пример (у моего бота работает нормально)
long chatId = update.CallbackQuery.Message.Chat.Id;