Registration

(1) You need to download and install a Telegram client. E.g. Android or iOS.

(2) Register an account on Telegram.

(3) Now, Telegram has this BotFather service where you can create and register a bot with Telegram. BotFather is located at https://telegram.me/botfather

(4) While in the conversation with BotFather, send the following command to start creating a new bot. Remember that the name of your bot has to end with "bot".

/newbot

(5) Once a bot is created, BotFather will send a congratulation message that contains an access token to use the HTTP API. Copy this token as you will need it later.


The Backend

(1) Next, you will need a backend server to process the incoming messages from your Bot. Telegram has 2 ways of receiving messages - Polling or Webhook. In this example, we will be using Webhook method.

(2) We start by creating a new Rails App that handles just 1 route. Let's use the bot ID (XXXXXXXX) as the path.

Rails.application.routes.draw do
  post 'botXXXXXXXX', :to => 'telegram_requests#create'
end

(3) We will inform Telegram that we have a Webhook. To do this, we create an initializer and use it to call the setWebhook API.

HTTParty.get("https://api.telegram.org/botXXXXXXXX:YYYYYYYYYYYY/setWebhook?url=https://myurl/botXXXXXXXX")

(4) Note that all telegram Bot APIs have the following format. They are quite flexible, support both GET/POST and the parameters could be sent via query string, form body or JSON.

https://api.telegram.org/bot<YourToken>/<MethodName>

(5) We also need a controller to parse the message and send a response when we receive a message from the Webhook.

class TelegramRequestsController < ApplicationController
  def create

    chat_id = params[:message][:chat][:id]
    user_first_name = params[:message][:from][:first_name]
    message_text = params[:message][:text]

    case message_text
      when '/start'
        response_text = "Hello #{user_first_name}!"
      when '/stop'
        response_text = "Bye!"
      when '4'
        number = SecureRandom.random_number(9999) + 1
        response_text = "#{'%04d' % number}"
      else
        response_text = "Sorry! I could not understand this command."
    end
    HTTParty.post('https://api.telegram.org/botXXXXXXXX:YYYYYYYYYY/sendMessage',
      :headers => {
        'Content-Type' => 'application/json'
      },
      :body => {
        :chat_id => chat_id,
        :text => response_text
      }.to_json
    )
    render status: :ok

  end
end

(6) Deploy and run your App.

Test It!

(1) To access your Bot, go to https://telegram.me/your_bot or https://t.me/your_bot 

(2) Click the start button to start the conversation.

(3) Type a supported command and check the response.


That's all. You got a simple bot running.