2016-06-16 21 views
7
  • Adım 1: (örneğin["Yes", "No"] için ) birkaç düğmeleri ile ReplyKeyboardMarkup ile kullanıcıya mesaj gönder
  • 2. Adım: Kullanıcı Ben bir ileti görüntülemek istediğiniz (örneğin "Yes" için ) düğmelerinden birini tıklarsanız satır içi klavye ile ve mesajın sadece tek reply_markup özelliğine sahiptir ve ya InlinkeKeyboardMarkup veya ReplyKeyboardHide olabilir? yapmak mümkün mü adım 1.

gönderilir düğmeleri gizlemek. Ben görmenin bunu yapmanın tek yolu 2 mesaj gönderin (önce klavye ve 2. satır içi klavye ile gizleyin) ancak bu, kullanıcı deneyimi açısından en iyi çözüm değildir. Bir kaç istekte bulunamıyorum ancak kullanıcı için sadece 1 mesajın görünmesini istiyorum.Telegram bot: Satır içi klavyeyle nasıl mesaj gönderirim ve özel klavyeyi aynı anda gizlerim?

Herhangi bir düşünce?

cevap

7

Şu anda mümkün değil. Telegram Bot API'si şu anda sadece bir tür klavyeyi göndermeye izin veriyor: satır içi veya basit (KeyboardHide ve diğer dahil).

3

Ama iki mesaj gönderebilir, ReplyKeyboardHide/ReplyKeyboardRemove ve ikinci gönderir ilki daha iyi Peşinde göstermek istiyorum hem evet/hayır ve önceki klavye için inlinekeyboard kullanmak satır içi klavyeyi

1

göndereceği evet veya hayır tuşuna basarak. bu şekilde, evet/hayır inlinekeyboard mesajını düzenleyebilir ve yeni klavye gösterebilirsiniz.

inlineKeyboard'u gönderebilirsiniz ve callBackQuery.Data parametresini işaretleyerek gönderilen mesajı tekrar düzenleyebilir ve bunun yerine yeni mesajınızı gösterebilirsiniz. kullanıcı evet veya hayır tıkladığında

{"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" 
    }} 

yüzden, bir güncelleme mesajı alırsınız: Aşağıdaki

örnek bir güncelleme mesajı json olduğunu. Yukarıdaki güncelleme mesajı dayalı chatid ve messageid kod düzenle gibidir C# Telegram.Bot kitaplığını kullanarak bu yüzden bilinmektedir:

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

Ben basılı oluyor kez düğmeye kaybolması gerekir istiyorum sanırım:

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

hatta bu ekleyerek daha duyarlı yapabilirsiniz: herhangi bir mantıksal bir çözüm yoktur

MyButton.ResizeKeyboard = true; 
3

. ama bir numara var. Bir önceki klavyeyi kaldırmak için bir mesaj gönderebilir, sonra bu mesajı kaldırabilir, son olarak bir sonraki mesajı klavyesiyle gönderebilirsiniz.

// 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

Sadece düğme kullandı sonra

Button.OneTimeKeyboard = true; 

asla

gösteriyor, true OneTimeKeyboard özellik olarak
İlgili konular