# Настройка Telegram Webhook для обработки кнопок

## Проблема: Кнопка не обрабатывает клик

Если кнопка появилась, но не обрабатывает клик, это означает, что **webhook не настроен** или не получает callback query от Telegram.

## Решение: Настройка Webhook

### Шаг 1: Проверка текущего webhook

Проверьте, настроен ли webhook:

```bash
curl "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getWebhookInfo"
```

Ответ покажет:
- `url` - текущий URL webhook (если настроен)
- `pending_update_count` - количество необработанных обновлений
- `last_error_date` - дата последней ошибки (если есть)

### Шаг 2: Настройка Webhook

Установите webhook на ваш сервер:

```bash
curl -X POST "https://api.telegram.org/bot8255507202:AAFusoh0K7aSK-OWEGH03EBmG0DwLui0c1E/setWebhook" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://kartulirest.de/api/webhooks/telegram"}'
```

Или через браузер:
```
https://api.telegram.org/bot<YOUR_BOT_TOKEN>/setWebhook?url=https://kartulirest.de/api/webhooks/telegram
```

**Важно:**
- URL должен быть HTTPS (Telegram требует SSL)
- URL должен быть доступен из интернета
- URL должен возвращать статус 200 OK

### Шаг 3: Проверка доступности endpoint

Проверьте, что endpoint доступен:

```bash
curl -X POST "https://kartulirest.de/api/webhooks/telegram" \
  -H "Content-Type: application/json" \
  -d '{"test": "data"}'
```

Должен вернуться ответ: `{"ok":true}`

### Шаг 4: Проверка логов

После настройки webhook, нажмите на кнопку в Telegram и проверьте логи:

```bash
tail -f storage/logs/laravel.log | grep -i telegram
```

Вы должны увидеть:
```
[2026-01-15 10:30:45] local.INFO: Telegram webhook: Request received 
{"has_callback_query":true,"data_keys":["callback_query"]}

[2026-01-15 10:30:45] local.INFO: Telegram webhook: Processing callback query

[2026-01-15 10:30:45] local.INFO: Telegram webhook: Callback query received 
{"callback_query_id":"123456789","data":"confirm_reservation_42"}
```

### Шаг 5: Устранение проблем

#### Проблема: Webhook не получает запросы

**Причины:**
1. Webhook не настроен
2. URL недоступен из интернета
3. SSL сертификат недействителен
4. Сервер блокирует запросы от Telegram

**Решение:**
1. Проверьте настройку webhook (шаг 2)
2. Проверьте доступность URL из интернета
3. Проверьте SSL сертификат
4. Проверьте firewall/настройки сервера

#### Проблема: Webhook получает запросы, но callback_query не обрабатывается

**Проверьте логи:**
- Если видите `"has_callback_query":false` - Telegram не отправляет callback query
- Если видите `"has_callback_query":true` но нет дальнейших логов - ошибка в обработке

**Решение:**
1. Проверьте, что кнопка отправлена правильно (с `callback_data`)
2. Проверьте логи на наличие ошибок
3. Убедитесь, что бот имеет права на обработку callback query в группе

#### Проблема: Ошибка 404 или 403

**Причины:**
1. Неправильный URL
2. Маршрут не зарегистрирован
3. CSRF защита блокирует запрос

**Решение:**
1. Проверьте правильность URL в webhook
2. Убедитесь, что маршрут `/api/webhooks/telegram` существует
3. Проверьте, что endpoint исключен из CSRF в `VerifyCsrfToken`

### Шаг 6: Тестирование

1. Создайте новую резервацию через API
2. Проверьте, что в Telegram пришло сообщение с кнопкой
3. Нажмите на кнопку
4. Проверьте логи - должны появиться записи о callback query
5. Проверьте, что резервация подтвердилась в базе данных
6. Проверьте, что email отправлен клиенту

## Альтернатива: Использование Long Polling (для разработки)

Если webhook не работает (например, на локальном сервере), можно использовать Long Polling:

```bash
# Запустите скрипт для получения обновлений
php artisan telegram:poll
```

Но для продакшена обязательно используйте webhook.

## Проверка конфигурации

Убедитесь, что в `.env` настроены:
```env
TELEGRAM_BOT_TOKEN=your_bot_token
TELEGRAM_CHAT_ID=your_chat_id
```

И что маршрут зарегистрирован в `routes/api.php`:
```php
Route::post('/webhooks/telegram', [\App\Http\Controllers\Api\Webhooks\TelegramWebhookController::class, 'handle']);
```

И исключен из CSRF в `app/Http/Middleware/VerifyCsrfToken.php`:
```php
protected $except = [
    'api/webhooks/telegram',
];
```
