# Про інлайн-клавіатуру в Telegram та Widget

Інлайн-клавіатура дозволяє відображати кнопки безпосередньо під повідомленням у Telegram та Widget. На відміну від звичайної клавіатури, інлайн-кнопки не займають місце в постійній клавіатурі користувача та дозволяють більш гнучку взаємодію.

## Контекст і проблема

У багатьох сценаріях потрібно надати користувачу можливість вибору дії без введення тексту:
- Перехід на сайт
- Відповідь на питання одним кліком
- Навігація по меню
- Швидкі дії

Інлайн-клавіатура вирішує цю задачу, дозволяючи додавати кнопки безпосередньо до повідомлення.

## Основні концепції

### Відмінності від звичайної клавіатури

**Інлайн-клавіатура:**
- Відображається безпосередньо під повідомленням
- Не займає місце в постійній клавіатурі
- Може містити посилання та спеціальні дії
- Працює тільки для Telegram та Widget

**Звичайна клавіатура:**
- Замінює стандартну клавіатуру користувача
- Займає весь простір клавіатури
- Обмежена текстовими відповідями
- Працює для всіх каналів

### Типи дій кнопок

Інлайн-клавіатура підтримує різні типи дій через параметр `ActionType`:
- `reply` — відправка тексту відповіді (за замовчуванням)
- `open-url` — відкриття посилання
- `none` — кнопка без дії

## Варіанти підходів

### Інлайн-клавіатура vs звичайна клавіатура

**Інлайн-клавіатура:**
- ✅ Плюси: Не займає місце в клавіатурі, підтримує посилання, більш гнучка
- ❌ Мінуси: Працює тільки для Telegram та Widget

**Звичайна клавіатура:**
- ✅ Плюси: Працює для всіх каналів, завжди видима
- ❌ Мінуси: Займає весь простір клавіатури, обмежена текстовими відповідями

**Чому використовуємо інлайн-клавіатуру:**
Для Telegram та Widget інлайн-клавіатура надає більше можливостей та не займає постійний простір клавіатури, що робить інтерфейс більш зручним.

## Прийняті рішення

### Обмежена підтримка каналів

Інлайн-клавіатура працює тільки для Telegram та Widget через обмеження API інших каналів. Для Viber та Facebook Messenger потрібно використовувати звичайну клавіатуру.

### Обов'язковий протокол для посилань

Посилання в `ActionBody` повинні мати протокол `https://` або `http://`. Це вимога Telegram API для безпеки.

### Поп-ап підтвердження для посилань

При кліку на кнопку з посиланням (`ActionType: "open-url"`) відкривається поп-ап з запитанням чи відкрити посилання та назвою сайту. Це забезпечує безпеку користувача.

## Наслідки для користувачів і імплементації

### Для інтеграторів

При використанні інлайн-клавіатури важливо:

1. **Перевірити канал** — інлайн-клавіатура працює тільки для Telegram та Widget
2. **Включити опцію** — обов'язково відмітити чекбокс "Інлайн-клавіатура (тільки Telegram та віджет)"
3. **Налаштувати ActionType** — вказати тип дії для кожної кнопки
4. **Додати протокол до посилань** — посилання повинні мати протокол `https://` або `http://`

### Типові помилки

**Помилка:** Інлайн-клавіатура не відображається  
**Проблема:** Не відмічено чекбокс "Інлайн-клавіатура"  
**Рішення:** Включити опцію інлайн-клавіатури в налаштуваннях блоку

**Помилка:** Посилання не працює  
**Проблема:** Посилання не має протоколу або неправильний `ActionType`  
**Рішення:** Додати протокол `https://` та вказати `ActionType: "open-url"`

**Помилка:** Кнопка не відправляє відповідь  
**Проблема:** Не вказано `ActionBody` або неправильний `ActionType`  
**Рішення:** Вказати `ActionType: "reply"` та текст у `ActionBody`

### Обмеження

- Інлайн-клавіатура працює тільки для Telegram та Widget
- Максимальна кількість кнопок в рядку: 8 (для Telegram)
- Максимальна кількість рядків: залежить від каналу
- Посилання повинні мати протокол `https://` або `http://`

## Приклади використання

### Кнопка з переходом на сайт

```json
{
  "ActionType": "open-url",
  "ActionBody": "https://example.com"
}
```

### Кнопка з відповіддю

```json
{
  "ActionType": "reply",
  "ActionBody": "Так, згоден"
}
```

Або можна не вказувати `ActionType`, тоді буде використано `reply` за замовчуванням.

## Пов'язані документи

- **Reference:** [Telegram Bot API - Inline Keyboard](https://core.telegram.org/bots/api#inlinekeyboardmarkup) — офіційна документація Telegram про інлайн-клавіатури
- **Explanation:** [Telegram WebApp](/uk/scenariodialog/explanation/telegram-webapp.md) — використання WebApp через інлайн-клавіатуру

