ReplyKeyboardMarkup
のメッセージをユーザーに送信します(たとえば["Yes", "No"]
)Yes"
)インラインキーボードでメッセージを表示し、手順1で送信したボタンを非表示にしたい。できますか?メッセージには単一のreply_markup
プロパティであり、InlinkeKeyboardMarkup
またはReplyKeyboardHide
のいずれかです。私が見る唯一の方法は、2つのメッセージを送信することです(最初はキーボードを非表示にし、2つ目はインラインキーボードを使用します)。しかし、それはユーザーエクスペリエンスの観点からは最善の解決策ではありません。いくつかのリクエストを実行してもかまいませんが、ユーザーに表示されるメッセージを1つだけにしたいです。
何かご意見は?
今は不可能です。 Telegram Bot APIでは現在、インラインまたはシンプル(KeyboardHideなど)の1種類のキーボードのみを送信できます。
ボタンが押されたらボタンを非表示にする必要があると思います。
ReplyKeyboardMarkup MyButton = new ReplyKeyboardMarkup();
MyButton.OneTimeKeyboard = true;
これを追加することで、応答性を高めることもできます。
MyButton.ResizeKeyboard = true;
ただし、2つのメッセージを送信できます。1つ目はReplyKeyboardHide/ReplyKeyboardRemoveを送信し、2つ目はインラインキーボードを送信します。
論理的な解決策はありません。しかし、トリックがあります。メッセージを送信して前のキーボードを削除し、次にこのメッセージを削除して、最後に次のメッセージをキーボードで送信することができます。
// 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));
OneTimeKeyboardプロパティをtrueに設定するだけです。
Button.OneTimeKeyboard = true;
ボタンを使用すると、二度と表示されなくなります
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);