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

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

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

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 1 месяц назад #

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

0
Юрий Юрий 1 месяц назад #

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

Еще от автора

Автопостинг с канала в Telegram в ленту активности сайта (Первая ветка)
В прошлом посте я демонстрировал схему автопостинга сообщений из ленты активности сайта на канале в Telegram.
Изменения в компоненте «баннеры»: количество, внешний вид, формат ссылки
Немного изменил компонент баннеры. Вместо одного баннера, теперь выводится два подряд.
Разное содержимое sitemap.xml для каждого из зеркал при мультиязычности сайта
В прошлом посте, который был посвящён организации мультиязычности сайта на Instant 1* посредством поддоменов смотрящих в один и тот же каталог на хост
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.