Как сделать конструктор ботов телеграм

Обновлено: 25.04.2024

Какую задачу решаем

Сложный вариант — написать своего бота и поставить его на сервер (мы не стали так делать)

  • нужно найти программиста на питоне, который сможет написать код;
  • этот код потом нужно поддерживать, если понадобится добавить новые функции;
  • нужно подготовить сервер к постоянной фоновой работе python-кода;
  • следить за тем, чтобы бот работал круглосуточно, а если падал, то сам умел перезапускаться;
  • следить за самим сервером и в случае чего — перезапускать его и все программы на нём.

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

👉 Свой бот на своём сервере — это правильный подход, если у вас в компании уже настроен подобный процесс и есть отдельная команда, которая за это отвечает. В маленькой команде разворачивать всю эту систему ради одного бота — перебор.

Простой вариант — использовать конструктор

Мы уже писали про онлайн-конструкторы ботов и собирали тестового бота в одном из них. С таким подходом мы решаем большинство проблем из первого варианта:

  • не нужно следить за сервером, потому что за это отвечает сервис с конструктором;
  • не нужно искать программиста с необходимой квалификацией;
  • чем меньше кода, тем проще поддерживать готовый продукт.

Но появляются и свои риски и особенности:

  • сервис может закрыться, и бот перестанет работать;
  • если нужно добавить что-то, что не предусмотрено сервисом, то либо это будет сложно и громоздко, либо вообще не получится сделать.

👉 Что касается оплаты, то платить за ежемесячную подписку за сервис в среднем получается дешевле, чем платить системному администратору и программисту за настройку и поддержку всех программ.

Логика проекта

  1. Создаём нового бота и добавляем его в чат.
  2. Получаем нужные параметры для настройки бота.
  3. Создаём бота в конструкторе.
  4. Настраиваем чат для полноценной работы в редакции.

Сделаем всё по очереди.

Создаём нового бота и добавляем его в чат

Регистрируем нового бота через @BotFather — делаем это точно так же, как в материале про бота на питоне. Мы создали бота @Eto_v_Kod_bot и назвали его «Это в Код»:

Создаём нового бота и добавляем его в чат

Мы закрасили токен для управления ботом, он нам понадобится для подключения к конструктору

Создаём нового бота и добавляем его в чат

Чат редакции с добавленным ботом

Узнаём ID чата

👉 Перед тем, как это делать, отключите бота от конструктора или выключите его там в настройках, иначе магия не сработает.

Это значит, что мы должны:

  1. Взять наш токен.
  2. Подставить его вместо .
  3. Скопировать всё, что получилось.
  4. Вставить результат в адресную строку и перейти по этому адресу.

Например, в нашем случае адрес будет такой:

Когда мы перейдём по этому адресу, браузер нам напишет что-то такое:

Нам нужно то, что написано после chat id: -1034423424553 — это и есть ID нашего чата, дефис перед числом тоже важен.

👉 Теперь чат снова можно сделать приватным, на ID это не повлияет.

Собираем бота в конструкторе — стартовый экран

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

Собираем бота в конструкторе — стартовый экран

Здесь три компонента: текстовый блок и две кнопки

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

Собираем бота в конструкторе — стартовый экран

Всё, стартовый экран готов, идём к новостям

Собираем экраны «Предложить новость» и «Предложить статью»

Логика экрана будет такой:

Сначала посмотрим на готовый экран, а потом разберём его по шагам:

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

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

В общем виде команда выглядит так:

Здесь > и > — это переменные. Первая переменная стандартная в конструкторе BotMother, а вторую сделали мы сами на этом же экране. Полный текст запроса выглядит так:

Сделаем по аналогии вторую команду, которая присылает отбивку в чат, чтобы отделить одну новость от другой:

Точно так же собираем экран «Предложить статью»:

Собираем экраны «Предложить новость» и «Предложить статью»

Единственное, что поменялось на этом экране — приветственный текст и имя переменной

Собираем экраны успеха и ошибки

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

Собираем экраны «Предложить новость» и «Предложить статью»

Финальная схема

Финальная схема

Что дальше

Нажимаем кнопку «Сохранить» в конструкторе, и всё — бот готов к работе. Теперь можно добавить картинку и описание.

Делаем простого бота для публикации новостей в канал и автоматические ответы на вопросы за 6 шагов.

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

В этой инструкции мы рассмотрим наиболее простой способ создать бота собственными руками и объясним, как он работает.

Бот в Telegram создается при помощи другого бота под названием BotFather. Отправляем ему команду /newbot, выбираем имя, которое будет отображаться в списке контактов, и адрес. Например, «Бот для DTF» с адресом «dtf_news_bot».

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

Вместо RSS-ленты можно отслеживать появление новых записей в Twitter или Facebook-аккаунте — для каждой функции в IFTTT предусмотрены отдельные модули.

Теперь переходим ко второму шагу — выбираем действие, которое будет выполняться при обнаружении новой записи в RSS. Нажимаем на "That" и ищем Maker Webhook, "Make a web request" — с помощью этого модуля можно отправлять запросы к любым сервисам. В нашем случае — к боту в Telegram.

На этом этапе понадобится веб-хостинг и сертификат SSL, который можно получить бесплатно с помощью сервиса Let's Encrypt.

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

В код бота нужно внести всего два изменения:

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

Для этого понадобится консоль. У разных хостинг-провайдеров она может находиться в разных разделах интерфейса управления сайтом. Кроме того, можно воспользоваться программой Terminal на macOS, введя через неё команду ssh имя_пользователя@адрес_домена.

После ввода пароля, печатаем для нашего поддомена простую команду:

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

Прежде всего, бот для Telegram — это по-прежнему приложение, запущенное на вашей стороне и осуществляющее запросы к Telegram Bot API. Причем API довольное простое — бот обращается на определенный URL с параметрами, а Telegram отвечает JSON объектом.

Рассмотрим API на примере создания тривиального бота:

Прежде чем начинать разработку, бота необходимо зарегистрировать и получить его уникальный id, являющийся одновременно и токеном. Для этого в Telegram существует специальный бот — @BotFather.

Пишем ему /start и получаем список всех его команд.
Первая и главная — /newbot — отправляем ему и бот просит придумать имя нашему новому боту. Единственное ограничение на имя — оно должно оканчиваться на «bot». В случае успеха BotFather возвращает токен бота и ссылку для быстрого добавления бота в контакты, иначе придется поломать голову над именем.

2. Программирование

Создавать бота буду на Python3, однако благодаря адекватности этого языка алгоритмы легко переносятся на любой другой.


Здесь мы при запуске бота устанавливаем вебхук на наш адрес и отлавливаем сигнал выхода, чтобы вернуть поведение с ручной выгрузкой событий.

Приложение торнадо для обработки запросов принимает класс tornado.web.RequestHandler, в котором и будет логика бота.


Здесь CMD — словарь доступных команд, а send_reply — функция отправки ответа, которая на вход принимает уже сформированный объект Message.

Собственно, её код довольно прост:

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

3. Команды

Перво-наперво, необходимо соблюсти соглашение Telegram и научить бота двум командам: /start и /help:

Команда /start без параметров предназначена для вывода информации о боте, а с параметрами — для идентификации. Полезно её использовать для действий, требующих авторизации.

После этого можно добавить какую-нибудь свою команду, например, /base64:

Для пользователей мобильного Telegram, будет полезно сказать @BotFather, какие команды принимает наш бот:
I: /setcommands
BotFather : Choose a bot to change the list of commands.
I: @******_bot
BotFather: OK. Send me a list of commands for your bot. Please use this format:

command1 - Description
command2 - Another description
I:
whoisyourdaddy - Information about author
base64 - Base64 decode
BotFather: Success! Command list updated. /help

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

4. Свобода

  • All messages that start with a slash ‘/’ (see Commands above)
  • Messages that mention the bot by username
  • Replies to the bot's own messages
  • Service messages (people added or removed from the group, etc.)

Для начала в Handler добавляем обработчик:


А потом в список команд добавляем псевдо-речь:


Здесь эмпирическая константа 75 относительно неплохо отражает вероятность того, что пользователь всё-таки хотел сказать. А format_map — удобна для одинакового описания строк как требующих подстановки, так и без нее. Теперь бот будет отвечать на приветствия и иногда даже обращаться по имени.

5. Не текст.

Для примера расширим словарь RESPONSES:


И будем отлавливать текст :


Видно, что теперь структура Message уже не содержит текст, поэтому необходимо модифицировать send_reply:


И все, теперь бот будет время от времени присылать стикер вместо времени:


6. Возможности

Благодаря удобству API и быстрому старту боты Telegram могут стать хорошей платформой для автоматизации своих действий, настройки уведомлений, создания викторин и task-based соревнований (CTF, DozoR и прочие).

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

7. Ограничения

К счастью, Telegram также умеет работать и по ручному обновлению, поэтому не меняя кода можно создать еще одну службу Puller, которая будет выкачивать их и слать на локальный адрес:

Привет, хабрчане! Какой бы заезженной не была тема создания телеграм бота на python3, я не нашёл инструкций, где показан путь от первой строчки кода до деплоинга бота (по крайней мере все методы, что я видел, немного устарели). В этой статье я хочу показать процесс создания бота от написания BotFather-у до деплоинга бота на Heroku.

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

P.S. Пишите если нужна статья по созданию более сложного бота, т.е. с вебхуками, БД с настройками юзеров и т.д.


Для начала стоит определиться, что же будет делать наш бот. Я решил написать банального простого бота, кторый будет парсить и выдавать нам заголовки с Хабра.
И так, начнём же.

BotFather

Для начала нам надо зарегистрировать нашего бота в Telegram. Для этого:

В поиске вбиваем @BotFather и переходим в диалог с Отцом Ботов.

Пишем /newbot. Указываем имя бота (то, что отображается в диалогах). Указываем его логин, по которому его можно булет найти.

P.S. Оно должно заканчиваться на Bot/bot

Вот. Нам дали API ключ и ссылку на бота. Желательно сохранить API ключ и перейти в диалог с ботом, чтобы потом не копаться в переписке с BotFather

all - спарсить заголовки с вкладки "ВСЁ ПОДРЯД"
top - спарсить заголовки с вкладки "ЛУЧШЕЕ"

На этом работа с BotFather закончилась, перейдём к следующей части.

Установка и настройка pipenv. Первый запуск.

Для начала создадим файл, в котором будет основной код бота bot.py. Если бот большой, то сразу создавайте файлы, куда вы вынесете функции, классы и т.д, иначе читаемость кода стремится к нулю. Я добавлю parser.py

Установим pipenv, если его конечно ещё нет.


Установим pipenv в папку проекта.


Установим интересующие нас библиотеки. Я буду работать с PyTelegramBotAPI. Также для парсинга добавим BeautifulSoup4.


Начинаем писать код!

Открываем bot.py, импортируем библиотеки и создаём главные переменные.


Запустим бота. Посмотри наличие ошибок.

Если ошибок не появилось, то продолжим.

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

Основы взаимодействия. Ответ на команды

Начнём с самого простого: ответим на команды /start и /go

Теперь можно запустить бота и написать ему /start или /go и он ответит.

Добавим вот такой код.

Основы взаимодействия. Ответ на картинки, документы, аудио и прочие.

Для ответа на картинки, стикеры, документы, аудио и т.д. нужно всего лишь поменять content_types=['text'].

Рассмотрим пример с картинкой, добавив этот код.


Все типы контента:

text, audio, document, photo, sticker, video, video_note, voice, location, contact, new_chat_members, left_chat_member, new_chat_title, new_chat_photo, delete_chat_photo, group_chat_created, supergroup_chat_created, channel_chat_created, migrate_to_chat_id, migrate_from_chat_id, pinned_message

Но, есть тут проблема. Можно повторно вызвать команду /go или /start, и начнётся бардак.


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


С построением простых цепочек мы разобрались, пойдём дальше.

Добавляем парсер в цепочку.

Для начала нужен сам парсер. Обратим внимание на то, что во вкладках «Лучшее» и «Всё подряд» есть дополнительные фильтры: сутки, неделя, месяц и ≥10, ≥25, ≥50, ≥100 соответственно.
Парсер конечно можно написать и в 1 функцию, но я разобью на 2, так будет проще читать код.

По итогу парсер возвращает нам строку с заголовками статей, основываясь на наших запросах.
Пробуем, используя полученные знания, написать бота связанного с парсером. Я решил создать отдельный класс (это скорее всего неправильный метод, но это уже относится к питону, а не к основной теме статьи), и в объекте этого класса хранить изменяемые данные.

Теория. Методы взаимодействия с ботом.

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

Маркапы. Добавляем клавиатуры для быстрого ответа.

Наконец основной код дописан. Теперь можно передохнуть и написать маркапы. Я думаю вы неоднократно видели их, но всё же, приложу скриншот. [SCREENSHOT]

Я выведу маркапы в отдельный файл — markups.py.

В написании маркапов нет ничего сложного. Нужно лишь создать маркап, указать пару параметров, создать пару кнопок и добавить их в маркап, далее просто указываем reply_markup=markup в send_message .

В параметры маркапа указываем ширину строки и изменение размеров кнопок, иначе они огромны.

Применим полученные знания к нашему боту.

Ура! С кодом впринципе разобрались. Теперь самое важное — деплоинг бота не хероку.

Деплоим бота на Heroku.

Для начала надо зарегистрироваться на Хероку и на Гитхабе.

Теперь создаём репозиторий на гитхабе. (нажмите плюсик слева от вашего аватара)
Сейчас нам нужен Procfile (Procfile.windows для windows). Создаём его и записываем в него bot: python3 bot.py

Теперь удаляем TOKEN из bot.py, здесь он не нужен, ведь мы будем загружать этот файл на гитхаб. Через тот же терминале, что использовали для запуска бота, заливаем файлы на гитхаб. (Предворительно удалите папку __pycache__).


Гит просит логин и пароль, спокойно вводим и преступаем к деплоингу бота на хероку. Пишем всё в том же терминале.

Теперь возвращаем TOKEN в bot.py, здесь он нужен, ведь мы будем загружать этот файл на хероку.


Чтобы выключить бота
И, не забываем перед залитием на гитхаб и удалить TOKEN из нашего bot.py. Ведь нам не нужно, чтобы кто-то им пользовался. Можно конечно воспользоваться .gitignore и вынести токены в отдельный фай.

Поздравляю!

Работа окончена, бот работает удалённо.

Ссылки

Заключение

Если кому-то было интересно, то цель написания статьи выполнена. Если кому-то хочется увидеть статью про более сложного бота (с вебхуками, подключенной БД с настройками пользователей и т.д.) — пишите.

Например, если бот нужен срочно, а вы ещё не освоили Python.

Если вам показались сложными наши статьи о создании своего телеграм-бота и запуске его на сервере, то вот вам подборка конструкторов, где можно сделать почти то же самое.

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

Manybot


Manybot — единственный сервис в нашей подборке, где нет визуального конструктора, а вся работа идёт через телеграм-чат. Сервис подойдёт тем, кому нужны простые и предсказуемые диалоги, выбор из небольшого числа вариантов и маленькое меню. Вряд ли он подойдёт для серьёзных проектов, потому что проще выучить Python, чем управлять сложным ботом через команды в чате.

Bottap

Стоимость: бесплатная версия с рекламой или 390 ₽ в месяц.


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

Botmother

Стоимость: бесплатно с ограничениями, но без рекламы, или 1249 ₽ в месяц.

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

Хороший сервис для тех, кому нужно много функций и подробная документация. Это уже полноценный конструктор, где можно программировать сложную логику.

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

PuzzleBot


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

Единственный минус — для работы с сервисом всё-таки нужно знать основы программирования: что такое переменная, вложенные условия и циклы. С другой стороны, если вы читаете «Код», то это для вас не проблема.

Amylogic

Стоимость: бесплатно, но с ограничениями по возможностям, или от 990 ₽ в месяц.

Это самый крутой по возможностям сервис, который мы тестировали. Если в PuzzleBot и Botmother мы могли делать почти всё, то здесь мы можем делать всё. Без шуток, здесь есть переменные, объекты как в ООП, функции и прочие программистские штуки.

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

Что дальше

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

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

Читайте также: