开发一个微信聊天机器人

2019-07-19 15:09:12 浏览数 (1)

微信公众号的开发方式大致分为两种,一种是基于微信公众平台的接口开发方式,一种是公众号内页开发方式,而公众号内页开发又分为两种,基于微信js-sdk的开发和微信网页用户授权的开发。

今天这篇文章主要以微信聊天机器人的案例,给大家演示基于微信公众平台的接口开发方式。

这种方式的数据流程图如下:

  1. 用户在公众号内向公众号发送消息
  2. 微信服务器在接收到用户发送消息之后,将消息通过开发者提供的接口发送给开发者服务器
  3. 开发者服务器接收到消息之后,进行相关的业务处理之后,将处理结果返回给微信服务器
  4. 微信服务器再通过消息的形式将开发者服务器返回的内容展示给用户

原理了解后就开始干活了,本案例以测试号为例。

第一步:用express搭建一个本地服务,并且设置两个接口,分别用来验证接口配置信息接收微信服务器转发的用户信息。接口核心代码如下:

可以看到接口路径都为"/",只是请求方式不同,分别打印请求参数,不做响应处理,后面会设置。

为了方便记忆将get请求的接口命名为1号接口,post请求接口命名为2号接口

2号接口因为要接收xml格式的数据,所以只能用data事件和end事件获取请求数据。

第二步:通过ngrok将本地express服务暴露到外网,具体实现方法参照这篇文章分享一个内网穿透工具ngrok

第三步:打开测试号接口配置信息页面,如图:

打印结果如下:

可以看到我们得到了请求参数,按照官方文档的要求:配置接口返回echostr说明接口调通。并且我们这里只是做测试,省略了加密解密的过程,将1号接口改成如下代码:

代码相对于刚开始的设置,只是添加了一句响应,重启本地服务,再次点击提交按钮,正确结果如下:

第四步:用手机向测试公众号发送一条信息,查看2号接口的打印数据,如图:

可以看到这里接收到的数据是xml格式的,并且连续打印了三次,这里要注意一下,因为我们的代码中2号路由接收到数据后,并未响应任何信息,微信在五秒之后会继续发送同样的请求,一共发送三次。只有接口返回信息之后,微信服务器就不会重复发送信息了。

言归正传,我们需要将xml格式的数据转换为js对象,这里需要用到了一个叫做xml2js的npm包,具体使用方式大家去查看官方文档,很简单。将xml2js集成到项目中代码如下:

此时再用手机向测试公众号发送信息,打印结果为:

拿到格式为js对象的数据后,我们就可以根据具体的数据信息,设置返回信息了。但是返回的数据也要转换成xml格式,这里用到了xml2js的另外一个方法。一个完整的2号接口,接收请求-响应数据的代码如下:

此时向微信测试号发送一条信息,看看是否有回应。

如果有回应,说明调通了,这样一个完整的数据回路就调通了。由于文章篇幅,文章就介绍到这里。下篇文章咱们将图灵机器人集成到项目中,完成一个微信聊天机器人。

0 人点赞