Перейти к содержимому

Как разрешить боту отправлять сообщения в телеграмме

  • автор:

Как отправить сообщение в группу Telegram

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

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

Подготовьте сценарий

В первую очередь, в качестве стартового экрана добавьте в сценарий текстовый блок, в который скопируйте и вставьте: $rawRequest.message.chat.id

send group message 1

Этот экран должен быть самым верхним и самым левым, чтобы бот выводил это сообщение первым.

Добавьте переменные в сценарий

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

Например, добавим блок text to $var, с помощью которого будем записывать сообщение в переменную $message :

send group message 9

Свяжите «Переход после ввода $message » с блоком Http-запрос. Метод запроса — GET .

send group message 10

Теперь создайте URL запроса. Вместо в URL нужно будет вставить токен канала, который вы получили в BotFather.

В поле BODY запроса вставьте следующее:

chat_id_number нужно будет заменить на значение, которое вы получите на этапе активации бота в группе в Telegram.

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

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

Поля RESPONSE и HEADERS заполнять не нужно.

Подготовьте сообщение об ошибке

Свяжите вариант «Завершен с ошибкой» с блоком Текст, куда напишите ошибка $httpStatus

Свяжите вариант «Завершен успешно» с блоком Текст, в котором размещено сообщение об успешной отправке данных, например Спасибо, ваша заявка была отправлена!

Подготовьте группу в Telegram для бота

Теперь нужно создать группу, в которую вы хотите добавить бота, и активировать его.

Создайте группу в Telegram

Создайте группу в Telegram, выбрав Создать группу в меню, и дайте ей название:

send group message 2 send group message 3

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

send group message 5

Активируйте бота

Отправьте в группу команду /start . Бот отправит вам сообщение из набора символов. Это значение, включая знак — , понадобится вам позже:

send group message 6

Добавьте бота в существующую группу

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

  • Создать чат с ботом
    • Ссылка на бота есть в BotFather, в сообщении, в котором вы получали токен бота
    • Перейдите в BotFather
    • Напишите команду /mybots
    • Выберите нужного бота
    • Перейдите в Bot Settings → Group Privacy
    • Выберите Turn off
    • Должна появиться фраза Privacy mode is disabled for Bot

    Удалите $rawRequest

    Вернитесь в сценарий бота.

    Теперь можно удалить блок, который содержит $rawRequest.message.chat.id .

    Опубликуйте бота

    Протестируйте бота

    Теперь напишите в Telegram боту (не в группу). Ссылка на бота есть в BotFather, в сообщении, в котором вы получали токен бота.

    send group message 13

    Запустите новую сессию с помощью /start , пришлите боту сообщение и убедитесь, что оно приходит в группу:

    send group message 14 send group message 15

    Если ваши пользователи напишут боту, сообщения от них также будут публиковаться в группу в Telegram.

    Что сделать, чтобы бот отвечал пользователям?

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

    Если этого не сделать, бот будет реагировать только если пользователь напишет / и затем название интента. Например, /привет .

    Вам также может быть интересно

    • Как отправить сообщение в Telegram
    • Как валидировать городской номер телефона
    • Авторизация в Telegram
    • Инлайн-кнопки

    Добавление бота в чат Телеграм

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

    В статье расскажем, как добавить робота в чат Телеграм и как настроить его работу по определённому сценарию.

    Видеозвонки в SberJazz
    Общайтесь с друзьями и близкими везде, где есть Интернет
    Попробовать сейчас

    Как добавить в Телеграм

    Для создания бота в Телеграме необходимо выполнить следующие шаги:

    Как создать бота

    1. Через поиск найдите профиль BotFather или перейдите по ссылке https://telegram.me/BotFather.
    2. Нажмите кнопку «Start» в чате.
    3. Введите команду /newbot.
    4. Укажите название — это то, как пользователи будут видеть его в списке контактов.
    5. Укажите системное имя: это логин после знака @.

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

    Когда бот будет создан, вы увидите токен. Он нужен для интеграции со сценариями. Если вы забыли сохранить токен, просто напишите команду /token в диалог с BotFather.

    Основа для чат-бота создана, и ему даже можно написать сообщение. Но чтобы он заработал, нужно создать для него сценарий. Сделать это можно через сервис SaluteBot.

    Создайте своего чат-бота в Telegram
    Простая настройка чат-бота в личном кабинете Цифровой витрины
    Попробовать

    Как настроить бота в личном кабинете Цифровой витрины

    Чтобы создать свой собственный сценарий и привязать его к чат-боту, зарегистрируйтесь в личном кабинете Цифровой витрины и войдите в аккаунт. Мы будем использовать инструмент SaluteBot, который помогает создать сценарий в режиме карты. Навыки программирования не нужны, если нет интеграции со сторонними системами.

    После этого зарегистрируйтесь в сервисе Jivo, который свяжет робота со сценарием. Для работы потребуется профессиональный аккаунт, первые 14 дней им можно пользоваться бесплатно. Подробнее как создать читайте в статье.

    Далее порядок действий будет следующий:

    Как создать свой сценарий

    1. Зайдите в личный кабинет Цифровой витрины и нажмите «Создать проект».
    2. Выберите «Приложения» — SaluteBot.
    3. Нажмите «Добавить аккаунт» и авторизуйтесь в Jivo.
    4. Придумайте название проекта.
    5. Выберите «Свой сценарий», это бесплатное создание сценария в режиме конструктора.
    6. Далее вы попадёте в конструктор, где сможете собрать нужный сценарий.

    Вот какие возможности есть в конструкторе:

    • Отправка пользователю текста (приветствие, ответ на сообщение или на действие).
    • Запрос данных — если нужно уточнить у клиента какую-то информацию, например, имя, телефон, номер заказа.
    • Условие — сценарий должен гибко реагировать на действия клиента, поэтому при выборе того или иного пункта меню бот, в зависимости от настроенного условия, будет реагировать по-разному.
    • Перевод диалога на оператора. Если бот не справляется с вопросом, он автоматически пригласит оператора в чат.
    • Вызов скрипта — для продвинутых сценариев, где подразумевается обмен данными со сторонними системами.

    Как добавить в группу

    Самый частый сценарий для чат-ботов в группе — это онбординг для новых участников и модерация сообщений на предмет запрещённых тем с вынесением предупреждений.

    Чтобы использовать телеграм-бот в группе, просто выберите его как нового участника: созданный нами робот — это обычный отдельный аккаунт в списке участников группы.

    Как добавить бота в группу

    Вот что нужно сделать:

    1. Перейдите в настройки группы в Телеграме.
    2. Нажмите на кнопку «Добавить участников».
    3. Найдите бот по системному имени через @имя.
    4. Нажмите на него, а затем — «ОК», чтобы добавить его к телеграм-чату.

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

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

    Как добавить в канал

    В канале чат-боты используются для отложенных публикаций или как путеводитель по каналу. Чтобы робот мог создавать посты или иначе действовать от имени канала, нужно сделать его администратором. Вот как это сделать:

    1. Зайдите в телеграм-канал, нажмите на три точки и выберите «Управление каналом».
    2. Перейдите в раздел «Администраторы».
    3. В поиске найдите бот по системному имени через @имя.
    4. Добавьте его в качестве администратора и укажите, какие разрешения у него должны быть. Если не выдать нужное разрешение, то некоторые функции могут не работать.

    В канал можно добавить собственный бот или выбрать уже существующий.

    Для личных чатов

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

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

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

    Как телеграм боту получить доступ к сообщениям?

    Как телеграмм боту получить доступ к сообщениям пользователя и делать рассылку?
    Смысл- имеется несколько каналов и нужно, как только в каком-то из них появляются новые данные- тут же их сливать в другой канал, либо в бот.

    Как такое делается на C#? (Лучше Asp.Net Core)

    • Вопрос задан более трёх лет назад
    • 53088 просмотров

    Комментировать
    Решения вопроса 0
    Ответы на вопрос 2

    ExtremeCode

    Артём Донцов @ExtremeCode
    csharp developer, blogger

    У ботов по умолчанию настроены политики приватности, дать доступ ко всем сообщениям необходимо в BotFather в настройках бота — Privacy Mode. В API есть больше информации.

    Для того чтобы у бота была возможность слать сообщения, необходимо иметь ChatId (по сути канал это тоже чат, но я не уверен что это будет работать, необходимо проверить). А так же убедиться в том что у бота будут доступны права для отправки сообщений в канал

    P.S.
    Как вариант вместо Bot Api можно использовать API клиента, там точно будет доступ ко всем сообщениям и отправке их в любые каналы

    Ответ написан более трёх лет назад
    Комментировать
    Нравится 2 Комментировать

    krimtsev

    Не важно на каком ЯП вы будете писать, вся информация о запросах есть в API телеграма.
    На сколько мне известно, боты не умеют читать каналы, иначе бы накрутки были овер большие. Боты умеют читать только личные сообщения и группы в которых они состоят.

    Ну и совет, не дергайте сообщения сразу в свой «каналы». Делайте отсечку минут в 10-15. Чтобы ошибки чужие не забирать себе. Обычно 10-15 минут хватает, чтобы автор поправил свои косяки при публикации.

    Ответ написан более трёх лет назад
    Комментировать
    Нравится 1 Комментировать
    Ваш ответ на вопрос

    Войдите, чтобы написать ответ

    c#

    • C#
    • +1 ещё

    Как проверять столкновение префаба и UI панели в Unity?

    • 1 подписчик
    • час назад
    • 9 просмотров

    Глава 1 Создаём бота, и отправляем с его помощью сообщения в telegram

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

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

    1.1.1 Видео урок о создании telegram бота через BotFather

    1.1.2 Конспект о создании telegram бота через BotFather

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

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

    I can help you create and manage Telegram bots. If you're new to the Bot API, please see the manual (https://core.telegram.org/bots). You can control me by sending these commands: /newbot - create a new bot /mybots - edit your bots [beta] Edit Bots /setname - change a bot's name /setdescription - change bot description /setabouttext - change bot about info /setuserpic - change bot profile photo /setcommands - change the list of commands /deletebot - delete a bot Bot Settings /token - generate authorization token /revoke - revoke bot access token /setinline - toggle inline mode (https://core.telegram.org/bots/inline) /setinlinegeo - toggle inline location requests (https://core.telegram.org/bots/inline#location-based-results) /setinlinefeedback - change inline feedback (https://core.telegram.org/bots/inline#collecting-feedback) settings /setjoingroups - can your bot be added to groups? /setprivacy - toggle privacy mode (https://core.telegram.org/bots#privacy-mode) in groups Games /mygames - edit your games (https://core.telegram.org/bots/games) [beta] /newgame - create a new game (https://core.telegram.org/bots/games) /listgames - get a list of your games /editgame - edit a game /deletegame - delete an existing game

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

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

    BotFather, [25.07.20 09:39] Alright, a new bot. How are we going to call it? Please choose a name for your bot. Alexey Seleznev, [25.07.20 09:40] My Test Bot BotFather, [25.07.20 09:40] Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot. Alexey Seleznev, [25.07.20 09:40] @my_test_bot

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

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

    Done! Congratulations on your new bot. You will find it at t.me/my_test_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this. Use this token to access the HTTP API: 123456789:abcdefghijklmnopqrstuvwxyz For a description of the Bot API, see this page: https://core.telegram.org/bots/api

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

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

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

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

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

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

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

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

    library(telegram.bot)

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

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

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

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

    library(telegram.bot) # создаём экземпляр бота bot  Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz") # Запрашиваем информацию о боте print(bot$getMe()) # Получаем обновления бота, т.е. список отправленных ему сообщений updates  bot$getUpdates() # Запрашиваем идентификатор чата # Примечание: перед запросом обновлений вы должны отправить боту сообщение chat_id  updates[[1L]]$from_chat_id()

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

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

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

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

    R_TELEGRAM_BOT_ИМЯ_ВАШЕГО_БОТА=123456789:abcdefghijklmnopqrstuvwxyz

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

    bot  Bot(token = bot_token("My Test Bot"))

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

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

    updates[[1L]]$message$from
    $id [1] 000000000 $is_bot [1] FALSE $first_name [1] "Alexey" $last_name [1] "Seleznev" $username [1] "AlexeySeleznev" $language_code [1] "ru"

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

    # Отправка сообщения bot$sendMessage(chat_id, text = "Привет, *жирный текст* _курсив_", parse_mode = "Markdown" )

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

    При необходимости отправить сообщение в приватный канал, вам необходимо скопировать ссылку на любое сообщение данного канала, из ссылки получить его идентификатор, и к этому идентификатору добавить -100.

    Соответвенно, к id 012345678 вам необходимо добавить -100, в таком случае в chat_id надо указать -100012345678.

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

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

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

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

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

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

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

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

        # Отправить изображение bot$sendPhoto(chat_id, photo = "https://telegram.org/img/t_logo.png" ) # Отправка голосового сообщения bot$sendAudio(chat_id, audio = "http://www.largesound.com/ashborytour/sound/brobob.mp3" ) # Отправить документ bot$sendDocument(chat_id, document = "https://github.com/ebeneditos/telegram.bot/raw/gh-pages/docs/telegram.bot.pdf" ) # Отправить стикер bot$sendSticker(chat_id, sticker = "https://www.gstatic.com/webp/gallery/1.webp" ) # Отправить видео bot$sendVideo(chat_id, video = "http://techslides.com/demos/sample-videos/small.mp4" ) # Отправить gif анимацию bot$sendAnimation(chat_id, animation = "https://media.giphy.com/media/sIIhZliB2McAo/giphy.gif" ) # Отправить локацию bot$sendLocation(chat_id, latitude = 51.521727, longitude = -0.117255 ) # Имитация действия в чате bot$sendChatAction(chat_id, action = "typing" )

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

        Помимо отправки данных бот имеет и ряд других методов:

        • deleteMessage() — Удалить сообщение
        • editMessageText() — Редактирвать текст сообщения
        • editMessageCaption() — Редактировать описание изображения, файла и т.д.
        • forwardMessage() — Переслать сообщение
        • getFile() — Подготовка файла к скачиванию
        • getMe() — Получить информацию о боте
        • getUpdates() — Получить список обновлений бота
        • getUserProfilePhotos() — Получить аватар пользователя
        • leaveChat() — Выйти из группы
        • clean_updates() — Очистить очередь обновлений

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

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

        library(purrr) library(tidyr) library(stringr) # функция для перевода data.frame в telegram таблицу  to_tg_table  function( table, align = NULL, indents = 3, parse_mode = 'Markdown' )  # если выравнивание не задано то выравниваем по левому краю if ( is.null(align) )  col_num  length(table) align  str_c( rep('l', col_num), collapse = '' ) > # проверяем правильно ли заданно выравнивание if ( length(table) != nchar(align) )  align  NULL > # новое выравнивание столбцов  side  sapply(1:nchar(align), function(x)   letter  substr(align, x, x) switch (letter, 'l' = 'right', 'r' = 'left', 'c' = 'both', 'left' ) >) # сохраняем имена t_names  names(table) # вычисляем ширину столбцов names_length  sapply(t_names, nchar)  value_length  sapply(table, function(x) max(nchar(as.character(x)))) max_length  ifelse(value_length > names_length, value_length, names_length) # подгоняем размер имён столбцов под их ширину + указанное в indents к-во пробелов  t_names  mapply(str_pad, string = t_names, width = max_length + indents, side = side) # объединяем названия столбцов str_names  str_c(t_names, collapse = '') # аргументы для фукнции str_pad rules  list(string = table, width = max_length + indents, side = side) # поочереди переводим каждый столбец к нужному виду t_str  pmap_df( rules, str_pad )%>% unite("data", everything(), remove = TRUE, sep = '') %>% unlist(data) %>% str_c(collapse = '\n')  # если таблица занимает более 4096 символов обрезаем её if ( nchar(t_str) >= 4021 )  warning('Таблица составляет более 4096 символов!') t_str  substr(t_str, 1, 4021) > # символы выделения блока кода согласно выбранной разметке code_block  switch(parse_mode, 'Markdown' = c('```', '```'), 'HTML' = c('', '')) # переводим в code res  str_c(code_block[1], str_names, t_str, code_block[2], sep = '\n') return(res) >

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

        # преобразуем таблицу iris  tg_table  to_tg_table( head(iris, 15) ) # отправляем таблицу в telegram bot$sendMessage(194336771, tg_table, "Markdown")

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

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

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

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

          # преобразуем таблицу iris  tg_table  to_tg_table( head(iris, 15), align = 'llccr') # отправляем таблицу в telegram bot$sendMessage(194336771, tg_table, "Markdown")

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

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

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

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

          bot$sendMessage(chat_id, 'Сообщение со смайлом \U0001F601 код которого в таблице U+1F601')

          Результат:

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

          1.6.1 Видео урок о разработке бота для контроля планировщика заданий

          1.6.2 Конспект о разработке бота для контроля планировщика заданий

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

          # Установка пакетов install.packages(c('taskscheduleR', 'dplyr')) # Подключение пакетов library(taskscheduleR) library(dplyr)

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

          # запрашиваем список задач task  task  taskscheduler_ls() %>% filter(! `Last Result` %in% c("0", "267011") &  `Scheduled Task State` == "Enabled" &  Status != "Running") %>% select(TaskName) %>% unique() %>% unlist() %>% paste0(., collapse = "\n")

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

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

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

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

          bot$sendMessage(chat_id, text = task, parse_mode = "Markdown" )

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

          # Подключение пакета library(telegram.bot) library(taskscheduleR) library(dplyr) # инициализируем бота bot  Bot(token = "123456789:abcdefghijklmnopqrstuvwxyz") # идентификатор чата chat_id  123456789 # запрашиваем список задач task  taskscheduler_ls() %>% filter(! `Last Result` %in% c("0", "267011") & `Scheduled Task State` == "Enabled" &  Status != "Running") %>% select(TaskName) %>% unique() %>% unlist() %>% paste0(., collapse = "\n") # если есть проблемные задачи отправляем сообщение if ( task != "" )  bot$sendMessage(chat_id, text = task, parse_mode = "Markdown" ) >

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

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

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

          [telegram_bot] ;настройки телеграм бота и чата, в который будут приходить уведомления chat_id=12345678 bot_token=123456789:abcdefghijklmnopqrstuvwxyz"
          library(configr) # чтение конфина config  read.config('C:/путь_к_конфигу/config.cfg', rcmd.parse = TRUE) bot_token  config$telegram_bot$bot_token chat_id  config$telegram_bot$chat_id

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

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

          Предположим, что мы сохранили код нашего бота в файл 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 расписание запуска, например на каждые пол часа.

          1.8 Заключение

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

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

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

          1.9 Тесты и задания

          1.9.1 Тесты

          Для закрепления материла рекомендую вам пройти тест доступный по ссылке.

          1.9.2 Задания

          1. Создайте с помощью BotFather бота.
          2. Перейдите к диалогу с ботом, и узнайте идентификатор вашего с ботом чата.
          3. Отправьте с помощью созданного бота в telegram первые 20 строк из встроенного в R набора данных ToothGrowth .

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

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

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