Vaccine Watch
Bot to notify when vaccine appointments are available.
Supports checking Hy-Vee, Walgreens, CVS, Walmart, Cosentino's stores (KC), and Ball's stores (KC). Supports sending notifications to Slack, Discord, Microsoft Teams, Twilio, and Twitter.
Notifications are sent when a location has appointments. No more notifications are sent for that location until it becomes unavailable again.
PRs welcome to support other clinics or notification methods.
This project has no affiliation with any of the clinics mentioned.
Walmart and Walgreens data courtesy of covid-vaccine-spotter.
Example
Slack
Setup
- Install docker
- Run
cp .env.template .env
- Fill in the variables in
.env
docker-compose up --build
Slack
- While logged into your slack account, go to https://api.slack.com/apps/
- Click
Create New App
- Choose a name and workspace
- Click
Permissions
, andAdd an OAuth Scope
- Add
chat:write:public
andchat:write
- At the top, click
Install to Workspace
- Copy your OAuth Token to use as
SLACK_BOT_TOKEN
Discord
- Click the cog on the channel you want to add the notifications to and select
Edit Channel
- Select the
Integrations
tab and clickCreate Webhook
- Enter a
Name
andChannel
you want the webhook to notify and copy the Webhook URL.
Microsoft Teams
- In the channel where you want to add the incoming webhook, click ... and then Connectors.
- Search for Incoming Webhook and click Add.
- Give the webhook a name (e.g. Vaccine Watch).
- Click Create.
- A unique webhook URL will be provided for the channel.
- Apply for a Twitter Developer account
- Once you have the account, go to the Developer Portal
- Create a project and an app for your bot
- Add
Read & Write
permissions to your app - In
Keys & Tokens
, generate Consumer Keys and Access Token/Secret to use as environment variables
Twilio
- Sign up for a Twilio account
- Once you have the account, go to the Console Dashboard of your Twilio account console
- Navigate to the
Phone Numbers
page in your Twilio account console, then clickGetting Started
- Select
Get your first Twilio phone number
and follow the prompts to procure a Twilio phone number - Verify any recipient phone numbers you will be notifying under
Phone Numbers
then Verified Caller IDs (only required for a trial account) - Copy your Twilio Account SID, Auth Token, Twilio phone number, and verified phone numbers to your
.env
file
Lint
- Install pre-commit
pre-commit install
Lint is run as a pre-commit, or on-demand with pre-commit run --all-files
Deployment Instructions
Required Environment Variables:
REDIS_URL
: A redis serviceVACCINE_CHECK_INTERVAL
: How often (in seconds) to checkRADIUS
: Within how many miles to check- CVS has a maximum of 25, vaccine-watch will use 25 for CVS if you set this higher.
LATITUDE
: Latitude of the location to check (e.g.39.1040382
)LONGITUDE
: Latitude of the location to check (e.g.-94.5701803
)STATES
: JSON: Abbreviations of which states are in radius of your location (e.g.["MO", "KS"]
)
Optional Environment Variables:
REQUEST_TIMEOUT
: How long to wait, in seconds, for a response to begin before timing out (optional, defaults to 5 seconds)ENABLE_HYVEE
: If you want to check Hy-Vee pharmaciesENABLE_WALGREENS
: If you want to check Walgreens pharmaciesENABLE_WALMART
: If you want to check Walmart pharmaciesENABLE_COSENTINOS
: If you want to check stores in the Cosentino's family (Kansas City only)ENABLE_BALLS
: If you want to check stores in the Ball's family (Kansas City only)- CVS:
ENABLE_CVS
: If you want to check CVS pharmaciesCVS_ALLOW_LIST
: JSON of states and cities to be notified for.- example:
{"MO": ["SAINT LOUIS"], "KS": []}
- example:
CVS_BLOCK_LIST
: (optional): JSON of states and cities to not be warned about new city for.- example:
{"MO": ["SAINT LOUIS"], "KS": []}
- example:
- Any city that CVS returns for the state(s) in
STATES
that are not listed in either the allow or block list will cause a warning message to be logged. Then it may be added to the allow or block list depending on if you wish to have the locations in that city checked or not checked.
- Slack:
SLACK_BOT_TOKEN
: Token for your slack integrationSLACK_TAG_CHANNEL
: If the channel should be tagged when appointments are availableSLACK_CHANNEL
: Channel for the bot to post in (e.g.#vaccine-watch
)
- Discord:
DISCORD_WEBHOOK_URL
: Discord webhook url for channel.- example:
https://discordapp.com/api/webhooks/1234567890/abc123
- example:
- Microsoft Teams:
TEAMS_WEBHOOK_URL
: Teams webhook url for channel.- example:
https://company.webhook.office.com/webhookb2/abc123@def456/IncomingWebhook/aaa111/bbb222
- example:
- Twilio:
TWILIO_ACCOUNT_SID
: Account SID for your twilio accountTWILIO_AUTH_TOKEN
: Auth token for your twilio accountTWILIO_FROM_NUMBER
: Twilio phone number with SMS functionality in[+][country code][phone number including area code]
formatTWILIO_TO_NUMBERS
: Phone numbers to notify as an array of the following format[+][country code][phone number including area code]
- example:
["+15551234567", "+15552345678"]
- example:
- Twitter:
TWITTER_CONSUMER_KEY
,TWITTER_CONSUMER_SECRET
,TWITTER_ACCESS_TOKEN_KEY
,TWITTER_ACCESS_TOKEN_SECRET
TIMEZONE
: Timezone of your location (defaults to'US/Central'
)CACHE_PREFIX
: If you want to run multiple copies of vaccine-watch, all sharing the same Redis database, you will want to give each instance a different CACHE_PREFIX.
Docker
You can build a docker image with the Dockerfile, and run it with a redis server.
Heroku
You can create an app in heroku, add a free redis plan, and push the source. Configure the dynos to enable clock
.