Django的Amazon Alexa技能包集成

django-alexa的Python项目详细描述


Current VersionBuild Statushttps://coveralls.io/repos/github/pycontribs/django-alexa/badge.svg?branch=masterRequirements StatusVulnerbilities StatusCode Style: black

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
字典java cassandra对象映射注释   java定制Solr TokenFilter lemmatizer   字符串从Java文件中读取windows文件名   java如何在Windows上设置StanfordCorenlp服务器以返回文本   java axis2“意外的子元素值”   java使用POI HSSF获取错误   多线程Java等待计时器线程完成   java ForkJoinPool BuffereImage处理风格   从java代码运行Python脚本   java将字节[]转换为短[],使每个短元素包含13位数据   java如何为swing jframe应用程序将代码划分为类   java使用okhttp更改baseurl   java AlertDialog。建设者setView导致堆栈溢出错误   java如何在特定的radius 安卓 studio中接收地址列表?