Этот проект - полностью рабочий Cloudflare-ориентированный прототип Telegram WebApp, включающий Cloudflare Worker (TypeScript) для backend'а и статический frontend (WebApp).
worker/- Cloudflare Worker (TypeScript)src/index.ts- основной кодpackage.json,tsconfig.json, скрипты сборки
frontend/- статическая страница WebApp (можно хостить на Cloudflare Pages)wrangler.toml- конфигурация wrangler
- Установи Wrangler и esbuild:
npm i -g wrangler cd worker npm ci - Создай D1-базу (через wrangler или Dashboard) и привяжи её в
wrangler.tomlили Dashboard.wrangler d1 create messages wrangler d1 execute messages --command "CREATE TABLE messages (id INTEGER PRIMARY KEY AUTOINCREMENT, chat_id TEXT, role TEXT, content TEXT, group_id INTEGER, created_at TEXT)" - Установи секрет BOT_TOKEN:
wrangler secret put BOT_TOKEN
- Построй и задеплой Worker:
После этого у тебя будет URL типа
npm run build wrangler publish
https://<your-worker>.workers.dev/telegram/webhook - Настрой webhook для Telegram:
curl -X POST "https://api.telegram.org/bot$BOT_TOKEN/setWebhook" -d "url=https://<your-worker>.workers.dev/telegram/webhook"
- Размести
frontend/на Cloudflare Pages и укажи URL WebApp в BotFather:/setdomain-> домен Pages (напримерyourname.pages.dev)/setmenubutton-> URL:https://yourname.pages.dev/index.html(или/frontend/if you host as subpath)
- Worker в этом репозитории использует демонстрационный эхо-ответ LLM. Чтобы подключить реальную LLM, замените
demoAnswerвsrc/index.tsнаfetchк вашему LLM endpoint. - WebApp initData проверяется по подписи внутри Worker (HMAC-SHA256), поэтому WebApp должен передавать
initDataв/api/history. - История сообщений хранится в D1, чанки отвечающих сообщений сохраняются с
group_id, а API/api/historyсклеивает их в единые ответы между сообщениями пользователя.