小雅OS开放平台文档

小雅OS开放平台文档

  • 快速入门
  • 客户端接入
  • 服务端接入

›API

概述

  • 服务端接入
  • 数据回传

API

  • WebSocket 协议定义
  • HTTP 协议定义
  • 调用样例
  • API 列表
  • 技能内调用
  • 错误码

API 列表

API索引

系统API

域名调用 https://api.xiaoyastar.com
接口名Method描述
/serv/account/os-access-tokenGET获取osAccessToken
/serv/userPOST注册小雅OS用户
/serv/query-timesPOST多渠道接入合作方,上报小雅OS请求次数及占比数据
/serv/unbindPOST根据ptfId解绑三方平台账号,仅限技能登录账号

语音接入层API

域名调用
WebSocket协议: ws://xvs.xiaoyastar.com 
Http协议:      https://api.xiaoyastar.com
接口名协议Method描述
/ws/serv/stream-asrWebSocket语音接入ASR和NLU
/serv/voice/text2audioHTTPGET通过文字获取语音(TTS)

技能类API

域名调用:https://api.xiaoyastar.com
接口名Method描述
/serv/text/queryGET根据文本获取NLU及SKILL结果
/serv/intent/invokeGET根据指定意图获取SKILL结果

API详情

系统API

获取osAccessToken

在访问小雅OS接口时,需要首先获得osAccessToken,作为鉴权凭证。

注意事项

1. 此接口在开放平台需要配置IP地址白名单才可以访问(暂时小雅OS技术支持辅助配置)。

2. 多次调用接口可以获得多个有效osAccessToken,每个有独立的过期时间。

3. 在多机部署时,请提供唯一的内部服务来管理osAccessToken。

4. 请不要频繁请求此接口,小雅OS仅保留最后5个osAccessToken,申请过多,会造成前面的申请的失效。

接口定义:
METHOD: GET
URL: /serv/account/os-access-token
请求参数
字段类型必填说明
productIdString是产品 ID,开放平台分配
osServerSecretString是对接密钥
返回值
字段类型说明
osAccessTokenString获取到的访问令牌
osExpiresInInteger凭证有效时间,单位:秒,目前为 7200 秒
示例:
$ curl https://api.xiaoyastar.com/serv/account/os-access-token?productId=xxx&osServerSecret=xxx

注册用户

小雅OS的部分接口,例如:/serv/text/query,使用osOpenId作为小雅OS用户标识。

接口定义:
METHOD: POST
URL: /serv/user
请求参数
字段类型必填说明
osAccessTokenString是公共参数
ptfIdString是用户体系 ID,目前由小雅OS开发人员生成
openIdString否开发者用户 ID,开启同时登录技能选项时会在技能访问时使用
userIdLong否开发者用户ID
nameString否开发者用户真实姓名
mobileString否开发者用户绑定的手机号
passwordString否开发者用户密码
deviceIdString否设备ID
accessTokenString否开启同时登录技能选项时必填
refreshTokenString否开启同时登录技能选项时必填
expiresInInteger否开启同时登录技能选项时必填,accessToken 有效期,单位:秒

注意事项

同时登录技能 表示设备开发者同时是技能提供方,使用除设备和小雅OS同步账号信息外,技能也是使用同步给小雅OS的账号信息来访问 登录喜马需传喜马用户信息:userId,deviceId,accessToken,refreshToken,expiresIn

返回值
字段类型说明
osOpenIdString小雅 OS 用户唯一标识,永久不过期
示例:
$ curl https://api.xiaoyastar.com/serv/user?osAccessToken=OSACCESSTOKEN&openId=OPENID&ptfId=os.ptf.credential.test

解绑三方账号

解绑第三方登录账号,退出技能登录

接口定义:
METHOD: POST
URL: /serv/unbind
请求参数
字段类型必填说明
osAccessTokenString是公共参数
ptfIdString否用户体系 ID,目前由小雅OS开发人员生成,不传默认退出喜马拉雅登录
osOpenIdString是小雅OS用户标识
返回值
字段类型说明
errnoInteger错误码,0-成功

请求次数上报

上传数据的方式有两种:文件上传和JSONArray上传

文件上传格式如下:

sn,osQueryTimes,totalQueryTimes

N0001,10,20

N0002,11,20

N0003,12,20

...

JSONArray上传将Json格式的数据转为字符串,通过data字段上传, 格式如下:

[{"sn":"N0001","osQueryTimes":10, "totalQueryTimes":20},{"sn":"N0002","osQueryTimes":11, "totalQueryTimes":20},{"sn":"N0003","osQueryTimes":12, "totalQueryTimes":20}]
接口定义:
METHOD: POST
URL: /serv/query-times
请求参数
字段类型必填说明
osAccessTokenString是公共参数
productIdString是产品ID
dtString是日期字符串,格式yyyy-MM-dd
fileFile否文件格式数据
dataJsonArray否json格式数据

注意事项

此接口Header Content-Type应为multipart/form-data

返回值
字段类型说明
numInteger成功上传的数据条数
successBoolean是否成功

语音接入类API

语音接入ASR和NLU

接口定义:
Method: WS
URL: /ws/serv/stream-asr
请求参数
QUERY参数类型必填说明
osAccessTokenString是公共参数
paramsJsonObject是公共参数
requestIdString是session id,由客户端生成,代表一次会话唯一ID,可随机生成
typeInteger否音频编码格式,默认0; 0:pcm(16K采样率,16bit位宽,单通道)1:opus(16K采样率,32K码率)
asrPidInteger否0:近场 1:远场
请求示例:
ws://xvs.xiaoyastar.com:80/ws/serv/stream-asr
    ?requestId=fe7746f94a28426d888d13d64ece964a
    &params=%7B%22deviceType%22%3A1%2C%22productId%22%3A%22N_PROD1_7%22%2C%22sn%22%3A%22test%22%2C%22xn%22%3A%22781f7740%22%2C%22deviceId%22%3A%22demo-device-id%22%2C%22lat%22%3A%2212.3%22%2C%22lng%22%3A%2232%22%2C%22version%22%3A%221.2%22%2C%22osVersion%22%3A%222.3%22%2C%22dt%22%3A23123123123%2C%22sysType%22%3A1%2C%22appVersion%22%3A%221.0%22%2C%22sysVersion%22%3A%222.0%22%7D
    &type=0
    &osAccessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwcm9kdWN0SWQiOiJOX1BST0QxXzciLCJpc3MiOiJ4eS1vcy11Y2VudGVyIiwiZXhwIjoxNTYzNzk5NDk1LCJvc0NsaWVudElkIjoib3MuY2xpZW50LnNka2RlbW8ifQ.GdgB_U_plnVgc0WOYrC3hvtOELfCyekseNajg3VApCA
语音二进制帧包格式
playload中需要包含pcm格式,采样率16k,采样数据用 16bit记录,每个数据包可以为固定时间(如:60ms)内的语音数据。
尾包

使用文本帧,传输json,需要包含以下字段:

json参数类型必填说明
pkgNumInteger是语音包的数量
codeString是传2
msgString是传end
示例:
{"pkgNum": 2, "code": 2, "msg": "end"}
返回值
字段类型说明
asrResponseJsonObjectasr结果集
nluResponseJsonObjectnlu结果集
typeStringASR,NLU
successBoolean是否成功,true或者false
errorCodeString错误码
errorMsgString错误消息
asrResponse语音响应包
字段类型说明
endFlagInteger识别结束标识:0为中间识别结果,1最终识别结果
errorNoInteger错误号(成功0,失败为负值)
idxInteger第n个数据包产生的识别结果
resultJsonObject识别结果对象
result.nbestString识别结果的文本
requestIdStringrequestId
语音响应示例:
{"asrResponse":{"result":{"nbest":["明"]},"errNo":0,"endFlag":0,"idx":24,"sid":"3a34881653684f9da51fcc540c9f8de1"},"requestId":"3a34881653684f9da51fcc540c9f8de1","success":true,"type":"ASR"}
{"asrResponse":{"result":{"nbest":["明天"]},"errNo":0,"endFlag":0,"idx":29,"sid":"3a34881653684f9da51fcc540c9f8de1"},"requestId":"3a34881653684f9da51fcc540c9f8de1","success":true,"type":"ASR"}
{"asrResponse":{"result":{"nbest":["明天天"]},"errNo":0,"endFlag":0,"idx":34,"sid":"3a34881653684f9da51fcc540c9f8de1"},"requestId":"3a34881653684f9da51fcc540c9f8de1","success":true,"type":"ASR"}
{"asrResponse":{"result":{"nbest":["明天天气"]},"errNo":0,"endFlag":0,"idx":36,"sid":"3a34881653684f9da51fcc540c9f8de1"},"requestId":"3a34881653684f9da51fcc540c9f8de1","success":true,"type":"ASR"}
{"asrResponse":{"result":{"nbest":["明天天气怎"]},"errNo":0,"endFlag":0,"idx":41,"sid":"3a34881653684f9da51fcc540c9f8de1"},"requestId":"3a34881653684f9da51fcc540c9f8de1","success":true,"type":"ASR"}
{"asrResponse":{"result":{"nbest":["明天天气怎么"]},"errNo":0,"endFlag":0,"idx":43,"sid":"3a34881653684f9da51fcc540c9f8de1"},"requestId":"3a34881653684f9da51fcc540c9f8de1","success":true,"type":"ASR"}
{"asrResponse":{"result":{"nbest":["明天天气怎么样"]},"errNo":0,"endFlag":0,"idx":48,"sid":"3a34881653684f9da51fcc540c9f8de1"},"requestId":"3a34881653684f9da51fcc540c9f8de1","success":true,"type":"ASR"}
{"asrResponse":{"result":{"nbest":["明天天气怎么样"]},"errNo":0,"endFlag":1,"idx":-9999,"sid":"3a34881653684f9da51fcc540c9f8de1"},"requestId":"3a34881653684f9da51fcc540c9f8de1","success":true,"type":"ASR"}
nluResponse资源响应包

使用文本帧,playload里包含json字符串,字段如下

字段类型必填说明
versionString是版本号
sessionJsonObject是会话信息
session.sidString是session id
session.attributesJsonObject否会话属性,部分技能可能有值,key-value形式,key为string,value为object
nluJsonArray是nlu结果,列表形式,参见技能业务数据
nlu.domainString是识别后的领域,参见技能业务数据
nlu.intentString是识别后的意图
nlu.slotsJsonObject是识别后的槽位,key-value形式,key为string,value为object,参见技能业务数据
responseJsonObject是结果对象,用于告知客户端该如何操作
response.outputSpeechJsonObject是tts对象,包含tts内容
response.outputSpeech.typeString是tts类型,目前包括PlainText、SSML
response.outputSpeech.textString否tts内容,若type为PlainText必须该字段必须有值
response.outputSpeech.ssmlString否SSML格式的tts内容,若type为SSML必须该字段必须有值
response.outputSpeech.playBehaviorString否行为控制,默认都为ENQUEUE,代表追加
response.cardJsonObject否技能携带的伴侣APP上显示的卡片信息,见card
response.directivesJsonArray是指令列表,参见指令数据
response.directives.typeString是指令类型
response.dataJsonObject是包含技能业务数据,具体格式由技能业务定义,不同技能返回的数据格式可能不同,参见技能业务数据
response.shouldEndSessionboolean否是否需要结束当前会话, 默认true,如果为false设备端可开启继续拾音

注意事项

请根据返回值中NLU节点中的domain,intent,slots来确定response.data中的数据

资源包返回示例:
{
    "version": "1.0.0",
    "session": {
        "sid": "1111",
        "attributes": {
            "key": "value"
        }
    },
    "nlu":[{
        "domain": "music",
        "intent": "play",
        "slots":{}
    }],
    "response":{
        "outputSpeech": {
            "type": "PlainText",
            "text": "Plain text string to speak",
            "ssml": "<speak>SSML text string to speak</speak>",
            "playBehavior": "ENQUEUE"
        },
        "directives": [
            {
                "type": "AudioPlay.Play",
                "audioItem": {
                    "stream": {
                        "url": "http://live.xmcdn.com/live/1066/64.m3u8",
                        "token": null,
                        "offsetInMilliseconds": 0 
                    },
                    "metaData": {
                        "id": "182372",
                        "title": "倾听全球",
                        "albumId": "1066",
                        "albumTitle": "CNR经济之声",
                        "artist": null,
                        "art": {
                            "small": "http://fdfs.xmcdn.com/group28/M0A/30/29/wKgJSFkxRYGDCbimAADGj2hAjb0694_mobile_small.jpg",
                            "middle": "http://fdfs.xmcdn.com/group28/M0A/30/29/wKgJSFkxRYGDCbimAADGj2hAjb0694_mobile_small.jpg",
                            "large": "http://fdfs.xmcdn.com/group28/M0A/30/29/wKgJSFkxRYGDCbimAADGj2hAjb0694_mobile_large.jpg"
                        }
                    }
                },
                "playBehavior": "ENQUEUE"
            }
        ],
        "data": {
            "resSoundState": "101",// 该字段仅在喜马拉雅技能返回时存在
            "resSoundData": { // 该字段仅当 resSoundState 存在 且 resSoundState 值为1开头时存在
                "contentType": "1", // 资源类型 1 内容资源 2 电台资源
                "radioId": "12", // 该字段contentType 为2 时存在,电台id
                "scheduleId": "45837", // 该字段contentType 为2 时存在,广播电台时间表id
                "albumId": "5080817", // 该字段contentType 为1 时存在,专辑id
                "trackId": "20297910", // 该字段contentType 为1 时存在,声音id
                "source": "fm/ximalaya",// 资源来源, {技能标识}/{资源来源}
                "album": { // contentType 为 1 时存在,专辑详情
                    "playCount": 111111, // 专辑播放量
                    "isPaid": 0, // 是否付费,0是免费专辑
                    "isVipFree": 0 // 是否vip免费,1是vip免费
                },
                "track": { // contentType 为 1 时存在,声音详情
                    "playCount": 111111, // 声音播放量
                    "isFree": 0 // 是否支持试听,1是支持试听
                }
            },
            "searchResult": { 
                // 搜索结果列表,如果需要这一项请联系商务开通,开通后响应时间会有少许的增加
                // 该字段仅当 resSoundState 存在 且 resSoundState 值为1开头时有值
               "kind" : "album", //搜索类型,值有album以及track
               "list" : [
                    // 当kind为album时,此处为album对象的列表,album对象详见 http://open.xiaoyastar.com/os/docs/server/api/entity.html#Album
                    // 当kind为track时,此处为track对象的列表,track对象详见 http://open.xiaoyastar.com/os/docs/server/api/entity.html#Track
                    // 当前列表不支持分页,且返回条数不超过20条,并可能包含AudioPlay.Play指令中返回的资源
               ]
            }
        },
        "shouldEndSession": true
    }
}
返回统一异常

其中error_no取值描述信息如下:

错误码描述信息
3001voice内部错误
3002参数请求错误
3003鉴权失败
3004第三方错误
3005语音包错误
3006语音包识别为空
错误示例
{"errorCode":"3003","errorMsg":"调用鉴权接口异常:500 null","success":false,"type":"ASR"}

TTS 文字转换语音

接口定义:
METHOD: GET
URL: /serv/voice/text2audio
请求参数
字段类型必填说明
osAccessTokenString是公共参数
paramsJsonObject是公共参数
textString是需要转换成语音的文本
返回值
MP3语音流
示例:
$ curl https://api.xiaoyastar.com/serv/voice/text2audio?osAccessToken=OS_ACCESS_TOKEN&params=PARAM_JSON&text=TEXT

技能类API

根据文本获取NLU及SKILL结果

接口定义:
METHOD: GET
URL: /serv/text/query
请求参数
字段类型必填说明
osAccessTokenString是公共参数
paramsJsonObject是公共参数
textString是查询文本
返回值
字段类型必填说明
versionString是版本号
sessionJsonObject是会话信息
session.sidString是session id
session.attributesJsonObject否会话属性,部分技能可能有值,key-value形式,key为string,value为object
nluJsonArray是nlu结果,列表形式,参见技能业务数据
nlu.domainString是识别后的领域,参见技能业务数据
nlu.intentString是识别后的意图
nlu.slotsJsonObject是识别后的槽位,key-value形式,key为string,value为object,参见技能业务数据
responseJsonObject是结果对象,用于告知客户端该如何操作
response.outputSpeechJsonObject是tts对象,包含tts内容
response.outputSpeech.typeString是tts类型,目前包括PlainText、SSML
response.outputSpeech.textString否tts内容,若type为PlainText必须该字段必须有值
response.outputSpeech.ssmlString否SSML格式的tts内容,若type为SSML必须该字段必须有值
response.outputSpeech.playBehaviorString否行为控制,默认都为ENQUEUE,代表追加
response.cardJsonObject否技能携带的伴侣APP上显示的卡片信息,见card
response.directivesJsonArray是指令列表,参见指令数据
response.directives.typeString是指令类型
response.dataJsonObject是包含技能业务数据,具体格式由技能业务定义,不同技能返回的数据格式可能不同,参见技能业务数据
response.shouldEndSessionBoolean否是否需要结束当前会话, 默认true,如果为false设备端可开启继续拾音

注意事项

请根据返回值中NLU节点中的domain,intent,slots来确定response.data中的数据

{
    "version": "1.0.0",
    "session": {
        "sid": "1111",
        "attributes": {
            "key": "value"
        }
    },
    "nlu":[{
        "domain": "music",
        "intent": "play",
        "slots":{}
    }],
    "response":{
        "outputSpeech": {
            "type": "PlainText",
            "text": "Plain text string to speak",
            "ssml": "<speak>SSML text string to speak</speak>",
            "playBehavior": "ENQUEUE"
        },
        "directives": [
            {
                "type": "AudioPlay.Play",
                "audioItem": {
                    "stream": {
                        "url": "http://live.xmcdn.com/live/1066/64.m3u8",
                        "token": null,
                        "offsetInMilliseconds": 0 
                    },
                    "metaData": {
                        "id": "182372",
                        "title": "倾听全球",
                        "albumId": "1066",
                        "albumTitle": "CNR经济之声",
                        "artist": null,
                        "art": {
                            "small": "http://fdfs.xmcdn.com/group28/M0A/30/29/wKgJSFkxRYGDCbimAADGj2hAjb0694_mobile_small.jpg",
                            "middle": "http://fdfs.xmcdn.com/group28/M0A/30/29/wKgJSFkxRYGDCbimAADGj2hAjb0694_mobile_small.jpg",
                            "large": "http://fdfs.xmcdn.com/group28/M0A/30/29/wKgJSFkxRYGDCbimAADGj2hAjb0694_mobile_large.jpg"
                        }
                    }
                },
                "playBehavior": "ENQUEUE"
            }
        ],
        "data": {
            "resSoundState": "101",// 该字段仅在喜马拉雅技能返回时存在
            "resSoundData": { // 该字段仅当 resSoundState 存在 且 resSoundState 值为1开头时存在
                "contentType": "1", // 资源类型 1 内容资源 2 电台资源
                "radioId": "12", // 该字段contentType 为2 时存在,电台id
                "scheduleId": "45837", // 该字段contentType 为2 时存在,广播电台时间表id
                "albumId": "5080817", // 该字段contentType 为1 时存在,专辑id
                "trackId": "20297910", // 该字段contentType 为1 时存在,声音id
                "source": "fm/ximalaya",// 资源来源, {技能标识}/{资源来源}
                "album": { // contentType 为 1 时存在,专辑详情
                    "playCount": 111111, // 专辑播放量
                    "isPaid": 0, // 是否付费,0是免费专辑
                    "isVipFree": 0 // 是否vip免费,1是vip免费
                },
                "track": { // contentType 为 1 时存在,声音详情
                    "playCount": 111111, // 声音播放量
                    "isFree": 0 // 是否支持试听,1是支持试听
                }
            },
            "searchResult": { 
                // 搜索结果列表,如果需要这一项请联系商务开通,开通后响应时间会有少许的增加
                // 该字段仅当 resSoundState 存在 且 resSoundState 值为1开头时有值
               "kind" : "album", //搜索类型,值有album以及track
               "list" : [
                    // 当kind为album时,此处为album对象的列表,album对象详见 http://open.xiaoyastar.com/os/docs/server/api/entity.html#Album
                    // 当kind为track时,此处为track对象的列表,track对象详见 http://open.xiaoyastar.com/os/docs/server/api/entity.html#Track
                    // 当前列表不支持分页,且返回条数不超过20条,并可能包含AudioPlay.Play指令中返回的资源
               ]
            }
        },
        "shouldEndSession": true
    }
}
示例:
$ curl https://api.xiaoyastar.com/serv/text/query?osAccessToken=OS_ACCESS_TOKEN&params=PARAM_JSON&text=TEXT

根据指定意图获取SKILL结果

接口定义:
METHOD: GET
URL: /serv/intent/invoke
请求参数
字段类型必填说明
osAccessTokenString是公共参数
paramsJsonObject是公共参数
intentJsonObject是意图文本,参见指令数据
intent.domainString是技能领域
intent.intentString是技能意图
intent.slotsJsonObject否访问技能接口时需要的业务参数,由key-value组成的对象
返回值
字段类型必填说明
versionString是版本号
sessionJsonObject是会话信息
session.sidString是session id
session.attributesJsonObject否会话属性,部分技能可能有值,key-value形式,key为string,value为object
nluJsonArray是nlu结果,列表形式,参见指令数据
nlu.domainString是识别后的领域,参见指令数据
nlu.intentString是识别后的意图
nlu.slotsJsonObject是识别后的槽位,key-value形式,key为string,value为object,参见指令数据
responseJsonObject是结果对象,用于告知客户端该如何操作
response.outputSpeechJsonObject是tts对象,包含tts内容
response.outputSpeech.typeString是tts类型,目前包括PlainText、SSML
response.outputSpeech.textString否tts内容,若type为PlainText必须该字段必须有值
response.outputSpeech.ssmlString否SSML格式的tts内容,若type为SSML必须该字段必须有值
response.outputSpeech.playBehaviorString否行为控制,默认都为ENQUEUE,代表追加
response.cardJsonObject否技能携带的伴侣APP上显示的卡片信息,见card
response.directivesJsonArray是指令列表,参见指令数据
response.directives.typeString是指令类型
response.dataJsonObject是包含技能业务数据,具体格式由技能业务定义,不同技能返回的数据格式可能不同,参见指令数据
response.shouldEndSessionBoolean否是否需要结束当前会话, 默认true,如果为false设备端可开启继续拾音
示例:
$ curl https://api.xiaoyastar.com/serv/intent/invoke?osAccessToken=OS_ACCESS_TOKEN&params=PARAM_JSON&intent=TEXT
← 调用样例技能内调用 →
  • API索引
    • 系统API
    • 语音接入层API
    • 技能类API
  • API详情
    • 系统API
    • 语音接入类API
    • 技能类API
北京小雅星空科技有限公司 京ICP备19010603号