Боты для рассылок в Телеграме: как их создавать и использовать
В Телеграме есть удобный инструмент для массовых рассылок – боты. С их помощью можно собирать базу подписчиков, сегментировать ее и рассылать персонализированные сообщения.
В этой статье коротко расскажем, почему рассылку нужно делать именно через бот и как сделать рассылку в Телеграме.
Зачем для рассылки в Телеграме нужен бот
Бот в Телеграме можно настроить на рассылку, чтобы он мог отправлять сообщения всем пользователям, которые его запустили. Как это выглядит на практике:
- компания привлекает аудиторию в бот
- пользователь активирует его командой /start, давая тем самым согласие на получение сообщений
- бот приветствует подписчика и добавляет его в список получателей будущей рассылки
Важно: нельзя создавать телеграм-бот для рассылки в личные сообщения – это будет считаться спамом. Нужно, чтобы человек самостоятельно активировал бот и подписался на его обновления, нажав кнопку старта. Это действие является согласием на получение сообщений, в том числе и массовой рассылки.
Отправлять сообщения подписчикам бота – легальный способ рассылки в Телеграме
Еще иногда боты используют для рассылки сообщений по групповым чатам Телеграма. Мы не рекомендуем так делать, потому что пользователи вступают в группы, чтобы общаться друг с другом, а не читать рассылки.
Рассылка в Телеграме: виды, особенности и инструкция по запуску
Возможности ботов для рассылки
Бот позволяет использовать Телеграм как полноценный канал для рассылок. Для этого у него есть следующие возможности:
- добавлять медиафайлы
- форматировать текст, добавлять ссылки и эмодзи
- отправлять рассылку в указанное время
- персонализировать сообщения
- сегментировать подписчиков
Как правильно использовать эмодзи в рассылках
Как создать бот для рассылки в Телеграм
Создать бот легко, для этого не нужен программист. Все делается бесплатно с помощью официального бота Телеграма. Для этого нужно:
- Перейти в BotFather и нажать кнопку Start внизу экрана.
- В появившемся списке нажать команду /newbot.
- Придумать имя бота, которое пользователи будут видеть в списке контактов – нужно выбрать узнаваемое имя, например, Бот Sendsay.
- Придумать имя пользователя – уникальное имя бота на английском, которое будет указано в ссылке. В нем обязательно должно быть слово bot, например, SendsayBot. Юзернейм может быть занят, тогда надо будет придумать что-то другое.
- Получить токен – это уникальный код бота, который понадобится для интеграции с сервисами рассылок.
Готово! Вы создали собственный телеграм-бот.
Также через BotFather можно добавить описание и аватар бота, поменять его юзернейм, добавить список команд, которые он будет выполнять, или вообще удалить
Пока этот бот ничего не умеет делать, его нужно запрограммировать для выполнения различных команд. Для этого можно воспользоваться специальными сервисами или запрограммировать его с помощью специалистов.
Самостоятельно программировать бот сложно и долго, намного проще воспользоваться сервисами для рассылок. Они позволяют за пару минут настроить бот и сразу начать отправку сообщений.
Как настроить бот для рассылки сообщений в Телеграме
Есть 2 основных способа рассылать сообщения подписчикам бота: через сервисы рассылки и через конструкторы. У каждого способа есть свои особенности, плюсы и минусы.
Настройка через сервисы рассылки
Есть крупные сервисы для рассылок, через которые можно отправлять сообщения по разным каналам. Например, сервис Sendsay, который может отправлять рассылки через:
- электронную почту
- личные сообщения ВКонтакте
- боты в Телеграме
- SMS
- Web Push
- мобильные push-уведомления
Делать рассылку в телеграм-боте через такие сервисы удобно, потому что:
Омниканальность как мастхэв для бизнеса
- все подписчики хранятся в одном месте – у каждого пользователя есть карточка с контактными данными,
- есть удобный интерфейс создания сообщения – с функциями персонализации и верстки текста ,
- подключается сквозная аналитика – по UTM-меткам в ссылке сообщения можно анализировать поведение пользователя на сайте.
Интерфейс создания сообщения для рассылки через бот в Телеграме
Еще к таким сервисам легко подключить телеграм-бот и начать рассылку. Например, для подключения бота к Sendsay нужно добавить уникальный токен, который выдал BotFather, и все – бот настроен и может отправлять сообщения своим подписчикам.
Для подключения бота к Sendsay нужно просто добавить уникальный токен
Такие сервисы позволяют не только запустить рассылку за пару часов, но и сэкономить бюджет. Так, рассылка в Телеграме через Sendsay будет стоить 660 ₽ в месяц для бота, у которого менее 1000 подписчиков.
У таких сервисов также есть персонализация сообщений и сегментация подписчиков. Но эти функции осложняются особенностями Телеграма: он не передает никакой личной информации о подписчике кроме имени и фамилии.
В Sendsay эта проблема решается с помощью объединения ID пользователя в Телеграме с его электронной почтой. Если пользователь переходит в Телеграм из письма, то Телеграм-контакт свяжется с email-контактом. После этого данные email будут доступны и для Телеграма.
Настройка через сервисы-конструкторы
Это более сложные сервисы, которые используют для сложных взаимодействий с пользователем. Например, чтобы человек мог общаться с ботом в режиме чата: бот предлагает нажать кнопку или написать сообщение → пользователь совершает действие → бот в ответ присылает следующее сообщение.
Пример взаимодействия в режиме чата: бот предлагает написать сообщение, в ответ на которое отвечает следующим сообщением
Через такие сервисы-конструкторы отправляют и обычные рассылки: разовые письма и полноценные цепочки в том числе и триггерные. Запускать рассылку может наступление конкретного времени, действие на сайте или действие в боте – получен или не получен ответ, активирована кнопка действия или нет, и прочее.
Интерфейс конструкторов интуитивно понятный. Для создания простых рассылок и цепочек не нужны знания программирования, но для сложных вариантов интеграции с CRM-системами понадобится программист и умение работы с переменными.
Из плюсов: многофункциональные боты для рассылки в Телеграме, кнопки действия, сегментация, персонализация, сортировка пользователей по поведению и активированным кнопкам, расширенная статистика.

Как анализировать статистику по email-рассылкам: основные нюансы
Минус – стоимость. В среднем такие сервисы стоят от 900 до 3000 ₽ в месяц. Если у вас есть сервис рассылок и вам нужен бот для простых цепочек, то в таком конструкторе нет необходимости.
Итак, резюмируем о рассылках через телеграм-боты.
- Боты в Телеграме – многофункциональные помощники, которые могут выполнять запрограммированные действия.
- Легально делать массовые рассылки можно только подписчикам бота. Использовать бот для рассылки в Телеграм конкретным пользователям нельзя, если пользователь не давал согласия. В противном случае такая рассылка будет считаться спамом.
- Отправлять сообщения можно с помощью сервисов рассылки или специальных конструкторов.
- Для рассылки нужно создать собственный бот и подключить его к сервису с помощью токена.
- Сервисы рассылок удобны тем, что всех подписчиков можно хранить в одном месте, быстро создавать сообщения и изучать статистику по рассылкам.
- Конструкторы – сервисы с более широким функционалом, который позволяет создавать сложные механики взаимодействия с ботом, делать воронки продаж и запускать игры для вовлечения. Минус – стоимость.
- Бесплатную рассылку в телеграм-бот можно делать только на пробных тарифах некоторых сервисов. Для полноценной работы с мессенджер-маркетингом нужно оплачивать доступ или программировать бот самостоятельно.
Что такое спам-рассылка, как ее отличить от честного email-маркетинга и как заблокировать
Кроме того, мы делимся полезной информацией в сфере digital-маркетинга в нашем телеграм-канале, при подписке на который дарим книгу «Email-маркетинг для бизнеса». Подробнее о том, как ее получить, рассказали в закрепленном сообщении канала.
Подключайте Sendsay, чтобы сделать ваш email-маркетинг мощнее
Как отправить сообщение в Telegram
Тут мы рассказываем, как отправлять личные сообщения в Telegram с помощью бота.
Если вы хотите отправлять сообщения не в личные сообщения, а в группу в Telegram, то обратитесь к этой инструкции.
Как настроить отправку сообщений
Постройте сценарий
Чтобы отправить что-либо в Telegram, сначала нам нужно записать информацию в переменную. Вы можете собрать несколько параметров, записать их в переменные, и все эти переменные передать в Telegram. Перед отправкой данных у вас должен существовать участок сценария с записью в переменные.
Пройдите этот урок для построения сценария.
После прохождения урока, у вас будут 5 переменных:
- для имени
- для фамилии
- для телефона
- для email
- для вида услуги
Опубликуйте бота в Telegram
Чтобы опубликовать бота в Telegram, следуйте инструкции.
Если вы уже опубликовали бота в Telegram, переходите к следующему пункту.
Получите chat_id
Для того чтобы получить сообщение в Telegram, бот должен знать, кому его отправлять. Вы можете получить chat_id своего аккаунта (или аккаунта человека, которому вы хотите отправлять данную информацию), чтобы затем с помощью бота отправлять сообщения.
Чтобы получить chat_id , создайте в сценарии новый экран с текстом:
Поместите этот экран в начало сценария, чтобы этот экран был в левом верхнем углу. Таким образом, этот экран будет первым при запуске бота.

Опубликуйте бота
Нажмите Опубликовать и дождитесь сообщения о том, что сценарий опубликован на канале Telegram.
Протестируйте бота
Теперь перейдите к своему боту в Telegram (не в тестовом виджете!) и отправьте боту:
Если вы хотите, чтобы сообщения приходили не вам, а другому человеку, то просто отправьте этому человеку ссылку на бота. Если этот пользователь будет общаться с этим ботом впервые, то бот сразу же пришлет значение chat_id . Если этот пользователь ранее уже общался с этим ботом, то попросите пользователя отправить в диалог /start , чтобы получить chat_id.
Бот пришлет вам нужное значение:

Скопируйте и вставьте в блокнот число, которое прислал бот.


Удалите экран с текстом $rawRequest.message.from.id . Он больше не нужен.

Отправьте данные
Следующий шаг — отправить данные, полученные от клиента. Для этого в сценарии, после сбора всей нужной информации, должен быть блок HTTP-запрос. С помощью одного запроса можно передать сразу несколько переменных:

Блок должен быть оформлен следующим образом:
Метод GET

Формирование URL
Для создания URL скопируйте в блокнот строку: https://api.telegram.org/bot/sendMessage

Затем перейдите в Telegram в канал BotFather и скопируйте токен вашего бота, который был сгенерирован, когда вы публиковали канал:

В блокноте выделите

И вместо вставьте токен из Telegram:

Получится примерно следующий адрес:

Теперь выделите строку целиком и вставьте ее в поле URL HTTP-запроса в Aimylogic

Оформление поля BODY
В BODY нам нужно указать:
- значение chat_id , которое мы получили ранее

- все переменные, которые мы до этого собрали в сценарии.
Если вы повторили урок по сбору контактных данных, то в сценарии вы получили следующую информацию:
Ваше имя: $name Ваша фамилия: $lastname Ваш телефон: $PHONE Ваш email: $EMAIL Вид услуги: $service
Поэтому сейчас мы используем именно эти переменные.
Итак, нужно вставить значение chat_id и перечислить переменные, которые были в сценарии до отправки.
Обратите внимание на отступы и знаки препинания! Рекомендуем не набирать текст, а скопировать и вставить.

Нажмите Сохранить.
Готово, мы оформили Http-запрос для отправки данных.
Проверьте статус отправки
От логики «Завершен успешно» добавляем связь к новому экрану, содержащему сообщение об успешной отправке данных. Например, “Спасибо, ваши данные успешно отправлены!”
От логики “Завершен с ошибкой” делаем связь с экраном, содержащим текстовый блок “Ошибка $httpStatus ”. Данный блок поможет нам понять, в чем неполадка, если http-запрос не будет успешным.

Протестируйте сценарий
Нажмите Тестировать и поговорите с ботом.
По итогу диалога нужная информация должна прийти в Telegram.
Обратите внимание, что бот будет присылать сообщение в вашу беседу с ботом. Если вы ожидаете, что вам придет личное сообщение от какого-то другого аккаунта, вас может смутить такое поведение. Но в дальнейшем, когда другие люди будут писать боту, и вы будете получать сообщения от бота, вам будет более понятно, что происходит. Попросите другого человека прислать боту свое имя и телефон, и тогда вы получите сообщение от бота.
Возможные неполадки
Вы нажимаете Тестировать, и бот выдает ошибку
Проверьте, не используете ли вы в сценарии $rawRequest для получения имени. Если да, то тестировать нужно в канале Telegram. В тестовом виджете ошибка будет ожидаемо выпадать, так как бот пытается получить информацию из канала, которого нет.
«Ошибка -1»
Проверьте правильность URL в http-запросе. Возможно, в самом URL или в конце URL есть пробел либо по ошибке вставлен неверный символ.
«Ошибка 400»
- Проверьте правильность оформления http-запроса. Попробуйте удалить Telegram-бота в BotFather, создать заново и использовать заново сгенерированный токен.
- Проверьте правильность оформления поля BODY (синтаксис).
Образец правильного оформления поля BODY
- Первая и последняя строчка должны содержать только фигурные скобки


- Должны быть отступы (можете нажать Tab либо нажать пробел четыре раза)


- «chat_id»: должно быть написано именно так (проверьте на наличие опечаток, а лучше скопируйте и вставьте): «chat_id»:

- Значение chat_id должно быть не 123456789, а реальное значение, которое вы скопировали на шаге 3 (123456789 это пример для урока)

- Строка, содержащая «chat_id»: должна оканчиваться запятой

- После двоеточий должны быть пробелы


- Значение передаваемого текста сообщения должно быть в таких кавычках: » »


Глава 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_id1.7 Настраиваем расписание запуска проверки задач
Наиболее подробно процесс настройки запуска скриптов по расписанию описан в этой статье . Тут я лишь опишу шаги, которые для этого необходимо выполнить. Если какой-то из шагов вам не понятен, то обратитесь к статье на которую я указал ссылку.
Предположим, что мы сохранили код нашего бота в файл check_bot.R . Для того, что бы запланировать регулярный запуск этого файла выполните следующие шаги:
- Пропишите в системную переменную Path путь к папке в которой установлен R, в Windows путь будет примерно таким: C:\Program Files\R\R-4.0.2\bin .
- Создайте исполняемый bat файл, в котором будет всего одна строка R CMD BATCH C:\rscripts\check_bot\check_bot.R . Замените C:\rscripts\check_bot\check_bot.R на полный путь к вашему R файлу.
- Далее настройте с помощью планировщика задач Windows расписание запуска, например на каждые пол часа.
1.8 Заключение
В этой главе мы разобрались с тем, как создать бота, и отправлять с его помощью различные уведомления в telegram.
Я описал задачу контроля планировщика заданий Windows, но вы можете использовать материал этой главы для отправки любых уведомлений, от прогноза погоды до котировок акций на фондовой бирже, т.к. R позволяет вам подключиться к огромному количеству источников данных.
В следующей главе мы с вами разберёмся с тем, как добавить боту команды и фильтры сообщений, для того, что он мог не только отправлять уведомления, но и выполнять более сложные действия.
1.9 Тесты и задания
1.9.1 Тесты
Для закрепления материла рекомендую вам пройти тест доступный по ссылке.
1.9.2 Задания
- Создайте с помощью BotFather бота.
- Перейдите к диалогу с ботом, и узнайте идентификатор вашего с ботом чата.
- Отправьте с помощью созданного бота в telegram первые 20 строк из встроенного в R набора данных ToothGrowth .

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

Если вы читаете данную статью, значит, скорей за все имеете свой бот в телеграмме. Соответственно расписывать и объяснять как создать бота я здесь не буду. (Возможно в будущем создам отдельную статью по этому поводу, но какой в этом смысл, ведь в гугле их пруд пруди).
Надеюсь вы используете библиотеку python-telegram-bot . Если это не так, увы, эта статья не для вас…хотя…вы попробуйте, возможно у вас тоже будет работать данный пример (либо сделаете по аналогии).
Для отправки сообщений создадим новую функцию и назовем её send_message , передадим параметры bot и job .
Далее нам нужно получить chat_id пользователей. (Надеюсь вы подключили к своему боту базу данных, либо записываете в файл chat_id от всех пользователей которые когда-либо пользовались вашим ботом). После чего используя метод sendMessage указываем параметры chat_id пользователя и отправляемый текст text.
В итоге у нас должно получиться:
from telegram.ext import Updater, messagequeue as mq @mq.queuedmessage def send_message(bot, job): for user in get_subscribed(db): text = 'Это тестовое сообщение' bot.sendMessage(chat_id=user['chat_id'], text=text)И так, что же мы здесь написали, давайте разберемся:
@mq.queuedmessage — Указываем, что сообщения будут отправлены не сразу все, а в порядке очереди, так как телеграмм ограничивает отправку сообщений в секунду. Если не ошибаюсь, не больше 30 сообщений в секунду. for user in get_subscribed(db) Получаем список пользователей с базы данных, get_subscribed и прохожусь по каждому пользователю циклом вытягивая его chat_id
Пол дела сделано, осталось отправить сообщение. Для этого переходим в главную функцию main() (или как она у вас там называется)
mybot = Updater(settings.API_KEY) # Указываем токен бота mybot.bot._msg_queue = mq.MessageQueue() # Указываем, что будем работать с декораторам очереди mybot.bot._is_messages_queued_default = True # Включаем декоратор очереди mybot.job_queue.run_repeating(send_message, interval=60) # Ставим задачу отправлять сообщение каждые 60 секунд. Бот будет делать это пока вы не уберете эту строку с кода.Что бы один раз отправить сообщение я обычно делаю следующее — ставлю интервал в 10 минут, жду пока сообщения отправляться, останавливаю бота и комментирую эту строку, затем снова запускаю бота. Можно конечно сделать это через Условие, на подобии:
send = True If send: mybot.job_queue.run_repeating(send_message, interval=60) send = FalseНо, кому как удобно.
Описание всех методов есть в API от телеграмма