Подробная инструкция о том, как создать бота для предоставления демо-доступа и контроля подписок на приватный канал в Telegram.
Александр Волков
Руководитель отдела разработки программного обеспечения компании «Синимекс»
Telegram набирает популярность не только у пользователей, но и у разработчиков. Многие создают там свои каналы и ботов. В этой статье мы создадим приватный канал с фасадом для него — ботом.
Возможности бота
Через бота можно будет:
- получить полную информацию о канале;
- получить демо-доступ на канал. Пользователь в автоматическом режиме получит ссылку на вступление в приватный канал. Через n дней демо-доступа пользователь будет удалён из канала;
- выдать полный доступ для пользователей. Пользователь сможет отправить данные для получения полного доступа. Данные могут быть проверены как в автоматическом режиме, так и в ручном — самим администратором. По итогам пользователю выдаётся полный доступ.
Дополнительно к этому мы создадим интерфейс на React для управления подписками и сбором аналитики по каналу. Особенность этого решения — простота. Время на его создание — около 4 часов. Все компоненты решения для удобства будут развёрнуты в docker-контейнерах. Схема нашего решения будет выглядеть так:
Как подписаться на телеграмм канал
Создание бота
Начнём с самого простого шага — создания бота в Telegram. Для этого достаточно написать команду /newbot боту по созданию других ботов BotFather и следовать инструкциям:
После успешного создания бота вы получите сообщение:
Также появится токен, который мы будем использовать для подключения к боту из своего приложения.
Бот для приватного канала с информацией о самых вкусных плюшечках и пирожочках создан. Далее создадим сам канал и добавим туда нашего бота в качестве администратора.
Создание базы данных
Для простоты решения поднимем PostgreSQLв docker-контейнере:
docker network create buns-net docker run -d —network=»buns-net» —name bot-postgres -e POSTGRES_PASSWORD=Pass2020! -p 5432:5432 postgres
Контейнер запущен, БД готова к работе.
Для минимальной аналитики и контроля подписок нам хватит одной таблицы. Заполним её модель и далее в миграции lequibase создадим:
Создание бэкенда
Перейдём на Spring Initializr и сгенерируем каркас бэкенд-приложения. Достаточно выбрать следующие библиотеки:
Развернём сгенерированный проект в среде разработки и добавим туда зависимость для работы с Telegram:
compile «org.telegram:telegrambots-spring-boot-starter:5.0.1»
Также добавим библиотеку для мапинга, которая нам пригодится при мапинге сущностей БД в REST-модели:
compile(«net.rakugakibox.spring.boot:orika-spring-boot-starter:1.9.0»)
Создадим миграцию для таблицы, добавим описание подключения к БД и запустим приложение:
1-add-tables.yaml databaseChangeLog: — changeSet: id: 1-add-tables author: avolkov changes: — createTable: tableName: subscriber columns: — column: name: id type: bigint autoIncrement: true constraints: primaryKey: true nullable: false — column: name: name type: varchar(255) constraints: nullable: true — column: name: login type: varchar(255) constraints: nullable: true — column: name: telegram_id type: varchar(100) constraints: nullable: false — column: name: start_subscribe type: timestamp constraints: nullable: false — column: name: end_subscribe type: timestamp constraints: nullable: false — column: name: type_subscribe type: varchar(50) constraints: nullable: false — column: name: enable type: boolean constraints: nullable: false db.changelog-master.yaml databaseChangeLog: — include: file: db/changelog/1-add-tables.yaml
application.yaml server: servlet: context-path: /api spring: datasource: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://bot-postgres:5432/postgres — при локальной разработке поменять на localhost username: postgres password: Pass2020! jpa: properties: hibernate.dialect: org.hibernate.dialect.PostgreSQLDialect hibernate.globally_quoted_identifiers: true
После успешного запуска приложения накатится миграция и создастся таблица:
Таблица создана, приложение успешно запустилось. Теперь можно приступить к описанию Data Access Layer. Для этого опишем сущность, репозиторий и сервис:
Подключение к API Telegram
Чтобы можно было получать данные из бота в наше приложение, достаточно унаследовать от абстрактного класса org.telegram.telegrambots.bots.TelegramLongPollingBot и реализовать три метода:
public String getBotUsername(); // логин бота, который устанавливался при создании бота public String getBotToken(); // токен, полученный при создании от BotFather public void onUpdateReceived(Update update); // метод срабатывает каждый раз, когда боту отправляется сообщение
Добавим в application.yaml данные бота, которые получили от BotFather:
telegram: name: bot_login token: 164024384:AAFHwer2342pVF3zm_wZ45454554JVr_I chanel-id: -1001415979632 — id приватного канала, куда будет даваться доступ
Реализуем поддержку 5 команд:·
- /info — запрос информации о боте и канале;
- /start — такая же, как и info. Нужна для первого сообщения с ботом;
- /demo — получение демо-доступа на канал;
- /access — запрос на получение информации о полном доступе;
- /success — запрос на получение полного доступа.
Чтобы всеми этими командами было удобно пользоваться, реализуем их в виде кнопок, используя org.telegram.telegrambots.meta.api.objects.replykeyboard.InlineKeyboardMarkup.
Готово! Теперь бот умеет обрабатывать следующие команды.
Как получить доступ?
Хочу демо-доступ на 3 дня.
После получения демо-доступа информация об этом сохраняется в БД. При повторном запросе на демо-доступ пользователю отобразится ошибка:
Если пользователи могут получать временный доступ, то появляется задача проверки истечения этого доступа. К сожалению, не получится создать планировщик, который будет раз в день отписывать пользователей с истекшим доступом. Поэтому надо реализовать поддержку ещё одной команды для чистки подписчиков.
Чтобы этой командой мог пользоваться только администратор, его Chat ID надо добавить в application.yaml. Далее этот идентификатор будет использоваться при проверке, от кого пришла команда и имеет ли этот пользователь права на выполнение этой команды.
telegram: name: bot_login token: 164024384:AAFHwer2342pVF3zm_wZ45454554JVr_I chanel-id: -1001415979632 — id приватного канала, куда будет выдаваться доступ support: chat-id: 14334538544
Дополнительно к этому требуется реализовать команду выдачи полного доступа. Класс поменяется следующим образом:
Появилась обработка команд от администратора.
Если пользователь отправит сообщение message please, то администратору от бота придет сообщение:
После этого администратор может отправить боту команду на выдачу прав пользователю:
И пользователю от бота придет сообщение:
Таким образом, мы реализовали следующие возможности для пользователя:
- пользователь может узнать подробную информацию о канале и понять, подходит ли он ему;
- пользователь может получить временный доступ к каналу;
- пользователь может получить информацию о дальнейших действиях для получения полного доступа к каналу;
- пользователь может отправить запрос на предоставление полного доступа.
В свою очередь, у администратора канала появились следующие возможности:
- проверить предоставляемые пользователем данные для полного доступа и выдать полный доступ;
- очистить канал от пользователей с истекшим доступом.
Для удобства развёртывания упакуем наше приложение в Docker и развернём. Добавим в build.gradle:
bootJar
FROM openjdk:8-jdk-alpine COPY build/libs/buns.jar buns.jar EXPOSE 8081 ENTRYPOINT [«java»,»-jar»,»/buns.jar»]
Далее выполним следующие команды для создания образа и запуска его в докере:
Создание фронтенда
После того, как мы создали handler для обработки команд бота, хочется визуально контролировать подписки и смотреть графики по приросту подписок в разрезе месяца. Для этого создадим отдельное приложение на React с использованием Ant Design. Выполним команду:
npx create-react-app my-app
После этого у нас будет сгенерировано приложение с минимальной функциональностью. Однако требуется установить ещё несколько библиотек:
После этого основной компонент надо изменить на:
App.js import ‘./App.css’; import < QueryClient, QueryClientProvider >from ‘react-query’ import SubscriberTable from «./SubscriberTable»; import React from «react»; import ‘antd/dist/antd.css’; const queryClient = new QueryClient(); function App() < return > ; > export default App;
И добавить новый компонент:
Дополнительно к этому добавить функции для выполнения запросов:
axiosInstance.js import axios from ‘axios’; const host = process.env.REACT_APP_API_ENDPOINT; export const baseUrl = `http://localhost:8080/api/`; const instance = axios.create(< baseURL: `$`, withCredentials: true, headers: < ‘Cache-Control’: ‘no-store, no-cache, must-revalidate’, Pragma: ‘no-cache’, >, >); instance.defaults.headers.common[‘Accept-Language’] = ‘ru-RU, ru’; instance.interceptors.request.use(config => < return < . config, url: encodeURI(config.url), >; >); export default instance;
subscribersApi.js import * as log from ‘loglevel’; import instance from ‘./axiosInstance’; const SUBSCRIBER_PATH = ‘/subscribers’; const SubscribersApi = < name: ‘SubscribersApi’, async getAll() < return instance .get(`$`, < auth: < username: ‘admin’, password: ‘admin’ >>) .then(response => < log.info(`All Lines`, response); return response.data; >) .catch([]); >, async getStatistic() < return instance .get(`$/stat`) .then(response => < return response.data; >) .catch([]); >, >; export default SubscribersApi;
Это личный проект, аутентификация зашита, можно с ней особо не заморачиваться. Также в бэкенд требуется добавить конфигурацию Spring Security:
В итоге после выполнения команды npm start откроется http://localhost:3000/ с отображением списка подписок и статистикой. Статистику можно выводить в любом разрезе. В текущей реализации показывается, в каком месяце сколько полных подписок было оформлено.
А теперь для удобства упакуем и развернём UI в docker-контейнере. Для этого создадим DockerFile:
Dockerfile FROM nginx:1.19.5 COPY build /usr/share/nginx/html/ COPY nginx.conf /etc/nginx/ RUN chown -R nginx:nginx /var/cache/nginx /etc/nginx/ /var/run/ USER nginx EXPOSE 80 ENTRYPOINT [«nginx», «-g», «daemon off;»]
nginx.conf worker_processes 1; pid /tmp/nginx.pid; events < worker_connections 1024; >http < proxy_temp_path /tmp/proxy_temp; client_body_temp_path /tmp/client_temp; fastcgi_temp_path /tmp/fastcgi_temp; uwsgi_temp_path /tmp/uwsgi_temp; scgi_temp_path /tmp/scgi_temp; include /etc/nginx/mime.types; default_type application/octet-stream; log_format main ‘$remote_addr — $remote_user [$time_local] ‘ ‘$server_name to: $proxy_host [$upstream_addr] «$request» ‘ ‘$status $body_bytes_sent «$http_referer» ‘ ‘»$http_user_agent» «$http_x_forwarded_for»‘; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; >
И выполним команды для сборки и развертывания:
Вывод
Используя Spring Вoot, React и Docker, можно быстро создать небольшую систему для контроля подписок и подписчиков на канале в Telegram. Исходный код двух приложений можно посмотреть здесь и здесь.
Следите за новыми постами по любимым темам
Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.
Источник: tproger.ru
Как подписаться на каналы Telegram — инструкция
Как подписаться в Телеграмм на канал и всегда оставаться в курсе последних событий и публикаций! Сегодня мы расскажем, как присоединиться и читать лучшие Telegram каналы!
В ходе недавнего исследования проводимого среди аудитории пользователей мессенджера от братьев Дуровых, среднестатистический пользователь подписан не более чем на 10 пабликов. Однако безусловный рост популярности подобных сообществ остаётся неоспоримым! Подписаться на новости того или иного сообщества можно несколькими простыми способами, о которых мы расскажем ниже!
Проекты по форме подписки делятся на два типа:
- Публичные. Такие паблики доступны в глобальном поиске и вступить в них может любой желающий;
- Приватные. Доступ к ним осуществляется по специальной приватной ссылке, которую могут дать администраторы сообщества.
Соответственно, действовать перед тем, как подписываться в Телеграмме на новости того или иного канала нужно по-разному.
Как подписаться с компьютера
- Для того чтобы вступить в то или иное сообщество нужно знать его название. В качестве него может выступать официальное название проекта или последняя часть ссылки на паблик.
- После этого нужно ввести его название в окно поиска в приложении.
- Выбрать нужный вам вариант.
- Нажать на кнопку присоединиться, внизу окна чата.
После этого вы сможете как смотреть все посты без ограничения, так и делиться ими с друзьями!
Если вход в сообщество осуществляется по приватной ссылке, то вам необходимо связаться с администратором канала в Телеграмм, попросить её и подписаться. Так же зачастую они доступны в открытом доступе, в чатах и на сайтах каталогах в интернете!
Казалось бы для чего делать вход в свой проект настолько приватным? Как не удивительно, подобный ход позволяет администраторам увеличить число подписчиков своего проекта. Так как перед тем как увидеть новости и посты такого паблика, пользователю необходимо обязательно в него вступить.
Как подписаться на канал с iPhone
Для пользователей яблочной продукции подписка на новый проект осуществляется по следующей схеме:
- Открываем окно чатов и вводим в строке поиска, которая располагается вверху страницы, название интересующего вас проекта;
- Открываем в результатах поиска нужный проект;
- Нажимаем на кнопку присоединиться внизу страницы.
Как видите подписаться на канал в Телеграмм с iPhone очень просто!
Как подписаться на канал с Андроид
Популярность системы от Google бьет все рекорды, а количество устройств работающих на ней уже давно перевалило за миллиард! Так что вопрос того как подписаться на канал в Телеграмм на Андроид остается актуален всегда.
Для этого нужно:
- Открыть приложение на своем смартфоне и перейти в окно со списком чатов;
- Нажать на иконку поиска в правом верхнем углу;
- Ввести название паблика по аналогии со способом, который мы описали для iPhone;
- Войти в нужное сообщество и нажать на кнопку «Присоединиться» внизу страницы.
Интересный факт. Всего подписаться можно на 500 проектов. Этого лимита пока не достиг никто.
Что делать когда каналов стало слишком много
В виду особенностей ленты чатов в Телеграмм большое количество подписок вызывает настоящую путаницу. Постоянные уведомления и зачастую однотипные статьи начинают по настоящему раздражать. В данном случае есть два простых выхода:
- Скрыть уведомления и включить workmode;
- Использовать специальные агрегаторы новостей. такие например, как бот Вестникъ.
Мы уже написали подробную инструкцию о том как скрыть чаты в Телеграмм, обязательно посмотрите!
Бот-агрегатор же работает по очень простому принципу:
- Запустите чат с ботом;
- Перешлите ему сообщения из каналов, уведомления из которых хотите перевести ему;
- Покиньте ненужные, теперь бот сам будет присылать вам свежие новости из них.
Поделиться как обычно нашей статьей со своими друзьями, очень просто! Просто нажмите на любую из ваших социальных сетей в левом верхнем углу экрана! Если же у вас еще остались вопросы о том как подписаться на каналы в Телеграмме (Telegram), задавайте их в комментариях ниже!
Источник: telegramzy.ru
Как пригласить участников в группу в Телеграмме
Telegram — популярный мессенджер, созданный Павлом Дуровым, который в свое время «подарил» пользователям СНГ социальную сеть ВКонтакте. Приложение создано для общения между людьми. В нем можно обмениваться текстовыми и голосовыми сообщениями, высылать фотографии, видео, делиться ссылками и многое другое. Все это доступно как в личной переписке, так и групповой. Группой называется место, где диалог ведут одновременно несколько пользователей. Многие, кто недавно установил мессенджер, интересуются, как пригласить друга в группу в Телеграмме. Сейчас доступно два способа добавления участника на канал или в групповой чат. Первый — вручную добавить человека в группу. Второй — создать пригласительную ссылку Telegram. При этом чат может быть любой тематики, начиная от общения между одногруппниками/сотрудниками и заканчивая обсуждением грядущего мероприятия.
Добавляем вручную
Чтобы пригласить в группу друга или любого человека, необходимо быть администратором чата или обладать соответствующими правами. Как вручную пригласить в Телеграмм:
- Запустите мессенджер.
- Зайдите в открытый общественный чат.
- Жмите на «Логотип группы» рядом с названием.
- Откроется меню, где кликните по пункту «Добавить участников».
- На экране высветится список контактов из телефонной книги — прокликайте тех, кого собираетесь пригласить в Телеграмм канал.
- Подтвердите действия кнопкой «Пригласить».
Учтите, что в приватную беседу вы можете приглашать разных людей, а в публичном чате это право есть только у администратора.
Еще один момент — иногда в группу Телеграмм хочется позвать человека, которого нет в телефонной книге. В этом случае чтобы его найти, в строке поиска укажите имя или номер телефона пользователя.
Создаем пригласительную ссылку
Этот способ даже несколько проще. Вы создаете специальную ссылку, и перейдя по ней, любой желающий сможет стать членом группы в Telegram. У метода есть весомое преимущество — никто не запрещает размещать пригласительную ссылку в Телеграм на сторонних ресурсах. Это один из способов раскрутки сообщества, но необходимо учитывать, что «агрессивные» приглашения могут быть расценены как спам, за что легко «словить бан».
Приглашением в этом случае выступает ссылка, созданная администратором группы. Если в сообществе несколько админов, то у каждого будет своя ссылка, уникальная, но при этом все они ведут в один чат в Телеграмме.
Разослав пригласительные, администратор в праве удалить ссылку, как и приглашения других админов. Деактивируется ссылка через меню группы. Также она будет аннулирована автоматически, в случае, если администратор покинет сообщество.
Как с помощью ссылки пригласить друга в Телеграм:
- Зайдите в группу и кликните по ее названию.
- В меню выберите пункт «Добавить участника».
- Жмите по строке «Пригласить в группу по ссылке».
- Скопируйте ссылку.
Также можно создать новую ссылку с ограниченным или безлимитным сроком действия, для этого выберите «Управление приглашениями» и нажмите «Создать ссылку».
Как сделать ссылку разобрались, а что дальше? Администратор сообщества может ею делиться в самом мессенджере, пересылая другим участникам, или на просторах Интернета, где угодно. Пользователь, перешедший по ссылке, получает своего рода приглашение вступить в группу. Для этого у него должен быть установлен мессенджер, при этом пригласительные работают и в веб-версии — Telegram Web.
Как покинуть чат
Если больше не хочется курировать сообщество, но на него подписано немало участников, не стоит просто бросать это дело, лучше переназначьте ответственное лицо — администратора:
- Откройте чат группы и кликните по его названию (в верхней панели).
- Жмите «Изменить» (иконка в виде карандаша).
- Зайдите в раздел «Администраторы».
- Жмите «Добавить администратора».
- Выберите участника, которого планируете сделать главным в сообществе.
- Подтвердите действие кнопкой «Готово».
Теперь, чтобы выйти из беседы, достаточно открыть настройки (три точки в правом верхнем углу) группы и кликнуть там по красной кнопке «Покинуть».
С какими проблемами можно столкнуться
Каждый желающий волен создать свое собственное сообщество и наполнить его интересным/познавательным контентом. Но какой смысл публиковать посты, прикреплять фото- и видеоматериалы, если их никто не будет просматривать? В новую группу администратор, как правило, в первую очередь приглашает тех людей, которые есть у него в телефонной книге: родственников, друзей, знакомых. Этот способ расширения аудитории считается наиболее безопасным и в то же время простым.
Если создается пригласительная ссылка, ее можно разместить на разных интернет-ресурсах. Обычно это другие социальные сети: ВКонтакте, YouTube и так далее. Но здесь сразу следует обозначить один момент — многие сайты воспринимают активные ссылки как спам. И подобные действия системой считываются как нарушение, за которое легко можно получить блокировку аккаунта. Поэтому ссылками-пригласительными лучше не злоупотреблять, чтобы не вызывать гнев администраторов.
Бан может быть временным или постоянным. Для восстановления аккаунта придется связываться с технической поддержкой сайта и доказывать модератору свою невиновность.
Заключение
В статье описано, как добавить человека в группу двумя способами: вручную или с помощью пригласительной ссылки. Если просто хотите чем-то поделиться, не переживайте, что вашу учетную запись забанят. А вот «агрессивная рассылка» может привести к непоправимым последствиям, поэтому следует быть аккуратным.
Источник: ustanovkaos.ru