学习并复刻《基于知识图谱的农医对话系统》(八)

八、搭建微信公众号

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对话管理功能都成功。

     在对话生成服务的启动终端也可以看到后端的具体处理过程,如下图所示:

     测试完成后,完成《测试报告》,若不满足使用要求,则开发人员需要进行迭代优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值