微信公众号接入智能聊天机器人
时间:2022-07-23
本文章向大家介绍微信公众号接入智能聊天机器人,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文主要介绍如何接入智能聊天机器人实现对用户消息的回复。
实现思路
用户在公众号会话内发送消息后,后台接收用户的文本消息并将消息发送至智能机器人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
}
机器人能力根据第三方有所不同
扫码体验
测试号二维码
参考资料
- sql server 事务处理
- Android P专区免费开放 -- 同样的Android,不同的体验
- YJango:TensorFlow中层API Datasets+TFRecord的数据导入
- CentOS7上ElasticSearch安装填坑记
- ASP.NET Core 阶段性总结
- Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程案例演示
- C# 窗体常用API函数 应用程序窗体查找
- C#进阶系列——WebApi接口测试工具:WebApiTestClient
- 由Dapper QueryMultiple 返回数据的问题
- 【初探IONIC】不会Native可不可以开发APP?
- MVC视图展现模式之移动布局解析-续集
- 在 ASP.NET MVC 中使用异步控制器
- MVC5 Entity Framework学习之异步和存储过程
- ConcurrentDictionary 对决 Dictionary+Locking
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android | 资源冲突覆盖的一些思考
- 如何用脚本自动转化,一个protobuf文件到json格式
- 聊聊dubbo-go的forkingCluster
- 还在用 map[string]interface{} 处理 JSON?告诉你一个更高效的方法——jsonvalue
- 聊聊dubbo-go的failsafeCluster
- 【HDFS】distcp报错Check0sum mismatch
- ffmpeg转换多媒体文件,真香
- 静态库与动态库的那些事
- 云服务器网络延迟与丢包问题定位(mtr工具)
- Spark UDF1 输入复杂结构
- Qt音视频开发6-ffmpeg解码处理
- MySQL 百万级数据量分页查询方法及其优化
- 教你设计一个超牛逼的本地缓存!
- Flutter延时任务、Flutter通过Future与Timer实现延时任务
- DDIA 笔记