微信收到消息和事件后,可以自动回复。回复类型大致包括文本回复、图片回复、语音回复、视频回复、音乐回复、图文回复。
文本回复和图文回复,直接就可以回复,而其它回复是媒体回复,需要先上传媒体文件,获取媒体文件的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))
运行工程,先取消公众号,再关注公众号。