接口对接文档规范说明(v0.18)
updated @ 2022.06.09
[TOC]
<div style="page-break-after: always;"></div>
一、提交聊天信息到对话后台的协议
功能描述 | 提交群聊信息到对话后台并等待数据返回 |
---|---|
接口地址 | http://b-test.fz-l.com:88/api/chat/group |
接口地址(助手) | http://b-test.fz-l.com:81/api/chat/assistant |
调用方式 | POST |
Body类型 | application/json |
生产环境域名 | http://b.fz-l.com |
生产环境域名(助手) | http://b.fz-l.com:81 |
1. NLU 语义请求参数
服务提供方提供一对 app_key/app_secret 以供接入方证明调用的技能和表明身份
Key | Type | Value |
---|---|---|
app_key | String | 技能 ID |
session_id | String | 会话 ID,一般指群聊 ID,用于确定单一会话 |
timestamp | Integer | 请求发出的时间,unix毫秒时间戳 |
user_nick | String | 用户昵称 |
user_token | String | 用户 TOKEN ,用于确定单一用户 |
user_ask | String | 用户输入内容 |
message_id | String | 消息 ID,用于验证消息的有效性,以及重复请求幂等,区分唯一消息,使用md5(appSecret+user_token+timestamp) |
2. NLU 语义请求示例
样例中的app_key为 testSkill,appSecret为 123456
md5(123456token1602687452461) 为 95b106504b59f7dfc7e45585b5f75657
{
"app_key": "testSkill",
"session_id": "QQ群ID",
"timestamp": 1602687452461,
"user_nick": "用户昵称",
"user_token": "token",
"user_ask": "用户问句内容",
"message_id": "95b106504b59f7dfc7e45585b5f75657"
}
<div style="page-break-after: always;"></div>
3. NLU 语义响应参数
Key | Type | Value |
---|---|---|
ret_code | Integer | 请求处理返回值,0代表成功,否则为异常 |
message_id | String | 消息 ID,请求中发过来的消息ID |
elapsed | Float | 响应耗时 |
timestamp | Integer | 响应回复时服务器的时间戳 |
answers | Array<Answer> | 回复内容,数组中每一段代表一条回复,Answer数据结构参见下文 |
answers.type | String | 代表该条回复的类型,可能值为 text, image, voice, video |
answers.content | String | 当 type 为 text 时,代表文字回复。否则为对应类型回复的资源地址 |
arks | Array<Ark> | 附加的Ark信息,序号(下标)为answers.content里对应数字的值,详情参见第7节 |
task_confidence | Float | 0~1之间,代表回复的置信度 |
task_finished | Integer | 0为正常游戏,10为正常退出,20为命令词主动退出 |
service | String (Enum) | 当前服务(玩法ID),用于确定 stats 字段类型接口,有效值域参见第 5 节 |
stats | Map<String, Object> | 打点统计数据,详情参见第 5 节 |
reward_state | Integer | 代表是否需要进行奖励结算,平时为0。仅当在活动期间,且task_finished=10时有意义,10为不奖励,20为奖励(问答和问答签到) |
settlement | Settlement | 结算统计数据,详情参见第6节 |
<div style="page-break-after: always;"></div>
4. NLU 语义响应示例
{
"ret_code": 0,
"message_id": "95b106504b59f7dfc7e45585b5f75657",
"elapsed": 0,
"timestamp": 1602728692078,
"answers": [
{
"type": "text",
"content": "文字回复内容"
},
{
"type": "image",
"content": "http://图片回复地址.jpg"
},
{
"type": "ark",
"content": "0"
}
],
"arks": [
{
"type": "ARK_DRAW",
"contents": "...."
}
],
"task_confidence": 1.0,
"task_finished": 10,
"service": "ASK_AND_ANSWER",
"stats": {
"question_id": "5fbe53faadcdd3cec5224579",
"quit_reason": "CMD",
"answer_status": false
},
"reward_state": 10,
"settlement": {
"started_at": 1610329665,
"rounds": 10,
"user_answer_stat": [
{
"user_token": "token",
"user_nick": "用户昵称",
"correct_count": 1,
""
}
]
}
}
<div style="page-break-after: always;"></div>
5. NLU 语义响应打点上报数据
根据响应中的 service 字段不同,stats返回的数据点位也不一样,详细参见以下说明。
公共信息
- session_id 请求中传过来的会话ID
- user_token 请求中的QQ用户TOKEN(基本等价于OPENID
- timestamp 响应中的响应时间戳
ASK_AND_ANSWER 你问我答
Key | Type | Value |
---|---|---|
question_id | String (ObjectId) | 问题ID。后台管理中自动生成的问题 ID |
quit_reason | Enum | 退出原因。有效值为 CMD - 命令词退出 FINISH - 正常结算退出 |
answer_status | Boolean | 本轮是否答对。注意特别的对于第一轮进入该值为null |
question_pass | Boolean | 纠错达到上限,跳到下一题 |
score | Integer | 当前玩家目前得分 |
players | Integer | 本轮游戏参与人数 |
GUESS_IDIOM 成语接龙
Key | Type | Value |
---|---|---|
idiom_word | String | 当前机器出的成语 |
quit_reason | Enum (String) | 退出原因。有效值为 CMD - 命令词退出 FINISH - 正常结算退出 |
answer_status | Enum (Integer) | 本轮答案校验结果。有效值为 0 - 回答正确 1 - 不知道/不会索要提示 2 - 询问含义 3 - 回答的不是成语 4 - 回答的是成语但是首字母不正确 5 - 回答的成语之前已经出现过 |
hint_step | Enum (Integer) | 索要提示阶段。有效值为 0 - 未索要提示 1 - 不知道1,降难度提示 2 - 不知道2,AXBX提示 3 - 不知道3,兜底正确答案+解释 |
score | Integer | 当前玩家目前得分 |
players | Integer | 本轮游戏参与人数 |
EVERYDAY_DRAW 普通每日签到
待定
CHANNEL_DRAW QQ频道问答签到
待定
<div style="page-break-after: always;"></div>
6. 结算统计数据
当一轮游戏结束时,会返回结算数据。
settlement 字段结构
Key | Type | Value |
---|---|---|
started_at | Long | 游戏开始时间戳,单位毫秒 |
rounds | Integer | 游戏总轮数 |
user_answer_stat | Array<UserAnswerStats> | 单个用户的结算数据 |
user_answer_stat.user_token | String | 用户 token |
user_answer_stat.user_nick | String | 用户昵称 |
user_answer_stat.correct_count | Integer | 用户答对的题目 |
<div style="page-break-after: always;"></div>
7. ARK 种类及详细结构
公共字段:
type,代表该 ark 的结构类型。
contents,代表该 ark 的实际数据。
ARK_DRAW
contents中的数据
Key | Type | Value |
---|---|---|
prompt | String | 提示 |
title | String | 标题 |
String | 副标题 | |
bg_img | String | 背景图片 |
jump_list | Array<JumpList> | 附带的链接列表(限一个) |
jump_list.url | String | 链接 |
jump_list.title | String | 链接标题 |
String | 链接颜色 |
ARK_ASSISTANT_ATTRIBUTE
contents中的数据
Key | Type | Value |
---|---|---|
attribute | String | 数值字段名称: like - 好感度 |
amount | Integer | 数值变更数量 |
operation | Enum (String) | 数值对应的操作: +:增加 -:减少 =:赋值 |
event | String | 数值变更的来源事件类型: DAILY_CHECKIN 每日签到 ...... |
<div style="page-break-after: always;"></div>
8. NLU 语义响应错误码
对于所有发生的异常,响应中会多message 和 payload 字段,协助开发调试,不需要回复给用户
ret_code | 说明 | messsage |
---|---|---|
-1 | 服务器出现未知错误 | 错误的debug信息 |
0 | 服务正常 | 无 |
1000 | 请求字段缺失 | 缺失的字段 |
1001 | 请求verify校验失败 | |
2000 | APPKEY配置不正确,请联系运维人员 |
二、各个技能返回值说明
1. 群聊服务:问答
2. 群聊服务:成语接龙
3. 群聊服务:抽签签到
4. 频道服务:频道普通/问答签到
5. 私人助手:C2C签到
三、AMS奖励下发状态回调
功能描述 | 异步回调AMS奖励下发状态 |
---|---|
接口地址 | http://b-test.fz-l.com:88/api/push/ams |
调用方式 | POST |
Body类型 | application/json |
生产环境域名 | http://b.fz-l.com |
测试环境域名 | http://b-test.fz-l.com:88 |
1. AMS奖励下发状态回调请求参数
Key | Type | Value |
---|---|---|
service | String | 活动类型,对应下发请求中的 service |
results | List<AMSRewardResult> | 状态列表,具体结构见下方 |
results.appid | String | 机器人 appid,对应下发请求中的机器人appid |
results.guildid | String | 频道 id,对应下发请求中的 guildid |
results.openid | String | 用户 openid,对应下发请求中的 openid |
results.nonce | String | 下发请求中的 nonce,用于区分同一用户不同次奖励请求 |
results.retcode | String | 下发结果状态码 |
results.msg | String | 下发结果状态信息 |
2. AMS奖励下发状态回调请求示例
{
"service": "kpl.channel.lottery",
"results": [
{
"appid": "xxxxxx",
"guildid": "xxxxxx",
"openid": "xxxxxx",
"nounce": "xxxxxx",
"retcode": "0",
"msg": "SUCCESS"
}
]
}
3. AMS奖励下发状态回调响应参数
Key | Type | Value |
---|---|---|
ret_code | Integer | 结果,0为成功 |
4. AMS奖励下发状态回调响应示例
{
"ret_code": 0
}