2016-06-16 14 views
7
  • Krok 1: Wyślij użytkownikowi wiadomość z ReplyKeyboardMarkup z kilku przycisków (np["Yes", "No"])
  • Krok 2: Jeśli użytkownik kliknij jeden z przycisków (np "Yes") Chcę, aby wyświetlić wiadomość inline z klawiaturą i ukryć przyciski wysłane w kroku 1.

Czy można zrobić? komunikat ma tylko jeden reply_markup własność i może być InlinkeKeyboardMarkup lub ReplyKeyboardHide. Jedynym sposobem na to, że widzę to wyślij 2 wiadomości (najpierw aby ukryć klawiaturę i drugą z wbudowaną klawiaturą), ale to nie byłoby najlepsze rozwiązanie z punktu widzenia użytkownika. Jestem w porządku, aby wykonać kilka zgłoszeń, ale chcę mieć tylko 1 wiadomość widoczną dla użytkownika.Telegram bot: Jak wysłać wiadomość z wbudowaną klawiaturą i ukryć klawiaturę niestandardową jednocześnie?

Jakieś myśli?

Odpowiedz

7

To niemożliwe w tej chwili. Telegram Bot API umożliwia obecnie wysyłanie tylko jednego typu klawiatury: wbudowanej lub prostej (w tym KeyboardHide i innych).

3

Ale można wysłać dwie wiadomości, pierwsza wyśle ​​ReplyKeyboardHide/ReplyKeyboardRemove a drugi wyśle ​​klawiaturę inline

1

lepiej użyć inlinekeyboard dla obu Tak/Nie i poprzednim klawiaturze, które chcesz pokazać po naciskając tak lub nie. w ten sposób możesz edytować komunikat "tak/nie" inlinekeyboard i wyświetlać nową klawiaturę.

możesz wysłać inlineKeyboard i sprawdzając jego parametr callBackQuery.Data możesz ponownie edytować wysłaną wiadomość i zamiast tego wyświetlić nową wiadomość.

poniżej jest przykładowy komunikat aktualizacja json:

{"update_id":14603298, 
    "callback_query": 
    { 
    "id": "479899181065761766", 
    "from": { 
     "id": 111735238, 
     "first_name": "eric", 
     "username": "...." 
    }, 
    "message": { 
     "message_id": 22, 
     "from": { 
     "id": 3576731383, 
     "first_name": "the_bot_name", 
     "username": "mybot_bot" 
     }, 
     "chat": { 
     "id": 111745258, 
     "first_name": "eric", 
     "username": "....", 
     "type": "private" 
     }, 
     "date": 1492113810, 
     "text": "sent message" 
    }, 
    "chat_instance": "5419183837652256438", 
    "data": "yes" 
    }} 

więc, gdy użytkownik kliknie na tak lub nie, zostanie wyświetlony komunikat o aktualizacji. na podstawie powyższego komunikatu o aktualizacji, chatid i messageid znane są tak przy użyciu biblioteki C# Telegram.Bot kod edycji jest tak:

var chatid= 111745258; 
    var messageid=22;   
    TelegramBotClient api = new TelegramBotClient("YOUR_TOKEN"); 

var new_keyboard = new InlineKeyboardMarkup(
       new[] 
        { 
         new[] 
         { 
          new InlineKeyboardButton("step_1","step1") , 
          }, 
         new[] 
          { 
          new InlineKeyboardButton("step_2","step2"), 
          new InlineKeyboardButton("step_3","step3"), 
          }, 
         new[] 
          { 
          new InlineKeyboardButton("step_4","step4"), 
          } 
        }); 
    api.EditMessageReplyMarkupAsync(chatid, messageid, replyMarkup: new_keyboard); 
4

Chyba chcesz przycisk powinien zniknąć po jego naciśnięciu:

ReplyKeyboardMarkup MyButton = new ReplyKeyboardMarkup(); 
MyButton.OneTimeKeyboard = true; 

można nawet uczynić go bardziej czuły dodając w ten sposób:

MyButton.ResizeKeyboard = true; 
3

nie ma żadnego logicznego rozwiązania. ale jest pewna sztuczka. możesz wysłać wiadomość, aby usunąć poprzednią klawiaturę, a następnie usunąć tę wiadomość, w końcu wysłać następną wiadomość za pomocą jej klawiatury.

// send a fake message 
Message sentMsg = bot.SendTextMessageAsync(chatID, ".", replyKeyboardMarkup: new ReplyKeyboardRemove()).Result; 

// remove the fake message 
bot.DeleteMessageAsync(chatID, sentMsg.MessageId); 

// send the main message with it's keyboard 
bot.SendTextMessageAsync(chatID, "the next message", replyKeyboardMarkup: new ReplyKeyboardMarkup(keyboardData)); 
3

Wystarczy ustawić OneTimeKeyboard obiekt true

Button.OneTimeKeyboard = true; 

Gdy przycisk służy to nigdy nie pokazując ponownie