上一篇:访问指南
这部分是简单的自动回复的实现,当然也是很大一部分功能的实现基础。这里使用的是图灵机器人的界面。
效果图如下:
当然,这个机器人的效果是我无法控制的。和图灵机器人一样,我们也可以实现一系列的功能,比如片段推送、快递查询等等,这些都是这里没有实现的。
微信的消息处理
对于公共平台来说,每次发送一条消息就相当于发送一个post请求,但是需要注意的是nodejs的数据格式是xml,但是NodeJs本身无法处理xml,所以需要处理xml数据。库主体解析器仍然在使用,但是它需要引入主体解析器xml:
//解析xmlapp . use(body parser . XML({ limit : ' 1mb ',//拒绝大于1mb的有效负载xmlparseoptions : { normalize : true,//修剪文本节点内的空白normalizeTags: true,//将标记转换为小写explicitaray : false//仅在1 }的情况下将节点放入数组中)});这样,req.body.xml就是处理过的数据。
一般文本消息的格式如下:
xml ToUserName![CData[用户]]/用户名称来自用户名![CData[来自用户]]/来自用户名创建时间1348831860/创建时间MsgType![CData[文本]]/MsgType内容![CDATA[这是一个测试]/contentmsgid 1234567890123456/msgid/XML其中ToUserName是接收方的openid,FromUserName是发送方的openid,CreateTime是整数时间戳。MsgType是一种消息类型,一般包括文本、图像、语音、视频、短视频、位置和链接消息。文本消息被编码为示例。
router.post('/',function (req,res) { res.writeHead(200,{ ' Content-Type ' : ' application/XML ' });var data=req . body . XML;var resMsg='xml' 'ToUserName![CData[' data . from username ']/Tousername ' ' from username![CDATA[' data . touser name ']/from username ' ' CreateTime ' parsent(新日期()。value of()/1000)'/create time ' ' MsgType![CData[文本]]/MsgType ' '内容![CData[' data . Content ']/Content ' '/XML ';RES . end(ResMSg);});只需将标题的内容类型设置为xml并返回一个xml响应,那么微信官方账号就会相应地回复一条消息,其中回复消息是文本格式的。(mac的微信一年没更新了-)
如上图,发送消息会回复一条内容相同的消息,实现简单的自动回复。
图灵机器人
这个界面的使用非常简单。get请求一个链接,记得带上apikey头,然后返回响应的内容。我请求在这里使用nodejs请求库。
const request=require(' request ');const config=require('././config ');函数getTuringResponse(info){ if(type of info!==' string '){ info=info . tostring();} var options={ method:'GET ',URL : ' http://API . Baidu.com/turing/turing/turing?key=879 a6 CB 3 AFB 84 DBF 4 fc 84 a1 df 2 ab 7319 info=' info,header RS : { ' API key ' : config . turingkey } };返回新的Promise((解析,拒绝)={请求(选项,函数(err,res,body)} { if(RES){解析(body);} else { reject(err);} });})} module . exports=getTuringResponse;使用promise来处理异步返回的结果,避免多次回调,并记住将apikey设置为头内容。
微信官方账号机器人
好了,以上是两者分开的。如果你看到这个,你应该知道聊天机器人的实现非常简单。是向用户返回界面响应的内容(?如果不用实现自己的聊天机器人。),这里的背景相当于一个跳板。
turingRobot.js
const request=require(' request ');const config=require('././config ');函数getTuringResponse(信息){ if(信息类型!==' string '){ info=info。tostring();} var options={ method:'GET ',URL : 'http://apis.baidu.com/turing/turing/turing?key=879 a6 CB 3 AFB 84 DBF 4 fc 84 a1 df 2 ab 7319 info=' info,header RS : { ' API key ' : config。turingkey } }返回新的承诺(解析,拒绝)={请求(选项,函数(err,res,body)} { if(RES)}解析(正文);} else { reject(err);} });})}模块。exports=getTuringResponse这部分代码很简单了,就是将图灵机器人的接口响应消息返回出来。下面要做的就是将消息返回给用户,这里有一点需要注意的是对于发出的响应,该接口不能直接响应中文字符串,需要进行urlencode。
//自动回复。jsconst request=require(' request ');函数自动回复(请求数据,信息){切换(请求数据。msgtype){ case ' text ' : var resMsg=' XML ' }用户名称![CDATA['请求数据。来自用户名']/Tousername ' '来自用户名![CDATA['请求数据。用户名“CreateTime”解析器中的用户名称“]/(新日期()。()的值/1000)'/创建时间' ' MsgType![CData[文本]]/MsgType“”内容![CDATA['信息']/内容'/XML;打破;}返回resMsg}模块. exports=autoReply自动回复的模块,主要是返回一个可扩展标记语言字符串,方便发送给用户。
//weixin.jsrouter.post('/',function (req,res) { res.writeHead(200,{ ' Content-Type ' : ' application/XML ' });var内容=请求。尸体。XML。内容;turingRobot(encodeURI(content)).然后(函数(数据){ var response=JSON.parse(数据);var resMsg=autoReply(请求。尸体。XML,响应。文本);RES . end(ResMSg);})});好,这下算是完成机器人聊天的功能了。只要将代码部署到数据存储里,就算是成功了。
开源代码库地址奉上:https://github。com/xiadd/速记欢迎星星
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。