一洽客服系统·工单系统-工单接口
一洽提供有限的开放接口以供用户操作工单。
目录
- 前言
- 创建外部工单
- 创建内部工单
- 获取模板配置
- 自定义字段类型
5.1 config-列表、单选、复选
5.2 config-整数列表
1. 前言
外部工单和内部工单的创建使用不同的接口。创建外部工单需要echatTag匹配网页路由,而创建内部工单需要指定客服模板id。
创建外部工单:根据echatTag确定路由->确定接待方式(接待优先级需要包含工单)->确定工单使用样式和分组->确定访客模板
创建内部工单:根据templateId确定客服模板id->确定工单使用样式和部门,配置获取参考获取模板配置
注:
- 无论是创建内部工单还是外部工单,上传的字段都需要按照对应模板的字段配置(包含字段名和字段类型)
- 所有工单创建状态默认为新建
2. 创建外部工单
通过此接口,开发者可以创建一个外部工单。
创建外部工单依赖web路由,需要保证使用的路由的接待方式包含工单。
接口地址
http请求方式: POST
https://${apiServer}/job/createVisitorJob/${appId}?accessToken=${accessToken}
get参数说明
参数 | 是否必须 | 说明 |
---|---|---|
accessToken | 是 | 接口调用凭证 |
Post数据说明
JSON数据:
参数 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
echatTag | String | 否 | 路由标签,需要根据此标签匹配路由,若未能匹配到路由,则会使用默认路由 |
requesterUserId | String | 是 | 工单请求者id标识 |
requesterUserType | byte | 是 | 工单请求者是否为会员,0:不是 1:是 |
submitStaffId | long | 否 | 工单提交者,可指定客服id,如果不传则默认为请求者提交 |
distributeUserId | long | 否 | 工单处理者,可指定客服id。如果处理者在对应的路由分组中则使用此处理者;否则处理者为空,只指定处理分组 |
title | String | 是 | 工单标题 |
content | String | 是 | 工单内容 |
jobMemo | String | 否 | 工单备注,支持最大长度512个字符 |
priority | byte | 否 | 工单优先级,1:低,2:正常,3:高,4:紧急,默认为2 |
replyEmail | String | 否 | 回复邮箱,支持最大长度50个字符 |
replyPhone | String | 否 | 回复手机号,支持最大长度50个字符 |
jobType | byte | 是 | 工单类型, 1:问题,2:事务,3:故障,4:任务 |
attachments | json | 否 | 工单附件列表,json列表,格式见后Attachment字段定义 |
requesterLan | String | 否 | 语言,如果为空则使用配置的工单默认处理语言 |
name | String | 否 | crm字段-姓名 |
phone | String | 否 | crm字段-手机号 |
String | 否 | crm字段-qq | |
String | 否 | crm字段-微信 | |
String | 否 | crm字段-邮箱 | |
address | String | 否 | crm字段-地址 |
nickName | String | 否 | crm字段-昵称 |
gender | byte | 否 | crm字段-性别,0:未知,1:男,2:女 |
memo | String | 否 | crm字段-备注 |
maritalStatus | byte | 否 | crm字段-婚姻状态,0:未知,1:未婚,2:已婚 |
age | byte | 否 | crm字段-年龄 |
birthday | String | 否 | crm字段-生日 |
c1-c20 | String | 否 | 自定义crm字段(参照后文自定义字段类型) |
t1-t10 | String | 否 | 自定义工单字段(参照后文自定义字段类型) |
Attachment字段定义:
参数 | 参数类型 | 描述 |
---|---|---|
url | String | 文件url |
name | String | 文件名称 |
size | long | 文件大小,文件字节数 |
fileType | int | 0:其它,1:语音,2:视频,3:地理位置,4:图片,如果不传则自动从文件名获取,没获取到默认为0 |
echatFileId | String | 上传文件服务成功后返回的ID |
echatFileId和 url二选一
示例:url形式
{
"attachments":[{
"fileType":4,
"name":"a.png",
"size":12442,
"url":"https://x.xx/a.png"
}
],
"requesterLan":"en",
"content":"工单内容",
"jobMemo":"工单备注",
"priority":3,
"replyEmail":"xxx@outlook.com",
"replyPhone":"18349952141",
"requesterUserId":"hy36588",
"requesterUserType":1,
"commitStaffId":79,
"distributeUserId":100,
"status":2,
"title":"标题",
"memo":"crm备注",
"c1":"2020-05-09",
"t1":"cd"
}
echatFileId 形式:
{
"attachments":[{
"echatFileId":"wwOastkPODnKtBfYTIQMEkKWmkWCSurLPRUjvQGa"
}
],
"requesterLan":"en",
"content":"工单内容",
"jobMemo":"工单备注",
"priority":3,
"replyEmail":"xxx@outlook.com",
"replyPhone":"18349952141",
"requesterUserId":"hy36588",
"requesterUserType":1,
"commitStaffId":79,
"distributeUserId":100,
"status":2,
"title":"标题",
"memo":"crm备注",
"c1":"2020-05-09",
"t1":"cd"
}
返回数据说明
返回类型:json
参数 | 类型 | 说明 |
---|---|---|
jobId | long | 工单id |
3. 创建内部工单
通过此接口,开发者可以创建一个内部工单,大体上和创建外部工单类似。只是创建外部工单依赖echatTag(路由标签),而创建内部工单依赖templateId(模板id),内部工单没有crm相关字段。
接口地址
http请求方式: POST
https://${apiServer}/job/createStaffJob/${appId}?accessToken=${accessToken}
get参数说明
参数 | 是否必须 | 说明 |
---|---|---|
accessToken | 是 | 接口调用凭证 |
Post数据说明
JSON数据:
参数 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
templateId | long | 是 | 客服模板id |
requesterStaffId | String | 是 | 工单请求者id,这里是一个客服id |
submitStaffId | long | 否 | 工单提交者,可指定客服id,如果不传则默认为请求者提交 |
distributeUserId | long | 否 | 工单处理者,可指定客服id |
title | String | 是 | 工单标题 |
content | String | 是 | 工单内容 |
jobMemo | String | 否 | 工单备注 |
priority | byte | 否 | 工单优先级,1:低,2:正常,3:高,4:紧急 |
replyEmail | String | 否 | 回复邮箱 |
replyPhone | String | 否 | 回复手机号 |
jobType | byte | 是 | 工单类型, 1:问题,2:事务,3:故障,4:任务 |
attachments | json | 否 | 工单附件列表,json列表,格式见前文Attachment字段定义 |
requesterLan | String | 否 | 语言,如果为空则使用配置的工单默认处理语言 |
t1-t10 | String | 否 | 自定义工单字段(参照后文自定义字段类型) |
返回数据说明
返回类型:Json
参数 | 类型 | 说明 |
---|---|---|
jobId | long | 工单id |
4. 获取模板配置
通过此接口,开发者可以根据模板id查询模板当前的详细字段配置。
接口地址
http请求方式: GET
https://${apiServer}/job/config/${appId}/detailTemplate?accessToken=${accessToken}&templateId=${templateId}
get参数说明
参数 | 是否必须 | 说明 |
---|---|---|
accessToken | 是 | 接口调用凭证 |
templateId | 是 | 模板id,可以再客服端-工单-工单模板处查看 |
返回数据示例
{
"id":456,
"name":"默认模板",
"description":"请尽可能地详细描述工单问题",
"selectedFields":[
{
"fieldName":"t1",
"label":"城市列表",
"placeHolder":"请选择",
"isRequired":true,
"sort":"1",
"type":3,
"lengthLimit":521,
"config":[
{
"item":"成都",
"sort":1,
"value":"cd"
},
{
"item":"绵阳",
"sort":2,
"value":"my"
}
]
},
{
"fieldName":"t2",
"label":"数字列表",
"placeHolder":"请选择",
"isRequired":true,
"sort":"2",
"type":7,
"lengthLimit":521,
"config":{
"end":10,
"start":1,
"stepSize":2
}
}
]
}
返回数据说明
返回类型:json
参数 | 类型 | 说明 |
---|---|---|
id | long | 模板id |
name | String | 模板名称 |
description | String | 模板说明 |
selectedFields | list | 选择的字段,对象列表,见下 |
其中selectedFields是一个列表,每个元素表示一个该模板选择的一个字段,结构如下
参数 | 类型 | 说明 |
---|---|---|
fieldName | String | 字段名,创建工单时使用此参数 |
label | String | 字段label |
placeHolder | String | placeHolder |
isRequired | boolean | 字段是否必须 |
sort | int | 排序序号 |
type | byte | 字段类型,参考自定义字段类型 |
lengthLimit | int | 字段内容长度限制 |
config | obj | 字段配置,根据type不同可能有不同的类型,参考自定义字段类型 |
5. 自定义字段类型
目前支持的自定义字段类型包含:
类型 | type | config |
---|---|---|
短文本 | 1 | 没有config,普通文本 |
文本 | 2 | 没有config,普通文本 |
列表 | 3 | config描述 |
单选 | 4 | config描述 |
复选 | 5 | config描述 |
日期 | 6 | 没有config,普通文本,格式:2020-01-01 |
整数列表 | 7 | config描述 |
5.1 config-列表、单选、复选
类型: List
字段:
字段 | type | 描述 |
---|---|---|
item | String | 项目标签 |
value | String | 值 |
sort | int | 排序序号 |
示例:
{
"fieldName":"t1",
"label":"列表",
"sort":"2",
"type":3,
"lengthLimit":521,
"placeHolder":"请选择",
"isRequired":true,
"config":[
{
"item":"成都",
"sort":1,
"value":"cd"
},
{
"item":"绵阳",
"sort":2,
"value":"my"
}
]
}
使用:
- 假设将字段t1配置为列表(单选):
标签=成都,值=cd
标签=绵阳,值=my
选中成都,则上传:
{
"t1":"cd"
}
- 假设将字段t1配置为复选,选中成都和绵阳,则上传:
{
"t1":"cd,my"
}
5.2 config-整数列表
类型: Object
字段:
字段 | type | 描述 |
---|---|---|
start | int | 开始数值 |
end | int | 结束数值 |
stepSize | int | 步长 |
示例:
上述json表示将字段t1配置为整数列表:
最小值=1
最大值=10
步长=2
那么数值的有效值为:1,3,5,7,9
选中7,则上传: