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.