Деплой и Webhook
Через wrangler CLI
Заголовок раздела «Через wrangler CLI»# Установка секретов (однократно)echo "YOUR_BOT_TOKEN" | npx wrangler secret put BOT_TOKENecho "YOUR_RANDOM_SECRET" | npx wrangler secret put WEBHOOK_TOKEN
# Деплойnpx wrangler deployЧерез GitHub Actions
Заголовок раздела «Через GitHub Actions»Создайте .github/workflows/deploy.yml:
name: Deploy Boton: workflow_dispatch: push: branches: [main]
jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: cloudflare/wrangler-action@v3 with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}Секреты BOT_TOKEN и WEBHOOK_TOKEN задаются через wrangler secret put (они хранятся в Cloudflare, а не в GitHub).
Настройка Webhook
Заголовок раздела «Настройка Webhook»После деплоя установите webhook через Telegram API:
curl "https://api.telegram.org/botYOUR_BOT_TOKEN/setWebhook" \ -d "url=https://your-bot.your-subdomain.workers.dev" \ -d "secret_token=YOUR_RANDOM_SECRET"Скрипт для установки webhook
Заголовок раздела «Скрипт для установки webhook»Создайте src/reset_hooks.py:
import asynciofrom edgebot.utils.http import fetchfrom edgebot import to_js_object
async def setup(): token = "YOUR_BOT_TOKEN" url = "https://your-bot.your-subdomain.workers.dev" secret = "YOUR_RANDOM_SECRET"
resp = await fetch( f"https://api.telegram.org/bot{token}/setWebhook", to_js_object({ "method": "POST", "headers": {"Content-Type": "application/json"}, "body": f'{{"url":"{url}","secret_token":"{secret}"}}', }), ) print(await resp.json())Верификация запросов
Заголовок раздела «Верификация запросов»В точке входа проверяйте X-Telegram-Bot-Api-Secret-Token:
class Default(WorkerEntrypoint): async def fetch(self, request): secret = request.headers.get("X-Telegram-Bot-Api-Secret-Token") if not secret or secret != self.env.WEBHOOK_TOKEN: return Response('{"error":"unauthorized"}', status=401)
update = await request.json() await self.bot.process_update(update) return Response('{"ok":true}')Custom Domain
Заголовок раздела «Custom Domain»Для привязки собственного домена добавьте в wrangler.toml:
routes = [ { pattern = "bot.example.com", custom_domain = true }]Локальная отладка
Заголовок раздела «Локальная отладка»# Запуск dev-сервераnpx wrangler dev
# Просмотр логов в реальном времениnpx wrangler tail my-bot --format=pretty