Подробная инструкция о том, как создать бота для предоставления демо-доступа и контроля подписок на приватный канал в 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 Premium. Плюсы и минусы подписки
Вчера в Telegram появилась платная подписка.
Она расширяет возможности обычного мессенджера и добавляет ему новые функции. Их много, но вряд ли они пригодятся каждому.
Опробовали подписку и делимся впечатлениями.
Что дает Telegram Premium
Подписчикам доступны эксклюзивные функции Telegram:
• Удвоение всех лимитов мессенджера (можно подписаться на 1000 каналов, создать 20 папок, подключить четвертый аккаунт, закрепить до 10 чатов и хранить 10 избранных стикеров)
• Максимальный размер файла при загрузке увеличится с 2 до 4 ГБ
Эта опция пригодится тем, кто загружает большие файлы в Telegram-каналы. Вряд ли в обычных чатах часто мелькают данные большого объема.
• Ускоренная загрузка медиа и документов
Здесь я почти не заметил разницы, по сути мессенджер и так оперативно все скачивал. Сейчас стало быстрее лишь немного. Например, видеофайл размером 1,5 ГБ я скачал примерно за 50 секунд, а раньше качал за минуту.
• Конвертация голосовых сообщений в текст
Эта функция особенно удобна при общении с людьми, которые в принципе не печатают сообщения или в случае, если вам неудобно слушать. Перевод работает очень точно и мгновенно трансформирует речь в текст.
При этом он способен переводить речь на разные языки. В отличие от специальных ботов, эта фича работает адекватно и сама расставляет знаки препинания.
• Отключение встроенной рекламы в каналах. То есть вы больше не увидите в самом конце переписки сообщение с рекламой очередного Telegram-канала
• Расширенный набор реакций на сообщения
Здесь доступно 10 бонусных реакций — итого 30. Каждая имеет собственную анимацию при выделении сообщения.
• Премиум-стикеры с полноэкранными эффектами
Их пока не очень много, но со временем список будет постепенно расширяться. Для каждого стикерпака создатели смогут создавать отдельные анимированные стикеры для платных подписчиков Telegram.
В принципе, создатели популярных стикерпаков уже добавили в свои наборы по 2-5 уникальных штук.
Любопытный факт. Увидеть такие стикеры смогут только пользователи с последней версией мессенджера для iOS. На Android на момент написания статьи они не отображались.
• Функция автоматического архивирования всех новых чатов
• Уникальный значок подписчика рядом с именем. По наличию звездочки можно понять, пользуется тот или иной человек подпиской
• Анимированные аватары в списке чатов и диалогах
• Дополнительные иконки приложения. Они заменят стандартную иконку Telegram на рабочем столе устройства
• Можно сделать любую папку с чатами по умолчанию
При запуске мессенджера будет открываться именно она, а не общая лента. Это удобно, если вы подписаны на большое количество каналов.
Есть ли смысл покупать
Честно говоря, лично я не нашел повода оформлять премиум-подписку для подавляющего большинства пользователей.
Фактически подписка нужна для двух типов людей:
1. Вы настолько активно пользуетесь мессенджером, что вам не хватает ограничения в 500 каналов и 5 закрепленных чатов
2. Вы хотите выделиться на фоне «серой массы» и показать свою успешность
Как и говорил в своем заявлении Павел Дуров, эта система не нужна всем. Она пригодится исключительно тем, кто пользуется мессенджером больше, чем просто средством для общения с близкими.
Как по мне, цена неоправданно высока. Из реально полезных функций здесь есть только встроенный переводчик голосовых сообщений в речь. А вот стикеры, новые реакции, отсутствие рекламы (которой и так почти нет) — это лишь повод оправдать такой высокий ценник.
Как подписаться
Подписка доступна прямо в настройках Telegram.
Деньги за нее списываются с прикрепленного счета Apple ID. Оплатить покупку напрямую с номера МТС мне не удалось. Стоит она 449 рублей в месяц.
Как оформить Telegram Premium дешевле
Суть в том, что он обходит комиссию Apple в 30% и за счет этого снижает стоимость. Итоговая цена — 379 рублей в месяц.
Пишете боту, нажимаете “Pay 379,00 RUB”, вбиваете данные карты (МИР принимается) и оплачиваете. Весь процесс занимает минуту.
(80 голосов, общий рейтинг: 4.59 из 5)
Хочешь больше? Подпишись на наш Telegram.
Источник: www.iphones.ru
Как зарабатывать на Телеграм канале: рабочие схемы
Из статьи Вы узнаете, как зарабатывать на Телеграмм канале и сколько можно заработать. Здесь по пунктам будут перечислены 4 и ещё 3 рабочие схемы для заработка.
Недорогое продвижение Телеграм:
Подписчики — живые на канал, в группу
Просмотры — на посты и видео
Как заработать на Telegram канале — 4 ТОП способа
Давно планируете монетизировать Ваш блог? Тогда читайте статью, где мы расскажем, как зарабатывать на каналах в Телеграм.
Завоевать всемирную известность и увеличить свои доходы можно посредством внушительного количества просмотров и живых подписчиков на канале или в группе в Телеграмм.
- Один из основных способов — сделать рекламу другого паблика. Многие каналы покупают её друг у друга в целях продвижения. Стоимость такой рекламы в Telegram значительно выше, чем в других социальных сетях, поскольку аудитория здесь более вовлечённая. Она варьируется от 500 до 2000 рублей и выше, в зависимости от популярности канала и активности в нём.
Когда Вы наберёте 1000 подписчиков и более, начните размещать ссылку на Ваш канал на различных биржах и сервисах статистики, например на «Tgstat» или «Sociate».
Получить первых подписчиков можно из своих контактов или, например, из социальных сетей. Конечно привлечь таким образом 10000 новых участников не удастся, но начало будет положено. Другой вариант — купить подписчиков Телеграм 100000 или больше на https://prtut.ru/ в закрытый и открытые каналы.
Также Вы можете публиковать предложение по размещению рекламы на Вашем канале в группах Vkontakte. Укажите тематику, число подписчиков, стоимость размещения, а также можете показать статистику.
Вот перечень некоторых таких площадок VK:
- «Телеграм каналы»: https://vk.com/piartelegramm ;
- «Телеграм продвижение | Каналы каталог»: https://vk.com/telegrammchanels ;
- «Биржа рекламы Вконтакте и Телеграм»: https://vk.com/public133875353 .
Во время обсуждения деталей с заказчиком необходимо оговорить время публикации, период размещения поста (сутки, двое или трое), способ оплаты, детали контента.
- Следующая схема — размещение рекламы какого-либо бренда, товара или услуги. В данном мессенджере она ещё не так популярна. Такой способ больше подходит для хорошо раскрученных каналов с многотысячной аудиторией или для блогов знаменитостей.
Заказать услуги раскрутки недорого можно ниже
100 Подписчиков
для открытого канала (Микс)
Рандомные мин. от 100 ед./ макс. до 1000 ед. Запуск 6-24 час. Низкая скорость Гарантии нет Оплата в пару кликов!
300 Подписчиков
для открытого канала (Микс)
Рандомные мин. от 100 ед./ макс. до 1000 ед. Запуск 6-24 час. Низкая скорость Гарантии нет Оплата в пару кликов!
500 Подписчиков
для открытого канала (Микс)
Рандомные мин. от 100 ед./ макс. до 1000 ед. Запуск 6-24 час. Низкая скорость Гарантии нет Оплата в пару кликов!
1000 Подписчиков
для открытого канала (Микс)
Рандомные мин. от 100 ед./ макс. до 1000 ед. Запуск 6-24 час. Низкая скорость Гарантии нет Оплата в пару кликов!
100 Живых подписчиков
в открытый/закрытый канал
Русские пользователи мин. от 100 ед./ макс. до 8000 ед. Запуск до 2 час. Высокая скорость Гарантия 30 дней Активность в виде просмотров постов
500 Живых подписчиков
в открытый/закрытый канал
Русские пользователи мин. от 100 ед./ макс. до 8000 ед. Запуск до 2 час. Высокая скорость Гарантия 30 дней Активность в виде просмотров постов
1000 Живых подписчиков
в открытый/закрытый канал
Русские пользователи мин. от 100 ед./ макс. до 8000 ед. Запуск до 2 час. Высокая скорость Гарантия 30 дней Активность в виде просмотров постов
5000 Живых подписчиков
в открытый/закрытый канал
Русские пользователи мин. от 100 ед./ макс. до 8000 ед. Запуск до 2 час. Высокая скорость Гарантия 30 дней Активность в виде просмотров постов
100 Живых подписчиков
для открытых/закрытых групп
Русские мин. от 100 ед./ макс. до 8000 ед. Запуск до 2 час. Высокая скорость Гарантия 30 дней Активность в виде просмотров постов
500 Живых подписчиков
для открытых/закрытых групп
Русские мин. от 100 ед./ макс. до 8000 ед. Запуск до 2 час. Высокая скорость Гарантия 30 дней Активность в виде просмотров постов
1000 Живых подписчиков
для открытых/закрытых групп
Русские мин. от 100 ед./ макс. до 8000 ед. Запуск до 2 час. Высокая скорость Гарантия 30 дней Активность в виде просмотров постов
5000 Живых подписчиков
для открытых/закрытых групп
Русские мин. от 100 ед./ макс. до 8000 ед. Запуск до 2 час. Высокая скорость Гарантия 30 дней Активность в виде просмотров постов
100 Живых подписчиков
в открытый и закрытый канал/группу
США мин. от 100 ед./ макс. до 3000 ед. Запуск до 3 час. Высокая скорость Гарантия 30 дней Активность в виде просмотров постов
500 Живых подписчиков
в открытый и закрытый канал/группу
США мин. от 100 ед./ макс. до 3000 ед. Запуск до 3 час. Высокая скорость Гарантия 30 дней Активность в виде просмотров постов
1000 Живых подписчиков
в открытый и закрытый канал/группу
США мин. от 100 ед./ макс. до 3000 ед. Запуск до 3 час. Высокая скорость Гарантия 30 дней Активность в виде просмотров постов
5000 Живых подписчиков
в открытый и закрытый канал/группу
США мин. от 100 ед./ макс. до 3000 ед. Запуск до 3 час. Высокая скорость Гарантия 30 дней Активность в виде просмотров постов
1000 Просмотров 1 на пост
(Временная Акция!)
Низкое качество мин.1000 ед./ макс.1000 ед. Запуск 1-3 час. Низкая скорость Гарантии нет Оплата в пару кликов!
3000 Просмотров 1 на пост
(Временная Акция!)
Низкое качество мин.3000 ед./ макс.3000 ед. Запуск 1-3 час. Низкая скорость Гарантии нет Оплата в пару кликов!
5000 Просмотров 1 на пост
(Временная Акция!)
Низкое качество мин.5000 ед./ макс.5000 ед. Запуск 1-3 час. Низкая скорость Гарантии нет Оплата в пару кликов!
10000 Просмотров 1 на пост
(Временная Акция!)
Низкое качество мин.10000 ед./ макс.10000 ед. Запуск 1-3 час. Низкая скорость Гарантии нет Оплата в пару кликов!
100 Просмотров
на пост (Боты)
Микс мин.100 ед./ макс.3000 ед. Запуск 3-6 час. Низкая скорость Гарантии нет Оплата в пару кликов!
500 Просмотров
на пост (Боты)
Микс мин.100 ед./ макс.3000 ед. Запуск 3-6 час. Низкая скорость Гарантии нет Оплата в пару кликов!
1000 Просмотров
на пост (Боты)
Микс мин.100 ед./ макс.3000 ед. Запуск 3-6 час. Низкая скорость Гарантии нет Оплата в пару кликов!
3000 Просмотров
на пост (Боты)
Микс мин.100 ед./ макс.3000 ед. Запуск 3-6 час. Низкая скорость Гарантии нет Оплата в пару кликов!
100 Просмотров
(на 1 пост, Стандарт)
Рандомные мин.100 ед./ макс.50000 ед. Запуск 0-1.5 час. Высокая скорость Стабильные Оплата в пару кликов!
300 Просмотров
(на 1 пост, Стандарт)
Рандомные мин.100 ед./ макс.50000 ед. Запуск 0-1.5 час. Высокая скорость Стабильные Оплата в пару кликов!
500 Просмотров
(на 1 пост, Стандарт)
Рандомные мин.100 ед./ макс.50000 ед. Запуск 0-1.5 час. Высокая скорость Стабильные Оплата в пару кликов!
1000 Просмотров
(на 1 пост, Стандарт)
Рандомные мин.100 ед./ макс.50000 ед. Запуск 0-1.5 час. Высокая скорость Стабильные Оплата в пару кликов!
- Третий способ — делать подборки пабликов в посте. Стоимость такой рекламы будет ниже, чем при пиаре одного канала, в среднем 250-700 рублей. Но за счёт того, что Вы разместите несколько ссылок, общая сумма может выйти даже больше.
Первый и последний канал — самые кликабельные, поэтому ценник на них можно повысить на 100 рублей.
Не стоит размещать в одном посте более 8 каналов, это раздражает пользователей и считается дурным тоном среди админов.
Успех Ваших записей зависит не только от частоты их публикаций, но и от количества просмотров. Если их не хватает, то накрутить можно на https://lowcostsmm.com/ru/. Телеграмм и другие соцсети представлены развёрнутыми прайсами с низкими ценами.