Создание канала с автопостингом в Телеграме

Вступление


Предупреждаю сразу: технического в статье очень мало. Это практически пошаговая инструкция для не очень сведующих в техническом плане пользователей. Для людей сведущих (и тех, кому лень читать много текста), приведу две ссылки: Telegram Bots API + IFTTT Maker Channel.

Теперь подробнее. Думаю, все слышали про мессенджер Telegram. Вероятно, многие даже знают про нехитрый API для создания ботов в этом мессенджере. Кроме того, не так давно в T появилась возможность создавать так называемые «каналы» (channels), упрощающие мгновенную рассылку сообщений практически любому количеству подписавшихся на канал лиц. Наконец, самая свежая новость: ботов стало можно добавлять в качестве администраторов в каналы, то есть такие рассылки стало можно делать автоматизированно.

Думаю, не надо объяснять, что это открывает довольно широкие возможности для различных сервисов. Например, у меня довольно быстро получилось сделать следующее:

  • три канала (@RedditTop@r_pics@gone_wild — осторожно, последний с «взрослым» контентом), которые ежечасно импортируют топовые посты с Реддита (и двух его сабреддитов);
  • ещё канал, делающий то же с постами с 9GAG;
  • и, наконец, завел хитрого бота @JamesBot, который анонимно пересылает все сообщения, написанные ему, в общий канал (@secret_ru@secret_en@secret_es@secret_ar или @secret_fa— в зависимости от языка). Получился анонимный чат средней степени трэшовости.


Уже после создания всех этих ботов и каналов мне пришло в голову, что простейший автоимпорт постов откуда-то «снаружи» можно наладить вообще без всякого кода и хостинга — буквально минут за 5. На помощь нам придет прекрасный сервис IFTTT — If This Then That, имеющий множество интеграций с социальными сетями и прочими сервисами. Правда, к сожалению, прямой интеграции с Телеграмом у него (пока?) нет — зато есть т.н. IFTTT Maker Channel, позволяющий делать простые HTTP(S)-запросы при срабатывании триггера. К сожалению, мы не сможем принимать сообщения, отправленные боту (входящие запросы IFTTT Maker принимать может, но, увы, только в строго определенном формате) — интерактива не выйдет. Зато сможем по срабатывании любого события (например, новый твит или пост в FB):

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


Правда, срабатывать триггер будет примерно раз в 15 минут. И пока не нашлось способа загружать изображения/видео/документы (можно только кидать линк на них). Да, ограничения жесткие. Но для простейших оповещений — пойдет. Итак, поехали.

Шаг 1. Создаем бота.


По вопросу создания бота нужно обратиться к самому главному боту: @BotFather. У вас спросят две вещи: имя, которое будет отображаться в списке диалогов, а также юзернейм, по которому вашего бота можно будет найти (он должен быть уникален). Если цель — публикация постов в канале, ни то, ни другое, особого значения не имеют (видеть своего бота-администратора будете только вы).

После получения ответов на эти два вопроса BotFather должен выдать вам token вашего бота. Он имеет следующий вид:
123456789:Blablabla...

Сообщение с токеном терять не стоит, а сам токен — не стоит разглашать кому-либо, так как токен позволяет кому угодно представляться вашим ботом.

Шаг 2. Создаем канал.


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

В своем клиенте Телеграма выбираем создание нового сообщения — New Channel (кажется, все официальные клиенты сейчас поддерживают это). Указываем название, описание и фото по вкусу. Канал должен быть публичным, поэтому указываем тип Public и задаем адрес («юзернейм») теперь уже для канала. Этап приглашения друзей можно пропустить.

Когда канал создан, заходим в его настройки, открываем список администраторов и добавляем созданного на первом шаге бота (поиском по его юзернейму).

Шаг 3. Настраиваем интеграцию на IFTTT.


Отправляемся на IFTTT. Регистрируемся, если еще не. IFTTT позволяет создать множество триггеров вида «импортировать откуда», «при каком условии», «экспортировать куда». Они называются «рецептами». Создаем новый рецепт: Create a recipe.

Сначала нужно выбрать источник и конкретное условие (триггер), по которому должен срабатывать рецепт. Тут вы ничем не ограничены: хотите — следите за твитами по хэштегу, хотите — переносите свои посты из фэйсбука. Не буду вдаваться в детали, всё довольно просто.

Последняя часть рецепта — «that» — выбрать, что нужно делать, если сработало условие. Тут нужно ввести в поиск Maker, выбрать его, а затем единственное доступное действие — Make a web request. Наконец — самый ответственный этап, заполнение полей:

  • URL: api.telegram.org/bot<token>/sendMessage
  • Method: POST
  • Content type: application/json
  • Body: {"chat_id":"@<channel>","text":"{{Text}}"}


(примечание: method и content type можно выбрать и другими — Телеграм в этом плане относительно всеяден)

Обратите внимание: вместо <token> и URL нужно указать токен вашего бота (см. шаг 1), вместо <channel> в Body — адрес канала (шаг 2). Без угловых скобок, конечно, но перед адресом канала должен стоять символ @. {{Text}} в поле Body означает подстановку текста, полученного из опубликованной записи. Конкретный код подстановки может быть и другой, они зависят от выбранного триггера, чтобы увидеть их список (и подставить их в текст сообщения), нажмите на кнопку с колбой рядом с полем Body. Конечно, можно вообще не делать подстановок, а публиковать один и тот же текст, но это быстро надоедает подписчикам :)

Уточнение: если вы хотите отправлять сообщение не в канал, а в чат или конкретному человеку (себе, например), то вместо "@<channel>" нужно указать идентификатор чата или этого человека. Чтобы его узнать, проще всего добавить себе, к примеру, вот этого бота — по команде /start (в личке или в искомом чате) он пришлет искомое число. В чат сообщения будут доставляться только если ваш бот добавлен в него как участник, а лично пользователю — если он предварительно инициировал с ним диалог.

Шаг 4. PROFIT!


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

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