Отложенный постинг в Телеграмм — это то, что существенно облегчает жизнь администраторам каналов! Принципы и секреты постинга по расписанию в Telegram!
Мессенджер вызывает всё больший интерес у пользователей, платформа растет, развивается и наполняется новыми каналами и группами. Пользователи охотно заводят и ведут по несколько каналов одновременно; когда число пабликов переваливает за второй десяток, встает вопрос, как организовать работу.
Что такое отложенный постинг
Это ситуация, когда пост сформирован в мессенджере, но публикуется он в строго указанные дату и время. На практике эта услуга позволяет подготовить несколько публикаций на день-два вперед с четким планом постинга.
Возможность будет интересна:
- Пользователям Телеграмм с большим количеством каналов и/или ежедневных публикаций
- Администраторам, которые не имеют постоянного доступа к интернету или мессенджеру.
- Админам, привыкшим к жесткому планированию.
Как сделать отложенный пост в Телеграмме
На первом этапе надо создать бота в Телеграмм, для этого никаких специальных навыков не потребуется — только умение нажимать кнопки и придумывать названия:
Как смотреть трансляции в телеграм
BotFather в ответном сообщении поздравит с созданием нового робота и сообщит его token, который надо скопировать.
Следующий этап – сделать созданного бота администратором канала Телеграмм:
- Пользователь должен открыть канал и кликнуть по названию паблика.
- Нажать значок шестеренок.
Следующий этап – сделать созданного бота администратором канала Телеграмм:
- Пользователь должен открыть канал и кликнуть по названию паблика.
- Нажать значок шестеренок.
- Выбрать пункт «Администраторы»
- Нажать «Добавить администратора».
- Ввести в поиске название или имя созданного бота и нажать галочку.
Теперь предстоит подключить бота и канал к Controller Bot:
- Надо отправить команду /add
- Нажать кнопку «Подключить бота».
- Отправить сообщение с token, который был скопирован из чата с BotFather.
На этом настройка закончена. Теперь можно воспользоваться услугой отложенный постинг:
- Нажать кнопку «Далее». Если кнопки нет на экране, пользователю стоит выйти из диалога и зайти снова, либо набрать текстом «Далее» и отправить.
- Тапнуть «Отложить».
- Выбрать срок, на который требуется отложить публикацию.
- В сообщении выслать время публикации двумя цифрами, разделенными пробелом (в соответствии с регионом, который был выбран в Controller Bot). Если постинг отложен на другую дату, тогда пользователю надо написать через пробел цифрами: час, минуты, число, месяц. Например, для поста 19 января в 18:40 надо отправить сообщение с текстом: «18 40 19 01».
- Заниматься своими делами – постинг появиться в паблике в нужный момент от имени канала.
Controller Bot позволяет в Телеграмм не только устанавливать дату и время публикации, но и добавлять до 6 реакций эмодзи, прикреплять URL-кнопки и просматривать статистику.
Источник: smm-blogs.ru
Экономим свое время. Ускоряем создание отложенных постов в Telegram с помощью бота
TL;DR: Если у вас есть Telegram-канал и вы устали руками заполнять отложку, то такой бот здорово облегчит вам жизнь.
Стандартный алгоритм создания отложенного поста выглядит так:
- Открыть канал
- Создать пост
- Выбрать тип публикации «Отложенная»
- Указать время поста
- Отправить публикацию
При фиксированном интервале между постами алгоритм напрашивается на оптимизацию, в идеале хотелось бы оставить только пункты 1, 2, 5. Причем пункт 2 прокачать до «Создать посты».
Несмотря на обилие готовых решений, большинство их них перегружено функциями (зачастую платными) и работа с ними может, наоборот, увеличить время создания поста. Поэтому было решено реализовать собственного бота, которому можно просто отсылать фотографии (видео, документы, что угодно), а он бы сам уже добавлял их в отложенные публикации, основываясь на времени последнего поста.
Звучит здорово, но этот подход не сработал из-за того, что боту недоступно это самое время последнего поста в канале, а также из-за этого:
Получается без собственной реализации отложки не обойтись.
Идея
У любого файла, загруженного на сервера Telegram, есть уникальный fileId. Если мы отправим боту фотографию, то он сможет достать этот id из входящего сообщения и сохранить в базу:
Далее, когда настанет время, мы сможем использовать сохраненный fileId, чтобы отправить пост в канал.
Создаем проект
Бота будем писать на Java с использованием Spring Boot и библиотеки TelegramBots,. В качестве БД используем PostgreSQL. На Spring Initializr сгенерируем наш проект с необходимыми зависимостями:
Откроем сгенерированный проект в IDE. В build.gradle в тег dependencies добавим библиотеку для работы с ботами:
implementation ‘org.telegram:telegrambots-spring-boot-starter:5.5.0’
Далее настроим подключение к нашей локальной БД. Для этого в application.yaml пропишем:
spring: datasource: url: $
И создадим класс конфигурации БД:
databaseChangeLog: — changeSet: id: 1-add-record author: ananac changes: — createTable: tableName: record columns: — column: name: id type: bigint constraints: primaryKey: true nullable: false — column: name: file_id type: varchar(255) constraints: nullable: true — column: name: comment type: text constraints: nullable: true — column: name: data_type type: varchar(15) constraints: nullable: false — column: name: create_date_time type: timestamp constraints: nullable: false — column: name: post_date_time type: timestamp constraints: nullable: true — column: name: author type: varchar(255) constraints: nullable: false
databaseChangeLog: — include: file: db/changelog/1-add-record.yaml
После этого можно запускать приложение, чтобы миграции накатились и в БД появилась наша таблица для хранения постов.
Создаем бота
telegram: name: botname token: 1793090787:AaaaAAAAAAAAAAAAAAAAAAAAAAAaaaaaaaa chatId: -1948372984327 adminId: 265765765
Пишем логику
Реализуем сущность для созданной нами таблицы:
И JPA-репозиторий с необходимыми нам запросами:
Займемся непосредственно обработчиком входящих сообщений. Создаем новый класс, отнаследованный от TelegramLongPollingBot . В нем определяем метод, который будет обрабатывать входящие события. Мы хотим, чтобы с ботом мог работать только пользователь указанный в конфиге, поэтому добавим проверку по userId:
Далее реализуем метод сохранения поста в БД. Пока делаем поддержку только для фото, но в будущем ничего не мешает расшириться на все типы вложений. Помним, что во входящем сообщении лежит несколько файлов в разном разрешении, нас интересует только самый большой:
private void processMessage(Message message) < Long chatId = message.getChatId(); if (message.getPhoto() != null !message.getPhoto().isEmpty()) < Record record = buildRecord(message); recordRepository.save(record); reply(chatId, «Добавлено. Количество постов в отложке: » + recordRepository.getNumberOfScheduledPosts()); >else < reply(chatId, «Принимаются только фото»); >> private Record buildRecord(Message message) < Record record = new Record(); String fileId = getLargestFileId(message); record.setFileId(fileId); record.setComment(message.getCaption()); record.setDataType(«PHOTO»); record.setId(message.getMessageId()); record.setCreateDateTime(LocalDateTime.now()); record.setAuthor(message.getFrom().getUserName()); return record; >private String getLargestFileId(Message message)
Метод запускается раз в минуту и первым делаем проверяет есть ли в БД неопубликованные посты. Если посты есть, то проверяется не прошло ли 120 минут с момента публикации последнего поста и на основании этого принимается решении о постинге. Также учитываем, что при первом запуске у нас не будет опубликованных постов в БД.
Далее добавим пару команд, чтобы с ботом было удобнее работать:
И реализуем их в коде. Команду для очистки сделаем с подтверждением, чтобы избежать мискликов:
private void processMessage(Message message) < Long chatId = message.getChatId(); if (message.getPhoto() != null !message.getPhoto().isEmpty()) < Record record = buildRecord(message); recordRepository.save(record); reply(chatId, «Добавлено. Количество постов в отложке: » + recordRepository.getNumberOfScheduledPosts()); >else if (message.getText() != null) < switch (message.getText()) < case «/info»: < reply(chatId, «Количество постов в отложке: » + recordRepository.getNumberOfScheduledPosts()); break; >case «/clear»: < reply(chatId, «Чтобы очистить напиши /delete»); break; >case «/delete»: < recordRepository.clear(); reply(chatId, «Очищено. Количество постов в отложке: » + recordRepository.getNumberOfScheduledPosts()); break; >default: < break; >> > else < reply(chatId, «Принимаются только фото»); >> public void sendPhoto(Record record) < try < SendPhoto sendPhoto = new SendPhoto(); sendPhoto.setChatId(chatId); sendPhoto.setPhoto(new InputFile(record.getFileId())); execute(sendPhoto); afterPost(record); >catch (TelegramApiException e) < e.printStackTrace(); >> private void afterPost(Record record)
Запуск и проверка
Поднимаем приложение и проверяем:
В дальнейшем приложение можно задеплоить в облако, например, на Heroku (что и было сделано с этим ботом) по этому гайду. С кодом можно ознакомиться здесь.
Источник: habr.com