请选择 进入手机版 | 继续访问电脑版

[帮助文档] Bot开放平台新手教程(九)开发者中心-客服api

[复制链接]
简介
目前,Bot开放平台提供的HTTP协议包含:安全签名、智能问答两部分。 智能问答接作为核心业务,必须在完成安全签名验证后才能调用。

安全签名
这是使用Bot开放平台HTTP协议的第一步,签名的过程是将分配的app_key和app_secret根据特定的签名算法,生成签名值并根据接口要求在调用时提供给接口作为身份证明。

签名算法说明如下:
------------------------------------------------------------------------------------------------------------
SHA1加密(app_key:realm:app_secret) 其中realm为"xiaoi.com"
2. SHA1加密(method:uri) 其中method为请求方法,如"POST", uri为"/ask.do"
3. SHA1加密(HA1:nonce:HA2) 其中HA1为步骤1的值,HA2为步骤2的值,nonce为40位随机数
4.请求头字符串为app_key="app_key的值",nonce="nonce的值",signature="步骤3的值"
5.添加请求头"X-Auth",值为步骤4的请求头字符串
*形如 X-Auth : app_key="用户app_key", nonce="nonce的值", signature="生成的签名"
X-Auth: app_key="用户app_key", nonce="nonce的值", signature="生成的签名"
------------------------------------------------------------------------------------------------------------

JAVA签名代码示例:
------------------------------------------------------------------------------------------------------------
String realm = “xiaoi.com”;
String method = “POST”;
Sting uri = “/ask.do”;
Byte[] b = new byte[20];
New Random[].nextBytes(b);
String nonce = new String(Hex.encodeHex(b));
String HA1 = DigestUtil tils.shaHex(StringUtils.join(new String[]{app_key,realm,app_secret},”:”));
Sting HA2 = DigestUtils.shaHex(StringUtils.join(new String[]{method,uri},”:”));
String sign = DigestUtils.shaHex(StringUtils.join(new String[]{HA1,nonce,HA2},”:”));
------------------------------------------------------------------------------------------------------------

智能交互
智能问答接口,基于HTTP协议的类REST调用方式,支持XML输出格式。智能交互接口支持普通和高级两种形式:普通模式交互直接返回交互结果,高级模式返回完整的报文结果,包括分词结果和语义拆解内容等。

请求地址:
------------------------------------------------------------------------------------------------------------
HTTP请求方式:POST

http://robot.open.xiaoi.com/ask.do
------------------------------------------------------------------------------------------------------------


HTTP请求报文示例如下:
------------------------------------------------------------------------------------------------------------
POST/ask.do HTTP/1.1
Cache-Control:no-cache
Pragma:no-cache
Connection:Keep-Alive
Content-Length:xxx
Content-Type:application/x-www-form-urlencoded;charset=UTF-8
X-Auth:xxxxxx

question=你好&userId=aaa&platform=weixin&type=0
------------------------------------------------------------------------------------------------------------


返回说明(正确时的XML返回结果):
------------------------------------------------------------------------------------------------------------
<?xmlversion="1.0"encoding="utf-8"?>
              <Response>
                 <Type>0</Type>
                 <Content>你好,我是机器人,很高兴认识你。</Content>
                  <Similarity>1.0</Similarity>
                 <Commands>
                     <Command name="p4">
                        <Arg>http://www.xiaoi.com</Arg>
                     </Command>
                 </Commands>

              </Response>
------------------------------------------------------------------------------------------------------------

请求参数说明:

  
参数名
  
说明
示例
userId
用户id,用户和会话判断依据
userId = sam
question
问题内容
question = “你好”
type
响应类型
0 = 普通
  
1 = 高级


报文返回格式参数说明:

  
元素名
  
说明
示例
Response
顶级元素
表示xml为智能问答响应。
Type
响应类型。此元素客户端不用解析,仅分析调试及日志等使用。

  
Content
回答内容。回答内容中出现的[link]标签需要客户端以参数指明的意义渲染成对应的链接形式。
为纯文本类型。例如:"你好,我的名字叫小i"。"查看更多内需请点击[link  url="http://www.xiaoi.com"]这里[/link]
Words
分词结果,不包含弱语义词。(只有机器人理解了的问题才会输出)

  
Similarity
0到1范围相似度值。(只有机器人理解了的问题才会输出)
例如:"您好!"
Commands
非文本的语义表述。
例如:"1"
RelatedQuestions
相关问题列表。第一条为与用户问题语义一致的知识点。


JAVA示例说明
Bot开放平台提供JAVA接入示例供开发者参考:

------------------------------------------------------------------------------------------------------------
public staticvoidmain(String[] args) throws
            IOException{
        StringappKey = "请填写appkey";
        StringappSecret = "请填写Secret";
        Stringquestion = "请填写问句";
        /**
         * 返回类型:Constant.PRIMARY_TYPE/Constant.SENIOR_TYPE
         * */
        Stringtype = "请填写返回类型";
        /**
         * 平台:请见Constant类后缀为_PLATFORM的常量
         * */
        Stringplatform = "请填写平台";
        StringuserId = "请填写userId";
        // 智能问答
        AskRequestaskRequest = newAskRequest(appKey, appSecret, question,
                type,userId, platform);
        AskServiceaskService = CloudServiceFactory.getInstance()
                .createAskService();
        askService.init(null);
        AskResponseaskResponse = null;
        try {
            askResponse= askService.ask(askRequest);
------------------------------------------------------------------------------------------------------------

示例代码参数说明:

  
参数名
  
说明
示例
appKey
鉴权时需要的key
appSecret
鉴权时需要的secret
question
问题内容
question = “你好”
  
SESSIOIN_OPEN为欢迎语指令
Type
返回类型
Platform
平台
userId
终端用户Id


其他依赖jar包及对应版本号:
1.png

回复

使用道具 举报

3条回复
在哪里写入key呢?具体参数呢?不想用java真的是一脸懵逼啊!
还有为什么写入了key并且调用了也成功返回了却没有返回数据到网站里。
支持 | 反对 | 回复

使用道具 举报

你好,目前只有Java哦,然后开放接口需要通过签名验证访问,签名的过程是将AppKey和Secret以及随机数等参数根据一定的签名规则生成签名值,用以防止请求被篡改等情况的出现,我已经将签名验证方法发你了,如果还是不行的话,请将你的出现的问题做一个文档,发到我QQ上,谢谢。QQ:3423332393
支持 | 反对 | 回复

使用道具 举报

本帖最后由 meng1234 于 2019-8-10 00:15 编辑

怎么查看userId呢
支持 | 反对 | 回复

使用道具 举报

Bot开放平台
今日发帖: 0

小i微信公众号:
搜索 “xiaoirobot"
或扫描下面的二维码: