├── .gitignore ├── README.md ├── djtwilio ├── __init__.py ├── settings.py ├── urls.py ├── views.py └── wsgi.py ├── manage.py └── requirements.txt /.gitignore: -------------------------------------------------------------------------------- 1 | db.sqlite3 2 | *.pyc -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Twilio & Django part 2 3 | 4 | This is a simple Django application demonstrating how to integrate IVR telephony systems into your Django projects. 5 | 6 | ## How to use 7 | 8 | 1. Download this repository 9 | 10 | 2. Install the requirements with pip: 11 | 12 | ``` 13 | $ pip install -r requirements.txt 14 | ``` 15 | 16 | This will install: 17 | 18 | * Django 19 | * django-twilio 20 | 21 | 3. Open the urls.py to see how the URL configuration has been done 22 | 23 | 24 | 4. Open the views.py to see how the views are set up. 25 | 26 | 5. Get the server running with: 27 | 28 | ``` 29 | $ python manage.py runserver 30 | ``` 31 | 32 | 6. Read the blog post on how to get started 33 | 34 | [1]: https://github.com/rdegges/django-twilio 35 | [2]: https://www.twilio.com/docs/api/twiml 36 | -------------------------------------------------------------------------------- /djtwilio/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/phalt/twilio-django-part-2/60f8d1b069e59e5207304022a2ce318f777bb6ec/djtwilio/__init__.py -------------------------------------------------------------------------------- /djtwilio/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for djtwilio project. 3 | 4 | For more information on this file, see 5 | https://docs.djangoproject.com/en/1.6/topics/settings/ 6 | 7 | For the full list of settings and their values, see 8 | https://docs.djangoproject.com/en/1.6/ref/settings/ 9 | """ 10 | 11 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 12 | import os 13 | BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 14 | 15 | TWILIO_FORGERY_PROTECTION=False 16 | 17 | # Quick-start development settings - unsuitable for production 18 | # See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/ 19 | 20 | # SECURITY WARNING: keep the secret key used in production secret! 21 | SECRET_KEY = 'jd!*6bnfld1k4fr4l5w;ds-w252-7d!@+)r)y5t5b5%(vw^qo15$+pl-' 22 | 23 | # SECURITY WARNING: don't run with debug turned on in production! 24 | DEBUG = True 25 | 26 | TEMPLATE_DEBUG = True 27 | 28 | ALLOWED_HOSTS = [] 29 | 30 | INSTALLED_APPS = ( 31 | 'django.contrib.admin', 32 | 'django.contrib.auth', 33 | 'django.contrib.contenttypes', 34 | 'django.contrib.sessions', 35 | 'django.contrib.messages', 36 | 'django.contrib.staticfiles', 37 | 'django_twilio', 38 | 'south' 39 | ) 40 | 41 | TWILIO_ACCOUNT_SID = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' 42 | TWILIO_AUTH_TOKEN = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY' 43 | 44 | MIDDLEWARE_CLASSES = ( 45 | 'django.contrib.sessions.middleware.SessionMiddleware', 46 | 'django.middleware.common.CommonMiddleware', 47 | 'django.middleware.csrf.CsrfViewMiddleware', 48 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 49 | 'django.contrib.messages.middleware.MessageMiddleware', 50 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 51 | ) 52 | 53 | ROOT_URLCONF = 'djtwilio.urls' 54 | 55 | WSGI_APPLICATION = 'djtwilio.wsgi.application' 56 | 57 | # Database 58 | # https://docs.djangoproject.com/en/1.6/ref/settings/#databases 59 | 60 | DATABASES = { 61 | 'default': { 62 | 'ENGINE': 'django.db.backends.sqlite3', 63 | 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 64 | } 65 | } 66 | 67 | LANGUAGE_CODE = 'en-us' 68 | 69 | TIME_ZONE = 'UTC' 70 | 71 | USE_I18N = True 72 | 73 | USE_L10N = True 74 | 75 | USE_TZ = True 76 | 77 | STATIC_URL = '/static/' 78 | -------------------------------------------------------------------------------- /djtwilio/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import patterns, include, url 2 | 3 | from django.contrib import admin 4 | admin.autodiscover() 5 | 6 | urlpatterns = patterns('', 7 | url(r'^admin/', include(admin.site.urls)), 8 | # Here we add our Twilio URLs 9 | url(r'^gather/$', 'djtwilio.views.gather_digits'), 10 | url(r'^respond/$', 'djtwilio.views.handle_response'), 11 | ) 12 | -------------------------------------------------------------------------------- /djtwilio/views.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from django_twilio.decorators import twilio_view 3 | from twilio.twiml import Response 4 | 5 | 6 | @twilio_view 7 | def gather_digits(request): 8 | 9 | msg = 'Press one to hear a song, two to receive an SMS.' 10 | 11 | twilio_response = Response() 12 | with twilio_response.gather(action='/respond/', numDigits=1) as g: 13 | g.say(msg) 14 | g.pause(length=1) 15 | g.say(msg) 16 | 17 | return twilio_response 18 | 19 | 20 | @twilio_view 21 | def handle_response(request): 22 | 23 | digits = request.POST.get('Digits', '') 24 | 25 | twilio_response = Response() 26 | 27 | if digits == '1': 28 | twilio_response.play('http://bit.ly/phaltsw') 29 | 30 | if digits == '2': 31 | number = request.POST.get('From', '') 32 | twilio_response.say('A text message is on its way') 33 | twilio_response.sms('You looking lovely today!', to=number) 34 | 35 | return twilio_response 36 | -------------------------------------------------------------------------------- /djtwilio/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for django1 project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djtwilio.settings") 12 | 13 | from django.core.wsgi import get_wsgi_application 14 | application = get_wsgi_application() 15 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djtwilio.settings") 7 | 8 | from django.core.management import execute_from_command_line 9 | 10 | execute_from_command_line(sys.argv) 11 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | django>=1.6.2 2 | django-twilio>=0.4.0 3 | South 4 | --------------------------------------------------------------------------------