本文主要介绍如何利用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
}
机器人能力根据第三方有所不同
# 扫码体验
测试号二维码