微信公众号接入AI聊天机器人

2020-08-20 20:32:26

本文主要介绍如何利用koa框架接入智能聊天机器人实现对用户消息的回复。

# 实现思路

用户在公众号会话内发送消息后,后台接收用户的文本消息并将消息发送至智能机器人API后转发API的返回结果给用户(是不是很简单😄 )。

# 开发准备

注册一个智能机器人账号,可以选择图灵机器人、茉莉机器人、青云客机器人...等等,获取key和密钥

# 关键代码

本示例实现了图灵机器人、青云客及小茉莉机器人的简单接入
app.js主要代码


const getRawBody = require('raw-body')
const xml2js = require('xml2js')
const rp = require('request-promise')
const config = require('./config.js')

router.post('/', async (ctx, next) => {
  var data = await getRawBody(ctx.req, {
    length: ctx.length,
    limit: '1mb',
    encoding: ctx.charset,
  })
  const xml = await parseXMLAsync(data)
  const createTime = Date.parse(new Date())
  const msgType = xml.xml.MsgType[0]
  const toUserName = xml.xml.ToUserName[0]
  const toFromName = xml.xml.FromUserName[0]

  if (msgType == 'text') {

    // 接入智能聊天机器人自动回复
    // 1.图灵机器人
    let txt = await tlRobot(content)
    // 2.青云客机器人
    // let txt = await qykRobot(content)
    // 3.茉莉机器人
    // let txt = await mlRobot(content)

    ctx.body = `<xml>
		 <ToUserName><![CDATA[${toFromName}]]></ToUserName>
		 <FromUserName><![CDATA[${toUserName}]]></FromUserName>
		 <CreateTime>${createTime}</CreateTime>
		 <MsgType><![CDATA[text]]></MsgType>
		 <Content><![CDATA[${txt}]]></Content>
		 </xml>`
  }
})

async function qykRobot(content) {
  let rtn = await rp({
      method: 'GET',
      uri: `http://api.qingyunke.com/api.php?key=free&appid=0&msg=${content}`,
    }),
    txt = JSON.parse(rtn).content
  return txt
}

async function mlRobot(content) {
  let rtn = await rp({
      method: 'GET',
      uri: `http://i.itpk.cn/api.php?question=
      ${content}&limit=5&api_key=${config.robotKey}&api_secret=${config.robotSecret}`,
    }),
    rt = unescape(rtn.replace(/\\/g, '%')).replace(/%r%n/g, ''),
    txt = ''

  if (typeof rt == 'string') {
    if (rt.indexOf('{') != -1) {
      try {
        let obj = JSON.parse(rt.trim())
        if (typeof obj == 'object' && obj) {
          txt = '【' + obj.title + '】\n' + obj.content
        }
      } catch (e) {
        console.log(e)
      }
    } else {
      txt = rt
    }
  }
  return txt
}

async function tlRobot(content) {
  let params = {
      reqType: 0,
      perception: {
        inputText: {
          text: content,
        },
      },
      userInfo: {
        apiKey: config.apiKey,
        userId: config.userId,
      },
    },
    options = {
      method: 'POST',
      uri: 'http://openapi.tuling123.com/openapi/api/v2',
      body: JSON.stringify(params),
    },
    rt = await rp(options),
    txt = JSON.parse(rt).results[0].values.text
  return txt
}

机器人能力根据第三方有所不同

# 扫码体验

测试号二维码

# 参考资料

本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-ND 3.0 许可协议。可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。

扫描下方二维码阅读当前文章

浏览器、微信扫码

评 论:

好文推荐
每天进步一点点~