dorian

导航

 

  微信收到消息和事件后,可以自动回复。回复类型大致包括文本回复、图片回复、语音回复、视频回复、音乐回复、图文回复。

  文本回复和图文回复,直接就可以回复,而其它回复是媒体回复,需要先上传媒体文件,获取媒体文件的media_id,然后,再调用media_id做出回复。

  故本文先学习文本回复和图文回复。

  在Applications/Wechat/views下创建一个文件,名为:Replies.py,专门用于处理回复信息。

1 文本回复

  文本回复,是用文本方式来响应用户消息。文本回复最好的方式是,通过解析用户发出的文本内容,来回复用户需求。

from wechatpy.replies import TextReply


def replyText(txt, msg):
    """
    【功能描述】解析用户的文本消息,并根据文本回复
    此处可以用正则表达式检索用户发送的文本信息,并根据检索的信息做相应的回复。
    相当于一个简单的智能回复机器人。
    """
    if txt == '你好':
        content = '你更好哦!'
    else:
        content = '我不懂你在说什么'
    reply = TextReply(content=content, message=msg).render()
    return reply

  然后,在Applications/Wechat/views/WechatInterface.py中,挂在用户文本消息下面。

if msg.type == "text":
    return HttpResponse(Replies.replyText(msg.content,msg))

  运行工程,在公众号里测试效果如下:

 

 2 图文回复

  图文回复就是有图片,有文字的回复。在进行图文回复前,要做三件事:

  第一:准备一张图片,放在工程根目录下的media目录里,命名为001.png

  第二:配置媒体文本路径

  在工程settings.py做如下配置:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

  在工程url做以下配置

from django.views.static import serve


urlpatterns = [
    # ...放最后一排   
    re_path(r'(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),
]

  第三:在浏览器中访问这张图片

 

   图片配置好以后,就开始写程序了。

  参见《微信图文消息

  微信图文消息相对较复杂,wechatpy提供了图文回复的样式,非常简单适用。

from wechatpy.replies import ArticlesReply


def replyArticle(msg):
    reply = ArticlesReply(message=msg, articles=[
        {
            'title': '大学英语四六级查询\n点击图片进入', # 此处可用\n换行。
            'description': '点击图片进入',
            'url': 'http://49.235.156.156/Organizations/UserHome/',
            'image': 'http://49.235.156.156/001.png',
        },
        {
            'title': '请点击加入您的组织,\n        您将会享受到更多优质服务!',
            'description': '',
            'url': '',
            'image': 'http://49.235.156.156/001.png',
        },
    ])
    # 继续添加
    reply.add_article({
        'title': '标题3',
        'description': '描述3',
        'url': '',
    })
    # 转换成 XML
    xml = reply.render()
    return xml

  把这个函数挂在Applications/Wechat/views/WechatInterface.py中,用户关注公众号事件中。

if msg.event == 'subscribe':
        # 在用户关注公众号的时候,获取用户的openid,保存在数据库中,而当用户在注册的时候,
        # 从注册页面再获取一次openid,同时把用户的手机号和openid,并根据该openid更新该用户的手机号。
        print(msg.source)
        return HttpResponse(Replies.replyArticle(msg))

  运行工程,先取消公众号,再关注公众号。

 

 

  

posted on 2020-03-09 09:29  dorian  阅读(328)  评论(0编辑  收藏  举报