web-dev-qa-db-fra.com

Bot télégramme: comment envoyer un message avec un clavier intégré et masquer un clavier personnalisé simultanément?

  • Étape 1: envoyer à l'utilisateur un message avec ReplyKeyboardMarkup avec quelques boutons (par exemple["Yes", "No"])
  • Étape 2: Si l'utilisateur clique sur l'un des boutons (par exemple "Yes") Je souhaite afficher un message avec le clavier intégré et masquer les boutons envoyés à l'étape 1.

Est-il possible de faire? Le message n'a qu'un seul reply_markup et peut être InlinkeKeyboardMarkup ou ReplyKeyboardHide. La seule façon de le faire est d'envoyer 2 messages (le premier pour masquer le clavier et le second avec le clavier intégré), mais ce ne serait pas la meilleure solution du point de vue de l'expérience utilisateur. Je suis d'accord pour faire quelques demandes mais je veux qu'un seul message soit visible pour l'utilisateur.

Des pensées?

11

C'est impossible en ce moment. L'API Telegram Bot ne permet actuellement d'envoyer qu'un seul type de clavier: en ligne ou simple (y compris KeyboardHide et autres).

9
ihoru

Je suppose que vous voulez que le bouton disparaisse une fois qu'il est enfoncé:

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

Vous pouvez même le rendre plus réactif en ajoutant ceci:

MyButton.ResizeKeyboard = true;
4
Mayer Spitzer

Mais vous pouvez envoyer deux messages, le premier enverrait ReplyKeyboardHide/ReplyKeyboardRemove et le second enverrait le clavier en ligne

3
Kirill

Il n'y a pas de solution logique. mais il y a un truc. vous pouvez envoyer un message pour supprimer le clavier précédent, puis supprimer ce message, enfin envoyer le message suivant avec son clavier.

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

Définissez simplement la propriété OneTimeKeyboard sur true,

Button.OneTimeKeyboard = true;

Une fois le bouton utilisé, il ne s'affiche plus jamais

2
user8876021

il vaut mieux utiliser le clavier intégré pour oui/non et le clavier précédent que vous souhaitez afficher après avoir appuyé sur oui ou non. de cette façon, vous pouvez modifier le message de clavier intégré oui/non et afficher un nouveau clavier.

vous pouvez envoyer le inlineKeyboard et en vérifiant son paramètre callBackQuery.Data, vous pouvez à nouveau modifier le message envoyé et afficher votre nouveau message à la place.

ci-dessous est un exemple de message de mise à jour 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"
  }}

ainsi, lorsque l'utilisateur clique sur oui ou non, vous recevrez un message de mise à jour. sur la base du message de mise à jour ci-dessus, le chatid et le messageid sont connus, donc en utilisant la bibliothèque c # Telegram.Bot, le code d'édition est comme:

    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);
1
user2228544