Автопостинг из ленты активности сайта на канал в телеграм для первой ветки

+9
1.19K
Автопостинг из ленты активности сайта на канал в телеграм для первой ветки

Заметил на форуме вопрос про автопостинг в телеграм для второй ветки. Решил поделиться аналогичным решением для первой ветки, как это реализовано у меня. 

1. Создать бота и получить токен для него, для этого находим в телеграме @botFather и разбираемся в нём, 
2. Добавить бота в качестве админа на свой канал в телеграм
3. Узнать ИД-идентификатор своего канала, он начинается и вводится в параметрах ниже через дефис "-". Чтобы узнать id канала перешлите любое сообщение из него этому боту: userinfobot

Теперь работа с CMS.

Перед началом сделайте бэкап редактируемых файлов и сохраните их в надёжном месте)
Опираться будет на ленту активности и править будем один файл: /core/classes/actions.class.php находим в нём функцию  public static function log и перед завершающим фрагментом 

  1. return true;
  2. }


    вставим это.
  

  1. //отправка на канал в Telegram
  2. $dtext = $params['object'];
  3. if($dtext){
  4. $telegraminfo ='<a href="https://mysite.ru'.$params['object_url'].'">'.$params['object'].'</a>%0A';
  5. } else {
  6. $telegraminfo ='<a href="https://mysite.ru'.$params['object_url'].'">запись в ленте</a>%0A';
  7. }
  8. file_get_contents("https://api.telegram.org/ЗДЕСЬ-ТОКЕН-ВАШЕГО-БОТА/sendmessage?chat_id=ЗДЕСЬ-ИД-ВАШЕГО-КАНАЛА&disable_notification=true&parse_mode=HTML&text=".$telegraminfo);
  9. //конец отправки в телеграм


              Отправляя сообщения на канал, я использую параметр disable_notification со значением true чтобы отключить пуш-уведомления у подписчиков.
        parse_mode=HTML — означает, что если в тексте встретятся html теги, который поддерживает телеграм они будут преобразованы соответственным образом 
        
      В общем то всё. Когда на сайте появляется новый контент, мы просто отправляем ссылку на него на канал. Телеграм парсит страницу, из  разметки страницы берут заголовок, описание и картинку, если указана, и выводит это под ссылкой. Если ваша цель пригласить подписчика за полным текстом на сайт — этого достаточно.
        
        Но при желании, можно отключить предварительный просмотр страницы от телеграм disable_web_page_preview=true и выводить своё описание под ссылкой, например содержимое поля description в таблице cms_actions_log в базе данных.
      
       

  1. //отправка на канал в Telegram
  2. $dtext = $params['object'];
  3. if($dtext){
  4. $telegraminfo ='<a href="https://mysite.ru'.$params['object_url'].'">'.$params['object'].'</a>%0A';
  5. } else {
  6. $telegraminfo ='<a href="https://mysite.ru'.$params['object_url'].'">запись в ленте</a>%0A';
  7. }
  8. $telegraminfo .= '%0A';
  9. $telegraminfo .= strip_tags($params['description'], '<br><a><b>');
  10. file_get_contents("https://api.telegram.org/ЗДЕСЬ-ТОКЕН-ВАШЕГО-БОТА/sendmessage?chat_id=ЗДЕСЬ-ИД-ВАШЕГО-КАНАЛА&disable_notification=true&parse_mode=HTML&text=".$telegraminfo);
  11. //конец отправки в телеграм


        
        Чтобы брать из ленты активности только некоторые события, например только добавление поста в блог и добавление статей, обернем вышеуказанный код в простое условие:
      

  1. if($action_name == 'add_blog' || $action_name == 'add_article'){
  2. //отправка на канал в Telegram
  3. }


         
       Посмотреть в действии можно на тг-канале @unilaru, я иногда по настроению скидываю туда что-нибудь непосредственно через приложение, а когда я публикую что-нибудь на сайте, это автоматом также идёт на этот канал, правда его никто не читает, но это уже другая история.
        
        И кстати, если на сайте используется виджет комментариев от телеграм, а на канале телеграм включена опция комментирования, при отправке анонсов на канал, комментарии добавленные к анонсу через приложении будут видны на сайте, и комментарии добавленные через сайт — на канале в тг. Достаточно, чтобы в коде сайте присутствовал тег canonical. Более подробно эту функцию я разбираю здесь: unila.ru/posts/102050 если кому то нужно.
        
        Как то так. 

0
DeeMon DeeMon 2 года назад #

Вахъ! Первая ветка ещё живёт! Даже допы делают!

+1
Юрий Юрий 2 года назад #

Я бы даже сказал, неплохо живет!

0
sibroy sibroy 2 года назад #

Что то не получается… бот создал, в админы его прописал, ид канала узнал 

  1. file_get_contents("https://api.telegram.org/5593ХХХХ68:AAFvL89GkХХХХХХХХХWDMJVecxGJebw8cY/sendmessage?chat_id=506ХХХХ953&disable_notification=true&parse_mode=HTML&text=".$telegraminfo);

в коде прописал, в actions.class.php вставил куда надо...

+1
Нил™ Нил™ 2 года назад #

так — на поверхности вижу, что у вас не хватает слова bot перед его цифровым id нужно указывать в формате bot5593ХХХХ68:A и так далее. Наверно секретный токен бота следует поменять после того как выложили его в паблик, если это настоящий.

Возможно где то ещё есть что-то, но пока могу сказать только это.

+1
Нил™ Нил™ 2 года назад #

И chat_id для канала должен начинаться с тире, т.е. :

chat_id=-506...

0
sibroy sibroy 2 года назад #

Спасибо, попробую...

Еще от автора

Капча на сайт или разделы сайта
Если нужно, закрыть весь сайт или некоторые его разделы каптчей.
Пинг поисковых систем для первой ветки
Небольшая интеграция инструментов для пингования, чтобы сделать его чуть удобнее
Генератор карты сайта в формате txt на лету без крона
Вообще то где то тут уже есть вполне рабочие генераторы карты для первой ветки, но этот вариант тоже имеет право быть.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.