# ReplyKeyboardMarkup, KeyboardButton

**ReplyKeyboardMarkup** - qisqa qilib aytganda, xabar ko'rinishidagi shablonlar. Bu ko'rinishdagi klaviatura turlarida faqatgina matnlar ro'l o'ynaydi. Ya'ni, tugmalar bosilganda foydalanuvchi o'rniga kerakli matnni yuboradi.

Masalan, sizning botingiz foydalanuvchiga savol beradi va javoblar uchun variantlarni taqdim etadi. Foydalanuvchi javobni mustaqil tarzda yozishi yoki tayyor tugmani bosishi mumkin. Qaysidur ma'noda matnni o'zimiz yozgandan ko'ra tayyor tugmani bosish ancha qulaylik beradi.

![](/files/-MRG8q4f8ODT6TjQ5C3w)

**ReplyKeyboardMarkup** toifasidagi klaviaturani hosil qilishda **KeyboardButton** sinfiga mansub tugmalardan foydalaniladi.&#x20;

Keling yuqorida keltirilgan rasmdagi ko'rinishni qanday hosil qilishni ko'rib chiqamiz.

```csharp
// ReplyKeyboardMarkup obyekt olish
ReplyKeyboardMarkup markup = new ReplyKeyboardMarkup();
// Keyboard sinfiga oid jagged(massiv ichida massiv)
// masivini hosil qilish 
markup.Keyboard = new KeyboardButton[][]
{
      // 1 - qator
      new KeyboardButton[]
      {
         new KeyboardButton("A"),
         new KeyboardButton("B")
      },
      // 2 - qator
      new KeyboardButton[]
      {
         new KeyboardButton("C"),
         new KeyboardButton("D")
      }
 };
                
       await client.SendTextMessageAsync(
            chatId: e.Message.Chat.Id, 
            text: "1 - test",
            replyMarkup: markup
        );
```

Ko'rib turganingizdek, tugmalar massivini static holatda hosil qildik.

**ReplyKeyboardMarkup** sinfining yana qo'shimcha maydonlarni mavjud:

* OneTimeKeyboard - tugma foydalanilganidan so'ng uni yashirish
* ResizeKeyboard - Vertikal holatda formaga binoan moslashuvchanlik
* Selective - tugmani faqat ma'lum foydalanuchilarga ko'rsatish

**Keyboard** sinfiga mansub tugmalar orqali, foydalanuvchidan **Contact, Location, Poll** kabi xabarlarni yuborishni ham so'rash mumkin.&#x20;

Foydalanuvchidan Contact ma'lumotlarini yuborishni so'rash.

```csharp
if (e.Message.Text == "/start")
{
        ReplyKeyboardMarkup markup = 
                new ReplyKeyboardMarkup
                        (KeyboardButton.WithRequestContact("Contact yuborish"));
        markup.ResizeKeyboard = true;
        await client.SendTextMessageAsync(
                chatId: e.Message.Chat.Id, 
                text: "Contact",
                replyMarkup: markup
        );
}
```

![](/files/-MRGHTQ0hsqWF8_eWfJt)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.dot-net.uz/c-.net/telegram-bot/essential/klaviatura-bilan-ishlash/replykeyboardmarkup-replykeyboardbutton.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
