Django的Amazon Alexa技能包集成
django-alexa的Python项目详细描述
Django的Amazon Alexa技能包集成
django alexa框架利用django rest框架包来支持 alexa skills需要使用的rest api,但是为了达到目的而将bolierplate包装起来 路由和响应创建,您需要自己编写。
把你解放出来,写下你的亚历克斯意图和言论。
快速启动
不耐烦吗?我喜欢你的风格。
$ pip install django-alexa
在django settings.py中添加以下内容:
INSTALLED_APPS=['django_alexa','rest_framework',# don't forget to add this too...]
在django url.py中添加以下内容:
urlpatterns=[url(r'^',include('django_alexa.urls')),...]
您的django应用程序现在将在/alexa/ask/有一个新的rest api端点。 它将处理所有传入的请求并将它们路由到定义的意图 在任何“alexa.py”文件中。
设置环境变量以配置验证需要:
ALEXA_APP_ID_DEFAULT="Your Amazon Alexa App ID DEFAULT"ALEXA_APP_ID_OTHER="Your Amazon Alexa App ID OTHER"# for each app ALEXA_REQUEST_VERIFICATON=True # Enables/Disable request verification
你可以通过一个应用程序名来组织你的意图,从而为多种Alexa技能服务。 有关详细信息,请参见intent decorator的“app”参数。
如果将django项目设置为debug=true,django alexa也将执行一些操作 在接收请求期间对您有帮助的调试,例如捕获所有异常 在Alexa Phone应用程序中返回stackTrace和error类型。
django alexa还配置为记录有用的信息,例如请求体, 请求头、验证和响应数据,这都是配置好的 通过使用记录器“django alexa”的标准python日志记录设置
在你的django项目中创建一个alexa.py文件。 这个文件是你定义所有亚历克斯意图和言论的地方。 每个意图都必须返回一个有效的alexa响应字典。为了帮助我们 django alexa api提供了一个名为responsebuilder的助手类。 这个类有一个函数来加速为响应构建这些字典。
详情或标题摘要请参阅课程文件 到https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/alexa-skills-kit-interface-reference 并查看有关正确Alexa响应的更详细文档
示例:
fromdjango_alexa.apiimportfields,intent,ResponseBuilderHOUSES=("gryffindor","hufflepuff","ravenclaw","slytherin")@intentdefLaunchRequest(session):""" Hogwarts is a go --- launch start run begin open """returnResponseBuilder.create_response(message="Welcome to Hog warts school of witchcraft and wizardry!",reprompt="What house would you like to give points to?",end_session=False,launched=True)classPointsForHouseSlots(fields.AmazonSlots):house=fields.AmazonCustom(label="HOUSE_LIST",choices=HOUSES)points=fields.AmazonNumber()@intent(slots=PointsForHouseSlots)defAddPointsToHouse(session,house,points):""" Direct response to add points to a house --- {points} {house} {points} points {house} add {points} points to {house} give {points} points to {house} """kwargs={}kwargs['message']="{0} points added to house {1}.".format(points,house)ifsession.get('launched'):kwargs['reprompt']="What house would you like to give points to?"kwargs['end_session']=Falsekwargs['launched']=session['launched']returnResponseBuilder.create_response(**kwargs)
django alexa框架还提供了两个django管理命令 将通过检查代码为您构建意图和话语模式。 django alexa框架还定义了一些最佳实践意图来帮助 让你跑得更快,但你可以轻松地超越它们, 如上面的定制启动请求所示。
>>> python manage.py alexa_intents {"intents": [{"intent": "StopIntent", "slots": []}, {"intent": "PointsForHouse", "slots": [{"name": "points", "type": "AMAZON.NUMBER"}, {"name": "house", "type": "HOUSE_LIST"}]}, {"intent": "HelpIntent", "slots": []}, {"intent": "LaunchRequest", "slots": []}, {"intent": "SessionEndedRequest", "slots": []}, {"intent": "UnforgivableCurses", "slots": []}, {"intent": "CancelIntent", "slots": []}]}
>>> python manage.py alexa_utterances StopIntent stop StopIntent end HelpIntent help HelpIntent info HelpIntent information LaunchRequest launch LaunchRequest start LaunchRequest run LaunchRequest begin LaunchRequest open PointsForHouse {points}{house} PointsForHouse {points} points {house} PointsForHouse add {points} points to {house} PointsForHouse give {points} points to {house} SessionEndedRequest quit SessionEndedRequest nevermind CancelIntent cancel
>>> python manage.py alexa_custom_slots HOUSE_LIST: gryffindor hufflepuff ravenclaw slytherin
此外,还提供了按应用程序名称分组的方便打印功能
>>> python manage.py alexa ... All of the above data output ...
语句可以添加到函数的docstring中,将它们与 将它们放在“-”之后的常规docstring。
“-”后面的每一行将作为一个语句添加。
在定义带有变量的语句时,请确保 任何语句中的变量都定义为槽中的字段 为了这个目的。
当这些管理命令运行时,django alexa框架将抛出错误 如果事情看起来不合适或不正确。
贡献
- 主枝应该是稳定的。我通常在个人部门处理不稳定的事情。
- 分叉主分支(https://github.com/pycontribs/django-alexa/fork)
- 创建分支(git checkout-b my branch)
- 通过pipenv install安装所需的依赖项
- 通过pytest或tox运行单元测试
- 运行tox,将运行black(用于格式化代码),flake8用于linting和pytests
- 提交更改(git commit-am'added fixes for something')
- 推到分支(git push origin my branch)
- 如果要合并来自主分支的代码,可以如下设置上游: git remote add upstream https://github.com/pycontribs/django alexa.git
- 创建新的拉取请求(travis ci将测试您的更改)
- 你完了!
- 功能,错误修复,BU感谢所有的报告和新的文件!
- 请参阅github问题页面,了解可以解决的突出问题。
学分:Kyle Rockman 2016