八、搭建微信公众号
1.配置服务器
任务描述
由于实验蓝图的IP为内网IP,微信公众号无法直接访问,因此需要使用弹性公网IP,当作微信公众号和蓝图之间的桥梁。本任务,主要完成弹性公网IP的配置,并向后端发送请求,请求对话生成服务。
知识点:werobot
重 点:werobot
难 点:werobot
内 容:1. 开发准备:新建代码文件、安装werobot包
2. 配置服务器
(1)导入包
(2)设置Token
(3)消息处理
(4)在服务器上部署
1. 准备工作
(1)新建代码文件
在“networking”目录下,新建一个python文件,并命名为“for_werobot”。
(2)安装werobot包
werobot是一个微信公众号开发框架,在终端输入以下命令进行安装
pip install werobot
安装过程如下图所示:
2. 配置服务器
由于实验蓝图的IP为内网IP,微信公众号无法直接访问,因此需要使用弹性公网IP,当作微信公众号和蓝图之间的桥梁。
在for_werobot.py文件中添加以下代码,使得微信公众号可以访问后端。
(1)导入包
import requests
import werobot
(2)设置Token
设置Token,以方便服务器进行识别,需保证后续配置公众号时的Token和该Token一致。
robot = werobot.WeRoBot(token="doctoraitoken")
(3)消息处理
WeRoBot 会解析微信服务器发来的消息, 并将消息转换成成 Message 或者是 Event 。 Message 表示用户发来的消息,如文本消息、图片消息; Event 则表示用户触发的事件, 如关注事件、扫描二维码事件。 在消息解析、转换完成后, WeRoBot 会将消息转交给 Handler 进行处理,并将 Handler 的返回值返回给微信服务器。
下面,定义一个Handler,通过装饰器添加handler。具体处理过程如下:
- 判断是否为用户的第一次对话,是,则“我是您的农医对话机器人稻稻, 有什么能帮您的吗?”
- 如果不是用户的第一次对话,则对后端发送post请求,获取答案返回。对后端发送post请求时,需要使用“弹性公网IP”,访问端口为“8080”,如下图所示:
@robot.handler
def farmer_doctor(information, user_flag):
try:
id_for_user = information.source
try:
# 用user_flag判断用户的第一次对话
if user_flag.get(id_for_user, None) != "1":
user_flag[id_for_user] = "1"
return '我是您的农医对话机器人稻稻, 有什么能帮您的吗?'
talk_user = information.content
except:
# 用user_flag判断用户的第一次对话,except来排除异常情况
return '我是您的农医对话机器人稻稻, 有什么能帮您的吗?'
# 对蓝图发送post请求
outcome = requests.post("http://124.70.22.191:8080/farmer/receive/", data={"id_for_user": id_for_user, "talk_user": talk_user}, timeout=3)
return outcome.text
except Exception as e:
print("有报错:", e)
return "存在报错,请解决"
请注意修改请求地址,修改为当前实验蓝图的“弹性公网IP”地址,如下图所示:
(4)在服务器上部署
在 werobot.config 中配置好 WeRoBot 需要监听的地址和端口号, 然后使用 werobot.run 来启动服务器。
if __name__ == '__main__':
#对于http://的公网ip,公众号规定只能以80的形式去post请求
robot.config["HOST"] = "0.0.0.0"
robot.config["PORT"] = 80
robot.run()
运行for_werobot.py文件,运行结果如下图所示:
在完成公众号配置之前,不要停止该程序运行。
2.创建微信公众号
任务描述
在本任务中,完成个人微信公众号的创建。
知识点:微信公众号的创建与基本配置
重 点:微信公众号的创建与基本配置
难 点:微信公众号的创建与基本配置
内 容:1. 注册
2. 配置公众号
1. 注册
将链接https://mp.weixin.qq.com复制到浏览器,进入微信公众号注册页面,点击“立即注册”,如下图所示:
点击“立即注册”后,进入如下图所示的页面,选择“订阅号”就可以满足需求:
如下图所示,填写“基本信息”,填写完毕后,点击“注册”:
进入“选择类型”页面,直接点击“确定”:
选择类型为“订阅号”,在弹出的对话框中点击“确定”,如下图所示:
进入“信息登记”页面,依次填写个人信息:
确认信息后,进入“公众号信息”页面,在该页面中填写个人公众号的信息,如下图所示:
2. 配置公众号
在左侧菜单中依次点击“设置与开发”->“基本配置”选项后,点击“修改配置”,如下图所示:
能够成功提交,则证明服务器与微信公众号连接成功了。
3.测试微信公众号
任务描述
在本任务中,对微信公众号进行功能测试,并完成《测试报告》,若不满足使用要求,则开发人员需要进行迭代优化。
知识点:功能测试
重 点:功能测试
难 点:功能测试
内 容:1. 启动所有服务
2. 测试微信公众号
1. 启动所有服务
所有的服务启动流程如下:
(1)启动neo4j服务
在终端中,进入/opt/neo4j-community-4.4.12/bin/目录下:
cd /opt/neo4j-community-4.4.12/bin/
输入以下命令启动Neo4j:
./neo4j start
启动过程如下图所示:
(2)启动Redis对话管理服务
在终端输入以下命令启动Redis:
redis-server
启动过程如下图所示:
(3)挂起两句话相关性判断模型
在终端中,先切换到networking/目录下,再运行下面的命令:
gunicorn -w 1 -b 0.0.0.0:8084 deploy_model:app
命令执行结果如下图所示:
(4)挂起对话生成服务
在终端中,先切换到networking/目录下,再执行以下命令:
gunicorn -w 1 -b 0.0.0.0:8080 principal:app
启动过程如下图所示:
(5)配置服务器
运行networking/目录下的for_werobot.py文件,配置服务器,运行结果如下图所示:
2. 测试微信公众号
所有的服务都挂起后,开始测试微信公众号:
首先,打开微信,搜索公众号名称,关注公众号。以“农医对话机器人一号机”为例:
点击“农医对话机器人一号机”,进入以下页面,点击“关注公众号”,就进入对话页面了。
接下来,开始测试微信公众号是否能正常对话,测试示例如下:
由上图,输入“你好”,稻稻会带“你也好!”,表明百度智能对话平台兜底成功;输入“我家的水稻有白粉状条纹”,稻稻回答“稻稻判断您的回到可能以下农业病:水稻一柱香”,表明可能正常查询图数据库;输入“但主穗不发病”,稻稻回答“稻稻觉得还是稻稻之前为您判断的水稻病,并不是心的水稻病”,表明句子相关性判断和Redis对话管理功能都成功。
在对话生成服务的启动终端也可以看到后端的具体处理过程,如下图所示:
测试完成后,完成《测试报告》,若不满足使用要求,则开发人员需要进行迭代优化。