This is a fork over the neat covid-vaccine-booking. Thanks for creating a playground for me to build on 🤘
Loved the project? Please consider donating to help it improve!
- Before you start
- What this repository does
- Setup Guide: Android
- Setup Guide: iOS
- COVID-19 Vaccination Slot Booking Script
- Troubleshooting common problems
-
This is a proof of concept project. I do NOT endorse or condone, in any shape or form, automating any monitoring/booking tasks. Use at your own risk. Seriously, if you get into legal trouble for using this, I am not liable.
-
Do NOT use unless all beneficiaries selected are supposed to get the same vaccine and dose.
-
No option to register new user or add beneficiaries. This can be used only after beneficiary has been added through the official app/site
-
Be careful if you choose to use the auto-book feature. It will blindly select first available center, date - both sorted ascending - and a RANDOM slot. I would recommend against using this. Only added for the convenience of people in short supply areas.
-
If you accidentally book a slot, don't worry. You can always login to the official portal and cancel that. There will be an X symbol on the right-top corner for each beneficiary.
-
The captcha is a bit buggy and you may be required to make 5-6 tries before you are able to book. (requires anti-captcha key)
-
API Details (read the first paragraph at least): https://apisetu.gov.in/public/marketplace/api/cowin/cowin-public-v2
-
If you face any issues please refer to the troubleshooting section at the end of this doc, Still I know code quality isn't great. Suggestions are welcome.
- Automates OTP read from the SMS after the token expires.
- Randomly chooses one of the available slots instead of waiting for input from the user.
- https://ifttt.com/ is used to create a SMS trigger. The trigger happens when the OTP SMS is received
- The trigger sends the text of the SMS to a REST service, I have used a free service which needs 0 setup for a shared storage
- The CoWinOTPRetriever Android app has been created to automatically read the OTP SMS and then send it to the shared storage
- You only need to install and start the app, enter your CoWIN registered phone number, and then start the OTP listener.
- Shortcuts app is used to create an SMS trigger. The trigger happens when the OTP SMS is received
- The trigger sends the text of the SMS to a REST service, I have used a free service which needs 0 setup for a shared storage
- The script runs continuously to poll (same logic as the original repository)
- Whenever the OTP expires, an OTP is requested
- When the OTP SMS is received on the Android, phone, the above logic triggers to store the OTP SMS in the shared storage. On iOS, when the OTP SMS is received, the above logic triggers a notification which the user has to long press and confirm after which the OTP is stored in shared storage
- The script polls the shared storage to get the OTP
- Once the OTP is received, the polling resumes
- If a free slot is found, rather than waiting for an input, it randomly chooses a slot and attempts to book
-
Create an account in ifttt.com (A premium paid account is recommended for a quicker response)
-
Create a new applet
-
If this..... click on Android SMS trigger
-
Select "New SMS received matches search" and use CoWIN as the search key
-
Then... Choose a service named Webhooks and then select make a web request
-
Paste the url: https://kvdb.io/DVQszkcZaUwBoHwbJyEeMG/XXXXXXXXXX replace XXXXXXXXXX with your phone number
-
Method is PUT
-
Content Type PlainText
-
Body: Add ingredient and select Text
-
On your android phone, install ifttt app
-
Login
-
Ensure that the battery saver mode, and all other optimizations are removed. The appshould always run (This is the key for quick response).
- Tip: If your IFTTT is not triggered when your SMS is received: https://www.androidpolice.com/2020/05/30/how-to-prevent-apps-sleeping-in-the-background-on-android/ Also a premium account is faster
-
Clone this repository
-
On Mac I had to do the following too
brew install python-tk brew install SoX
-
Run the script
cd src && python3 covid-vaccine-slot-booking.py
-
Use the steps given below to enter your preferences
-
Hopefully you get the slot
-
Stay healthy and stay safe!
Now Enter URL : https://kvdb.io/DVQszkcZaUwBoHwbJyEeMG/XXXXXXXXXX & replace XXXXXXXXXX with your mobile number
Copy from below
https://kvdb.io/DVQszkcZaUwBoHwbJyEeMG/
- Install the CoWinOTPRetriever Android app by enabling installation from unknown sources.
- Follow this guide to install apps from unknown sources: https://www.verizon.com/support/knowledge-base-222186/
- Allow the app to run in background so that the app does not stop even if you multi-task or leave the phone idle. (Note that, there still might be some phone model specific settings and optimizations which could stop the app from running in background. Check point number 8)
- Grant sms access to allow the app to read CoWIN OTP sms.
- Enter 10 digit mobile number registered on the CoWIN portal.
- Switch ON the OTP Listener.
- If the OTP is successfully sent to the key value store, you will see the status as shown below.
- Ensure that the battery saver mode, and all other optimizations are removed. The app should always run (This is the key for quick response). Tip: If you don not see a success message on the app when you receive an OTP: https://www.androidpolice.com/2020/05/30/how-to-prevent-apps-sleeping-in-the-background-on-android/
- Security tip: Make sure to change back your settings to disallow app installation from unknown sources.
Now Enter Your Number on first Text Field
and
Check key on second Text Field (under KV DB Bucket Key) is same as the below mentioned else copy and paste on the field
DVQszkcZaUwBoHwbJyEeMG
- Open the shortcuts app
- Tap on the + button at the top right
- Tap on
Create Personal Automation
- Select the
Message
option - Put
CoWIN
in the Message Contains option & leave everything blank. Tap on Next button - Tap on
Add action
and search for the optionSet Variable
. Give the variable nametext
and input asShortcut Input
-
Then add another action and select `URL` and paste the url: https://kvdb.io/DVQszkcZaUwBoHwbJyEeMG/XXXXXXXXXX replace XXXXXXXXXX with your phone number
- Then add another action and select
Get Contents of Url
. Click on show more. Change the method toPUT
. Request Body toFile
and in the file row tap onChoose Variable
and selecttext
which we defined in Step 6. - Click Next and save this automation.
- Clone this repository
Go to
src
directory and run the scriptcd src && python3 covid-vaccine-slot-booking.py
- On Mac I had to do the following too
brew install python-tk
brew install SoX
- Run the script, enter your phone number.
- Now as soon as OTP is recieved you will also get a notification from shortcuts app. Long press it and click on run. It will start OTP auto read process.
- Use the steps given below to enter your preferences.
- Now whenever the script session expires, it will send the notification described in step 13 and repeat the process to trigger OTP auto read.
- It is recommended that you set a different notification tone for this notification to be able to distinguish.
- Hopefully you get the slot
- Stay healthy and stay safe!
Now Enter URL : https://kvdb.io/DVQszkcZaUwBoHwbJyEeMG/XXXXXXXXXX & replace XXXXXXXXXX with your mobile number
Copy from below
https://kvdb.io/DVQszkcZaUwBoHwbJyEeMG/
Tips:
I used this command to run the script as it was giving me Syntax error: python3 src/covid-vaccine-slot-booking.py
Also I used this command to install the dependencies python3 -m pip install -r requirements.txt
This very basic CLI based script can be used to automate covid vaccination slot booking on Co-WIN Platform.
- POC project. Use at your own risk.
- Do NOT use unless all beneficiaries selected are supposed to get the same vaccine and dose.
- No option to register new user or add beneficiaries. This can be used only after beneficiary has been added through the official app/site
- If you accidentally book a slot, don't worry. You can always login to the official portal and cancel that.
- API Details: https://apisetu.gov.in/public/marketplace/api/cowin/cowinapi-v2
- And finally, I know code quality probably isn't great. Suggestions are welcome.
For the anyone not familiar with Python and using Windows, using the covid-vaccine-slot-booking.exe
executable file would be the easiest way. It might trigger an anti-virus alert. That's because I used pyinstaller
to package the python code and it needs a bit more effort to avoid such alerts.
How to install Python
OR
Run the script file as show below:
python3 src\covid-vaccine-slot-booking.py
If you're on Linux, install the beep package before running the Python script. To install beep, run:
sudo apt-get install beep
If you already have a bearer token, you can also use:
python3 src\covid-vaccine-slot-booking.py --token=YOUR-TOKEN-HERE
tabulate
: For displaying data in tabular format.requests
: For making GET and POST requests to the API.inputimeout
: For creating an input with timeout.
-
After cloning, cd to the Folder.
-
Install Python (How to install Python)
-
Install all dependencies by running:
pip install -r requirements.txt
-
Run script:
python3 src\covid-vaccine-slot-booking.py
-
Select Beneficiaries. Read the important notes. You can select multiple beneficiaries by providing comma-separated index values such as
1,2
:Enter the registered mobile number: ██████████ Requesting OTP with mobile number ██████████.. Enter OTP: 999999 Validating OTP.. Token Generated: █████████████████████████████████████████████████████████████ Fetching registered beneficiaries.. +-------+----------------------------+---------------------------+------------+ | idx | beneficiary_reference_id | name | vaccine | +=======+============================+===========================+============+ | 1 | ██████████████ | █████████████████████████ | COVISHIELD | +-------+----------------------------+---------------------------+------------+ | 2 | ██████████████ | █████████████████ | | +-------+----------------------------+---------------------------+------------+ ################# IMPORTANT NOTES ################# # 1. While selecting beneficiaries, make sure that selected beneficiaries are all taking the same dose: either first OR second. # Please do no try to club together booking for first dose for one beneficiary and second dose for another beneficiary. # # 2. While selecting beneficiaries, also make sure that beneficiaries selected for second dose are all taking the same vaccine: COVISHIELD OR COVAXIN. # Please do no try to club together booking for beneficiary taking COVISHIELD with beneficiary taking COVAXIN. ################################################### Enter comma separated index numbers of beneficiaries to book for : 2
-
Ensure correct beneficiaries are getting selected:
Selected beneficiaries: +-------+----------------------------+-----------+ | idx | beneficiary_reference_id | vaccine | +=======+============================+===========+ | 1 | ██████████████ | | +-------+----------------------------+-----------+
-
Select a state
+-------+-----------------------------+ | idx | state | +=======+=============================+ | 1 | Andaman and Nicobar Islands | +-------+-----------------------------+ | 2 | Andhra Pradesh | +-------+-----------------------------+ +-------+-----------------------------+ +-------+-----------------------------+ | 35 | Uttar Pradesh | +-------+-----------------------------+ | 36 | Uttarakhand | +-------+-----------------------------+ | 37 | West Bengal | +-------+-----------------------------+
Enter State index: 18
-
Select districts you are interested in. Multiple districts can be selected by providing comma-separated index values
+-------+--------------------+ | idx | district | +=======+====================+ | 1 | Alappuzha | +-------+--------------------+ | 2 | Ernakulam | +-------+--------------------+ | 3 | Idukki | +-------+--------------------+ +-------+--------------------+ +-------+--------------------+ | 13 | Thrissur | +-------+--------------------+ | 14 | Wayanad | +-------+--------------------+
Enter comma separated index numbers of districts to monitor : 2,13
-
Ensure correct districts are getting selected.
Selected districts: +-------+---------------+-----------------+-----------------------+ | idx | district_id | district_name | district_alert_freq | +=======+===============+=================+=======================+ | 1 | 307 | Ernakulam | 660 | +-------+---------------+-----------------+-----------------------+ | 2 | 303 | Thrissur | 3080 | +-------+---------------+-----------------+-----------------------+
-
Enter the minimum number of slots to be available at the center:
Filter out centers with availability less than: 5
-
Script will now start to monitor slots in these districts every 15 seconds.
Note
: It will ask you monitor frequencyProTip
: Do not select less than 5 seconds it will bombard cowin server and will get your request blocked, create issues in OTP generation for your number. #85=================================================================================== Centers available in Ernakulam from 01-05-2021 as of 2021-04-30 15:13:44: 0 Centers available in Thrissur from 01-05-2021 as of 2021-04-30 15:13:44: 0 No viable options. Waiting for next update in 15s. =================================================================================== Centers available in Ernakulam from 01-05-2021 as of 2021-04-30 15:13:59: 0 Centers available in Thrissur from 01-05-2021 as of 2021-04-30 15:13:59: 0 No viable options. Waiting for next update in 15s.
-
If at any stage your token becomes invalid, the script will make a beep and prompt for
y
orn
. If you'd like to continue, providey
and proceed to allow using same mobile numberToken is INVALID. Try for a new Token? (y/n): y Try for OTP with mobile number ███████████? (y/n) : y Enter OTP: 888888
-
When a center with more than minimum number of slots is available, the script will make a beep sound - different frequency for different district. It will then display the available options as table:
=================================================================================== Centers available in Ernakulam from 01-05-2021 as of 2021-04-30 15:34:19: 1 Centers available in Thrissur from 01-05-2021 as of 2021-04-30 15:34:19: 0 +-------+----------------+------------+-------------+------------+------------------------------------------------------------------------------+ | idx | name | district | available | date | slots | +=======+================+============+=============+============+==============================================================================+ | 1 | Ayyampilly PHC | Ernakulam | 30 | 01-05-2021 | ['09:00AM-10:00AM', '10:00AM-11:00AM', '11:00AM-12:00PM', '12:00PM-02:00PM'] | +-------+----------------+------------+-------------+------------+------------------------------------------------------------------------------+ ----------> Wait 10 seconds for updated options OR ----------> Enter a choice e.g: 1.4 for (1st center 4th slot): 1.3
-
Before the next update, you'll have 10 seconds to provide a choice in the format
centerIndex.slotIndex
eg: The input1.4
will select the vaccination center in second row and its fourth slot.
How to run on windows
-
Step 1 - Download or clone this repo.
-
Step 2 - Go to folder tests then windows exe.zip. Unzip the folder and Now run the program "captcha_tests.exe". If you see a dialog box click on quit, and you will see a Captcha. If this is what happened you are all good to go.
-
Now come back to main folder unzip "windows exe.zip"go to this "windows exe" folder
Now start the program "covid-vaccine-slot-booking.exe", you will not see any error.
-
DO NOT DELETE ANY FOLDER OR FILE.
-
Problem 1
Can't setFont(Times-Roman) missing the T1 files? Originally <class 'TypeError'>: makeT1Font() argument 2 must be str, not None
Solution 1: Then run the python script directly in the src folder after installing the required modules from requirements.txt. That solved it for me
Solution 2: If you are running ubantu(tested) or winows , this problem is due to some font files from package (reportlab) which are included in arch linux but not on ubantu. Follow these steps to install reportlab correctly. It can be done after you have installed all the requirements rom txt file.
-
git clone https://github.com/Distrotech/reportlab.git
-
cd reportlab
-
python3 setup.py install
This will download all the font files.
Solution 3: Try to perform the test first in test folder for captcha first to see if this error still there.
Solution 4: (Recommended) Try to use this Linux executable " ./covid-vaccine-slot-booking-linux " file directly from terminal it does not require anything to install just like windows exe. Windows exe is under going testing
-
-
Problem 2
Regarding beep package - Device not found or beep not found
Solution : Follow these steps for ubantu
-
sudo apt-get install beep #insatll this once
-
sudo modeprobe pcspkr #This will solve Device not found error
-
Testing beep is simple just type
beep
on terminal this will beep a sound from speakers.
-
-
Problem 3
SMS is not read automatically
Solution: Check the mobile number you have entered in this step.
This number must match the number you enter while running the script.