Skip to content
Develop a Telegram Bot with R
Branch: master
Clone or download
Latest commit 342bb77 Apr 28, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Update Apr 27, 2019
R Update documentation Apr 27, 2019
man Update documentation Apr 27, 2019
tests Update documentation Apr 27, 2019
vignettes Update documentation Apr 27, 2019
.Rbuildignore Minor fixes Nov 8, 2018
.gitignore Add vignettes Nov 8, 2018
.travis.yml Test and documentation updates Oct 28, 2018
DESCRIPTION Update description Apr 28, 2019
LICENSE Update LICENSE Oct 28, 2018
NAMESPACE Added 'destfile' to getFile Dec 1, 2018 Update description Apr 28, 2019
appveyor.yml Test and documentation updates Oct 28, 2018

Develop a Telegram Bot with R

CRAN Downloads Travis CI Status AppVeyor Build Status Codecov License

This package provides a pure R interface for the Telegram Bot API. In addition to the pure API implementation, it features a number of tools to make the development of Telegram bots with R easy and straightforward, providing an easy-to-use interface that takes some work off the programmer.


You can install from CRAN:


Or the development version from GitHub:

# install.packages("devtools")


You can quickly build a chatbot with a few lines:


start <- function(bot, update) {
    chat_id = update$message$chat$id,
    text = sprintf("Hello %s!", update$message$from$first_name)

updater <- Updater("TOKEN") + CommandHandler("start", start)

updater$start_polling() # Send "/start" to the bot

If you don't have a TOKEN, you can follow the steps explained below to generate one.

Telegram API Methods

One of the core instances from the package is Bot, which represents a Telegram Bot. You can find a full list of the Telegram API methods implemented in its documentation (?Bot), but here there are some examples:

# Initialize bot
bot <- Bot(token = "TOKEN")

# Get bot info

# Get updates
updates <- bot$getUpdates()

# Retrieve your chat id
# Note: you should text the bot before calling `getUpdates`
chat_id <- updates[[1L]]$from_chat_id()

# Send message
  text = "foo *bold* _italic_",
  parse_mode = "Markdown"

# Send photo
  photo = ""

# Send audio
  audio = ""

# Send document
  document = ""

# Send sticker
  sticker = ""

# Send video
  video = ""

# Send gif
  animation = ""

# Send location
  latitude = 51.521727,
  longitude = -0.117255

# Send chat action
  action = "typing"

# Get user profile photos
photos <- bot$getUserProfilePhotos(user_id = chat_id)

# Download user profile photo
file_id <- photos$photos[[1L]][[1L]]$file_id
bot$getFile(file_id, destfile = "photo.jpg")

Note that you can also send local files by passing their path instead of an URL. Additionally, all methods accept their equivalent snake_case syntax (e.g. bot$get_me() is equivalent to bot$getMe()).

Generating an Access Token

To make it work, you'll need an access TOKEN (it should look something like 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11). If you don't have it, you have to talk to @BotFather and follow a few simple steps (described here).

Recommendation: Following Hadley's API guidelines it's unsafe to type the TOKEN just in the R script. It's better to use environment variables set in .Renviron file.

So let's say you have named your bot RTelegramBot; you can open the .Renviron file with the R command:

file.edit(path.expand(file.path("~", ".Renviron")))

And put the following line with your TOKEN in your .Renviron:


If you follow the suggested R_TELEGRAM_BOT_ prefix convention you'll be able to use the bot_token function (otherwise you'll have to get these variable from Sys.getenv). Finally, restart R and you can then create the Updater object as:

updater <- Updater(token = bot_token("RTelegramBot"))

Getting Started

To get you started with, we recommend to take a look at its Wiki:

You can also check these other resources:

If you have any other doubt about the package, you can post a question on Stack Overflow under the r-telegram-bot tag or directly e-mail the package's maintainer.


The package is in a starting phase, so contributions of all sizes are very welcome. Please:


This package is inspired by Python's library python-telegram-bot, specially by its submodule telegram.ext.

You can’t perform that action at this time.