Мой первый Telegram-бот для фриланса: от идеи до первых ошибок
Этот текст написан в Сообществе, в нем сохранены авторский стиль и орфография
Исходные данные
Я работаю веб-дизайнером в агентстве и подрабатываю на фрилансе: веду соцсети, настраиваю рекламу, пишу тексты. Работы много, но денег всё равно постоянно не хватает. Поэтому клиентов я стараюсь не упускать.
Основная проблема — клиенты пишут через разные площадки и соцсети. Более того, кто-то присылает запрос ночью, кто-то утром, и часть сообщений просто теряется в потоке чатов. В какой-то момент я решил, что это надо прекратить. Нужно написать простой и эффективный 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 истёк, а бот продолжал работать вхолостую.
Чтобы исправить, пришлось сделать несколько шагов:
- Сгенерировать новый токен в Google Cloud Console.
- Сохранить его в отдельном.env файле, а не зашивать прямо в код, чтобы в будущем менять проще.
Вывод из ситуации: всё, что может истечь, рано или поздно истечёт. Бот нуждается в контроле и уведомлениях о сбоях — иначе можно потерять важные заявки.
Что по итогу
Бот помогает не пропускать клиентов: заявки собираются автоматически, и я точно знаю, что ничего не потерялось. Конечно, это пока только начало проекта — в планах добавить интеграцию с CRM и оплатой, сделать работу ещё удобнее.
Я собираюсь продолжать делиться опытом: писать статьи про особенности написания кода на Python, рассказывать о типичных ошибках, показывать способы визуализации данных и автоматизации процессов. В целом мне приятно делиться такими кейсами, и буду рад продолжать делать это для читателей Т—Ж.





































