接口对接文档规范说明(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 以供接入方证明调用的技能和表明身份

KeyTypeValue
app_keyString技能 ID
session_idString会话 ID,一般指群聊 ID,用于确定单一会话
timestampInteger请求发出的时间,unix毫秒时间戳
user_nickString用户昵称
user_tokenString用户 TOKEN ,用于确定单一用户
user_askString用户输入内容
message_idString消息 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 语义响应参数

KeyTypeValue
ret_codeInteger请求处理返回值,0代表成功,否则为异常
message_idString消息 ID,请求中发过来的消息ID
elapsedFloat响应耗时
timestampInteger响应回复时服务器的时间戳
answersArray<Answer>回复内容,数组中每一段代表一条回复,Answer数据结构参见下文
answers.typeString代表该条回复的类型,可能值为 text, image, voice, video
answers.contentString当 type 为 text 时,代表文字回复。否则为对应类型回复的资源地址
arksArray<Ark>附加的Ark信息,序号(下标)为answers.content里对应数字的值,详情参见第7节
task_confidenceFloat0~1之间,代表回复的置信度
task_finishedInteger0为正常游戏,10为正常退出,20为命令词主动退出
serviceString (Enum)当前服务(玩法ID),用于确定 stats 字段类型接口,有效值域参见第 5 节
statsMap<String, Object>打点统计数据,详情参见第 5 节
reward_stateInteger代表是否需要进行奖励结算,平时为0。仅当在活动期间,且task_finished=10时有意义,10为不奖励,20为奖励(问答和问答签到)
settlementSettlement结算统计数据,详情参见第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返回的数据点位也不一样,详细参见以下说明。

公共信息

  1. session_id 请求中传过来的会话ID
  2. user_token 请求中的QQ用户TOKEN(基本等价于OPENID
  3. timestamp 响应中的响应时间戳

ASK_AND_ANSWER 你问我答

KeyTypeValue
question_idString (ObjectId)问题ID。后台管理中自动生成的问题 ID
quit_reasonEnum退出原因。有效值为
CMD - 命令词退出
FINISH - 正常结算退出
answer_statusBoolean本轮是否答对。注意特别的对于第一轮进入该值为null
question_passBoolean纠错达到上限,跳到下一题
scoreInteger当前玩家目前得分
playersInteger本轮游戏参与人数

GUESS_IDIOM 成语接龙

KeyTypeValue
idiom_wordString当前机器出的成语
quit_reasonEnum (String)退出原因。有效值为
CMD - 命令词退出
FINISH - 正常结算退出
answer_statusEnum (Integer)本轮答案校验结果。有效值为
0 - 回答正确
1 - 不知道/不会索要提示
2 - 询问含义
3 - 回答的不是成语
4 - 回答的是成语但是首字母不正确
5 - 回答的成语之前已经出现过
hint_stepEnum (Integer)索要提示阶段。有效值为
0 - 未索要提示
1 - 不知道1,降难度提示
2 - 不知道2,AXBX提示
3 - 不知道3,兜底正确答案+解释
scoreInteger当前玩家目前得分
playersInteger本轮游戏参与人数

EVERYDAY_DRAW 普通每日签到

待定

CHANNEL_DRAW QQ频道问答签到

待定

<div style="page-break-after: always;"></div>

6. 结算统计数据

当一轮游戏结束时,会返回结算数据。

settlement 字段结构

KeyTypeValue
started_atLong游戏开始时间戳,单位毫秒
roundsInteger游戏总轮数
user_answer_statArray<UserAnswerStats>单个用户的结算数据
user_answer_stat.user_tokenString用户 token
user_answer_stat.user_nickString用户昵称
user_answer_stat.correct_countInteger用户答对的题目

<div style="page-break-after: always;"></div>

7. ARK 种类及详细结构

公共字段:
type,代表该 ark 的结构类型。
contents,代表该 ark 的实际数据。

ARK_DRAW

contents中的数据

KeyTypeValue
promptString提示
titleString标题
sub_titleString副标题
bg_imgString背景图片
jump_listArray<JumpList>附带的链接列表(限一个)
jump_list.urlString链接
jump_list.titleString链接标题
jump_list.colorString链接颜色

ARK_ASSISTANT_ATTRIBUTE

contents中的数据

KeyTypeValue
attributeString数值字段名称:
like - 好感度
amountInteger数值变更数量
operationEnum (String)数值对应的操作:
+:增加
-:减少
=:赋值
eventString数值变更的来源事件类型:
DAILY_CHECKIN 每日签到
......

<div style="page-break-after: always;"></div>

8. NLU 语义响应错误码

对于所有发生的异常,响应中会多message 和 payload 字段,协助开发调试,不需要回复给用户

ret_code说明messsage
-1服务器出现未知错误错误的debug信息
0服务正常
1000请求字段缺失缺失的字段
1001请求verify校验失败
2000APPKEY配置不正确,请联系运维人员

二、各个技能返回值说明

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奖励下发状态回调请求参数

KeyTypeValue
serviceString活动类型,对应下发请求中的 service
resultsList<AMSRewardResult>状态列表,具体结构见下方
results.appidString机器人 appid,对应下发请求中的机器人appid
results.guildidString频道 id,对应下发请求中的 guildid
results.openidString用户 openid,对应下发请求中的 openid
results.nonceString下发请求中的 nonce,用于区分同一用户不同次奖励请求
results.retcodeString下发结果状态码
results.msgString下发结果状态信息

2. AMS奖励下发状态回调请求示例

{
    "service": "kpl.channel.lottery",
    "results": [
        {
            "appid": "xxxxxx",
            "guildid": "xxxxxx",
            "openid": "xxxxxx",
            "nounce": "xxxxxx",
            "retcode": "0",
            "msg": "SUCCESS"
        }
    ]
}

3. AMS奖励下发状态回调响应参数

KeyTypeValue
ret_codeInteger结果,0为成功

4. AMS奖励下发状态回调响应示例

{
    "ret_code": 0
}
Last modification:September 3, 2024
如果觉得我的文章对你有用,请随意赞赏