微信收到消息和事件后,可以自动回复。回复类型大致包括文本回复、图片回复、语音回复、视频回复、音乐回复、图文回复。
文本回复和图文回复,直接就可以回复,而其它回复是媒体回复,需要先上传媒体文件,获取媒体文件的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': '大学英语四六级查询 点击图片进入', # 此处可用 换行。 'description': '点击图片进入', 'url': 'http://49.235.156.156/Organizations/UserHome/', 'image': 'http://49.235.156.156/001.png', }, { 'title': '请点击加入您的组织, 您将会享受到更多优质服务!', '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))
运行工程,先取消公众号,再关注公众号。