SAP系统和微信集成的系列教程之二:如何通过微信公众号消费API
本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上:
https://blogs.sap.com/2017/12/10/wechat-development-series-1-setup-your-development-environment/
系列目录
(1) 微信开发环境的搭建
(2) 如何通过微信公众号消费API(本文)
(3) 微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据
(4) 如何将SAP C4C主数据变化推送给微信公众号
(5) 如何将SAP UI5应用嵌入到微信公众号菜单中
(6) 如何通过OAuth2获取微信用户信息并显示在SAP UI5应用中
(7) 使用Redis存储微信用户和公众号的对话记录
(8) 微信公众号的地图集成
(9) 如何将微信用户发送到微信公众号的消息保存到SAP C4C系统
(10) 如何在SAP C4C系统直接回复消息给微信公众号的订阅者
最近有不少朋友在微信上向我咨询SAP系统和微信公众号集成的问题,因此我把当时写的英文版翻译成中文,重新发布在我的公众号上。
需要注意的是,时隔三年,微信公众号的开发流程可能有所变化,请大家自行鉴别。和微信公众号集成的系统,我三年前选择的是SAP Cloud for Customer.
始终牢记我们这个系列的目标是学会如何用微信公众号同SAP系统(SAP Cloud for Customer,以下简称C4C)集成。要实现这个目标,就得通过微信公众号消费SAP C4C的OData API.
作为学习的第一步,我们首先学习如何在微信公众号调用普通的API,而非SAP C4C OData API.
假设这样一个简单的场景:用户关注微信公众号之后,通过微信app给公众号发送一些文字信息。公众号收到这些文字信息,会转发给我们在本系列第一篇文章 微信开发环境的搭建 里提到的微信消息服务器。此时微信消息服务器接收到转发过来的文字信息后,调用一些具有人工智能的API,将API的响应通过微信app回复给用户。
绑定了微信消息服务器的微信公众号,在这个场景里扮演的其实就是一个简单的聊天机器人的角色。用户和微信公众号通过一问一答的方式进行交互。
Jerry还记得上大学的时候,学习《Unix网络编程》这门专业课,一个练习就是,通过套接字自行实现一对客户端和服务器,客户端发送一个字符串给服务器,服务器接收后原封不动地将其返回,即所谓的Echo Server.
在动手实现微信聊天机器人之前,我们先降低难度,实现一个简单的微信echo服务,即无论用户发送任何信息给公众号,都会收到信息本身,再加上"Add by Jerry"的前缀。
本文用到的项目完整源代码,在我的Github能够下载。
https://github.com/wangzixi-diablo/wechat-sap-integration
首先在server.js里,利用nodejs express库启动一个web服务器:
上图第二行routesEngine的实现,位于index.js里。微信app收到用户通过微信app发送的文本消息时,会通过一个HTTP POST请求转发给微信消息服务器。微信消息服务器接收到该请求后,调用第五行的echoService处理:
echoService的实现位于文件echo.js中:首先从变量req包含的HTTP请求中,将用户输入的文本信息解析出来(第11行),然后加上"Add by Jerry: "的前缀,并将结果存储在变量content里(第13行), 最后调用自己开发的工具方法replyMessage,将加上前缀的文本信息返回给用户。
上图第15行的replyMessage工具方法,需要从微信app转发给微信消息服务器的HTTP POST请求里, 解析出发送消息的微信用户id,然后再将拼接了"Add by Jerry: "前缀的内容发送给该id标识的微信用户。
replyMessage的实现位于replyMessage.js中:
https://github.com/wangzixi-diablo/wechat-sap-integration/blob/main/jerryapp/tool/replyMessage.js
有了Echo Service的实现经验之后,再实现微信聊天机器人就没有什么难度了。
只需要把index.js里接收到HTTP Post请求之后的操作,从调用echoService改成调用新的实现,tuningService即可。
调用图灵API的tuningService函数的实现源代码:
https://github.com/wangzixi-diablo/wechat-sap-integration/blob/main/jerryapp/service/tuning.js
我2017年的时候使用的图灵API是如下网站提供的:
http://www.tulin123.com/
申请一个API key, 粘贴到下图第6行的url里:
将用户输入的文本信息解析出来,存储到第20行的body变量里,使用encodeURI处理之后,直接拼接到图灵API url尾部,然后第27行使用request函数调用图灵API. 在匿名回调函数里获得API的响应,最后调用工具方法replyMessage将响应通过微信消息服务器发送给微信app.