# 开放接口文档

# 配置信息

例如:

  • APPID: xxxxxxxxxxxxxxx
  • TOKEN: xxxxxxxxxxxxxxx
  • EncodingAESKey: xxxxxxxxxxxxxxx

# 接口信息

# 1. 获取signature接口:

https://chatbot.weixin.qq.com/openapi/sign/{TOKEN}

接口类型:

POST请求

参数说明:

字段 类型 是否必填 描述
username string 用户昵称
avatar string 用户头像
userid string 用户ID(可以是任何值)

返回值说明:

字段 类型 描述
signature string 请求接口的signature,长度500个字节左右
expiresIn number 过期时间

返回格式:

{
    signature: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImp0aSI6IjI2NTQ0NzYzLTk1NzctNDZlNS1iOTFlLTA3NjAyMzhiMjUwNSIsImlhdCI6MTU4NjA5Nzc4MSwiZXhwIjoxNTg2MTAxMzgxfQ.qugHipCyBnONQRGY2fadm1LH-bLi0TrVqam3vZTpRcI
    expiresIn: 7200
}

signature 也可以在本地通过jwt签名得到

const signature = jwt.encode(
    EncodingAESKey,
    {
        username: "some persone",
        userid: "alsjdasf12",
        avatar:
            "https://res.wx.qq.com/a/wx_fed/weixin_portal/res/static/img/1L3ryyg.png",
    },
    "HS256",
);

请求示例:

获取signature

# 2. 智能对话接口:

https://chatbot.weixin.qq.com/openapi/aibot/{TOKEN}

接口类型:

POST请求

参数说明:

字段 类型 是否必填 描述
signature string 上一步获取到的 signature 返回值
query string 用户发送的消息
env string 默认是online, debug是测试环境,online是线上环境
first_priority_skills Array[string] 限定技能命中范围 比如:["技能1"],只匹配命中“技能1”中的所有问答内容
second_priority_skills Array[string] 限定技能命中范围 比如:["技能2"],只匹配命中“技能2”中的所有问答内容,比first_priority_skills命中优先级低

请求示例:

对话

返回值说明:

字段 类型 描述
ans_node_id int32 技能id
ans_node_name string 分类/技能名称
title string 标准问题/意图名称
answer string 命中的回答
answer_type string 回答的类型
msg array 回答详细信息(已废弃)
confidence float 回答信心指数
options Array<Option> 推荐问题列表(有推荐时才出现该字段)
from_user_name string 发起query的用户,对应签名接口的userid
to_user_name string 接受query的机器人
status string 机器人回复的状态, 可能的数值:FAQ、NOMATCH、CONTEXT_FAQ、GENERAL_FAQ、FAQ_RECOMMEND
msg_id string 消息id
query string 用户发送的消息

推荐问题Option字段说明:

字段 类型 描述
ans_node_name string 推荐的分类
title string 推荐标准问题
answer string 推荐回答
confidence float 推荐信息指数

返回格式:

{
    "ans_node_id": 17130001,
    "ans_node_name": "猜拳",
    "answer": "开始游戏了",
    "answer_open": 1,
    "answer_type": "text",
    "article": "",
    "confidence": 1,
    "create_time": "1652946752175",
    "dialog_session_status": "NONE",
    "dialog_status": "NONE",
    "event": "",
    "from_user_name": "dTo6FS96YzJ",
    "intent_confirm_status": "",
    "is_default_answer": false,
    "list_options": false,
    "msg": [
        {
            "ans_node_id": 17130001,
            "ans_node_name": "猜拳",
            "article": "",
            "confidence": 1,
            "content": "2",
            "debug_info": "",
            "event": "",
            "list_options": false,
            "msg_type": "text",
            "opening": "",
            "request_id": 130,
            "resp_title": "开始猜拳",
            "scene_status": "",
            "session_id": "",
            "status": "FAQ",
            "take_options_only": false
        }
    ],
    "msg_id": "31904d53",
    "opening": "",
    "request_id": 130,
    "ret": 0,
    "scene_status": "",
    "session_id": "",
    "skill_id": "",
    "skill_name": "猜拳",
    "slot_info": [],
    "slots_info": [],
    "status": "FAQ",
    "take_options_only": false,
    "title": "开始猜拳",
    "to_user_name": "oEUI4g02QjGf54nLxtexWl01UkytI2",
    "msgtype": "text",
    "query": "开始猜拳",
    "rid": "31904d53"
}

对话平台问答策略一共有三段:

  1. 第一段“精准命中”:用户问题得分大于机器人账号阈值,此时为精准命中,status字段为 FAQ、CONTEXT_FAQ、GENERAL_FAQ 等值
  2. 第二段“问题推荐”:用户问题得分小于机器人账号阈值,但大于该阈值与推荐阈值的乘积,此时为问题推荐,status字段为FAQ_RECOMMEND,且此时options会有相应的推荐结果
  3. 第三段“未命中”:用户问题得分小于机器人账号阈值与与推荐阈值的乘积, 此时为未命中,status字段为NOMATCH

# 错误码说明:

{
    errcode: 1001,
    errmsg: "TOKEN is not valid"
}
错误码 描述
1001 token无效
1002 机器人审核没有通过
1003 签名缺少userid字段
1004 签名字段为空
1005 签名过期或无效
1006 签名校验失败,缺少userid字段