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

实现思路

用户在公众号会话内发送消息后,后台接收用户的文本消息并将消息发送至智能机器人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}

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

 

 

演示效果