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