Amazon Alexa Http2 创建连接介绍
Alexa的语音服务(AVS)公开HTTP / 2端点和支持云启动指令,它允许您访问Alexa的内置功能,如定时器、报警器、媒体传输控制,语音控制音量调节,和亚马逊的Alexa的应用集成。
关键术语和概念
Frame:在HTTP/2协议的基本单元;每一个Frame都有不同的用途,例如标题和数据的Frame格式的HTTP请求和响应的基础。
流:一个独立的、双向的帧序列的一个客户端和服务器之间交换在一个HTTP / 2连接。
接口:AVS暴露接口(speechrecognizer,AudioPlayer,synchronizestate,等),提供您的产品使用Alexa的内置的技能。
Downchannel(下载通道):在你的HTTP / 2连接创建的一个流,它是用来传递指令从云端到你的客户。下载通道仍然开放,在半封闭的状态从设备和开放从AVS为连接的生命周期。下载通道主要是用来发送指令和音频附件云启动你的客户端。
注意:你的客户端每个连接只能创建一个下载通道流。
云启动指令:从云发送到客户端的指令。例如,当用户使用亚马逊Alexa的APP调整设备的音量,直接发送到你的产品不需要相应的语音请求。
先决条件
在创建一个与AVS的HTTP / 2连接,你需要:
获取访问令牌
使用AVS标准,您的产品需要获得亚马逊登录(LWA)访问令牌,使您的产品获得API代表客户。有用于获得与AVS使用访问令牌的两种方法。
远程授权用于授权使用同伴网站或移动应用程序的设备。
从同伴站点授权
从同伴应用程序授权
本地授权用于授权Alexa直接从AVS功能的产品。
从AVS授权产品
LWA访问令牌你获得必须发送到AVS在每个事件的标题。如果认证以任何理由,AVS连接关闭失败。
下面是一个示例头。除了你的访问令牌,一个边界条件是每个事件的头需送到AVS。
:method = POST
:scheme = https
:path = /{{API version}}/events
authorization = Bearer {{YOUR_ACCESS_TOKEN}}
content-type = multipart/form-data; boundary={{BOUNDARY_TERM_HERE}}
注:每个产品实例必须有一个唯一的deviceserialnumber,这是数据通过授权检测。
选择一个HTTP 2客户端库
下面的HTTP 2客户端库推荐使用AVS:
语言库:
C / C++ nghttp2
C / C++ curl and libcurl
Java OkHttp
Java Netty
Java Jetty
警告:如果使用libcurl,客户必须得到请求/平每5分钟保持连接。
Base URL
https://avs-alexa-na.amazon.com
创建一个HTTP / 2连接
它应该创建一个单一的http2 AVS连接。这个连接是用来处理所有的指令和事件,包括任何在下载通道流发送到你的客户。。
保持与AVS的连接需要两样东西:
下载通道流的建立
同步你的产品的组件状态与AVS(AudioPlayer,警报喇叭、SpeechSynthesizer)
建立一个下降通道流你的客户端必须得到请求(/{{API version}}/directives)在10秒内打开连接与AVS。请求应该这样:
:method = GET
:scheme = https
:path = /{{API version}}/directives
authorization = Bearer {{YOUR_ACCESS_TOKEN}}
一个成功的请求后,该下载通道流将在半敞开封闭状态从客户端开放AVS为连接的生命周期。这是不常见的云启动指令之间有很长的停顿。
在下载通道流的建立,客户必须同步它的组件的状态与AVS一致。这需要在现有连接上对新的事件流进行POST请求/{{API version}}/directives(注:不要打开新连接)。当客户端接收响应(指令)时,该事件流应该关闭。下面是一个例子synchronizestate事件:
:method = POST
:scheme = https
:path = /{{API version}}/events
authorization = Bearer {{YOUR_ACCESS_TOKEN}}
content-type = multipart/form-data; boundary={{BOUNDARY_TERM_HERE}}--{{BOUNDARY_TERM_HERE}}
Content-Disposition: form-data; name="metadata"
Content-Type: application/json; charset=UTF-8{"context": [{{Alerts.AlertsState}},{{AudioPlayer.PlaybackState}},{{Speaker.VolumeState}},{{SpeechSynthesizer.SpeechState}}],"event": {"header": {"namespace": "System","name": "SynchronizeState","messageId": "{{STRING}}"},"payload": {}}
}--{{BOUNDARY_TERM_HERE}}--
同步状态后,客户端应该能够使用此连接到:
发送事件和AVS接收指令
注意:每个事件及其相关响应都发送到单个事件流上。接收响应时,应关闭流,
在下载通道流接收云启动指令
保持一个HTTP / 2连接
一旦你已经建立了一个连接,重要的是要了解如何管理事件流,流的下降通道,ping,超时和服务器发起断开。
需要考虑的事情
我们鼓励流捕获音频AVS 10块320字节(320字节的数据帧发送单个单位)。大数据块的大小,造成不必要的缓冲,负面地影响了AVS的处理音频的能力,可能会导致更高的延迟。
所有捕获的音频发送到AVS编码应为:
16bit线性PCM(lpcm16)
16khz采样率
单通道
小端字节序
AVS的http2连接只支持10并发流。这包括事件流的下载通道,与ping。请确保响应接收时关闭事件流。
许多库有一个读超时,一个客户端将尝试读取多长时间而不接收任何数据。由于AVS需要下载通道流需要保持开放的AVS和你的客户之间的连接的生命周期,这流可以长时间不发送任何数据到你的客户,你的阅读超时设置为至少60分钟,这是很重要的。
如果你的http2客户池或标记连接的空闲连接,调整超时,连接不中断是很重要的(如果是中断完成流程描述创建一个连接,其中包括:重新确立下载通道流和同步状态,AVS)。我们建议将超时设置为至少60分钟,以确保您的连接不会过早关闭
事件流的生命周期
每一个新的事件被发送到自己的流。通常,这些流在Alexa的语音服务已返回指令和相应的音频附件到你的客户。
请求按顺序处理。因此,新的请求应该发送后,Alexa开始回应你的请求(之前的请求返回头)。
你的产品打开一个流并发送一个多部分消息由一个JSON格式的事件到一个二进制音频附件(0或1)。
AVS的回报多部分消息由一个JSON格式的指令和对应的音频附件在同流,可能在流是完整的。如下的CID URL属性:在Play or Speaker指令也将出现在相关的音频连接头。
下面的一个响应从AVS的事件流应该关闭。
注:为你的客户接收多个指令,它是可能的(JSON)在接收相应的音频附件。因此,您的客户端应该有必要的逻辑,以配合指令与相应的音频附件
下载通道的生命周期
并行,指令可能在下降通道发送给你的客户。主要的下降通道,用于云启动指令。
一个GET请求作出指示的路径在10秒内创造与AVS的连接。
这流是用来发送您的客户云启动指令和音频附件,如定时器、报警器、指示来自亚马逊的Alexa的APP。不像一个事件流的下降通道,不立即关闭,目的是在半封闭状态保持开放在客户端保持A长时间打开AVS。
当下降通道流关闭,您的客户必须立即建立你的客户能接受云发起指令新的下降通道
ping和超时
您的客户必须执行下列操作之一,没有这样做将导致一个封闭的连接:
空闲时每5分钟ping一次AVSFrame
当连接空闲时,每5分钟一次GET请求/ ping。
请求实例:
:method = GET
:scheme = https
:path = /ping
authorization = Bearer {{YOUR_ACCESS_TOKEN}}
在一个失败的ping应该关闭连接和一个新的连接应该立即创建。
警告:如果使用libcurl,客户必须得到请求/平每5分钟保持连接
服务器启动断开
当服务器启动断开连接时,客户端应:
打开一个新的连接,并通过它路由任何新的请求。
在打开所有请求后,关闭旧连接,相应的流已被关闭。
与断开连接之前建立的任何流URL保持连接(例如亚马逊音乐、音频等)。在服务器启动断开之前发生的流应继续播放,只要字节可用。
如果尝试创建新连接失败,则客户端将重试以指数回退。
Amazon Alexa Http2 创建连接介绍相关推荐
- au回声_回声按钮如何将Amazon Alexa技能提升到新水平
au回声 by Terren Peterson 由Terren Peterson 回声按钮如何将Amazon Alexa技能提升到新水平 (How Echo Buttons take Amazon A ...
- 使用模版自动化 Amazon IoT 设备创建及证书注册过程
背景介绍 利用即时注册(JITR)功能,可以快速的进行设备证书注册及设备上线.但是配置相关 Amazon Lambda 函数的方式相对复杂.使用本文介绍的即时部署(JITP)功能,可以简化 Amazo ...
- LVS负载均衡之持久性连接介绍(session篇)
在实际生产环境中,往往需要根据业务应用场景来设置lvs的会话超时时间以及防session连接丢失的问题提,如在业务支付环节,如若session丢失会导致重复扣款问题,严重影响到安全性,本小节解将会讲到 ...
- 【智能语音】ROC-RK3308-CC Amazon Alexa固件发布
ROC-RK3308-CC已支持Amazon Alexa语音服务,在Firefly 维基教程可下载ROC-RK3308-CC Alexa固件. 维基教程详细介绍了授权.配网.使用流程.编译方法等内容: ...
- amazon alexa_在Amazon Alexa上推出freeCodeCamp编码琐事测验
amazon alexa Now you can learn coding concepts hands-free using an Amazon Echo. 现在,您可以使用Amazon Echo免 ...
- 使用 Amazon Amplify快速创建简单的 Android 应用程序
背景: 亚马逊云科技提供了100余种产品免费套餐.其中,计算资源Amazon EC2首年12个月免费,750小时/月:存储资源 Amazon S3 首年12个月免费,5GB标准存储容量. 大家好,我是 ...
- 亚马逊echo中国使用_我如何编程我的第一个Amazon Alexa技能并赢得了免费的Echo Dot...
亚马逊echo中国使用 by Lorrie Pearson 洛里·皮尔森(Lorrie Pearson) 我如何编程我的第一个Amazon Alexa技能并赢得了免费的Echo Dot (How I ...
- SRS流媒体服务器——RTMP推流、拉流创建连接
SRS流媒体服务器--RTMP推流.拉流创建连接 目录 识别客户端,然后获取或者创建SrsLiveSource 启动推流 启动拉流 SRS安装部署相关内容: SRS流媒体服务器--单机环境搭建和源码目 ...
- python调用libs.dbutil_Python 使用 PyMysql、DBUtils 创建连接池,提升性能
Python 编程中可以使用 PyMysql 进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接 MySQL 数据库请求时,都是独立的去请求访问,相当浪费资源,而且访问数量达到一定数量时,对 ...
最新文章
- linux:scp从入门到刚入门
- 【HDU 5184】 Brackets (卡特兰数)
- mysql show schema_快速入门 · xiaoboluo768/mysql-system-schema Wiki · GitHub
- Android自定义View实现滴滴验证码输入框效果
- 玩转mini2440开发板之【在64位WIN7/WIN10系统中安装USB驱动】
- myclipes 配置php,myclipse使用技巧
- mysql 动态sql 解析json数据_在SQL 中生成JSON数据
- 【JEECG技术文档】JEECG online 表单填值规则使用说明
- 创建react应用程序_如何将React应用程序部署到Netlify
- php core模块,module.php
- c语言中如何让鼠标在一个窗口之外不能点击_Excel系列教程:如何自动填充单元格...
- Java aio(异步网络IO)初探
- Anaconda, conda, pyenv, virtualenv的区别
- 【渝粤题库】陕西师范大学210009幼儿园健康教育作业(高起专)
- redismemcachedSQLNoSQL
- Android相对布局
- 【Python框架】Scrapy简单入门及实例讲解
- 我学炒外汇 第二十二篇实战心得
- 西直门立交桥的破事儿
- qnap raid5升级raid6_实践出真知!100TB的RAID5到底能否重建成功?