Telegram-бот с приёмом платежей

Промпт для Cursor / Claude Code. Готовый Telegram-бот на Node.js (grammY) с командой /buy — бот выдаёт ссылку на оплату, Tegro.Money отправляет webhook, бот сообщает пользователю об успешном платеже.

Промпт

Сделай Telegram-бот на Node.js + TypeScript + grammY + Fastify.

Структура:
- bot.ts — grammY-бот: команды /start, /buy.
- server.ts — Fastify, два роута: POST /tegro-notify (webhook от Tegro) и /health.
- index.ts — стартует bot.start() + server.listen().

Логика /buy:
1. Спрашиваем у пользователя что купить (для демо — фиксированный товар "Доступ к каналу за 500 ₽").
2. Создаём заказ в Tegro.Money:
   POST https://tegro.money/api/createOrder/
   Body: {
     shop_id: process.env.TEGRO_SHOP_ID,
     nonce: crypto.randomUUID(),
     currency: "RUB",
     amount: 500,
     order_id: crypto.randomUUID(),
     description: "Доступ к каналу",
     notify_url: process.env.BASE_URL + "/tegro-notify"
   }
   Header: Authorization: Bearer <HMAC-SHA256(body, TEGRO_API_KEY) hex>
   ВАЖНО: подпись считается над ТЕМ ЖЕ JSON-телом которое отправляем (после JSON.stringify).
3. Из ответа берём data.url — отправляем пользователю кнопку Inline Keyboard "Оплатить" с этой ссылкой.
4. Сохраняем mapping {tegroOrderHash → telegramUserId} в Map (или Redis/SQLite, если есть в проекте).

Логика /tegro-notify webhook:
1. Tegro шлёт form-urlencoded POST.
2. Проверь подпись по доке https://tegro.money/docs/payments/notify/
3. Если order_id найден в нашей Map и status=1 (paid) — отправь telegram message пользователю
   "Оплата получена! Добавляю в канал..." и invite-link на закрытый канал.
4. Верни "OK" со статусом 200.

Дополнительно:
- ENV: TELEGRAM_BOT_TOKEN, TEGRO_SHOP_ID, TEGRO_API_KEY, BASE_URL, CHANNEL_INVITE_LINK
- package.json scripts: dev (tsx watch), start (node dist), build (tsc)
- README.md со списком ENV и инструкцией:
  * /buy от пользователя -> ссылка Tegro
  * После оплаты — пользователь получает invite на канал
  * Для локальной разработки BASE_URL = ngrok URL

Не используй node-telegram-bot-api — он устарел. Используй grammY.

Что после генерации

  1. Создать бота через @BotFather — получить TELEGRAM_BOT_TOKEN.
  2. Зарегистрировать магазин в Личном кабинете — взять TEGRO_SHOP_ID + TEGRO_API_KEY.
  3. Поднять ngrok для тестов webhook'а (ngrok http 3000).
  4. Прописать в настройках магазина notify_url = https://<ngrok>/tegro-notify.
  5. Включить тестовый режим магазина — обкатка без реальных списаний.

Связанные