web-dev-qa-db-ja.com

電報ボット:インラインキーボードでメッセージを送信し、カスタムキーボードを同時に非表示にするにはどうすればよいですか?

  • ステップ1:いくつかのボタンを使用してReplyKeyboardMarkupのメッセージをユーザーに送信します(たとえば["Yes", "No"]
  • ステップ2:ユーザーがいずれかのボタンをクリックした場合(たとえば "Yes")インラインキーボードでメッセージを表示し、手順1で送信したボタンを非表示にしたい。

できますか?メッセージには単一のreply_markupプロパティであり、InlinkeKeyboardMarkupまたはReplyKeyboardHideのいずれかです。私が見る唯一の方法は、2つのメッセージを送信することです(最初はキーボードを非表示にし、2つ目はインラインキーボードを使用します)。しかし、それはユーザーエクスペリエンスの観点からは最善の解決策ではありません。いくつかのリクエストを実行してもかまいませんが、ユーザーに表示されるメッセージを1つだけにしたいです。

何かご意見は?

11

今は不可能です。 Telegram Bot APIでは現在、インラインまたはシンプル(KeyboardHideなど)の1種類のキーボードのみを送信できます。

9
ihoru

ボタンが押されたらボタンを非表示にする必要があると思います。

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

これを追加することで、応答性を高めることもできます。

MyButton.ResizeKeyboard = true;
4
Mayer Spitzer

ただし、2つのメッセージを送信できます。1つ目はReplyKeyboardHide/ReplyKeyboardRemoveを送信し、2つ目はインラインキーボードを送信します。

3
Kirill

論理的な解決策はありません。しかし、トリックがあります。メッセージを送信して前のキーボードを削除し、次にこのメッセージを削除して、最後に次のメッセージをキーボードで送信することができます。

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

OneTimeKeyboardプロパティをtrueに設定するだけです。

Button.OneTimeKeyboard = true;

ボタンを使用すると、二度と表示されなくなります

2
user8876021

yes/noと、yesまたはnoを押した後に表示する前のキーボードの両方にinlinekeyboardを使用する方がよいでしょう。そうすれば、yes/noインラインキーボードメッセージを編集して新しいキーボードを表示できます。

inlineKeyboardを送信し、callBackQuery.Dataパラメータを確認することで、送信したメッセージを再度編集して、代わりに新しいメッセージを表示できます。

以下は、サンプルの更新メッセージ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"
  }}

したがって、ユーザーが「はい」または「いいえ」をクリックすると、更新メッセージが表示されます。上記の更新メッセージに基づいて、chatidとmessageidがわかっているため、c#Telegram.Botライブラリを使用すると、編集コードは次のようになります。

    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