Заметил на форуме вопрос про автопостинг в телеграм для второй ветки. Решил поделиться аналогичным решением для первой ветки, как это реализовано у меня.
1. Создать бота и получить токен для него, для этого находим в телеграме @botFather и разбираемся в нём,
2. Добавить бота в качестве админа на свой канал в телеграм
3. Узнать ИД-идентификатор своего канала, он начинается и вводится в параметрах ниже через дефис "-". Чтобы узнать id канала перешлите любое сообщение из него этому боту: userinfobot
Теперь работа с CMS.
Перед началом сделайте бэкап редактируемых файлов и сохраните их в надёжном месте)
Опираться будет на ленту активности и править будем один файл: /core/classes/actions.class.php находим в нём функцию public static function log и перед завершающим фрагментом
return true; }
вставим это.
//отправка на канал в Telegram $dtext = $params['object']; if($dtext){ $telegraminfo ='<a href="https://mysite.ru'.$params['object_url'].'">'.$params['object'].'</a>%0A'; } else { $telegraminfo ='<a href="https://mysite.ru'.$params['object_url'].'">запись в ленте</a>%0A'; } file_get_contents("https://api.telegram.org/ЗДЕСЬ-ТОКЕН-ВАШЕГО-БОТА/sendmessage?chat_id=ЗДЕСЬ-ИД-ВАШЕГО-КАНАЛА&disable_notification=true&parse_mode=HTML&text=".$telegraminfo); //конец отправки в телеграм
Отправляя сообщения на канал, я использую параметр disable_notification со значением true чтобы отключить пуш-уведомления у подписчиков.
parse_mode=HTML — означает, что если в тексте встретятся html теги, который поддерживает телеграм они будут преобразованы соответственным образом
В общем то всё. Когда на сайте появляется новый контент, мы просто отправляем ссылку на него на канал. Телеграм парсит страницу, из разметки страницы берут заголовок, описание и картинку, если указана, и выводит это под ссылкой. Если ваша цель пригласить подписчика за полным текстом на сайт — этого достаточно.
Но при желании, можно отключить предварительный просмотр страницы от телеграм disable_web_page_preview=true и выводить своё описание под ссылкой, например содержимое поля description в таблице cms_actions_log в базе данных.
//отправка на канал в Telegram $dtext = $params['object']; if($dtext){ $telegraminfo ='<a href="https://mysite.ru'.$params['object_url'].'">'.$params['object'].'</a>%0A'; } else { $telegraminfo ='<a href="https://mysite.ru'.$params['object_url'].'">запись в ленте</a>%0A'; } $telegraminfo .= '%0A'; file_get_contents("https://api.telegram.org/ЗДЕСЬ-ТОКЕН-ВАШЕГО-БОТА/sendmessage?chat_id=ЗДЕСЬ-ИД-ВАШЕГО-КАНАЛА&disable_notification=true&parse_mode=HTML&text=".$telegraminfo); //конец отправки в телеграм
Чтобы брать из ленты активности только некоторые события, например только добавление поста в блог и добавление статей, обернем вышеуказанный код в простое условие:
if($action_name == 'add_blog' || $action_name == 'add_article'){ //отправка на канал в Telegram }
Посмотреть в действии можно на тг-канале @unilaru, я иногда по настроению скидываю туда что-нибудь непосредственно через приложение, а когда я публикую что-нибудь на сайте, это автоматом также идёт на этот канал, правда его никто не читает, но это уже другая история.
И кстати, если на сайте используется виджет комментариев от телеграм, а на канале телеграм включена опция комментирования, при отправке анонсов на канал, комментарии добавленные к анонсу через приложении будут видны на сайте, и комментарии добавленные через сайт — на канале в тг. Достаточно, чтобы в коде сайте присутствовал тег canonical. Более подробно эту функцию я разбираю здесь: unila.ru/posts/102050 если кому то нужно.
Как то так.
Реклама #
DeeMon 2 года назад #
Вахъ! Первая ветка ещё живёт! Даже допы делают!
Юрий 2 года назад #
Я бы даже сказал, неплохо живет!
sibroy 2 года назад #
Что то не получается… бот создал, в админы его прописал, ид канала узнал
в коде прописал, в actions.class.php вставил куда надо...
Нил™ 2 года назад #
так — на поверхности вижу, что у вас не хватает слова bot перед его цифровым id нужно указывать в формате bot5593ХХХХ68:A и так далее. Наверно секретный токен бота следует поменять после того как выложили его в паблик, если это настоящий.
Возможно где то ещё есть что-то, но пока могу сказать только это.
Нил™ 2 года назад #
И chat_id для канала должен начинаться с тире, т.е. :
chat_id=-506...
sibroy 2 года назад #
Спасибо, попробую...