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 Android首选项相同getPreference()值的不同数据   字符串如何在Java中连接两个列表中的单词   安卓 Java Socket编程:检测客户端和服务器是否连接   使用JTextField的java无法将值转换为int   在java中,如何在不通过超级构造函数设置的情况下将消息设置为自定义异常类   用于标识属性值的java正则表达式模式   Android中的java不可见谷歌地图   java正确取消启动ExecutorService的JavaFX任务   在非活动java类中使用安卓的融合位置提供程序,并在主活动类中获取经度和纬度   spring为什么我的大摇大摆不能用springboot在java中工作?   java JSF(2.2)ViewScope在Weblogic 12.2.1.2和JDK 8上使用Spring 4.3.7(在Mac OS和Docker Oracle Linux环境上)   java如何用一个按钮提高计时器速度   java如何检查字符是否是元音?   注册表引用了不存在的Java运行时环境安装或运行时已损坏错误   来自ResultSet java的mysql getDateTime   maven LanguageTool Java API是否具有“无用”依赖关系?   twitter api身份验证的java Trycatch问题   java在Apache Struts 1.1中是否可以显式白名单?   安卓致命异常:主java。lang.RuntimeException:被问及未知片段