I created this voter registration tool in 2018 as a proof-of-concept for what it would look like to dramatically simplify the process of checking if you were registered to vote.
In short, it worked! This DialogFlow application reduced the number of steps down to:
- First name
- Last name
- Address
- Birth date
It works via voice or text inputs, and can be initiated using Google Assistant. It should be easy to add Alexa, Cortana, SMS, messenger, etc. using Dialogflow integrations, but sadly not Siri.
It leverages the Vote.org verify tool (by using the headless chrome Puppeteer library) in order to perform the registration itself, though this ideally would be done via some more official API.
Some important considerations:
- This was created pretty quickly, and as such is pretty crufty from an engineering perspective - it'd need a fair bit more work (e.g. testing, CI, refactoring, etc.) to be viable in a real-world setting.
- I bet that it'd be harder to make the voice piece work well across a broad swath of names, addresses, accents, etc. It'll be important to ensure that if this were to move forward, that it'd work across a wide swath of user populations. The good news is that by working via text message, that goes a long way towards that goal!
- Although Google's Dialogflow technology is quite impressive, and I'm excited by the future of voice inputs, I've grown more and more reluctant to trust "big tech" in this sort of critical role. Future versions of this should look into alternative tools.
Once everything is set up:
- Open up Google Assistant
- Say / type "Talk to Lazy Voter"
- Follow the prompts
Given the number of dependencies (see below), the set of directions to truly get this running is a fair bit longer than I have time to dig in on right now. I'd be happy to do so if there was more interest. The good news is that once the dependencies are in place, it's quite simple to run in dev:
git clone
npm install
- Type some stuff in Dialogflow
- Google Dialogflow for handling voice/text conversational UI
- Google Cloud Functions for production deployment
- Serverless framework for GCF lifecycle
- Google Maps Geocoder API for handling address parsing
- Puppeteer for filling in Voter.org web form via headless browser
- Browserless for running the Puppeteer browser in production
- Can we get things like name / address / etc. via some api from the phone (or another authentication approach)? Even better to leverage something like Login.gov!
- How do you enable a continous delivery environment with the various dependencies above?
- Can Puppeteer be run performantly directly in GCF vs. using Browserless (see this issue)?
- Can we get access to an api for voter registration check vs. using web form to do so?
- Do we need an email address for voter registration? If so, how best to ask for that via voice? (Right now, I'm faking it...)