2016-06-16 14 views
7
  • Fase 1: Invia all'utente un messaggio con ReplyKeyboardMarkup con pochi tasti (ad esempio["Yes", "No"])
  • Fase 2: Se l'utente clicca su uno dei pulsanti (ad esempio "Yes") Voglio visualizzare un messaggio con tastiera in linea e nascondere i pulsanti inviati al punto 1.

e 'possibile fare? Il messaggio ha appena singolo reply_markup proprietà e può essere sia InlinkeKeyboardMarkup o ReplyKeyboardHide. L'unico modo per farlo che vedo è quello di invia 2 messaggi (prima per nascondere la tastiera e il secondo con la tastiera incorporata) ma non sarebbe la soluzione migliore dal punto di vista dell'esperienza utente. Sto bene per fare un paio di richieste ma voglio avere solo 1 messaggio visibile all'utente.Telegram bot: come posso inviare un messaggio con la tastiera in linea e nascondere la tastiera personalizzata contemporaneamente?

Qualche idea?

risposta

7

Al momento è impossibile. L'API di Bot di Telegram consente attualmente l'invio di un solo tipo di tastiera: inline o semplice (incluso KeyboardHide e altro).

3

Ma è possibile inviare due messaggi, il primo avrebbe mandato ReplyKeyboardHide/ReplyKeyboardRemove e il secondo avrebbe mandato la tastiera in linea

1

è meglio utilizzare inlinekeyboard per entrambi i sì/no e la tastiera precedente che si desidera visualizzare dopo premendo si o no. in questo modo, puoi modificare il messaggio di tastiera in linea sì/no e mostrare la nuova tastiera.

è possibile inviare la tastiera inline e controllando il suo parametro callBackQuery.Data è possibile modificare nuovamente il messaggio inviato e mostrare il nuovo messaggio.

di seguito è riportato un esempio messaggio di aggiornamento 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" 
    }} 

modo, quando l'utente fa clic su sì o no, si otterrà un messaggio di aggiornamento. sulla base di messaggio di aggiornamento di cui sopra, la chatid e MessageId sono noti in modo da utilizzare la libreria C# Telegram.Bot il codice di modifica è simile:

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

Credo che si desidera che il pulsante dovrebbe scomparire una volta che è premuto:

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

si può anche rendere più reattivo aggiungendo questo:

MyButton.ResizeKeyboard = true; 
3

non c'è alcuna soluzione logica. ma c'è un trucco. puoi inviare un messaggio per rimuovere la tastiera precedente, quindi rimuovere questo messaggio, infine inviare il messaggio successivo con la sua tastiera.

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

Basta impostare l'OneTimeKeyboard proprietà su true,

Button.OneTimeKeyboard = true; 

Una volta che il pulsante viene usato non è mai mostrando ancora una volta