Собираем бота с Claude Code

Задание готово — превращаем его в живого бота. Ты уже создал тестового бота через @BotFather в онбординге и получил токен. Теперь соберём вокруг него рабочий продукт.

🎯 После урока сможешь: собрать рабочего Telegram-бота с Claude Code и запустить его.

Шаг 1. Папка, токен и задание

Создай папку проекта, положи токен в .env (никогда в код!), запусти Claude Code и отдай ему задание из прошлого урока. Команды для Windows:

mkdir bot-zayavki
cd bot-zayavki
Set-Content -Encoding utf8 .env 'BOT_TOKEN=твой-токен-от-botfather'
claude
Welcome to Claude Code!

Почему Set-Content -Encoding utf8, а не привычное echo … > .env. В интернете ты чаще встретишь второй вариант — на Windows он записывает файл в другой кодировке, и бот потом не сможет прочитать свой токен. Причём молча: ошибки не будет, просто бот не отвечает, и ты полдня ищешь причину не там. Пишем сразу правильно.

На Mac и Linux та же строка выглядит привычно: echo "BOT_TOKEN=твой-токен-от-botfather" > .env. Остальные команды одинаковые.

Окно PowerShell с Claude Code: задание собрать бота и созданные файлы bot.py, requirements.txt.

Шаг 2. Что сгенерировал Claude Code

Claude Code создаёт файл bot.py. Читать код целиком не нужно — важно понимать его каркас. Сердце бота — обработчик: функция, которая срабатывает на определённое действие (команду или сообщение).

import os
from aiogram import Bot, Dispatcher
from aiogram.filters import Command
from aiogram.types import Message

bot = Bot(os.getenv("BOT_TOKEN"))   # токен из .env, не из кода
dp = Dispatcher()

@dp.message(Command("start"))
async def start(message: Message):
    await message.answer("Здравствуйте! Оставьте заявку — как вас зовут?")
  Как работает обработчик:

   пользователь шлёт  /start
            │
            ▼
   срабатывает функция start()  ──▶  бот отвечает текстом

   один обработчик = реакция на одно действие

Обрати внимание: токен берётся os.getenv("BOT_TOKEN") — из окружения (.env), а не вписан в код. Так и должно быть в любом боевом проекте.

Шаг 3. Запускаем — бот отвечает

Попроси Claude Code запустить бота (или запусти сам). Бот подключится к Telegram и начнёт отвечать на сообщения. Открой его в Telegram и напиши /start.

Чат в Telegram: пользователь отправил /start, бот ответил приглашением оставить заявку.

Если бот молчит, причин обычно три: бот не запущен; токен скопирован не полностью; файл .env создан не той командой и записан в кодировке, которую бот не читает (см. выше — на Windows нужен Set-Content -Encoding utf8). Не лезь в код руками — скажи Claude Code: «бот не отвечает, вот что вижу в терминале …», и он поможет разобраться. Заодно попроси его показать содержимое .env — если вместо строки с токеном там непонятные символы, дело в кодировке.

Контрольный вопрос. Что такое обработчик (handler) в боте?

АФункция, которая срабатывает на определённое действие — команду или сообщение
БФайл с базой данных заявок
ВСайт, где живёт бот

Подсказка: Вспомни функцию start(): на что она реагирует и что делает.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Откуда бот берёт токен в этом коде: из файла с секретами или прямо из кода? Впиши имя файла, где лежит токен.

Исходный код для этого задания:

bot = Bot(os.getenv("BOT_TOKEN"))

Подсказка: os.getenv читает значение из окружения — из того самого файла секретов с точкой в начале имени.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Claude Code сгенерировал бота, но он не отвечает. Как поступить правильнее?

АОписать проблему Claude Code (что вижу в терминале) и разобраться вместе
БСразу переписывать код бота вручную
ВСоздать нового бота в @BotFather и начать заново

Подсказка: Ты управляешь агентом словами — сначала расскажи ему, что не так.

Онлайн-проверка ответа появится позже

Что дальше

Бот отвечает на /start — каркас готов. В следующем уроке научим его принимать заявку по шагам, сохранять её в базу и уведомлять администратора.

Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева