2016-06-16 9 views
7
  • Schritt 1: Senden Benutzer eine Nachricht mit ReplyKeyboardMarkup mit wenigen Tasten (zum Beispiel["Yes", "No"])
  • Schritt 2: Wenn der Benutzer auf eine der Schaltflächen klicken (zum Beispiel "Yes") Ich mag eine Nachricht anzuzeigen, mit Inline-Tastatur und blenden sie die Tasten in Schritt 1.

ist es möglich, geschickt zu tun? Die Nachricht nur einzelne reply_markup Eigenschaft und kann entweder InlinkeKeyboardMarkup oder ReplyKeyboardHide. Der einzige Weg, zu tun, dass ich sehe, ist zu senden Sie 2 Nachrichten (zuerst, um Tastatur und 2. mit Inline-Tastatur zu verbergen), aber das wäre nicht die beste Lösung aus Sicht der Benutzerfreundlichkeit. Ich bin OK, um einige Anfragen zu machen, möchte aber nur eine Nachricht für den Benutzer sichtbar haben.Telegramm-Bot: Wie sende ich Nachricht mit Inline-Tastatur und verstecken Sie benutzerdefinierte Tastatur gleichzeitig?

Irgendwelche Gedanken?

Antwort

7

Es ist jetzt unmöglich. Telegram Bot API ermöglicht derzeit nur das Senden eines Tastaturtyps: Inline oder einfach (einschließlich KeyboardHide und anderen).

3

Aber Sie können zwei Nachrichten senden, die erste wäre ReplyKeyboardHide/ReplyKeyboardRemove und die zweite würde senden, um die Inline-Tastatur

1

Sie besser nutzen inlinekeyboard für beide ja/nein und dem vorhergehenden Tastatur, die Sie zeigen möchten, senden nach Ja oder Nein drücken. Auf diese Weise können Sie die Ja/Nein-Inline-Tastaturnachricht bearbeiten und eine neue Tastatur anzeigen.

Sie können InlineKeyboard senden und durch Überprüfung des CallBackQuery.Data-Parameters können Sie die gesendete Nachricht erneut bearbeiten und stattdessen Ihre neue Nachricht anzeigen.

ist eine json-Update-Nachricht Beispiel:

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

so, wenn der Benutzer ja oder nein klickt, erhalten Sie eine Update-Meldung erhalten. basierend auf der obigen Aktualisierungsnachricht werden die chatid und messageid bekannt, so die C# Telegram.Bot Bibliothek mit dem Bearbeiten von Code ist wie:

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

Ich denke, man die Taste sollte verschwinden wollen, sobald er gedrückt hat:

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

Sie können sogar machen es reaktions durch diese Zugabe:

MyButton.ResizeKeyboard = true; 
3

es keine logische Lösung ist. aber da ist ein Trick. Sie können eine Nachricht senden, um die vorherige Tastatur zu entfernen, dann diese Nachricht entfernen und schließlich die nächste Nachricht mit der Tastatur senden.

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

Einfach die OneTimeKeyboard Eigenschaft auf true,

Button.OneTimeKeyboard = true; 

Sobald Taste es nie benutzt, um zeigt wieder

Verwandte Themen