机器人超脑平台
平台简介
成为超脑平台用户
讯飞超脑板
产品规格
开发指南
标准协议
使用手册
环境准备
数据采集
应用算法
应用实例
镜像导出
镜像烧录
错误码
算法配置表
机器人多模态交互开发套件
多模态交互套件产品白皮书
多模态交互套件快速体验
多模态套件平台功能使用手册
多模态交互套件开发手册
常见问题与解答
智能语音背包
智能语音背包产品白皮书
智能语音背包产品规格书
智能语音背包产品快速体验
智能语音背包产品开发手册
联系方式
服务条款
超脑平台服务协议
超脑平台隐私政策
本文档使用 MrDoc 发布
-
+
首页
应用后处理
AIUI 后处理能够根据识别、语义结果,提供个性化的服务。 ## 服务器验证-GET 1. 提交信息后,AIUI发送GET请求到开发者服务器URL 请求参数: |参数 | 描述| | :--- | :--- | |signature | 加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、rand参数。| |timestamp | 时间戳| |rand | 随机数| 2. 开发者校验signature(下面有校验方式),返回开放平台中token值的sha1加密内容,则接入成功 加密/校验流程: - 将token、timestamp、rand三个参数值进行字典序排序 - 将三个参数字符串拼接成一个字符串进行sha1加密 - 开发者获得加密后的字符串可与signature对比,标识该请求来源于AIUI服务<br><br/> 响应消息: - 将token进行sha1加密,放在响应的body中返回 >tip 注意 校验流程是可选操作,但消息返回必须正确才能校验成功 示例: ```java Map<String, String[]> parameterMap = request.getParameterMap(); String rand = parameterMap.get("rand")[0]; String timestamp = parameterMap.get("timestamp")[0]; String signature = parameterMap.get("signature")[0]; // 字典序排序 ArrayList<String> signList = new ArrayList<>(); signList.add(aiuiToken); signList.add(rand); signList.add(timestamp); Collections.sort(signList); // 校验 String sign = StringUtils .strip(signList.toString(), "[]") .replace(" ", "") .replace(",", ""); if (StringUtils.compare(signature, DigestUtils.sha1Hex(sign)) != 0) { return "authentication failed"; } else { return DigestUtils.sha1Hex(aiuiToken); } ``` ## 接收消息-POST AIUI正常完成服务后,把结果POST到开发者的URL上。 注意: 1. **消息重试**:每条消息最长超时时间为3秒,3秒后将会断开连接并重试1次,如果2次均无响应将返回超时消息。 2. **消息排重**:每条消息有一个id,请根据消息主体中的MsgId和CreateTime两者结合进行排重。(MsgId为字符串,CreateTime为整数) 3. **消息响应**:AIUI透传开发者数据到设备。 4. **消息签名**:用于检验AIUI消息的完整性,不用于校验开发者服务响应消息。签名是由token+timestamp+rand+postbody 进行字典排序,然后sha1生成的。 url中的`msgsignature`参数存储了签名信息。timestamp和rand参数也在url里。 | 参数 | 描述 | | --- | --- | | token | 开发者设定的唯一标识 | | timestamp | 时间戳 | | srand | 固定字节随机串 | |postbody | post接收到的body信息| 5. **消息加密**:开启加密后,会生成一个AES KEY,此时数据是加密的,且请求url中的`encrypttype`参数值为`aes`(未加密为`raw`)。解析消息前要解密。同时开发者服务器的响应也要用AES KEY加密。AIUI返给客户端的数据是解密的。 6. **消息格式**: HTTP消息格式定义: ``` POST /yourserveruri?xx=xx HTTP 1.1 Connection: close Host:xxx.xxx.xxx Content-Type: application/json Content-Length: 111 {消息主体} ``` >tip >可以根据Content-Type的类型来解析相应的消息主体。例如:当POST请求的Content-Type为application/json时,要根据Json格式解析消息主体。 消息主体格式 ```json { "MsgId":"1234567", "CreateTime":1348831860, "AppId":"12345678", "UserId":"d123455", "SessionParams":"Y21kPXNzYixzdWI9aWF0LHBsYXRmb3JtPWFuZG9yaWQ=", "UserParams":"PG5hbWU+eGlhb2JpYW5iaWFuPC9uYW1lPg==", "FromSub":"iat", "Msg":{}, } ``` 格式说明 |参数 | 描述| | :--- | :--- | |MsgId | 消息id,字符串类型| |CreateTime | 消息创建时间,整型| |AppId | 开发者应用Id,字符串类型| |UserId | AIUI唯一用户标注,字符串类型| |UserParams | 开发者自定义参数,通过客户端的userparams参数上传,Base64格式字符串| |FromSub |上游业务类型,目前包括两种(iat:听写结果,kc:语义结果),字符串类型| |Msg | 消息内容,json object参考Msg消息内容格式| |SessionParams| 本次会话交互参数,Base64格式字符串,解码后为json格式| Msg消息内容格式 ```json 文本内容 { "Type":"text", "ContentType":"Json", "Content":"eyJzbiI6MiwibHMiOnRydWUsImJnIjowLCJlZCI6MCwid3MiOlt7ImJnIjowLCJjdyI6W3sic2MiOjAsInciOiLvvJ8ifV19XX0=" } ``` |参数 | 描述| | :--- | :--- | |Type | text| |ContentType | 内容格式<br />Json:JSON格式<br />plain:无格式文本<br />xml:XML格式| |Content | Base64内容字符串| ## 接入指引 #### 消息校验使用方法 消息响应的url参数中有四个字符串类型参数,用于校验完整性 |参数 | 描述|来源| | :--- | :--- | :--- | |msgsignature | 签名信息 | 存储消息的签名| |timestamp | 时间戳 | 由平台生成| |rand | 随机字符串 | 平台随机生成的随机串| |encrypttype | 加密类型 | 由页面配置决定(目前支持raw和aes)| 校验过程(伪代码) ```c int message_sigcheck(token ,msgsignature ,timestamp ,srand ,data) { //对参数进行字典排序 vector<std::string> s(4); for (){ // 将参数token,timestamp,srand,data放入字典} //字典排序 sort(s.begin(), s.end()); //链接字符 std::string str; for (){ // 将四个s里的值按顺序链接到str里} //对str进行sha1 std::string signature = Sha1(str.c_str()); //校验签名字符串 0为一致,-1为不一致 return signature.compare(msgsignature)?-1:0; } ``` 注意:为了消息的安全,建议校验。 #### 消息加解密说明  勾选加密后,发给开发者服务器的body是加密的。需要用AES秘钥解密。 1. 加密采用AES的CBC加密方式,秘钥为16字节(128bit),初始化向量IV复用秘钥AESKEY,填充方式为PKCS7Padding。 2. 返回的消息要以同样的方式加密。 <IflyHeader />
admin
2023年5月31日 16:35
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码