Most non-profit organizations use multi-pronged approaches to delivering on their vision. A common theme I discovered was that most non-profits would advise their supporters to reach out to their local member of congress to express their concerns about a particular social issue. This would enable the member of congress to get a clearer idea of the issues that are impacting their constituency and may inspire them to research and reflect on the matter further. I have built an Alexa Skill which provides a conduit for this type of information to flow into a publicly available ranking of concerns for a given US congressional district.

What it does

Imagine that you have just seen an alarming news report of homeless rates in your area... so you pipe up and say, "Alexa, tell my member of congress that I'm concerned about homelessness!". Alexa will confirm she heard correctly and then post an anonymous concern about 'homelessness' to where an aggregated ranking of concerns is displayed for each congressional district. Members of congress can access this page directly or get a JSON formatted data feed of the concerns via an API (e.g.

I think this is a powerful use case for Alexa as she is usually only a few feet away from the TV, which is a trigger for many of our social concerns.

How I built it

The skill was built in AWS Lambda, the website is hosted on AWS CloudFront / S3, concerns are stored in S3 and the concern data is delivered via AWS API Gateway. The customer's state and congressional district is saved to S3 upon initial setup.

Challenges I ran into

Finding the right balance of convenience, effectiveness and privacy was the hardest part about this project. I had the idea for quite a while but most of the solutions I conjured up involved having to work with potentially sensitive or unwanted data in my back-end. I also wanted to create a level playing field for the concerns however using account linking would be a barrier to customers and any other controls set on the customer's anonymous user ID can be beaten by simply disabling and re-enabling the skill. To overcome this, I went with an generic concern model so each generic concern only gets one row on the web-page with a 'count' column. This gives everyone a voice and it is up to the member of congress reading the results to decide on the importance of the 'quantity of concerns'.

Accomplishments that I'm proud of

The VUI is really smooth, the invocation name works really well and rolls off the tongue. I'm also glad I kept it simple and focused on delivering generalized data rather than individual messages. A project like this could have easily become overly complex and unmanageable.

What I learned

Being an Australian, I learnt a lot about the US political system. I also learned a lot about the non-profit advocacy work being done and the importance of using well-directed freedom of speech to shape social policy.

What's next for Tell my Member of Congress

I'll probably add an intent to the Skill which summerizes the top concerns in a customer's area (i.e. "Alexa, what are the concerns in my area?"). This feature would be more useful once there is more data in the system.

Also, I think there is a lot of potential for Alexa to play a role in citizen to congress communication to assist in the formulation of socially beneficial policy. So I guess I'm touching on something big here, which is probably best managed at a more suitable level of jurisdiction. But for now I'm happy to have provided an initial use case.

Built With

Share this project: