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

Обновлено: 05.07.2024

В статье я приведу пример написания онлайн бота с использованием Python и Django фреймворка. То есть мы "запилим" полноценное веб-приложение, которое будет крутиться на удалённом хосте и принимать команды от пользователей. Весь исходный текст доступен в моём github репозитории.

Документация, описывающая процесс взаимодействия с ботами Telegram находится тут. Чтобы не изобретать велосипед, я нашел неплохую Python библиотеку, реализующую все основные функции ботов - telepot. Как я уже упоминал ранее, для того, чтобы обслуживать пользователей нашего бота мы будет разрабатывать веб-приложение, используя Django фреймворк.

Как создать Telegram бота?

Для начала нам необходимо зарегистрировать в Telegram нашего будущего бота. Это делается следующим образом:

После создания бота, обратите внимание на строку с текстом:

За которой следует т.н. token по которому мы будем манипулировать нашим ботом. Помимо функции создания telegram бота, BotFather также имеет ряд других возможностей:

  • Присвоить боту описание
  • Установить аватар
  • Поменять token

и так далее. Полное описание доступных команд можно увидеть на первом скриншоте.

Приступаем к кодированию

  • Использование вызова API метода getUpdates
  • Установка Webhook

Подробнее о getUpdates и setWebhook можно почитать соответственно здесь и тут.

Итак, вернёмся к python библиотеке для работы с Telegram - telepot. На текущий момент самой последней её версий является 6.7. Устанавливаем её в виртуальное окружение python virtualenv:

Самый простой вариант взаимодействия с Telegram ботом на Python выглядит следующим образом:

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

Поздравляю! Мы вызывали самый простой API запрос getMe, который возвращает информацию о боте: username, id, first_name.

Добавим нашего бота к себе в контакт-лист и пошлём ему первую стандартную команду /start

Telegram Bot

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

Простая функция парсинга RSS фида Planet Python выглядит вот так:

Здесь я использую python библиотеку requests для работы с HTTP в самом простейшем варианте без обработки ошибок. Django "вьюшка" выглядит следующим образом:

Я предполагаю, что вы уже клонировали мой репозиторий, настроили окружение и установили все необходимые зависимости: Django, requests, telepot. Если же вы не знаете как это сделать, то совсем скоро я напишу цикл статей о разработке веб-приложений на Python, включая разбор экосистемы: разработка, настройка, деплой. Если вам это интересно, то отпишитесь, пожалуйста, в комментариях к этой статье. Хочется получить обратную связь :)

После запуска runserver, URL на который необходимо посылать запрос выглядит следующим образом:

где BOT_TOKEN - это токен нашего бота. Смотрим скриншот:

Postman REST Client

telegram-bot-postman

А давайте-ка отправим команду feed для получения списка новостей из Planet Python:

Postman и Telegram
Postman и Telegram

На скриншотах видно, что бот адекватно отреагировал на нашу команду вывести список последних 10 постов.

Следующим шагом является деплой нашего Django приложения на удалённый хост и последующий вызов метода setWebhook для передачи URL на который будет посылаться POST запрос от сервиса Telegram каждый раз при поступлении команд боту от пользователей. Об этом мы поговорим в следующей заметке.

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

  1. Запрограммировать логику работы Телеграм-бота.
  2. Зарегистрировать нового бота в Telegram.
  3. Связать бота и его логику воедино.

Запрограммировать логику работы Телеграм-бота

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

Зарегистрировать нового бота в Telegram

Чтобы Telegram знал о существовании нашего бота, его нужно зарегистрировать. Для этого существует только один способ:

    Найдите бота @BotFather в Телеграм. Это официальный бот, созданный специально для управления ботами.

Отправьте ему команду:

Запишите полученный токен от @BotFather — это ключ для работы с Telegram API.

Теперь у нас API, регистрация бота в Telegram и его токен. Осталось связать это вместе.

Как связать бота и его логику воедино?

На этом этапе надо сделать так, чтобы бот знал токен пользователя, а Telegram знал, где его API:

Способ 1. Через бота @SelectelServerless_bot

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

В ответ должна прийти информация о webhook, в том числе указанный вами URL.

Способ 2. Из заготовленной формы

Примечание: может понадобиться наличие VPN.

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

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

Содержание:

Возможности бота

Через бота можно будет:

Схема работы бота

Создание бота

Начнём с самого простого шага — создания бота в Telegram. Для этого достаточно написать команду /newbot боту по созданию других ботов BotFather и следовать инструкциям:

Создать бота в Telegram

Успешное создание бота в Telegram

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

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

Бот среди администраторов канала

Создание базы данных

Для простоты решения поднимем PostgreSQLв docker-контейнере:

Контейнер запущен, БД готова к работе.

Для минимальной аналитики и контроля подписок нам хватит одной таблицы. Заполним её модель и далее в миграции lequibase создадим:

Таблица для контроля подписок

Создание бэкенда

Перейдём на Spring Initializr и сгенерируем каркас бэкенд-приложения. Достаточно выбрать следующие библиотеки:

Создание приложения на Spring

Развернём сгенерированный проект в среде разработки и добавим туда зависимость для работы с Telegram:

Также добавим библиотеку для мапинга, которая нам пригодится при мапинге сущностей БД в REST-модели:

Создадим миграцию для таблицы, добавим описание подключения к БД и запустим приложение:

Пример структуры проекта

После успешного запуска приложения накатится миграция и создастся таблица:

Таблица создана, приложение успешно запустилось. Теперь можно приступить к описанию Data Access Layer. Для этого опишем сущность, репозиторий и сервис:

Структура бота

Подключение к API Telegram

Чтобы можно было получать данные из бота в наше приложение, достаточно унаследовать от абстрактного класса org.telegram.telegrambots.bots.TelegramLongPollingBot и реализовать три метода:

Добавим в application.yaml данные бота, которые получили от BotFather:

Реализуем поддержку 5 команд:·

Чтобы всеми этими командами было удобно пользоваться, реализуем их в виде кнопок, используя org.telegram.telegrambots.meta.api.objects.replykeyboard.InlineKeyboardMarkup.

Готово! Теперь бот умеет обрабатывать следующие команды.

Результат ответа на вопрос, как получить доступ

Хочу демо-доступ на 3 дня.

Отправка запроса на получение демо-доступа

После получения демо-доступа информация об этом сохраняется в БД. При повторном запросе на демо-доступ пользователю отобразится ошибка:

Ошибка при повторном запросе демо-доступа

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

Чтобы этой командой мог пользоваться только администратор, его Chat ID надо добавить в application.yaml. Далее этот идентификатор будет использоваться при проверке, от кого пришла команда и имеет ли этот пользователь права на выполнение этой команды.

Дополнительно к этому требуется реализовать команду выдачи полного доступа. Класс поменяется следующим образом:

Появилась обработка команд от администратора.

Пример запроса полного доступа к каналу

Таким образом, мы реализовали следующие возможности для пользователя:

В свою очередь, у администратора канала появились следующие возможности:

  • проверить предоставляемые пользователем данные для полного доступа и выдать полный доступ;
  • очистить канал от пользователей с истекшим доступом.

Для удобства развёртывания упакуем наше приложение в Docker и развернём. Добавим в build.gradle:

Далее выполним следующие команды для создания образа и запуска его в докере:

Создание фронтенда

После того, как мы создали handler для обработки команд бота, хочется визуально контролировать подписки и смотреть графики по приросту подписок в разрезе месяца. Для этого создадим отдельное приложение на React с использованием Ant Design. Выполним команду:

После этого у нас будет сгенерировано приложение с минимальной функциональностью. Однако требуется установить ещё несколько библиотек:

После этого основной компонент надо изменить на:

И добавить новый компонент:

Дополнительно к этому добавить функции для выполнения запросов:

Это личный проект, аутентификация зашита, можно с ней особо не заморачиваться. Также в бэкенд требуется добавить конфигурацию Spring Security:

Пример аналитики подписок на канал

А теперь для удобства упакуем и развернём UI в docker-контейнере. Для этого создадим DockerFile:

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

Вывод

Используя Spring Вoot, React и Docker, можно быстро создать небольшую систему для контроля подписок и подписчиков на канале в Telegram. Исходный код двух приложений можно посмотреть здесь и здесь.

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


Команды BotFather бота

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

Как зарегистрировать нового бота с помощью BotFather?

После регистрации можно приступать к облагораживанию бота: установить аватар, добавить описание и прочее.

Что умеет BotFather?

Помимо регистрации бота, с помощью BotFather можно осуществлять его настройку и управление.

Внешний вид

К примеру, если вдруг вам разонравилось имя бота, то его можно сменить командой /setname.


Смена имени бота

Установить аватарку можно командой /setuserpic, а изменить или добавить краткое описание – командой /setdescription. Изменение информации в профиле выполняется командой /setabouttext. На этом кастомизацию внешнего вида бота можно считать законченной, и можно заняться его функциональными возможностями.

Функционал

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

Для установки списка команд введите /setcommands в окне чата.


Установка команд

Вот примеры написания основных команд и их расшифровка:

  • /newbot – зарегистрировать нового бота
  • /mybots – редактировать своих ботов [бета]

Редактирование

  • /setname – изменить имя бота;
  • /setdescription – изменить описание бота;
  • /setabouttext – изменить информацию о боте;
  • /setuserpic – изменить фотографию профиля бота;
  • /setcommands – изменить список команд;
  • /deletebot – удалить бота.

Настройки бота

Таким образом можно добавить любые необходимые команды и завершить настройку.

Итоги

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

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