Building a Telegram Bot for Cowin Shot Slots Rajesh Rajamani · Follow Published in
CloudForDummies · 5 min read ·👍 May 13, 2024 -- 1 Listen Share
Cowin Shot Slot
availability chase has become an extremely competitive space with the gap👍 in supply and
demand in India . Several techies are doing their best to educate and empower people
with one👍 of the largest vaccination drive in the world’s 2nd most populous
country.
Here is my recipe to provide timely alerts to👍 those in search for a CoWin slot
.
Assumptions: I assume you have some idea about oth AWS Lambda , Python👍 programming
and Telegram to proceed further.
Remember to read the last section of this
article
Architecture
Architecture
I was motivated to use AWS Lambda👍 given the
simplicity of deploying the code and being able to scale up and scale down .
Telegram
was my choice👍 to broadcast the messages given the flexibility it has in creating a bot
, channel and the “200,000” subscribers limit👍 to any broadcast channel you create.
That’s convenient.
Step 1: Bot Creation with Telegram
If you have not already signed up
for👍 Telegram , I think its time you do one . Proceed after you have created your
Telegram ID and signed👍 up.
Telegram provided the ultra-simple way to create your own
bot . You can chat with “@botfather“ a specialized Telegram Bot👍 that can assist you
.
First , open up your Telegram app on phone and search for “ @botfather
”
botfather
Click “Start”👍 to communicate
communicated started with botfather
Now we
want to create a newbot . Use the command “/newbot” and proceed with the
👍 process.
Ensure the following.
a. Select a unique name for your bot
b. Get the
Authorization token ( save it some where we👍 need it shortly )
c. Set up a Description
for your bot
Step 2: Channel Creation with Telegram
A Bot account can be👍 used to
respond to messages ( essentially reply ) . However that’s not convenient if we have to
transmit messages👍 to large audience . In such situations it’s useful to use “Channels”
. So let’s create one.
New Channel
Name your Channel
Once👍 the channel is created , you
need to add the Bot created in step 1 as an administrator to enable👍 sending broadcast
messages .
It’s such a good idea to limit the rights the bot will have for this
channel.
Step 3:👍 Create Lambda Function
I’m not going to deep dive about how to create
the Lambda Function .
Note : The script I👍 have provided may not be the most optimized
one . I have purposefully left it generic for customization . Please👍 feel free to use
it as you please.
Things to note while creating the Lambda Function
Ensure to create
your Lambda Function👍 in ap-south-1 “Mumbai Region” Ensure to keep your execution
trigger to not exceed 100 API calls within a 5 minute👍 interval .
The lambda function
has 2 critical steps
a. Fetching data from the Cowin API for the district / districts
defined👍 in the districts variable ( lines 15–48 )
b. Broadcasting the message to
Telegram . ( lines 57–74 )
Observe that in👍 line 67 I’m invoking the Telegram API with
the botapikey (parameter botapikey ) from step 1 and the channel ID👍 ( parameter chatid
) from step 2 and the message to be transmitted ( which is essentially the records that
👍 i fetched from the Cowin API )
url =
f”//api.telegram/{botapikey}/sendMessage?chat_id={chatid}&text={finalmessage}"
St
ep 4: Schedule the Lambda Function
For this I’m using AWS CloudWatch .
Click👍 on
Rules
Create a New Rule
Use a Cron Expression here to specify how frequently you want
to run the function. Other👍 considerations such as concurrency , scaling can be done at
the Lambda function window.
Use Crontab.guru if in doubt .
My Bot👍 is
broadcasting
Strategy Points to keep in mind :
The same approach is being used by
several tech enthusiasts to provide customized👍 updates . And this means the Cowin API
Server is taking a lot of hits. Avoid throttling your requests to👍 the API . You may end
up getting blocked interim. Set your schedule for fetching the API sensibly. Sometimes
the👍 data can be in cache and upto 30 minutes old ( refer to the API Documentation ) If
possible group👍 with other like minded enthusiasts to narrow down your scope of search
like a particular district , city , pincode👍 whatever it is . Respect fair use policies
of all the involved technologies such as AWS , Telegram , API👍 Setu . It’s a beautiful
thing that almost all of these services are free of cost . Let’s respect that👍 and dont
get greedy with it. Secure your bot API Keys with environment variables to avoid bot ID
getting misused.
If👍 you come across a suggestion , alternative approach , help please
shout out. Glad to help .
Inspiration :
Berty Thomas on👍 Twitter : @BertyThomas
Thanks.