Telegram Bot c# CallbackQuery

2229
01 января 2017, 17:18

Здравствуйте! Уже успел сломать голову с Telegram.Bot.

Я использую webhook, всё прекрасно работает, но как только я решил подключить к приложению inline клавиатуру, тот тут-то и начались проблемы. Я подключил клавиатуру, она отображается, однако при нажатии на кнопку мне должен отдаваться callback_query, однако происходит ошибка "System.NullReferenceException".

Соответственно в update.CallbackQuery ничего не попадает.

Может быть я сформулировал непонятно, за что прошу прощения, но также прошу помощи, ибо устал копать api телеграма.

public async Task<IHttpActionResult> PostAsync(Update update)
        {
    switch (update.Type)
                    {
                        case UpdateType.MessageUpdate:    
                             if (message.Text.StartsWith("/inline"))
                             {
                                 await Botz.api.SendChatActionAsync(message.Chat.Id, Telegram.Bot.Types.Enums.ChatAction.Typing);
                                 var keyboard = new InlineKeyboardMarkup(new[]
                                     {
                                    new[]
                                    {
                                        new InlineKeyboardButton{ Text="1.1", Url="https://vk.com/"},
                                        new InlineKeyboardButton{Text="1.2",SwitchInlineQuery = "1.2"},
                                    },
                                    new[]
                                    {
                                        new InlineKeyboardButton{Text="2.1",CallbackData="he"},
                                        //new InlineKeyboardButton{Text="2.2",CallbackData="2.2"},
                                    }
                                });
                                await Task.Delay(500);
                                await Botz.api.SendTextMessageAsync(message.Chat.Id, "Choose", replyMarkup: keyboard);
                            }
                            break;
                    case UpdateType.CallbackQueryUpdate:
                        Console.WriteLine("CallBack enable");
                        await Botz.api.EditInlineMessageTextAsync(update.CallbackQuery.InlineMessageId, "test");
                        await Botz.api.AnswerCallbackQueryAsync(update.CallbackQuery.Id, text: "test");
                        break;
                  }
       }
Answer 1

Похоже, что Вы путаете понятия InlineButton и InlineMessage.
Ваши методы

await Botz.api.EditInlineMessageTextAsync(update.CallbackQuery.InlineMessageId, "test");
await Botz.api.AnswerCallbackQueryAsync(update.CallbackQuery.Id, text: "test");   

предназначены как раз-таки для работы с InlineMessage в Inline-режиме. Замените их на этот метод

Botz.api.EditMessageTextAsync(update.CallbackQuery.Message.Chat.Id, update.CallbackQuery.Message.MessageId, "test");
READ ALSO
Как правильно создать типизированный DataSet?

Как правильно создать типизированный DataSet?

Типизированный DataSet- это DataSet в котором заведомо известны все DataTable и обращаться к ним можно по имениВ свою очередь DataTable тоже известны и можно...

413
Как определить размер структуры ?C#

Как определить размер структуры ?C#

Всем доброго времени суток помогите пожалуйста определить размер структуры в C#, есть некая структура на C++ :

563
&ldquo;Не удалось загрузить файл или сборку&rdquo; VkNet.dll

“Не удалось загрузить файл или сборку” VkNet.dll

Необработанное исключение типа "SystemIO

717