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.