«Телеграм» — самое быстрорастущее приложение 2022 года в России.

За последние шесть месяцев суточная аудитория мессенджера выросла на 66%. Теперь и новые пользователи, и пришедший вслед за ними бизнес знакомятся с одной из главных особенностей «Телеграма» — тысячами местных ботов.

Ботов делают все: команда мессенджера, компании, обычные люди. Они популярны и на рынке разработки: на платформе Kwork более тысячи фрилансеров предлагают создать бота. Цены разные: от 500 до 500 тысяч рублей в зависимости от сложности задачи. Далеко не все готовы тратить такие деньги или изучать программирование ради создания бота. Поэтому появилось множество платформ, освоение которых не требует особых навыков.

Я узнал, как бесплатно создать телеграм-бота, и попробовал самостоятельно сделать это в разных ноукод-сервисах. Но для тех, кто разбирается в программировании, есть бонусный раздел: там я при помощи разработчика Ильи Гринзовского пошагово рассказываю о создании небольшого бота на Python.

Какие бывают телеграм-боты

Телеграм-боты — это мини-программы внутри мессенджера, которые управляются текстовыми командами в чате по принципу «вопрос — ответ». Подобная технология была еще в «Аське» конца нулевых: боты присылали анекдоты, гороскопы, статьи из «Википедии» и переводили тексты.

С 2015 года любой пользователь может сделать собственного бота в «Телеграме». Со временем они становились все сложнее и функциональнее: с помощью ботов можно управлять сообществами, бронировать места в кафе, переводить тексты и войсы, скачивать файлы, обрабатывать платежи. Некоторые даже используют нейросети: например, ruDALL-E Malevich от «Сбера» генерирует картинку по описанию, которое можно отправить прямо в чат.

В апреле 2022 года команда «Телеграма» представила второе поколение ботов: разработчики получили средства для полноценных интерфейсов на JavaScript внутри мессенджера. Такие боты уходят от стандартной модели «вопрос — ответ в чате» и заменяют целые сайты. Вот как это выглядит в тестовом приложении для заказа еды.

Пока это только демоверсия, но она уже показывает возможности нового поколения ботов
Пока это только демоверсия, но она уже показывает возможности нового поколения ботов

Ботов можно разделить на несколько категорий.

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

Помощники в администрировании. Пригодятся владельцам каналов и групповых чатов. Умеют собирать статистику, добавлять к постам реакции, URL-кнопки, файлы, создавать отложенные публикации, как ControllerBot. Или отслеживать активность в чате, выдавать предупреждения и настраивать антиспам-фильтры — это умеет Combot.

Магазины. Компании переносят свои каталоги в мессенджер — для тех, кому проще выбрать товар и оплатить его прямо в «Телеграме». Например, через Baggins можно купить чашку кофе, а через G_Shop — женскую одежду. Главный минус таких магазинов — запутанный интерфейс: сложно просмотреть все товары и собрать корзину.

Инструменты. Разнообразные боты, которые добавляют мессенджеру новые функции. Они позволяют читать электронные письма, как Gmail Bot, отслеживать цены на билеты, как AviasalesBot, или проверить свой заказ в боте СДЭКа. Еще они напоминают о штрафах, скачивают файлы по URL и распознают музыку по аудиосообщению.

Поисковики. В них можно бесплатно найти книги, музыку, фильмы и прочие файлы. Зачастую эти боты пиратские — и «Телеграм» их периодически блокирует.

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

Какие навыки нужны, чтобы написать своего бота

Есть два способа создать бота в «Телеграме»: с помощью кода и ноукод-платформ. В первом случае вы пишете бота самостоятельно, во втором — пользуетесь конструктором и собираете бота из уже готовых элементов.

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

Создать бота с помощью кода. Бота можно написать на любом языке программирования — от PHP и Node.js до Java и Go. Самым популярным считается Python, потому что в его экосистеме много открытых библиотек и готовых решений. К тому же он относительно легок в изучении. Особенно подойдет новичкам: достаточно понять логику синтаксиса и отступов.

Далее нужно установить пакет python-telegram-bot — это обертка для API от «Телеграма». В документации этого фреймворка описана вся необходимая информация для разработки бота. Также понадобится любой текстовый редактор для написания кода.

Создать бота с помощью ноукод-платформы. Для создания ботов в конструкторе достаточно базовых знаний веб-приложений. Если вы владеете Figma, Miro, Asana или перетаскивали карточки в Trello, то легко сможете составить бота из наглядной цепочки блоков в конструкторе.

Визуальный редактор помогает сориентироваться даже новичку — вот так это выглядит в сервисе Botmother. Источник: botmother.com
Визуальный редактор помогает сориентироваться даже новичку — вот так это выглядит в сервисе Botmother. Источник: botmother.com

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

Обычно в бесплатной версии ноукод-сервисы позволяют создать одного бота. Но будет ограничение либо по количеству доступных команд, либо по количеству пользователей. Так что полностью бесплатно создать классного бота не выйдет.

Популярные платформы для телеграм-ботов: сравниваем пять конструкторов

Что умеет Цена Что в платной версии Что в бесплатной версии
Manybot Конструктор внутри «Телеграма». Позволяет создать многоуровневое меню, форму обратной связи и «подтягивать» новости по RSS В боте есть встроенная реклама. Отключить ее нельзя
PuzzleBot Платформа для создания сложных ботов, магазинов, инструментов модерации. В сервисе есть техподдержка, инструкции и личный кабинет От 552 Р в месяц Чем дороже тариф, тем больше доступно ботов, шире лимит подписчиков и команд Можно создать одного бота и настроить до 15 команд. Также стоит ограничение до 150 подписчиков
Botobot Сервис ориентирован на ретейл: можно сделать каталог, корзину, форму оплаты, чат поддержки. Также на платформе есть кабинет аналитики продаж От 320 Р в месяц Увеличивается лимит на товары и появляются новые функции, например поиск по каталогу и доступ к API Можно создать одного бота и опубликовать в нем не более 20 товаров
Unisender На платформе есть готовые шаблоны для разного бизнеса: для доставки еды или записи в салон красоты. А также интеграции с amoCRM, «Google-таблицами», «Битрикс24» и не только От 800 до 16 000 Р в месяц Увеличивается лимит подписчиков Можно оздать бота и пользоваться им, пока у вас менее тысячи подписчиков
BotTap В конструкторе можно создать магазин, бота для сбора обратной связи, рассылок и онлайн-записи. Есть интеграции с платежными системами Qiwi, «ЮKassa», «ЮMoney» и другими От 99 Р в месяц Бот с меню, текстовыми сообщениями и картинками. Но в нем будет реклама и не будет статистики. Более дорогие тарифы добавляют функции, расширяют лимиты и отключают рекламу
Что умеет
Конструктор внутри «Телеграма». Позволяет создать многоуровневое меню, форму обратной связи и «подтягивать» новости по RSS
Цена
Что в платной версии
Что в бесплатной версии
В боте есть встроенная реклама. Отключить ее нельзя
Что умеет
Платформа для создания сложных ботов, магазинов, инструментов модерации. В сервисе есть техподдержка, инструкции и личный кабинет
Цена
От 552 Р в месяц
Что в платной версии
Чем дороже тариф, тем больше доступно ботов, шире лимит подписчиков и команд
Что в бесплатной версии
Можно создать одного бота и настроить до 15 команд. Также стоит ограничение до 150 подписчиков
Что умеет
Сервис ориентирован на ретейл: можно сделать каталог, корзину, форму оплаты, чат поддержки. Также на платформе есть кабинет аналитики продаж
Цена
От 320 Р в месяц
Что в платной версии
Увеличивается лимит на товары и появляются новые функции, например поиск по каталогу и доступ к API
Что в бесплатной версии
Можно создать одного бота и опубликовать в нем не более 20 товаров
Что умеет
На платформе есть готовые шаблоны для разного бизнеса: для доставки еды или записи в салон красоты. А также интеграции с amoCRM, «Google-таблицами», «Битрикс24» и не только
Цена
От 800 до 16 000 Р в месяц
Что в платной версии
Увеличивается лимит подписчиков
Что в бесплатной версии
Можно создать бота и пользоваться им, пока у вас менее тысячи подписчиков
Что умеет
В конструкторе можно создать магазин, бота для сбора обратной связи, рассылок и онлайн-записи. Есть интеграции с платежными системами Qiwi, «ЮKassa», «ЮMoney» и другими
Цена
От 99 Р в месяц
Что в платной версии
Бот с меню, текстовыми сообщениями и картинками. Но в нем будет реклама и не будет статистики. Более дорогие тарифы добавляют функции, расширяют лимиты и отключают рекламу
Что в бесплатной версии

Как зарегистрировать нового бота

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

Но главное — он выдает уникальный токен, который необходим для авторизации бота и работы с Bot API. Любой, кто получит токен, сможет управлять ботом. Так что храните его в надежном месте и никому не передавайте — в противном случае лишитесь доступа к собственному боту.

Как получить токен в BotFather:

  1. Отправьте в чат с BotFather команду /newbot.
  2. Введите название бота — в этой категории особых ограничений нет.
  3. Введите юзернейм бота — его техническое имя, которое будет отображаться в адресной строке. К нему уже больше требований: юзернейм должен быть уникальным, написан на латинице и обязательно заканчиваться на bot. Так «Телеграм» защищается от злоумышленников, которые могут выдавать ботов за реальных людей.
  4. Готово. BotFather пришлет токен бота — его можно использовать для настройки в сторонних сервисах.
Я создал бота для тестирования, выбрал ник @testunisenderbot, получил токен, переименовал в «Оцените ресторан»
Я создал бота для тестирования, выбрал ник @testunisenderbot, получил токен, переименовал в «Оцените ресторан»

О каких еще функциях стоит знать. Уже после получения токена можно воспользоваться BotFather, чтобы настроить внешний вид бота. Вот несколько полезных команд:

  1. /setdescription — меняет описание бота, пользователи увидят его в начале диалога в графе «Что умеет этот бот?». Есть ограничение в 512 символов.
  2. /setabouttext — тоже меняет описание, но другое — то, которое видно в профиле бота. Лимит — 120 символов.
  3. /setuserpic — меняет аватарку.
  4. /setcommands — меняет список команд бота. Тут нельзя установить конкретные функции и за что они отвечают — лишь количество команд и как они называются.
  5. /setjoingroups — устанавливает, можно ли добавлять бота в групповые чаты. Настройка зависит от ваших целей.
  6. /setprivacy — устанавливает уровень доступа бота к перепискам. Если приватность включена, бот видит только сообщения, которые обращены к нему. Если отключена — все сообщения. «Телеграм» рекомендует не отключать параметры приватности.
  7. /deletebot — удаляет бота и освобождает юзернейм.
Небольшая переписка с BotFather — и теперь у меня есть еще и бот-магазин
Небольшая переписка с BotFather — и теперь у меня есть еще и бот-магазин

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

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

Как создать бота в Unisender. Зарегистрируйтесь и перейдите в меню «Чат-боты» в личном кабинете. Бота можно создать либо с нуля, либо через шаблоны — второй вариант быстрее и проще. Во вкладке «Шаблоны» сервис предложит создать ботов для записи клиентов, рекламы вебинара или риелторских услуг.

Я выбрал шаблон «Отзывы клиентов о салоне красоты»
Я выбрал шаблон «Отзывы клиентов о салоне красоты»

После выбора появится интерфейс с наборами готовых блоков — в них можно менять текст и структуру. Редактировать можно всю цепочку: удалять блоки, добавлять новые, встраивать меню с кнопками, теги, фильтры и формы для сбора данных.

Вот какой сценарий я прописал для бота — сборщика отзывов:

Приветствие → Меню с просьбой оценить обслуживание. Здесь бот показывает кнопки с пятью вариантами ответов: от «очень доволен» до «очень недоволен» → Ветка раздваивается на позитивный и негативный варианты. Позитивный — прошу пользователя оставить отзыв на «Яндекс.Картах», Google Maps и других платформах. Негативный — прошу написать в чате, что именно не понравилось.

Так выглядит итоговая блок-схема
Так выглядит итоговая блок-схема
После нужно нажать «Запустить» и ввести токен от BotFather. Все — бот готов к работе, можно открыть его в «Телеграме»
После нужно нажать «Запустить» и ввести токен от BotFather. Все — бот готов к работе, можно открыть его в «Телеграме»

Как создать бота в PuzzleBot. Создайте нового бота в BotFather, скопируйте токен и добавьте в PuzzleBot — сервис запросит его сразу после регистрации.

Напоминаю, что в этом сервисе я делаю мини-магазин. Для этого в конструкторе нужно найти вкладку «Магазин» и выбрать валюты для оплаты. В меню можно настроить способы доставки, связку с платежными системами и акции.

Далее откройте список товаров, нажмите кнопку «Добавить» и оформите карточки товаров: добавьте фото, описание, цену, количество — и разбейте их по категориям.

Я оформил две карточки: для футболок и шорт
Я оформил две карточки: для футболок и шорт

Далее перейдите во вкладку «Конструктор». Интерфейс похож на Unisender, но тут больше функций: можно добавить кнопки, карточки товаров, блоки с текстом, картинкой, геолокацией, видео и не только. В PuzzleBot есть видеообзоры каждого раздела платформы — помогут сориентироваться.

Для магазина я прописал следующий сценарий.

Приветствие и меню. В блоке «Текст» кратко описал магазин. Ниже платформа предложила две клавиатуры: обычную, кнопки которой появятся в «Телеграме» вместо стандартной текстовой клавиатуры, и инлайн — кнопки отобразятся внутри чата, под сообщением.

Я выбрал обычную клавиатуру и создал три кнопки: «Футболки», «Шорты» и «Посмотреть фото».

Тут снова приходится работать с блок-схемой
Тут снова приходится работать с блок-схемой

Кнопки. Перед тем как добавить кнопки «Футболки» и «Шорты», я создал для них отдельные команды: нажал «+» в левом верхнем углу, дал название командам и в настройках в пункте «Блоки для бота» выбрал соответствующий товар.

Затем вернулся к предыдущей команде, сделал кнопки «Футболки» и «Шорты», выбрал действие «Переход к команде или условию» и связал их с командами.

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

Последняя кнопка «Посмотреть фото», по задумке, ведет на внешний сайт — например, на страницу во «Вконтакте»
Последняя кнопка «Посмотреть фото», по задумке, ведет на внешний сайт — например, на страницу во «Вконтакте»
Чтобы сохранить все правки, нужно нажать «Применить изменения» в верхнем левом углу. После этого бот будет готов к работе. Вот что у меня получилось
Чтобы сохранить все правки, нужно нажать «Применить изменения» в верхнем левом углу. После этого бот будет готов к работе. Вот что у меня получилось

Предупреждаем: дальше мы пошагово рассказываем о процессе создания бота на Python. Этот раздел мало чем поможет людям без навыков программирования. Если это про вас, то можете сразу переходить к итогам.

С помощью кода мы решили написать телеграм-бота, который показывает актуальный курс рубля. В этом примере используем объектно-ориентированный подход программирования.

Пошагово рассказываем, как создавали бота.

Объявляем класс приложения AppBot.

Определяем метод _init_. — он инициализирует объекты, которые будут использоваться внутри класса. В качестве аргумента принимает токен от BotFather.

Внутри функции инициализируем updater — механизм, который принимает входящие сообщения от пользователей через «Телеграм». Сохраняем его как отдельный атрибут класса AppBot.

Следом создаем экземпляр класса RubleExchangeRate, который отвечает за курс обмена рубля. Этот курс подтягивается из публичного API, который парсит официальные данные Центробанка.

Далее инициализируем dispatcher — маршрутизатор для входящих сообщений бота.

Определим метод serve. Он нужен, чтобы запустить «поллинг» — процесс, когда алгоритм забирает у «Телеграма» новые сообщения и обрабатывает.

Вводим методы-обработчики, которые описывают реакцию бота на входящие сообщения. Вернемся на шаг назад. При определении метода _init_ мы указали маршрутизатору dispatcher, что start_handler реагирует на команду запуска бота /start.

В обработчике start_handler формируется список кнопок с названиями курсов валют и текстовое приветствие. То есть после запуска бота пользователь получит сообщение «Привет! Это бот курса рубля» и набор кнопок на клавиатуре.

Когда пользователь нажимает одну из кнопок, он отправляет текстовое сообщение боту. Чтобы на текст реагировал обработчик response_handler, нужно при добавлении в маршрутизатор disptacher «обернуть» его в MessageHandler и использовать фильтр Filters.text.

Реализуем response_handler: метод-обработчик принимает аргумент update — объект, который содержит информацию о входящем сообщении пользователя, и context — объект, хранящий вспомогательный контекст.

В цикле перебираются варианты того, что мог прислать пользователь и что код может обработать.

Отдельно описываем RESPONSE_TO_CURRENCY_CODE_MAP. Это структура (словарь), в которой содержатся условия: если пользователь прислал текст RUB/USD, мы отправим ему данные о долларах, если текст RUB/EUR — о евро.

В цикле перебираются ключи словаря RESPONSE_TO_CURRENCY_CODE_MAP, и если какой-то совпадает с тем, что прислал пользователь, то в ответ он получит соответствующий курса рубля. Для этого вызывается функция RubleExchangeRate.get, которая ходит во внешний API.

Полученные данные присылаем в ответе:

Если в сообщении пользователя нет ключа, который можно обработать — например, он не стал нажимать на предложенные ботом кнопки, а ввел случайный текст, — говорим ему об этом.

Реализуем класс, который ходит во внешний API. У него есть сессия (Session), хранящая общие параметры для запросов и позволяющая выполнять запросы чуть быстрее с помощью механизма HTTP keep-alive.

Главное в этом блоке — метод .get.

.get('https://www.cbr-xml-daily.ru/daily_json.js').json() означает, что выполняется HTTP GET запрос по указанному адресу и затем ответ на этот запрос будет интерпретироваться как JSON — текстовый формат нотации для сериализации объектов.

API из текущего примера можно открыть в браузере и увидеть, как структурированы данные. Тут указана валюта и все коды, которые мы использовали. До значения каждой валюты можно добраться соответствующим запросом, если API не поменяет свой формат. Если поменяет, то код сломается и придется править.

И дополнительно: зачем нужен декоратор @ttl_cache? Кэширование — это механизм, который позволяет сохранить данные для дальнейшего переиспользования. Например, если мы знаем, что у внешнего API есть ограничение по количеству вызовов (RPS — количество запросов в секунду), что отставание курса рубля от API на n минут не критично для бизнес-логики бота и что при использовании нашего бота пользователи могут сгенерировать больше запросов, чем порог RPS у внешнего API, то стоит использовать кэширование.

Иначе может сломаться бот или API из-за множества запросов или вовсе могут забанить в сервисе, предоставляющем API, за нарушение его правил.

Финальный код можно запустить и тестировать уже в «Телеграме». Бот будет работать, пока запущен алгоритм и работает компьютер. Но такой формат подойдет только для теста — для полного развертывания понадобится облачный сервер. Есть множество решений на российском рынке: Yandex Compute Cloud, Cloud Servers от VK, 1cloud и другие.

Также мы полностью загрузили финальный код бота на «Гитхаб» для ознакомления.

Что в итоге

Не очень сложного бота может создать каждый. Есть инструменты, которые не требуют навыков программирования, достаточно базовых знаний веб-сервисов. Сборка бота в онлайн-конструкторе обычно интуитивно понятна: подбираете нужную платформу на основе доступных функций, складываете из блоков цепочку сообщений и команд, запускаете.

Бота не нужно загружать на сервер, он будет работать автономно на стороне платформы. Чтобы программа заработала, не забудьте зарегистрировать бота в «Телеграме» — для этого есть официальный сервис.

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

Важно понимать: бот всегда будет ограничен возможностями самого конструктора. Чтобы не зависеть от сторонних платформ, потребуется создать бота с нуля с помощью кода. Но в этом случае придется либо самому разобраться в программировании, либо заплатить разработчику.

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

Мы постим кружочки, красивые карточки и новости о технологиях и поп-культуре в нашем телеграм-канале. Подписывайтесь, там классно: @t_technocult.