Как отправить сообщение в канал с помощью бота telegram
Перейти к содержимому

Как отправить сообщение в канал с помощью бота telegram

  • автор:

Пишем telegram бота на языке R (часть 1): Создаём бота, и отправляем с его помощью сообщения в telegram

Аудитория telegram ежедневно растёт с геометрической прогрессией, этому способствует удобство мессенджера, наличие каналов, чатов, и конечно возможность создавать ботов.

Боты могут использоваться в совершенно разных целях, от автоматизации коммуникации с вашими клиентами до управления вашими собственными задачами.

По сути через бота можно используя telegram выполнять любые операции: отправлять, либо запрашивать данные, запускать задачи на сервере, собирать информацию в базу данных, отправлять электронные письма и так далее.

Я планирую написать серию статей, о том, как на языке R работать с telegram bot API, и писать ботов под свои нужды.

В этой, первой статье мы разберёмся как создать телеграм бота, и отправлять с его помощью уведомления в telegram.

В результате у нас получится бот, который будет проверять статус последнего выполнения всех задач в планировщике заданий Windows, и отправлять вам уведомления, если какие-то завершились ошибкой.

Но цель этой серии статей заключается не в том, что бы научить вас писать бота под определённую, узкую задачу, а в целом познакомить с синтаксисом пакета telegram.bot , и примерами кода, с помощью которых вы сможете писать ботов, под решение собственных задач.

Все статьи из серии «Пишем telegram бота на языке R»

Содержание

Если вы интересуетесь анализом данных возможно вам будут интересны мои telegram и youtube каналы. Большая часть контента которых посвящены языку R.

Создание телеграм бота

Для начала нам необходимо создать бота. Делается это с помощью специального бота BotFather, переходим по ссылке и пишем боту /start .

После чего вы получите сообщение со списком команд:

Для создания нового бота отправляем команду /newbot .

BotFather попросит вас ввести имя и логин бота.

Имя вы можете ввести произвольное, а логин должен заканчиваться на bot .

Если вы всё сделали правильно, то получите следующее сообщение:

Далее вам понадобится полученный API токен, в моём примере это 123456789:abcdefghijklmnopqrstuvwxyz .

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

Установка пакета для работы с телеграм ботом на R

Я предполагаю, что у вас уже установлен язык R, и среда разработки RStudio. Если это не так, то вы можете посмотреть данный видео урок о том, как их установить.

Для работы с Telegram Bot API мы будем использовать R пакет telegram.bot.

Установка пакетов в R осуществляется функцией install.packages() , поэтому для установки нужного нам пакета используйте команду install.packages(«telegram.bot») .

Более подробно узнать об установке различных пакетов можно из этого видео.

После установки пакета его необходимо подключить:

Отправка сообщений из R в Telegram

Созданного вами бота можно найти в Telegram по заданному при создании логину, в моём случае это @my_test_bot .

Отправьте боту любое сообщение, например «Привет бот». На данный момент это нам надо для того, что бы получить id вашего с ботом чата.

Теперь в R пишем следующий код.

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

Хранить токен в коде считается не лучшей практикой, поэтому вы можете хранить его в переменной среды, и считывать его из неё. По умолчанию в пакете telegram.bot реализована поддержка переменных среды следующего наименования: R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА . Вместо ИМЯ_ВАШЕГО_БОТА подставьте имя которое вы задали при создании, в моём случае будет переменная R_TELEGRAM_BOT_My Test Bot .

Создать переменную среды можно несколькими способами, я расскажу о наиболее универсальном и кроссплатформенном. Создайте в вашей домашней директории (узнать её можно с помощью команды path.expand(«

«) ) текстовый файл с названием .Renviron. Сделать это также можно с помощью команды file.edit(path.expand(file.path(«

И добавьте в него следующую строку.

Далее вы можете использовать сохранённый в переменной среды токен с помощью функции bot_token() , т.е. вот так:

Метод getUpdates() позволяет нам получить обновления бота, т.е. сообщения которые были ему отправлены. Метод from_chat_id() , позволяет получить идентификатор чата, из которого было отправлено сообщение. Этот идентификатор нам нужен для отправки сообщений от бота.

Помимо id чата из объекта полученного методом getUpdates() вы получаете и некоторую другую полезную информацию. Например, информацию о пользователе, отправившем сообщение.

Итак, на данном этапе у нас уже есть всё, что необходимо для отправки сообщения от бота в телеграм. Воспользуемся методом sendMessage() , в который необходимо передать идентификатор чата, текст сообщения, и тип разметки текста сообщения. Тип разметки может быть Markdown или HTML и устанавливается аргументом parse_mode .

Если вам необходимо отправить сообщение от бота не в чат, а в канал, то в chat_id указывайте адрс вашего канала, например ‘@MyTGChannel’ .

Основы форматирования Markdown разметки:

  • Жирный шрифт выделяется с помощью знака *:
    • пример: *жирный шритф*
    • результат: жирный шритф
    • пример: _курсив_
    • результат: курсив
    • пример: `моноширинный шрифт`
    • результат: моноширинный шрифт

    Основы форматирования HTML разметки:
    В HTML вы заворачиваете часть текста, которую надо выделать, в теги, пример <тег>текст</тег> .

    • <тег> — открывающий тег
    • </тег> — закрывающий тег

    Теги HTML разметки

    • <b> — жирный шрифт
      • пример: <b>жирный шрифт</b>
      • результат жирный шрифт
      • пример: <i>курсив</i>
      • результат: курсив
      • пример: <code>моноширинный шрифт</code>
      • результат: моноширинный шрифт

      Помимо текста вы можете отправлять и другой контент используя специальные методы:

      Т.е. например с помощью метода sendPhoto() вы можете отправить сохранённый в виде изображения график, который вы построили с помощью пакета ggplot2 .

      Как отправить в telegram таблицу

      К сожалению на момент написания статьи telegram не поддерживает полноценные таблицы в HTML или Markdown, но вы можете иметировать подобие таблицы. Для этого воспользуйтесь кодом представленной ниже функции to_tg_table() :

      С помощью этой функци вы можете преобразовать любой data.frame и отправить в telegram:

      В telegram это будет выглядеть так:

      У функции to_tg_table() есть несколько дополнительных аргументов:

      • align — выравнивнивание столбцов, тектовая строка, каждая буква соответвует одному столбцу, пример ‘llrrc’ :
        • l — выравнивание по левой стороне
        • r — выравнивание по правой стороне
        • c — выравнивание по центру

        Пример с выравниванием столбцов:

        Как добавить в сообщение Emoji

        Требования к телеграм ботам могут быть разные, в том числе заказчик может попросить вас добавить в сообщения бота какие то Emoji.

        Получить полный список доступных смайлов можно по этой ссылке.

        Таблица смайлов

        Из таблицы нас интересует поле Unicode. Скопиройте код нужного вам смайла, и замените U+ на \U000 . Т.е. если вам необходимо отправить смайл, код котого в таблице U+1F601 , то в коде на R вам необходимо добавить его в текст сообщения вот так — \U0001F601 .

        Результат:

        Проверка планировщика задач Windows, и отправка уведомления о задачах, работа которых была завершена аварийно

        Для работы с планировщиком заданий Windows вам необходимо установить пакет taskscheduleR , и для удобства работы с данными установим пакет dplyr .

        Далее с помощью функции taskscheduler_ls() мы запрашиваем информацию о задачах из нашего планировщика. С помощью функции filter() из пакета dplyr мы убираем из списка задач те, которые были успешно выполненны и имеют статус последнего результата 0, и те, которые ещё ни разу не запускались и имеют статус 267011, выключенные задачи, и задачи которые выполняются в данный момент.

        В объекте task у нас теперь список задач, работа которых завершилась ошибкой, этот список нам надо отправить в Telegram.

        Если рассмотреть каждую команду подробнее, то:

        • filter() — фильтрует список задач, по описанным выше условиям
        • select() — оставляет в таблице только одно поле с названием задач
        • unique() — убирает дубли названий
        • unlist() — переводит выбранный столбец таблицы в вектор
        • paste0() — соединяет названия задач в одну строку, и ставит в качестве разделителя знак перевода строки, т.е. \n .

        Всё что нам остаётся — отправить этот результат в телеграм.

        Итак, на данный момент код бота выглядит вот так:

        При использовании приведённого выше примера подставьте в код токен вашего бота и ваш идентификатор чата.

        Вы можете добавлять условия фильтрации задач, например проверяя только те задачи, которые были созданны вами, исключая системные.

        Так же вы можете вынести различные настройки в отдельный файл конфигурации, и хранить в нём id чата и токен. Читать конфиг можно например с помощью пакета configr .

        Настраиваем расписание запуска проверки задач

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

        Предположим, что мы сохранили код нашего бота в файл check_bot.R . Для того, что бы запланировать регулярный запуск этого файла выполните следующие шаги:

        1. Пропишите в системную переменную Path путь к папке в которой установлен R, в Windows путь будет примерно таким: C:\Program Files\R\R-4.0.2\bin .
        2. Создайте исполняемый bat файл, в котором будет всего одна строка R CMD BATCH C:\rscripts\check_bot\check_bot.R . Замените C:\rscripts\check_bot\check_bot.R на полный путь к вашему R файлу.
        3. Далее настройте с помощью планировщика задач Windows расписание запуска, например на каждые пол часа.

        Заключение

        В этой статье мы разобрались с тем, как создать бота, и отправлять с его помощью различные уведомления в telegram.

        Я описал задачу контроля планировщика заданий Windows, но вы можете использовать материал этой статьи для отправки любых уведомлений, от прогноза погоды до котировок акций на фондовой бирже, т.к. R позволяет вам подключиться к огромному количеству источников данных.

        В следующей статье мы с вами разберёмся с тем, как добавить боту команды и фильтры сообщений, для того, что он мог не только отправлять уведомления, но и выполнять более сложные действия.

        Как отправить сообщение в канал с помощью бота telegram [закрыт]

        Вопрос вызван проблемой, которая больше не воспроизводится, или опечаткой. Хотя похожие вопросы могут быть уместны на этом сайте, решение для этого вопроса вряд ли поможет будущим посетителям. Обычно можно избежать подобных вопросов написанием и исследованием минимальной программы для воспроизведения проблемы до публикации вопроса.

        Закрыт 6 лет назад .

        Вот делаю запрос

        @test — имя моего канала

        В ответ приходит —-> Bad Request: channel not found» Что я не так делаю? Почему не может найти канал?

        Как опубликовать пост на канал Телеграмм через бота

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

        О создании бота и подключении его к своему каналу телеграмм, рассказывал предыдущей статье.

        Повторюсь, оформление ссылки — это минимум! Потому что боты много чего позволяют делать при публикации постов, например, оформлять определённые участки текста другими шрифтами, загружать картинку к посту, вставлять специальные смайлики и другое. И всего этого нельзя было бы сделать без ботов 🙂

        В этой статье я рассмотрю для начала самое главное — как опубликовать пост через бота с маскировкой ссылки в тексте.

        Публикация поста через бота

        Для публикации поста, откройте «Controller Bot», с которым вы уже так или иначе ранее работали. Последним сообщением от него должно быть предложение создать новый пост. Нажимаем соответствующую кнопку.

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

        В окне вашего бота нажмите внизу «Запустить».

        Если в окне «Controller Bot» у вас вдруг не было кнопки «Создать новый пост», то вы можете вручную перейти к своему боту, набрав его имя в поиске Telegram, после чего выбрав его из появившегося списка. Пример:

        Нажав «Запустить», бот покажет настройки. Здесь лучше ничего не менять. Проверьте, чтобы «Форматирование» было «Markdown», а не «HTML». Работать будем с маркдауном, это проще и быстрее чем HTML коды.

        Бот автоматически выберет канал для публикации поста (если вы подключили бота пока только к единственному своему каналу). Теперь нужно в строке отправки сообщения набрать текст размещаемого поста и вставить ссылку на полную версию статьи, которую ранее делали в сервисе Telegra.ph.

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

        Важно! Нажатие клавиши Enter на клавиатуре отправит пост для предпросмотра, вместо того чтобы сделать новый абзац (перенос строки). Поэтому, если хотите в посте сделать перенос строки, то воспользуйтесь сочетанием клавиш Shift+Enter.

        Чтобы ваши читатели могли перейти к полной версии статьи, нужно в посте вставить на неё ссылку. Для вставки ссылки укажите в квадратных скобках (т.е. между символами [» и «]»») слово или фразу, которые будут являться ссылкой. Следом в обычных скобках указывается сама ссылка. Пример:

        Важно! Между квадратными и обычными скобками нет пробела! Внутри круглых скобок также не должно быть пробела!

        Если пост готов, нажмите клавишу Enter на клавиатуре или кнопку отправки в телеграме и этот пост появится в чате вашего бота для предпросмотра:

        Вот именно так он будет выглядеть и на вашем канале, когда вы его туда опубликуете. Поэтому сразу проверьте, всё ли так, работает ли ваша ссылка на полную версию статьи.

        Не забудьте, что сервис Telegra.ph, где вы создаёте статьи, открывается на территории РФ только через VPN или другие способы обхода блокировки.

        Теперь необходимо перейти к публикации поста на канале. Для этого нужно нажать «Далее» в меню бота, внизу. Скорее всего меню отображаться не будет в данный момент, поэтому откройте его, нажав соответствующую кнопку в строке отправки сообщения:

        Появится меню, где нажмите «Далее».

        Бот предложит варианты публикации. Воспользуемся немедленной публикацией. Для этого нажмите «Опубликовать».

        Далее нужно подтвердить публикацию поста, ещё раз нажав «Опубликовать».

        И теперь сообщение будет опубликовано. Об этом вас оповестит бот:

        И достаточно перейти теперь в свой канал, где увидите опубликованный пост:

        Заключение

        По данной инструкции, уверен, вы без труда сможете публиковать свой первый пост на ваш канал в Telegram. Ничего, как видим нет.

        Как уже говорил, свой бот имеет ещё много возможностей для публикации постов и помимо оформления, через него можно сделать отложенную (запланированную публикацию). О других возможностях расскажу в отдельной статье.

        Если статья оказалась для Вас полезной, вы сделаете мне приятное, поделившись ей в соц.сетях 😉

        Сделай репост – выиграй ноутбук!

        Каждый месяц 1 числа iBook.pro разыгрывает подарки.

        • Нажми на одну из кнопок соц. сетей
        • Получи персональный купон
        • Выиграй ноутбук LENOVO или HP

        —> Ноутбук, который можно выиграть, сделав репост.LENOVO или HP от 40-50 т.р., 8-16ГБ DDR4, SSD, экран 15.6″, Windows 10

        9 комментариев

        Сделала бота. Нажала в нём "Старт". написали "перейдите в бот controllerBot, чтобы добавить канал и начать создавать посты. перешла туда, там написали "Перешлите мне любое сообщение из вашего канала (вы также можете отправить @username или Group ID)." Пересылаю, а мне снова присылают тоже самое, чтобы прислала пост с канала и ничего больше не происходит. потом я что-то клацала, и наверное отключила свой личный бот, что теперь, когда я с канала пересылаю что-то написаное, пишется такое "Некорректный токен бота. Токен бота выглядит вот так – 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11." но токен на своего бота уже туда отправляла с бота "BotFather" Вообще не могу врубиться как посты отправлять, перечитала вашу статью 2 раза, голова кругом, ничего не получается. Помогите пожалуйста, у меня уже истерика=((( Напишите на почту мне, прошу larinadesign93@gmail.com

        Автор: Владимир Белев

        Очень сложно понять в такой ситуации, где пропущен нюанс или есть еще какая-то проблема, не видя устройства перед глазами. Попробуйте посмотреть еще видео на Youtube, набрав в поиске запрос вида «как создать пост в Телеграм». Чтобы наглядно было видно.

        Добрый день, ответьте пожалуйста на 2 вопроса:
        1. публикую пост через teletype, потому что он открывается и с компьютера и с телефона без впн, но почему-то когда пользователь переходит в статью, там внизу видно количество просмотров этого поста (на самом сайте teletype) в других каналах этого нет там ничего не видно что я делаю не так?
        2. Мне нужно опубликовать пост не через teletype и telegraph напрямую в телеге, пишу пост а чтобы вставить картинку нужно воспользоваться ботом Imagehosting (вроде так он называется) просто прикрепить картинку я не могу, так как там ограничение в количестве символов (до 200), бота нашёл но он у меня не работает! пишу старт и всё тишина. Есть ещё какой-то способ как картинку преобразовать в ссылку, вставить её в пост и чтобы она открывалась как картинка.
        Заранее спасибо. продублируйте ответ на почту Serega-7460@yandex.ru

        Автор: Владимир Белев

        Здравствуйте! Teletype не пользовался, возможно там есть настройка связанная с отображением просмотров. Ботом Imagehosting также не пользовался, в целом статья не совсем об этом, а о том как публиковать через стандартных ботов телеграма. С другими ботами — другие нюансы и как раз-таки могут быть такие проблемы как у вас, что не активируются команды. В этом случае нужно обращаться к руководству или поддержке самого бота.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *