Django library for creating skills for the Amazon Echo (Alexa)
django-echo is mainly composed of three classes:
echo.skill.EchoSkill
: A subclass of Django's generic.View that handles routing intents and dealing with request data.echo.request.EchoRequest
: A small wrapper around the JSON data in the request from Amazon.echo.response.EchoResponse
: A subclass of Django's http.HttpResponse that knows how to generate a valid Amazon Echo response.
A skill is a class that subclasses EchoSkill that provides intent handlers:
from echo.skill import EchoSkill class HoroscopeSkill(EchoSkill): def get_horoscope(self, request, sign): # Ignore the sign because astrology is bunk. return self.respond( "Today you need to act first and ask questions later!", card=None, should_end_session=True )
On the Amazon side you would setup an intent called GetHoroscope
that has
a sign
slot, and when that intent is called this get_horoscope
method
will be called with the slot data.
The self.respond
is a helper method that essentially just acts as a
pass-through to EchoResponse
. You can also use SSML directly and
EchoResponse will set the response up correctly:
self.respond("<speak>Today you need to ask questions first and act later!</speak>")
Then you just need to wire the skill up to your urls.py:
from django.conf.urls import url from .views import HoroscopeSkill urlpatterns = [ url( regex=r'^horoscope/$', view=HoroscopeSkill.as_view(), name='horoscope_skill' ) ]
EchoSkill provides a helper to create a simple card:
return self.respond( "What alexa should say", card=self.create_simple_card("The card title", "The card's content") )
EchoSkill sets self.request
to an instance of EchoRequest (it also saves
the http request to self.http_request
.) EchoRequest provides the session
attributes via a session
attribute:
sign = self.request.session.get('sign') request.session.update({ 'has_requested_horoscope': True })
If you use EchoSkill.respond
this session data will be automatically
attached to the response, otherwise you'll need to pass it when creating the
response:
return EchoResponse("Output text", session=self.request.session)