# 开放接口文档

# 配置信息

例如:

  • 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",
);

# 2. 智能对话接口:

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

接口类型:

POST请求

参数说明:

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

推荐问题Option字段说明:

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

返回格式:

{
  ans_node_name: "小微闲聊",
  title: "小薇兄你好",
  answer: "你好呀!",
  answer_type: "text",
  bid_stat: {
    curr_time: "20190515-18:07:37",
    err_msg: "微信通用意图.肯定.branches.s_Any@.arguments's element.slot slot does not exist!",
    latest_time: "20190523-16:06:33",
    latest_valid: false,
    up_ret: -1
  },
  confidence: 1,
  from_user_name: "o9U-85tEZToQxIF8ht6o-KkagxO0",
  status: "FAQ",
  to_user_name: "xalsjfasf1ljasjdf1",
  options: [
    {
      ans_node_id: 12355896,
      ans_node_name: "自建应用",
      answer: "您好,若自建应用消息不显示“详情”入口,请参考以下情况:LINE_BREAKLINE_BREAK1、手机端和电脑端有详情入口的应用消息一般是通过api进行推送的。通过api进行推送的详情入口不支持在微信侧显示。LINE_BREAKLINE_BREAK2、企业号或企业微信后台推送的图文消息,在微信PC侧会有“详情”入口,在企业微信手机端、PC端以及微信手机端则不会有“详情”入口。LINE_BREAKLINE_BREAK注意:微信电脑端侧仅会显示摘要和详情,不显示标题。企业微信电脑端、微信微信手机端、企业微信手机端则会显示标题和摘要。若未填写摘要,则不显示摘要。",
      confidence: 0.795230507850647,
      title: "自建应用消息没有详情入口"
    },
    ...
  ]
}

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

  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字段