# 机器人&知识库
# 1、接口声明
在调用接口时必须在https请求的header中携带"token"参数。
token是智齿客服接口开放平台全局唯一的接口调用凭据。
开发者在调用各业务接口时都需使用token,开发者需要进行妥善保存。token的存储至少要保留32个字符空间。token的有效期目前为24个小时,需定时刷新,或根据接口返回的token失效提示,进行重新获取。请求token接口,无论token是否存在,都会返回新的token,并重置token的过期时间(目前24小时)。
token使用方式说明:
1、开发者需要统一获取和管理token,在调用智齿客服各个业务开放接
口时都应该使用同一个的token,不应该每个业务都刷新获取新的
token,否则容易导致token失效,影响接口的正常调用;
2、目前token的有效期通过返回的expire_in来传达,目前是86400
秒之内的值。开发者需要根据这个有效时间提前去刷新新token。
3、开发者需要根据接口返回的token失效提示,进行重新获取token。
# 2、接口调用
# 2.1、获取访问token编码
接口说明:
获取API开放接口token,此token仅适用于智齿开放平台 5.0版本全部API接口 。API接口中的参数 appid, app_key 请联系智齿售后人员获取。
请求方式:
GET
请求地址:
https://www.sobot.com/api/get_token
请求参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
appid | String | 是 | 接口凭证Id | 第三方用户接口调用唯一凭证id |
create_time | String | 是 | 时间戳 | 时间戳,秒,例如 2019-09-25 15:49:33 的时间戳1569397773 |
sign | String | 是 | 签名 | md5(appid+create_time+app_key) sign签名,app_key为密钥 |
返回参数:
参数 | 类型 | 必填 | 名称 |
---|---|---|---|
ret_code | String | 是 | 返回编码 |
ret_msg | String | 是 | 返回信息 |
item | Object | 否 | 返回对象 |
item对象:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
token | String | 是 | token编码 | |
expires_in | String | 是 | 凭证有效时间 | 单位:秒 |
时间戳转换参考工具:
http://tool.chinaz.com/Tools/unixtime.aspx
sign签名生成示例:
例如,appid = "1"; create_time="1569397773"; app_key="2"
sign = Md5("115693977732") 为 258eec3118705112b2c53dc8043d4d34。
请求示例:
curl https://www.sobot.com/api/get_token?appid=1&create_time=1569397773&sign=258eec3118705112b2c53dc8043d4d34
返回示例:
{
"item": {
"token": "4ac37cb2e9c740dba4b75a34d5358802",
"expires_in": "86400"
},
"ret_code": "000000",
"ret_msg": "操作成功"
}
# 2.2、获取常见问题
接口说明:
接口类型:主动调用接口。
接口作用:可以调用在智齿后台配置的指定机器人的常见问题列表和引导语。
请求方式:
POST
请求地址:
https://www.sobot.com/api/robot/5/get_robot_guide
请求参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
robot_flag | Integer | 是 | 机器人编号 | 可以在「设置-机器人-机器人信息」中查看 |
faqid | Number | 否 | 常见问题组ID | 不传即返回默认组。可在「常见问题管理」中查看 |
返回参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
ret_code | String | 是 | 返回编码 | |
ret_code | String | 是 | 返回信息 | |
item | Object | 是 | 返回对象 |
item对象:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
robot_flag | Integer | 是 | 机器人编号 | 可以在「设置-机器人-机器人信息」中查看 |
question_id | String | 是 | 问题id | |
link_question_num | Integer | 是 | 引导语数量 | |
link_question_list | Object | 是 | 引导语对象 | |
companyid | String | 是 | 公司id | |
guide_strip | String | 是 | 引导语 |
link_question_list对象
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
match_flag | Integer | 是 | 匹配模式:0智能匹配,1完全匹配,2包含匹配,3欢迎语匹配 | |
docid | String | 是 | 词条id | |
guide_question_disname | String | 是 | 显示名称 | |
guide_question | String | 是 | 标准问法 |
curl https://www.sobot.com/api/robot/5/get_robot_guide
-X POST
-H 'token:c87c0dbac8c24261b9a4335fa5a51448'
-H 'content-type: application/json'
-d '
{
"robot_flag": "1"
}'
返回示例:
{
"items": [],
"item": {
"robot_flag": 1,
"question_id": "078726f1435b4218b9733afe2433b9fe",
"link_question_num": 4,
"link_question_list": [
{
"sort_no": 1,
"match_flag": 0,
"docid": "1b06cc8839574dc487bf658f0033bfb1",
"guide_question_disname": "违约金/滞纳金是否可以开具发票?",
"guide_question": "违约金/滞纳金是否可以开具发票?"
},
{
"sort_no": 4,
"match_flag": 0,
"docid": "9b66fd499ff946df8213868bece0b0e3",
"guide_question_disname": "北京有按天收费的房子么",
"guide_question": "北京有按天收费的房子么"
}
],
"companyid": "0a53403cb9b34d528bdc11df69c283ff",
"guide_strip": "<p>测试引导语!!!</p>"
},
"ret_code": "000000",
"ret_msg": "查询成功!"
}
# 2.3、用户咨询机器人
接口说明:
接口类型:主动调用接口。
接口作用:可通过调用该接口实现以用户的身份咨询机器人并获取答案。
请求方式:
POST
请求地址:
https://www.sobot.com/api/chat/5/user/robot_chat
请求参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
partnerid | String | 是 | 企业自己的用户id,可自行传值 | |
question | String | 是 | 用户问题 | 示例参照表格下方详解 |
user_nick | String | 否 | 用户昵称 | |
source | String | 否 | 用户渠道 | 0:pc,1:微信,2:app,3:微博,4:移动网站,9:企业微信,10:小程序 |
robot_flag | String | 否 | 机器人编号 | |
question_flag | String | 否 | 问题类型 | 问题类型:点击-1,输入-0,多轮会话中点击-2 |
request_text | String | 否 | 问题内容 | questionFlag=0时,传入原问题; questionFlag=1时,传入docId; questionFlag=2时,示例参照表格下方详解 |
question 参数详解
单轮:传入用户问题;
多轮:需要根据上轮返回值中multiDiaRespInfo字段确定传入内容。
multiDiaRespInfo中关键字段为:interfaceList和inputContent,同一轮返回值中两者只会存在一个。
1)如果上轮返回interfaceList,只保留template和interfaceRetList的json,其中interfaceRetList集合只保留选中的集合元素,例:
```json
上轮返回:{
"template":0,
"question":"模板一",
"level":0,
"conversationId":"5fcb4cb5-2078-41c7-bb9d-8fbf57464c94",
"docId":"1b8b2dcc4a8243649fa49744b9cf362b",
"groupId":"9a38730078354d4a832a6c621483ad9d",
"remindQuestion":"请选择电影:",
"endFlag":false,
"levelName":"电影",
"retCode":"000000",
"clickFlag":1,
"interfaceRetList":[
{
"summary":"好看的电影,不要错过",
"thumbnail":"",
"anchor":"http://www.baidu.com",
"movieId":"1",
"tag":"2020年上映",
"label":"20.01元",
"title":"变形金刚III"
},
{
"summary":"优秀电影",
"thumbnail":"https://i01.lw.aliimg.com/media/lADODuM9KM0E2s0E1w_1239_1242.jpg",
"anchor":"http://www.sina.com",
"movieId":"3",
"tag":"未上映",
"label":"60.00",
"title":"猩球崛起"
}
],
"outPutParamList":"title#movieId"
}
客户选中title为"变形金刚III"的选项,则传入数据为:{
"template":0,
"interfaceRetList":[
{
"summary":"好看的电影,不要错过",
"thumbnail":"",
"anchor":"http://www.baidu.com",
"movieId":"1",
"tag":"2020年上映",
"label":"20.01元",
"title":"变形金刚III"
}
]
}
2)如果上轮返回inputContent,则直接传入选中的值。
例:{
"template":0,
"question":"我想买手机",
"level":0,
"conversationId":"a4bb45ed-594e-4953-b74e-e2f902f1337f",
"docId":"022e96da2f8346b7bfb0efb400a9c558",
"groupId":"9a38730078354d4a832a6c621483ad9d",
"remindQuestion":"请选择品牌",
"endFlag":false,
"levelName":"品牌",
"retCode":"000000",
"inputContentList":"华为,苹果,小米",
"outPutParamList":"品牌"
}
选中inputContentList里的华为,则传入数据为:华为;
request_text参数详解 单轮:非必填字段; 多轮:必填,需要根据上轮返回值中multiDiaRespInfo字段确定传入内容。 multiDiaRespInfo中关键字段为:interfaceList和inputContent,同一轮返回值中两者只会存在一个。 1)如果上轮返回interfaceList,返回上轮会话的level,conversationId以及outPutParamList对应的值组成的json。返回上轮会话的level,conversationId以及outPutParamList对应的值组成的json,例:{"上轮会话中outPutParamList参数":"xxx","level":0,"conversationId":"xxx"} )例:
上轮返回:{
"template":0,
"question":"模板一",
"level":0,
"conversationId":"5fcb4cb5-2078-41c7-bb9d-8fbf57464c94",
"docId":"1b8b2dcc4a8243649fa49744b9cf362b",
"groupId":"9a38730078354d4a832a6c621483ad9d",
"remindQuestion":"请选择电影:",
"endFlag":false,
"levelName":"电影",
"retCode":"000000",
"clickFlag":1,
"interfaceRetList":[
{
"summary":"好看的电影,不要错过",
"thumbnail":"",
"anchor":"http://www.baidu.com",
"movieId":"1",
"tag":"2020年上映",
"label":"20.01元",
"title":"变形金刚III"
},
{
"summary":"优秀电影",
"thumbnail":"https://i01.lw.aliimg.com/media/lADODuM9KM0E2s0E1w_1239_1242.jpg",
"anchor":"http://www.sina.com",
"movieId":"3",
"tag":"未上映",
"label":"60.00",
"title":"猩球崛起"
}
],
"outPutParamList":"title#movieId"
}
客户选中title为"变形金刚III"的选项,则传入数据为:{
"level":0,
"conversationId":"5fcb4cb5-2078-41c7-bb9d-8fbf57464c94",
"movieId":"1",
"title":"变形金刚III"
}
2)如果上轮返回inputContent,则返回上轮会话的level,conversationId以及outPutParamList对应的值组成的json。
例:{
"template":0,
"question":"我想买手机",
"level":0,
"conversationId":"a4bb45ed-594e-4953-b74e-e2f902f1337f",
"docId":"022e96da2f8346b7bfb0efb400a9c558",
"groupId":"9a38730078354d4a832a6c621483ad9d",
"remindQuestion":"请选择品牌",
"endFlag":false,
"levelName":"品牌",
"retCode":"000000",
"inputContentList":"华为,苹果,小米",
"outPutParamList":"品牌"
}
选中inputContentList里的华为,则传入数据为:{
"level":0,
"conversationId":"a4bb45ed-594e-4953-b74e-e2f902f1337f",
"品牌":"华为"
}
返回参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
ret_code | String | 是 | 返回编码 | |
ret_msg | String | 是 | 返回信息 | |
item | Object | 否 | 返回对象 |
item对象:
参数 | 类型 | 名称 | 备注 |
---|---|---|---|
answer | String | 答案 | |
suggestions | List | 推荐问题列表,详见下文 | |
question | String | 原始问题 词条名称 | |
docid | String | 词条id | |
visitorid | String | 用户id | |
cid | String | 会话id | |
msgid | String | 消息体id | |
stripe | String | 问题推荐引导语 | |
robot_flag | String | 机器人编号 | |
answer_type | String | 机器人回答类型 | |
session_new | String | 是否是新会话 | true:是,false:不是 |
transfer_type | String | 触发转人工类型 | 0:不触发,1:重复提问,2:负向情绪,3:命中关键字 |
multi_response_info | Object | 多轮会话返回数据 |
suggestions对象:
参数 | 类型 | 名称 | 备注 |
---|---|---|---|
question | String | 推荐问题的名称 | |
answer | String | 推荐问题的答案 | |
docid | String | 推荐问题的词条Id |
multi_response_info对象:
参数 | 类型 | 名称 | 备注 |
---|---|---|---|
remind_question | String | 机器人提示问题 | |
answer_strip | String | 答案引导语 | |
interface_ret_list | List | 接口返回列表 | |
input_content_list | String | 自定义列表内容 | 多个以逗号隔开 |
output_param_list | String | 下轮会话入参 | 多个以##隔开 |
level | Integer | 轮次 | |
level_name | String | 轮次名称 | |
question | String | 原始问题 | |
answer | String | 答案 | |
ret_code | String | 调用接口返回码 | |
ret_error_msg | String | 调用接口返回说明 | |
docid | String | 推荐问题的词条Id | |
conversationid | String | 多轮会话id | |
template | Integer | 模板id | |
end_flag | Boolean | 多轮会话结束标记 |
请求示例:
curl https://www.sobot.com/api/chat/5/user/robot_chat
-X POST
-H 'content-type: application/json'
-H 'token:c87c0dbac8c24261b9a4335fa5a51448'
-d '
{
"partnerid" : "xx",
"question" : "xx"
}'
返回示例:
{
"item":{
"answer":"xx",
"suggestions":[
{
"question":"xx",
"answer":"xx",
"docid":"xx"
}
],
"question":"xx",
"docid":"xx",
"userid":"xx",
"cid":"xx",
"msgid":"xx",
"stripe":"xx",
"robot_flag":"1",
"answer_type":"1",
"session_new":"true",
"transfer_type":"1"
},
"ret_code":"000000",
"ret_msg":"成功"
}
# 2.4、机器人回答评价
接口说明:
接口类型:主动调用接口。
接口作用:通过主动调用接口来进行机器人回答的评价(非会话评价)。
请求方式:
POST
请求地址:
https://www.sobot.com/api/chat/5/user/robot_feedback
请求参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
visitorid | String | 是 | 访客id | |
cid | String | 是 | 会话id | |
docid | String | 是 | 词条id | |
doc_name | String | 是 | 词条名称 | |
robot_flag | String | 是 | 机器人id | |
status | String | 是 | 评价状态 | 1:顶,-1:踩 |
msgid | String | 是 | 消息id | |
partnerid | String | 否 | 企业自己的用户id,可自行传值 | |
from | String | 否 | 客户来源 | 0:开放平台;1:web、sdk;2:微信 |
注:如没有visitorid,可传入partnerid、from三个字段代替
返回参数:
参数 | 类型 | 名称 | 备注 |
---|---|---|---|
ret_code | String | 返回编码 | |
ret_msg | String | 返回信息 | |
item | Object | 返回数据 |
item:
参数 | 类型 | 名称 | 备注 |
---|---|---|---|
ustatus | String | 用户状态 | -2:排队,-1:机器人,0:离线,1-在线 |
请求示例:
curl https://www.sobot.com/api/chat/5/user/robot_feedback
-X POST
-H 'token:c87c0dbac8c24261b9a4335fa5a51448'
-H 'content-type: application/json'
-d '
{
"cid": "a09b71ae2abd4604aba1c9961bc31095",
"msgid": "2cfd756f0077406ea22d1efe75555c55",
"docid": "317f5b28887544d0be69f7e1520b269d",
"doc_name": "视频和文本",
"robot_flag": "1",
"status": "1",
"visitorid": "ab48f1e755ac766d8732501a3ef1a116"
}'
返回示例:
{
"item": {
"ustatus": "-1"
},
"ret_code": "000000",
"ret_msg": "成功"
}
# 2.5、查询知识库词条列表
接口说明:
接口类型:主动调用接口。
接口作用:可通过调用该接口来查询某个知识库所有知识条目的列表。
请求方式:
POST
请求地址:
https://www.sobot.com/api/robot/5/search_doc_list
请求参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
key_flag | String | 是 | 1问题,2答案 | |
question_typeid | String | 是 | 词条类型(传-1) | |
robot_flag | String | 是 | 知识库所属机器人:0公共知识库,1机器人一 | |
question_type_flag | String | 否 | 问题类型,1-全部问题,2-标准问题,3-相似问题 | |
page_no | String | 是 | 当前页码 | |
key_words | String | 否 | 搜索关键字 | |
used_flag | String | 否 | 词条状态,0启用,1手动停用,2系统停用,3过期停用 | |
link_flag | String | 否 | 是否有关联问题,0是,1否 | |
answer_flag | String | 否 | 答案类型:1文本,2图片,3图文,4视频 | |
createid | String | 否 | 词条创建人ID | |
create_start_time | String | 否 | 创建开始时间 | |
create_end_time | String | 否 | 创建结束时间 | |
updateid | String | 否 | 词条最后更新人ID | |
update_start_date | String | 否 | 更新开始时间 | |
update_end_date | String | 否 | 更新结束时间 | |
effect_start_date | String | 否 | 生效开始时间 | |
effect_end_date | String | 否 | 生效结束时间 | |
invalid_start_date | String | 否 | 失效开始时间 | |
invalid_end_date | String | 否 | 失效结束时间 |
返回参数:
参数 | 类型 | 名称 | 备注 |
---|---|---|---|
ret_code | String | 返回编码 | |
ret_msg | String | 返回信息 | |
items | Object | 返回对象 | |
page_count | String | 总页数 | |
page_no | String | 当前页码 | |
page_size | String | 每页条数 | |
total_count | String | 总条数 |
items对象:
参数 | 类型 | 名称 | 备注 |
---|---|---|---|
all_type_name | String | 分类全路径 | |
answer_desc | String | 知识库配置的答案内容,格式为HTML | |
answer_flag | String | 答案类型:1文本,2图片,3图文,4视频 | |
answerid | String | 答案ID | |
answer_img | String | 图文类型的缩略图 | |
answer_txt | String | 答案纯文本信息 | |
audit_status | String | 审核状态:0待审核,1永久有效,2指定时间有效 | |
companyid | String | 公司id | |
docid | String | 词条ID | |
effect_time | String | 生效时间 | |
invalid_time | String | 失效时间 | |
link_flag | String | 是否有关联问题,0是,1无 | |
match_flag | String | 匹配模式:0智能匹配,1完全匹配,2包含匹配,3欢迎语匹配 | |
questionid | String | 问题ID | |
question_title | String | 问题标题 | |
question_typeid | String | 问题类型ID | |
question_type_name | String | 问题类型名 | |
robot_flag | String | 知识库所属机器人:0公共知识库,1机器人一 | |
smail_question_num | String | 相似问法个数 | |
updateid | String | 更新人ID | |
update_time | String | 更新时间 | |
used_flag | String | 词条状态,0启用,1手动停用,2系统停用,3过期停用,-2:隐藏状态 |
请求示例:
curl https://www.sobot.com/api/robot/5/search_doc_list
-X POST
-H 'token:c87c0dbac8c24261b9a4335fa5a51448'
-H 'content-type: "application/json'
-d '
{
"key_flag": "1",
"question_typeid": "-1",
"robot_flag": "1",
"page_no": "1",
"key_words": "xx",
"used_flag": "0",
"link_flag": "1",
"answer_flag": "1",
"createid": "xx",
"create_start_time": "yyyy-MM-dd",
"create_end_time": "yyyy-MM-dd",
"updateid": "xx",
"update_start_date": "yyyy-MM-dd",
"update_end_date": "yyyy-MM-dd",
"effect_start_date": "yyyy-MM-dd",
"effect_end_date": "yyyy-MM-dd",
"invalid_start_date": "yyyy-MM-dd",
"invalid_end_date": "yyyy-MM-dd"
}'
返回示例:
{
"items" : [
{
"all_type_name" : "xx",
"answer_desc" : "xx",
"answer_flag" : "1",
"answerid" : "xx",
"answer_img" : "xx",
"answer_txt" : "xx",
"audit_status" : "1",
"companyid" : "xx",
"docid" : "xx",
"effect_time" : "1481731200",
"invalid_time" : "4102415999",
"link_flag" : "1",
"match_flag" : "0",
"questionid" : "xx",
"question_title" : "xx",
"question_typeid" : "xx",
"question_type_name" : "xx",
"robot_flag" : "1",
"smail_question_num" : "0",
"updateid" : "xx",
"update_time" : "1481789852",
"used_flag" : "0"
}
],
"page_count" : "3",
"page_no" : "1",
"page_size" : "15",
"total_count" : "40",
"ret_code":"000000",
"ret_msg":"操作成功"
}
# 2.6、查询知识库分类列表
接口说明:
接口类型:主动调用接口。
接口作用:可通过调用该接口来查询某个知识库中的分类。
请求方式:
POST
请求地址:
https://www.sobot.com/api/robot/5/search_question_type_list
请求参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
parent_typeid | String | 是 | 父级分类id,顶级分类id-1 | |
robot_flag | String | 是 | 知识库所属机器人:0公共知识库,1机器人一 | |
type_flag | String | 否 | 分类类型:1-单轮问题分类(默认);2-多轮问题分类 |
返回参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
ret_code | String | 是 | 返回编码 | |
ret_msg | String | 是 | 返回信息 | |
items | Object | 否 | 返回对象 |
items对象:
参数 | 类型 | 名称 | 备注 |
---|---|---|---|
companyid | String | 公司id | |
parent_typeid | String | 父级分类id | |
question_typeid | String | 分类id | |
question_type_name | String | 分类名称 | |
type_level | String | 分类级别 | |
last | String | 是否是最低级别 | |
type_flag | String | 分类类型:1-单轮问题分类;2-多轮问题分类 |
请求示例:
curl https://www.sobot.com/api/robot/5/search_question_type_list
-X POST
-H 'token:c87c0dbac8c24261b9a4335fa5a51448'
-H 'content-type: application/json'
-d '
{
"parent_typeid": "-1",
"robot_flag": "1",
"type_flag": "1"
}'
返回示例:
{
"items" : [
{
"companyid" : "xx",
"parent_typeid" : "xx",
"question_typeid" : "xx",
"question_type_name" : "xx",
"type_level" : "1",
"last" : "true",
"type_flag" : "1"
}
],
"ret_code":"000000",
"ret_msg":"操作成功"
}
# 2.7、查询知识库词条
接口说明:
接口类型:主动调用接口。
接口作用:可通过调用该接口来查询某个知识条目的详细信息。
请求方式:
POST
请求地址:
https://www.sobot.com/api/robot/5/query_doc_detail
请求参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
docid | String | 是 | 词条Id | |
robot_flag | String | 是 | 知识库所属机器人:0公共知识库,1机器人一 |
返回参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
ret_code | String | 是 | 返回编码 | |
ret_msg | String | 是 | 返回信息 | |
item | Object | 否 | 返回对象 |
item对象:
参数 | 类型 | 名称 | 备注 |
---|---|---|---|
answer_desc | String | 知识库配置的答案内容,格式为HTML | |
answer_flag | String | 答案类型:1文本,2图片,3图文,4视频 | |
answerid | String | 答案ID | |
answer_img | String | 图文类型的缩略图 | |
answer_txt | String | 答案纯文本信息 | |
answer_summary | String | 图文类型摘要 | |
audit_status | String | 审核状态:0待审核,1永久有效,2指定时间有效 | |
companyid | String | 公司id | |
docid | String | 词条ID | |
create_time | String | 创建时间 | |
effect_time | String | 生效时间 | |
link_question_list | List | 关联问题列表,详见下文 | |
link_question_num | String | 关联问题个数 | |
linked_flag | String | 是否被其他问题关联,1是,0无 | |
match_flag | String | 匹配模式:0智能匹配,1完全匹配,2包含匹配,3欢迎语匹配 | |
questionid | String | 问题ID | |
question_title | String | 问题标题 | |
question_typeid | String | 问题类型ID | |
question_type_name | String | 问题类型名 | |
robot_flag | String | 知识库所属机器人:0公共知识库,1机器人一 | |
smail_question_num | String | 相似问法个数 | |
updateid | String | 更新人ID | |
update_time | String | 更新时间 | |
used_flag | String | 词条状态,0启用,1手动停用,2系统停用,3过期停用 |
linkQuestionList对象:
参数 | 类型 | 名称 | 备注 |
---|---|---|---|
docid | String | 关联问题词条Id | |
link_name | String | 显示名称 | |
link_question_title | String | 知识库本身名称 |
请求示例:
curl https://www.sobot.com/api/robot/5/query_doc_detail
-X POST
-H 'token:c87c0dbac8c24261b9a4335fa5a51448'
-H 'content-type: application/json'
-d '
{
"docid":"xx",
"robot_flag":"1"
}'
返回示例:
{
"item" : {
"answer_desc" : "xx",
"answer_flag" : 1,
"answerid" : "xx",
"answer_img" : "xx",
"answer_txt" : "xx",
"answer_summary" : "xx",
"audit_status" : "1",
"companyid" : "xx",
"docid" : "xx",
"create_time" : "2017-01-01 08:00:00",
"effect_time" : "2017-01-01",
"link_question_list" : [
{
"docid" : "xx",
"link_name" : "xx",
"link_question_title" : "xx"
}
],
"link_question_num" : "2",
"linked_flag" : "1",
"match_flag" : "0",
"questionid" : "xx",
"question_title" : "xx",
"question_typeid" : "xx",
"question_type_name" : "xx",
"robot_flag" : "1",
"smail_question_num" : "0",
"updateid" : "xx",
"update_time" : "2017-01-01 08:00:00",
"used_flag" : "0"
},
"ret_code":"000000",
"ret_msg":"操作成功"
}
# 2.8、查询相似问
请求方式:
POST
请求地址:
https://www.sobot.com/api/robot/5/query_doc_similar_list
请求参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
docid | String | 是 | 词条Id | |
robot_flag | Integer | 是 | 知识库所属机器人:0公共知识库,1机器人一 | |
key_words | String | 否 | 搜索关键字 | |
page_no | Integer | 是 | 当前页码 |
返回参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
ret_code | String | 是 | 返回编码 | |
ret_msg | String | 是 | 返回信息 | |
page_no | Integer | 是 | 页码 | |
page_count | Integer | 是 | 页数 | |
total_count | String | 是 | 总量 | |
page_size | String | 是 | 页面容量 | |
items | Object | 否 | 返回对象 |
items对象
参数 | 类型 | 名称 | 备注 |
---|---|---|---|
question_id | String | 问题id | |
company_id | String | 公司id | |
doc_id | String | 词条id | |
quection_title | String | 问法标题 | |
create_service_id | String | 创建者id | |
create_service_name | String | 创建者名 | |
create_time | Long | 创建时间 | |
type_flag | Integer | 问题类别,1标准问法,2相似问法 | |
question_status | Integer | 问题状态,-2隐藏状态 0正常,1删除 | |
update_service_id | String | 修改者id | |
update_service_name | String | 修改者名 | |
update_time | Long | 修改时间 | |
robot_flag | Integer | 知识库所属机器人:0公共知识库,1机器人一 |
请求示例:
curl https://www.sobot.com/api/robot/5/query_doc_similar_list
-X POST
-H 'token:222222222222233333333344444556ab'
-H 'content-type: application/json'
-d '
{
"docid":"11111111111111111111111114388f2e6",
"key_words":"咸",
"robot_flag":1,
"page_no":1
}'
返回示例:
{
"page_no": 1,
"page_count": 1,
"total_count": 1,
"page_size": 15,
"items": [
{
"question_id": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"company_id": "xxxxxxxxx",
"doc_id": "11111111111111111111111114388f2e6",
"question_title": "脆咸萝卜干",
"create_service_id": "xxxxxxxxxxxxxx",
"create_service_name": "张三",
"create_time": 1626674559,
"type_flag": 2,
"question_status": 0,
"update_service_id": "xxxxxxxxxxxxxx",
"update_service_name": "张三",
"update_time": 1626674559,
"robot_flag": 1
}
],
"ret_code": "000000",
"ret_msg": "操作成功"
}
# 2.9、添加知识库词条
接口说明:
接口类型:主动调用接口。
接口作用:可通过调用该接口来添加一个知识条目。
请求方式:
POST
请求地址:
https://www.sobot.com/api/robot/5/add_robot_doc
请求参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
robot_flag | String | 是 | 知识库所属机器人:0公共知识库,1机器人一 | |
question_title | String | 是 | 标准问题 | |
match_flag | String | 是 | 匹配模式:0智能匹配,1完全匹配,2包含匹配 | |
answer_desc | String | 是 | 知识库配置的答案内容,格式为HTML | |
question_typeid | String | 是 | 词条分类id | |
used_flag | String | 是 | 词条状态:0开启,1停用 | |
audit_status | String | 是 | 有效状态:1永久有效;2指定时间有效 | |
effect_time | String | 否 | 生效时间,格式:yyyy-MM-dd HH:mm:ss | |
invalid_time | String | 否 | 失效时间,格式:yyyy-MM-dd HH:mm:ss |
返回参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
ret_code | String | 是 | 返回编码 | |
ret_msg | String | 是 | 返回信息 | |
item | String | 是 | 词条ID |
请求示例:
curl https://www.sobot.com/api/robot/5/add_robot_doc
-X POST
-H 'token:c87c0dbac8c24261b9a4335fa5a51448'
-H 'content-type: application/json'
-d '
{
"robot_flag":"1",
"question_title":"xx",
"match_flag":"1",
"answer_desc":"xx",
"question_typeid":"xx",
"used_flag":"0",
"audit_status":"1",
"effect_time":"xx",
"invalid_time":"xx"
}'
返回示例:
{
"ret_code": "000000",
"ret_msg": "操作成功!",
"item": "xxxxx"
}
# 2.10、修改知识库词条
接口说明:
接口类型:主动调用接口
接口作用:可通过调用该接口来进行某个知识条目的修改操作。
请求方式:
POST
请求地址:
https://www.sobot.com/api/robot/5/update_robot_doc
请求参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
docid | String | 是 | 词条id | |
robot_flag | String | 是 | 知识库所属机器人:0公共知识库,1机器人一 | |
questionid | String | 是 | 问题id | |
question_title | String | 是 | 标准问题 | |
match_flag | String | 是 | 匹配模式:0智能匹配,1完全匹配,2包含匹配 | |
answerid | String | 是 | 答案id | |
answer_desc | String | 是 | 知识库配置的答案内容,格式为HTML | |
question_typeid | String | 是 | 词条分类id | |
used_flag | String | 是 | 词条状态:0开启,1停用 | |
audit_status | String | 是 | 有效状态:1永久有效;2指定时间有效 | |
effect_time | String | 否 | 生效时间,格式:yyyy-MM-dd HH:mm:ss | |
invalid_time | String | 否 | 失效时间,格式:yyyy-MM-dd HH:mm:ss |
返回参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
ret_code | String | 是 | 返回编码 | |
ret_msg | String | 是 | 返回信息 |
请求示例:
curl https://www.sobot.com/api/robot/5/update_robot_doc
-X POST
-H 'token:c87c0dbac8c24261b9a4335fa5a51448'
-H 'token: 4ac37cb2e9c740dba4b75a34d5358802'
-d '{
"docid":"xx",
"robot_flag":"xx",
"questionid":"xx",
"question_title":"xx",
"match_flag":"xx",
"answerid":"xx",
"answer_desc":"xx",
"question_typeid":"xx",
"used_flag":"xx",
"audit_status":"xx",
"effect_time":"xx",
"invalid_time":"xx"
}'
返回示例:
{
"ret_code": "000000",
"ret_msg": "操作成功"
}
# 2.11、删除知识库词条
接口说明:
接口类型:主动调用接口
接口作用:可通过调用该接口来删除知识库中的某个知识条目。
请求方式:
POST
请求地址:
https://www.sobot.com/api/robot/5/delete_robot_doc
请求参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
docid | String | 是 | 词条id | |
robot_flag | String | 是 | 知识库所属机器人:0公共知识库,1机器人一 |
返回参数:
参数 | 类型 | 必填 | 名称 | 备注 |
---|---|---|---|---|
ret_code | String | 是 | 返回编码 | |
ret_msg | String | 是 | 返回信息 |
请求示例:
curl https://www.sobot.com/api/robot/5/delete_robot_doc
-X POST
-H 'token:c87c0dbac8c24261b9a4335fa5a51448'
-H 'token: 4ac37cb2e9c740dba4b75a34d5358802'
-d '{
"docid":"xx",
"robot_flag":"xx"
}'
返回示例:
{
"ret_code": "000000",
"ret_msg": "操作成功"
}
# 3、错误编码
# 3.1、操作成功
业务操作成功。
错误编码 | 错误说明 |
---|---|
000000 | 操作成功(除此编码以外的编码为错误编码) |
# 3.2、系统异常
系统服务异常。
错误编码 | 错误说明 |
---|---|
900001 | token为空 |
900002 | token已失效,请重新获取 |
900003 | signature错误 |
900004 | 没有找到公司的api配置信息 |
999999 | 系统未知异常 |
# 3.3、业务异常
业务异常(需要修改接口时确定)
错误编码 | 错误说明 |
---|---|
110055 | 机器人参数不能为空 |
110050 | 请选择分类 |
110075 | 公司不能为空 |
110007 | 分类不存在 |
110026 | 词条不能为空 |
110082 | 多机器人服务已到期,如需继续使用公共知识库,请联系客服人员进行续期 |
110001 | 问题标题不能为空 |
110021 | 问题过长,最多可输入240个字符 |
110063 | 匹配模式不能为空 |
110065 | 答案不能为空 |
110022 | 答案过长 |
110050 | 请选择分类 |
110058 | 生效类型不能为空 |
110019 | 词条状态为空或有误 |
110087 | 请输入有效的接口URL,最多100个字符 |
110091 | 最多添加10个参数 |
110093 | 请填写完整的参数属性 |
110094 | 请输入有效的参数名称,最多20个字符 |
110095 | 请输入1~50的数字作为长度限制 |
110096 | 请输入有效的参数说明,最多100个字符 |
110088 | 请输入有效的token,10~32位英文或数字组合 |
110089 | 请输入有效的调用说明,最多500个字符 |
110059 | 生效时间不能为空 |
110136 | 时间范围不正确 |
110002 | 添加失败,标准问法或者相似问法重复 |
110030 | 与相似问法或标准问法重复 |
110066 | 最多添加10000个相似问法 |
110105 | 完全匹配模式下单词条相似问法条数不得超过200条 |
110106 | 包含匹配模式下单词条相似问法条数不得超过200条 |
110125 | 多轮会话的相似问法条数不得超过50条 |
110024 | 相似问法不能为空 |
110028 | 相似问法过长,最多可输入240个字符 |
110029 | 相似问法或标准问法重复 |
110025 | 相似问法重复 |
110067 | 最多添加20个关联问题 |
110031 | 被关联词条或者关联问题不能为空 |
110037 | 相关问题文案过长 |
110034 | 此词条不能被关联 |
110057 | 词条启用失败,获取企业数据错误 |
110006 | 词条超过上限 |
110026 | 词条不能为空 |
110012 | 操作词条不存在 |
110101或400101 | 当前问题的标准问法已被加入永久忽略列表,机器人不能对此问题进行智能学习。若需要机器人针对当前问题进行智能学习,请在永久忽略列表中删除对应问法。 |
# 4、多轮会话接口调用
# 4.1、应用场景
多轮会话的接口有以下两种应用场景:仅获取变量、获取消息内容。
# 仅获取变量
应用场景是在命中多轮问题后,先调用一次接口获取变量,来作为后续节点提供判断依据。比如回答「社保问题」时,需要从接口调取员工的社保所在地。接口获取的内容不直接用于对话交互。
设置入口对应以下截图。
# 获取消息内容
使用场景为机器人发送的内容需要从接口中获取。比如「查物流」时需要让用户选择订单列表;「开发票」时,将收集的信息推送至发票接口并告知客户是否成功。
下图为系统配置截图(下图为答案节点的接口配置,和条件节点稍有差异)。
# 4.2、模板样式和参数概览
# 模板一
# 模板二
# 模板三
# 模板四
# 自定义模板
将希望机器人发送的消息对应至tempStr参数,详见「请求参数」章节
# 不选模板
将希望机器人发送的消息对应至title参数,详见「请求参数」章节
# 4.3、接口配置
在多轮中调用接口时,需要先按截图路径配置接口。
您可以自定义Header参数、请求参数、输出参数。
自定义请求参数可以从多轮收集的变量中关联。输出参数将辅助多轮机器人进行后续的条件判断。
# 4.4、请求参数
如上方截图,partnerId和multiParams为固定入参,同时您可以自定义参数(多轮中收集的信息可以关联到自定义参数)
字段名称 | 字段说明 | 类型 |
---|---|---|
partnerId | 会话开始时,您传入智齿的客户的对接ID。未传则为空 | 固定参数 |
multiParams | 会话开始时,您传入的multiParams参数,json键值对格式,如:{"city":"北京","category":"衬衫"}。未传则为空 | 固定参数 |
source | 会话渠道。0为桌面网站(PC),2为APP,4为移动网站(H5) | 固定参数 |
robotNo | 调用接口的机器人ID,详见机器人信息中的robotId | 固定参数 |
docId | 调用本接口的问题ID | 固定参数 |
自定义参数 | 您自定义的请求参数。值来源于多轮问题的具体配置 | 自定义参数 |
# 请求示例
curl https://xxxx.com/api/xxxx
-X POST
-H "Content-Type:application/x-www-form-urlencoded"
-H "自定义Header1:header值1" //后台自定义的header参数1
-H "自定义Header2:header值2" //后台自定义的header参数2
-D "partnerId=xxx&multiParams={\"xx\":\"xx\"}&token=xxxx&source=0&robotNo=1&docId=xxxx&自定义参数名称1=值1&自定义参数名称2=值2//请求参数部分,分为固定参数和后台自定义参数两部分
# 4.5、返回参数
多轮使用场景有多种情况,请您统一使用 list 形式,按以下规范返回,包括不涉及列表的情况(自定输出义参数也请放置在list中)。返回参数必须在5秒内推送,否则机器人将按未找到答案处理。
# 请注意,title参数必传,详见下文示例
# 返回示例-正常情况
"code":"000000"表示正常情况 , 比如查快递时,用户名下有订单。规范如下:
{
"code": "000000", // '000000'表示成功
"robotMsg": "机器人消息", //如传入,将替代界面配置的「机器人提问引导」「答案引导文案」。可以在文案中加入“\n”实现换行效果(限新版PC/H5(接入url含“V2”)、2.8.2及以上版本SDK)。注意,模板类型,模板类型选择「不选模板」时,请将机器人发送的文本内容通过下面的"title"参数传输
"list": [
{
"id": "参数ID",
"title": "标题", //必须返回参数 。 模板类型选择「不选模板」时,请将机器人发送的文本内容通过本参数传输
"summary": "摘要",
"tag": "标签 (可显示多个项)",
" label": "价格||评分||多少人想看||人数等一切非多个标签的展示项",
"thumbnail": "预览图片地址",
"anchor": "点击跳转地址",
},
{
"id": "参数ID",
"title": "标题",
"summary": "摘要",
"tag": "标签 (可显示多个项)",
" label": "价格||评分||多少人想看||人数等一切非多个标签的展示项",
"thumbnail": "预览图片地址",
"anchor": "点击跳转地址"
}
]
}
# 返回示例-异常情况
"code":"000001"表示异常情况,比如查快递时,用户名下没有订单。
此时机器人将发送e rrorMsg返回的内容,并将终止多轮对话。
{
"code": "000001", // '000001'表示接口返回自定义异常提示信息
"errorMsg": "异常信息描述" //机器人展示内容
}
# 4.6、案例
第三方的接口如果需要前后关联,就需要通过自定义参数来完成。比如 「我要看电影」这个多轮,第一个节点是「城市节点:请您点击所在的城市」,第二个节点是「影院节点:请您选择电影院」。此时电影院的可选列表取决于第一轮选择的城市,需要将第一轮接口的参数进行传递。
那么 ,第一个 节点获取「获取城市接口」返回的接口结果是:
{
"code": "000000 '000000代表成功'",
"list": [
{
"title": "北京",
"cityId": "1" //城市 ID
},
{
"title": "上海",
"cityId": "2" //城市 ID
}
]
}
在配置「获取电影院接口」时, 需要加入 cityId 这个 请求 参数
在 配置选择影院的节点时, 需要将 「城市」节获取的内容,关联到「获取电影院接口」的自定义请求参数cityId上
如上所示,当用户 在「城市」节点 点选了 「 北京 」 , 「获取电影院接口」 会 以 cityId = 1 去请求可选的影院。
# 5、单轮会话接口调用
# 5.1、应用场景
智齿客服机器人除了可以进行基于知识库内容的问答外,还能够进行基于第三方接口的信息调用。
比如快递公司希望用户可以在与机器人沟通时自助查询快递情况,就可以针对此场景在知识库中设立一个机器人调用快递查询接口的问题。
当用户交互时若触发该问题,机器人就可以将用户希望查询的快递单号传递给查询接口,再将查询接口返回的信息发送给用户,实现用户的自助查询。
比如,用户输入“订单查询:12345678”,机器人就会调用订单查询接口,并将用户信息以及用户输入的订单号“12345678”传递给查询接口,若查询接口正常返回了查询结果,机器人将会把查询结果展示给用户。
# 5.2、如何设置
设置项说明
对于企业版以及更高级版本的用户,在知识库中点击添加问题时,可以看到能够选择“接口调用”类型。选择后,将出现相关的设置项。
其中各设置项的含义如下:
标准问法:用户输入中触发接口查询的关键字。该关键字必须在一次输入的开头。
比如,设置标准问法为“订单查询”,则“订单查询:12345”可以正确触发接口调用,“能不能订单查询”将不会触发接口调用。接口调用问法的匹配优先级会高于其他问法,为关键字匹配,但为了避免造成知识库维护的混乱,请尽量避免与其他问题的标准问法一致或有包含关系。
接口URL:调用接口的地址。比如:
http://www.test.com/Order
参数:需要机器人从用户输入内容中抽取的参数,并在调用接口时进行传递。
参数名称:传递该参数时使用的参数名,比如,OrderID,机器人在调用接口时将给OrderID参数赋值,并进行传递。
长度限制:限制此参数的长度,若用户输入的参数超过此长度,机器人将向用户展示调用说明。
参数说明:对此参数的备注说明信息。机器人不会使用此信息。
分隔符:与前一个参数或标准问法关键字区分开的符号,可以设置为空格,冒号,逗号,下划线,括号等。
token:调用接口时传递的token,可随机生成,也可自定义。可作为智齿客服机器人在调用接口时的身份认证。
调用说明:当用户触发了接口调用,但未正确输入需要的参数时,机器人将把此处设定的内容展示给用户。
超时说明:在调用接口时若返回错误信息或超时,机器人将把此处设定的内容展示给用户。
选择分类:该问题在知识库中的分类。
生效时间:该问题的生效时间。
启用状态:该问题的启用状态。
设置示例
标准问法:天气查询
接口URL:http://www.test.com/weather/query?
添加参数:
参数名称 | 长度限制 | 参数说明 | 分隔符 |
---|---|---|---|
key | 40 | 调用接口 | # |
cityname | 10 | 查询城市名称 | # |
token:de8devfjtf8cj7eogi9el(随机生成)
调用说明:如果您想天气查询请按照如下格式提问:天气查询#ddXXXXXXXXXXXXXXXX12dd#上海
超时说明:网络连接超时,请稍后重试
触发调用说明
对于上例,用户在输入不同内容时的情况说明。
“查一下天气”(不触发接口调用)
“怎么天气查询呢?”(不触发接口调用)
“天气查询”(触发接口调用,但参数输入错误,机器人返回调用说明内容给用户)
“天气查询:北京”(触发接口调用,但参数输入错误,机器人返回调用说明内容给用户)
“天气查询#123456#上海”(触发接口调用,机器人将调用第三方接口,并将123456作为key参数值,上海作为cityname参数值进行传递)
参数传递
在进行接口调用时,机器人会以POST方式传递参数。
固定参数
固定参数是指无论如何进行设置,在调用接口时机器人都会传递的参数。包括:
partnerid:用户对接ID,有关信息可以查询《智齿客服接入指南》
token:在设置时填写的Token字段
自定义参数
自定义参数是指在设置时添加的参数,机器人将按照用户输入顺序及分隔符提取参数,若参数提取正确,将向接口进行传递。
# 5.3、接口返回格式
接口返回结果应为JSON格式,应包含以下参数:
名称 | 类型 | 说明 |
---|---|---|
ret_code | int | 查询状态返回码,0为查询正确返回,1为查询错误返回 |
ret_message | string | 查询返回结果,即展示给用户的信息,支持基本的html标签,包括图片、文字字体及排版代码等。 |
接口返回数据示例:
{
"ret_code": 0,
"ret_message": "今天是星期3,农历二月初四,现在温度为:5℃,湿度为:12,风向为:北风,风力为:3级。"
}
# 5.4、其他注意事项
接口调用超时时长
当调用接口在2000毫秒内没有返回有效结果时,机器人将判定接口调用超时,向用户展示调用超时说明。
编码格式
在进行接口调用时,机器人将以UTF-8格式进行编码传递参数。对于接口返回数据,也应使用UTF-8编码。
返回答案长度
建议返回的答案内容长度在2000字以内。过长的答案会影响用户阅读的效率,也不利于进行展示。