Мой первый Telegram-бот для фриланса: от идеи до первых ошибок

1

Этот текст написан в Сообществе, в нем сохранены авторский стиль и орфография

Исходные данные

Я работаю веб-дизайнером в агентстве и подрабатываю на фрилансе: веду соцсети, настраиваю рекламу, пишу тексты. Работы много, но денег всё равно постоянно не хватает. Поэтому клиентов я стараюсь не упускать.

Основная проблема — клиенты пишут через разные площадки и соцсети. Более того, кто-то присылает запрос ночью, кто-то утром, и часть сообщений просто теряется в потоке чатов. В какой-то момент я решил, что это надо прекратить. Нужно написать простой и эффективный Telegram-бот, который будет сам принимать заявки, сохранять контакты в таблицу и напоминать мне о дедлайнах.

Вы можете ознакомиться с моей статьей и использовать для себя некоторые полезные инструменты и техники, которые я использовал в рамках этого проекта. Позже я хотел бы выкладывать статьи с более конкретным разбором кода и техническими аспектами моегоTelegram-бота.

Идея и функционал

Я решил, что бот должен делать только самое необходимое — без сложных сценариев и интерфейсов. Главное, чтобы человек мог быстро оставить заявку, а я не потерял контакт.

Как работает бот: пользователь нажимает кнопку о том, что хочет сделать заказ. Далее выбирает тип работы: «нужна консультация», «запустить рекламу» и так далее. Бот записывает username пользователя и текст обращения в таблицу Google Sheets, после чего отправляет мне уведомление в личку. Чтобы я сразу видел, кто и что написал.

Позже я добавил команду /brief. Когда человек её вводит, бот присылает шаблон с вопросами — имя, бюджет, ссылка на проект, цель. Это оказалось удобнее, чем получать разрозненные сообщения и потом самостоятельно спрашивать у клиента детали.

В итоге получился минималистичный инструмент, без особого дизайна. Бот не продаёт, не анализирует, не шутит — просто помогает не упустить потенциального клиента и структурирует заявки.

Полезные техники при написании бота

Когда начал собирать бота, выявил для себя несколько полезных техник и правил, которым следовал при написании кода. Приёмы не мои, большая их часть была найдена в сети, но их практическая применимость и польза лично мною неоспоримы. Вот несколько техник, которые я использовал:

1. Разделение логики на команды и обработчики сообщений.
Например, /start открывает приветствие и объясняет, что бот делает, /brief отправляет шаблон для заявки, а всё остальное попадает в общий обработчик сообщений. Это упрощает добавление новых функций без переписывания всего бота.

2. Валидация входных данных. Сразу проверяю, что человек прислал корректное имя, ссылку или текст. Если что-то не так — бот просит уточнить, вместо того чтобы записывать мусор в таблицу. Это экономит потом кучу времени.

3. Логирование действий. Каждый раз, когда приходит сообщение или создаётся запись в таблице, бот оставляет запись в логах (текстовых файлах, хранящихся на диске). Благодаря этому я сразу видел ошибки и понимал, где что сломалось.

4. Минимизация зависимостей. Чем меньше внешних сервисов подключаешь, тем проще развернуть бота и тем меньше вероятность поломок. Об инструментах в статье речь пойдёт дальше.

5. Использование шаблонов для сообщений. Например, заранее подготовленные тексты для приветствия или команд типа /brief обеспечивают единообразие в работе с пользователями.

Эти техники позволили сделать бота более предсказуемым и удобным, даже при отсутствии глубокого опыта в программировании.

Какие инструменты я использовал

Кратко расскажу о том, какие инструменты использовал при написании бота.

Язык программирования я выбрал Python. Он прост в изучении благодаря куче туториалов в сети. Для взаимодействия с Telegram использовал библиотеку aiogram: она помогает быстро прописывать логику, обрабатывать команды и сообщения.

Чтобы заявки сами записывались в таблицу, подключил Google Sheets API. Это нужно, чтобы всё хранилось в одном месте, и я мог отслеживать новые сообщения без лишнего копирования.

Для тестирования и отладки кода использовал Replit — удобно проверять куски логики прямо из браузера, не ставя ничего на компьютер. Сам код писал в среде Visual Studio Code — удобна для редактирования и работы с более сложными файлами.

Чтобы не забыть детали, структуру команд и варианты вопросов для бота храню в Notion. Это удобно: есть и план работы, и текстовые шаблоны для сообщений.

Иногда застревал на мелких кусках кода, и тут здорово помогали ChatGPT и GitHub Copilot. Например, один раз бот перестал отправлять уведомления — нейронка подсказала корректный синтаксис. После небольшой правки всё заработало.

Бот работает на базе домашнего ноутбука, но если компьютер выключить — работа будет приостановлена. Поэтому уже присматриваюсь к облачным вариантам: подумал развернуть его на виртуальной машине. Присматривался к Cloud4Y и Beget для аренды сервера, но пока всё ещё работаю с локальной машины и просто оставляю ноутбук включенным на ночь. Вероятно к данному вопросу я вернусь в будущих статьях.

Первая серьёзная ошибка

К сожалению, без проблем не обошлось. В будущем я подготовлю отдельную большую статью о всех ошибках и нестандартных ситуациях, которые повстречались мне при написании бота. Приведу пример самой первой ошибки.

Через пару дней работы бот перестал записывать заявки в Google Sheets. Сначала я даже не понял, что случилось: сообщения приходили, уведомления отправлялись, а таблица оставалась пустой.

Проверив логи (техника, о которой я рассказывал выше), я увидел ошибку: 403: The caller does not have permission. Причина — токен Google API истёк, а бот продолжал работать вхолостую.

Чтобы исправить, пришлось сделать несколько шагов:

  1. Сгенерировать новый токен в Google Cloud Console.
  2. Сохранить его в отдельном.env файле, а не зашивать прямо в код, чтобы в будущем менять проще.

Вывод из ситуации: всё, что может истечь, рано или поздно истечёт. Бот нуждается в контроле и уведомлениях о сбоях — иначе можно потерять важные заявки.

Что по итогу

Бот помогает не пропускать клиентов: заявки собираются автоматически, и я точно знаю, что ничего не потерялось. Конечно, это пока только начало проекта — в планах добавить интеграцию с CRM и оплатой, сделать работу ещё удобнее.

Я собираюсь продолжать делиться опытом: писать статьи про особенности написания кода на Python, рассказывать о типичных ошибках, показывать способы визуализации данных и автоматизации процессов. В целом мне приятно делиться такими кейсами, и буду рад продолжать делать это для читателей Т⁠—⁠Ж.

Вот что еще мы писали по этой теме

заголовок discussed

Узнайте, сколько вам нужно зарабатывать, чтобы купить квартиру

Узнайте, сколько вам нужно зарабатывать, чтобы купить квартиру

100
Как работают банки

Как работают банки

12
Autotest 2026-01-16T05:05:58.544933Z 5884

Autotest 2026-01-16T05:05:58.544933Z 5884

3
Autotest 2026-01-17T00:07:19.598610Z 4875

Autotest 2026-01-17T00:07:19.598610Z 4875

2
заголовок readers-post-gallery