客服后台接入文档
主要内容:
- 1.游戏推送未回复问题接口
- 2.游戏接收回复问题接口
- 3.客服后台获取游戏未回答回答问题接口(非必接)
1.游戏推送未回复问题接口
url地址:
http://www.gzyouai.com/sync/data/question?app_id=xxx&t=xx&sign=xxx(正式地址)
http://10.21.210.18:8009/sync/data/question?app_id=xxx&t=xxx&sign=xxx(北院内网测试地址)
接口描述:游戏方推送未回复问题至客服后台接口
调用方式:POST
请求参数:
URL参数:
字段名称 | 字段说明 | 类型 | 必填 | 备注 |
---|---|---|---|---|
app_id | 客服后台分配给接入游戏的唯一标识 | string | Y | |
t | 时间戳,单位为秒 | string | Y | 10位时间戳 |
sign | 根据url参数、body参数和app_key计算的签名 | string | Y | 签名方式见最后 |
BODY参数(由字典组成的数组,详情见截图例子):
字段名称 | 字段说明 | 类型 | 必填 | 备注 |
---|---|---|---|---|
id | 问题ID | int | Y | |
channel_name | 渠道名称 | string | Y | |
question | 问题内容 | string | Y | |
question_type | 问题类型 | int | Y | |
player_name | 玩家昵称 | string | Y | |
vip | VIP级别 | int | Y | |
create_time | 提问时间 | datetime | Y | 格式如”2022-08-31 16:55:00” |
player_id | 玩家ID | int | Y | |
server_name | 服务器名称 | string | Y | |
network_type | 网络类型 | string | N | |
phone_type | 手机型号 | string | N | |
例子: | ||||
![]() |
请求返回结果:
上传成功返回的信息如下:
{'result' : 'succeed'}
上传失败返回的信息如下:
{'Error':'错误信息'}
玩家评分内容:
当需要更新某问题的玩家评分和查看时间,则上传的body如下(body也是由字典组成的数组,详情见截图例子):
字段名称 | 字段说明 | 类型 | 必填 | 备注 |
---|---|---|---|---|
id | 问题ID | int | Y | |
channel_name | 渠道名称 | string | Y | |
server_name | 服务器名称 | string | Y | |
score | 玩家评分 | int | Y | |
read_time | 玩家查看问题回复时间 | datetime | Y | 格式如”2022-08-31 16:55:00” |
例子: | ||||
![]() |
注意事项:
一条问题记录为数组里面的一个字典(哈希),每条问题记录都是数组里的一个元素。
2. 游戏接收回复问题接口(游戏方提供)
接口描述:当客服提交问题回复后,客服后台会把问题回复推送至游戏提供的接口
调用方式:POST
请求参数:
BODY参数(由字典组成的数组,详情见截图例子):
字段名称 | 字段说明 | 类型 | 必填 | 备注 |
---|---|---|---|---|
id | 问题ID | int | Y | |
answer | 客服回复内容 | string | Y | |
answer_name | 客服姓名 | string | Y | |
answer_time | 客服回复时间 | datatime | Y | 格式如”2022-08-31 16:55:00” |
例子: | ||||
![]() |
请求返回结果:
游戏方成功更新数据后,请用json格式回复:
{'result' : 'succeed'}
失败请用json格式回复:msg为错误信息
{'result' : 'failed', 'msg ': 'error msg'}
3.客服后台获取游戏未回答回答问题接口(游戏方提供,非必接)
http://xxxxxx?app_id=xxx&t=xxx&sign=xxx(跟上面游戏方提供的接口一样,不过请求方式为GET方式)
接口描述:此接口用于客服后台主动获取游戏央服一周内(根据url中的时间戳计算)未回复的问题,当客服后台不幸宕机,游戏方上报问题失败,会漏掉玩家问题,此时由客服后台主动去获取未回复的问题,降低问题丢失率。
调用方式:GET
返回的BODY参数:(跟游戏推送未回复问题的接口是一样的)
字段名称 | 字段说明 | 类型 | 必填 | 备注 |
---|---|---|---|---|
id | 问题ID | int | Y | |
channel_name | 渠道名称 | string | Y | |
question | 问题内容 | string | Y | |
question_type | 问题类型 | int | Y | |
player_name | 玩家昵称 | string | Y | |
vip | VIP级别 | int | Y | |
create_time | 提问时间 | datetime | Y | 格式如”2022-08-31 16:55:00” |
player_id | 玩家ID | int | Y | |
server_name | 服务器名称 | string | Y | |
network_type | 网络类型 | string | N | |
phone_type | 手机型号 | string | N | |
例子: | ||||
![]() |
4.sign签名算法
sign由app_key、url中的参数和body里面的参数共同计算出来,计算方法如下:
假设初始的url为:http://xxxxx/sync/data/question?app_id=A&t=B,body为:[{'kB': ‘B1’, ‘kA’: ‘A1’}, {‘kB’: ‘B2’, ‘kA’: ‘A2’}],先根据字母顺序将app_id和t进行排序,得到[‘app_id’, ‘t’],按照这个顺序,以”key=value”的形式,用&连接字符串,即:”app_id=A&t=B”,
然后再添加app_key的值(app_key由客服后台人员提供),用&连接字符串,即:”app_id=A&t=B&C”,
然后遍历body数组中的元素,将每个元素所有的key按照字典顺序排序后,组成key=value的形式,用&连接字符串,比如上述的body会转换为“kA=A1&kB=B1&kA=A2&kB=B2”,将此字符串加入到加密字符串中,用&连接字符串,得到:”app_id=A&t=B&C&kA=A1&kB=B1&kA=A2&kB=B2”,
然后对此字符串做MD5加密得到32位sign的值。
最终请求的url为:http://xxxxx/sync/data/question?app_id=A&t=B&sign=xxx,
body为:[{‘kB’: ‘B1’, ‘kA’: ‘A1’}, {‘kB’: ‘B2’, ‘kA’: ‘A2’}]
注意事项
进行sign签名的字符串不用进行额外的url编码,在签名中如果出现null值,统一使用空字符串,即body里面出现{‘A’=null}的话,加密字符串则为’A=’。