An easy-to-use repo to kickstart your Twilio app using Flask and deploy onto Heroku. Easy to clone, easy to tweak, easy to deploy.
Deploy this hackpack to Heroku now!
Look at all these crazy features!
python configure.py --account_sid ACxxxx --auth_token yyyyyand the hackpack configures Twilio and Heroku for you.
This hackpack ships with two ready-to-go endpoints for your Twilio Voice and SMS apps. The two routes /voice and /sms contain two examples you can modify easily.
To start tweaking your hackpack, just edit
For example, here is a quick Twilio Voice app that plays some Ramones.
@app.route('/voice', methods=['POST']) def voice(): response = twiml.Response() response.play("http://example.com/music/ramones.mp3") return str(response)
SMS apps are similarly easy.
@app.route('/sms', methods=['POST']) def sms(): response = twiml.Response() response.sms("The Ramones are great!") return str(response)
These apps can get interactive pretty quickly. For example, let's make an SMS app that responds with "Best band ever" when you text RAMONES.
@app.route('/sms', methods=['POST']) def sms(): response = twiml.Response() body = request.form['Body'] if "RAMONES" in body: response.sms("Best band ever.") else: response.sms("Not the best band ever.") return str(response)
You can apply this same concept to Gathering user input on Twilio Voice. Here we will Gather the user input with one route and then handle the user input with another.
@app.route('/voice', methods=['POST']) def voice(): response = twiml.Response() with response.gather(numDigits=1, action="/gather") as gather: gather.say("Press 1 to indicate The Ramones are the best band ever.") return str(response) @app.route('/gather', methods=['POST']) def gather(): response = twiml.Response() digits = request.form['Digits'] if digits == "1": response.say("You are correct. The Ramones are the best.") else: response.say("You are wrong. Never call me again.") return str(response)
Step-by-step on how to deploy, configure and develop on this hackpack.
Use Heroku to deploy this hackpack immediately:
git clone git://github.com/RobSpectre/Twilio-Hackpack-for-Heroku-and-Flask.git
git push heroku master
heroku scale web=1
Want to use the built-in Twilio Client template? Configure your hackpack with three easy options.
This hackpack ships with an auto-configure script that will create a new TwiML app, purchase a new phone number, and set your Heroku app's environment variables to use your new settings. Here's a quick step-by-step:
python configure.py --account_sid ACxxxxxx --auth_token yyyyyyy
export TWILIO_ACCOUNT_SID=ACxxxxxx export TWILIO_AUTH_TOKEN=yyyyyyyyy export TWILIO_APP_SID=APzzzzzzzzzz export TWILIO_CALLER_ID=+15556667777
Automagic configuration comes with a number of features.
python configure.py --help to see them all.
local_settings.py is a file available in the hackpack route for you to configure your twilio account credentials manually. Be sure not to expose your Twilio account to a public repo though.
ACCOUNT_SID = "ACxxxxxxxxxxxxx" AUTH_TOKEN = "yyyyyyyyyyyyyyyy" TWILIO_APP_SID = "APzzzzzzzzz" TWILIO_CALLER_ID = "+17778889999"
The configurator will automatically use your environment variables if you already have a TwiML app and phone number you would prefer to use. When these environment variables are present, it will configure the Twilio and Heroku apps all to use the hackpack.
export TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxx export TWILIO_AUTH_TOKEN=yyyyyyyyyyyyyyyyy export TWILIO_APP_SID=APzzzzzzzzzzzzzzzzzz export TWILIO_CALLER_ID=+15556667777
Getting your local environment setup to work with this hackpack is similarly easy. After you configure your hackpack with the steps above, use this guide to get going locally:
Open browser to http://localhost:5000.
Tweak away on
This hackpack comes with a full testing suite ready for nose.
It also ships with an easy-to-use base class for testing your TwiML. For example, testing a basic SMS response is only two lines of code:
import test_twilio class ExampleTest(test_twilio.TwiMLTest): response = self.sms("Test") self.assertTwiML(response)
You can also test your Gather verbs for voice apps very easily.
import test_twilio class ExampleTest(test_twilio.TwiMLTest): response = self.call(digits="1") self.assertTwiML(response)
Two configurations are available in different branches:
git checkout production git push heroku production:master
Here we recognize crack members of the Twilio community who worked on this hackpack.