python助力小程序“订阅消息”群推送

python助力小程序“订阅消息”群推送

近期小程序要把“模板消息”下线,取而代之的是“订阅消息”。而“订阅消息”也做出了一些改变,推出了“一次性订阅”消息,小程序可以引导用户订阅一次消息

为什么叫“一次性订阅”呢,如果用户此处“允许”,那么他无论多久之后,都可以收到一次消息;也就是说,如果用户多次允许,将可以收到多次消息。这是一个额度累计的过程,用户允许得越多,能收到的额度也就越大。

1.弹窗时机的选择

这是一个非常好的用户唤回方式,当然了,用户也可以通过设置永久拒绝你给他发送消息。所以在我的小程序“头像挂件君”中,提示用户允许发送消息的时机,出现在一个他完成完整流程的地方,也就是用户成功导出作品后,我会提醒他要不要接受。

之所以这样设计,是因为我想把“一次性”变成“永久”,在用户最满意、最高兴的时候,弱弱地问他一句“小哥哥小姐姐,要不要订阅一下?”此时的成功率将非常高。

粗看了一下数据,在近3天的活跃用户中,有10%的用户成功订阅消息,个人觉得这还是一个比较高的比例了。

2.发送订阅消息

用户允许发送消息后,微信提供了发送订阅消息的方法:subscribeMessage.send,支持HTTPS调用,也支持云调用。这里我们选择了HTTPS调用,时机是出现一款新的贴纸后,告诉所有的订阅用户。

POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN

发送订阅消息由于微信的限制,需要逐条请求,也就是每个用户请求一次,而不能一次性推送完。由于开发能力有限,我没有时间去做一套完整精密的推送系统,所以这里就借助python来实现自动化。

2.1 将所有订阅用户的openid导出

因为我使用的是微信自带的数据库,所以可以直接在后台进行导出,选择导出为csv文件,名为id.csv,格式如下:

_id subscribeTime
a 1580961993978
b 1580961993979
c 1580961993980

2.2 配置config.json文件

这个文件是每次都要修改的,因为包含了你推送的内容以及APPID和APPSECRET:

{
"APPID": "你的APPID",
"APPSECRET": "你的APPSECRET",
"template_id": "你的模板ID",
"touser": "",
"page": "你希望的打开路径,例如:pages/index/index",
"data": {
"thing1": {
"value": "🎩帽子系列"
},
"time2": {
"value": "2020-02-06"
},
"thing3": {
"value": "生日帽、安全帽~"
}
}
}

2.3 推送逻辑文件push.py

这里是完整的推送逻辑,首先读取config.json文件中的APPID和APPSECRET,以获得access_token;然后根据导出的id.csv文件逐一推送:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf8')

import io
import requests
import json
import xlwt
import time
import csv

# 读取id文件
uidFile = io.open("./id.csv", "r", encoding='utf-8')
uids = csv.reader(uidFile)

# 读取配置文件
configFile = io.open("./config.json", "r", encoding='utf-8')
config = json.load(configFile)

# 获取access_token
APPID = config['APPID']
APPSECRET = config['APPSECRET']
del config['APPID']
del config['APPSECRET']
getAccessTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s" % (APPID,APPSECRET)
response = requests.get(url=getAccessTokenUrl).json()
access_token = response['access_token']

# 推送地址
pushUrl = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + access_token


# 日志excel
logExcel = xlwt.Workbook(encoding='utf-8', style_compression=0)
sheet = logExcel.add_sheet('log', cell_overwrite_ok=True)
sheet.write(0,0,"_id")
sheet.write(0,1,"response")

index = 0
for x in uids:
if index == 0:
index = index + 1
continue

uid = x[0]

# 执行推送
print("=====================")
config['touser'] = uid
data = json.dumps(config)
response = requests.post(url=pushUrl,data=data)
print("推送至:"+uid)
print(response.text)

# 写入excel
sheet.write(index,0,uid)
sheet.write(index,1,response.text)
index = index + 1

logFileName = r"./pushLog_%s.xls" % time.strftime("%Y%m%d%H%M%S", time.localtime())
logExcel.save(logFileName) # 在字符串前加r,声明为raw字符串,这样就不会处理其中的转义了。否则,可能会报错

将上述三个文件id.csv、config.json以及push.py放在同一个文件夹就大功告成啦,然后在该目录执行以下代码:

python push.py

就可以完成批量推送啦!此外,每次执行还会输出一个log文件,文件名为pushLog_xxxxx.xls,记录了每个人的推送结果。


使用python完成小程序“订阅消息”的群推送就介绍到这啦,最后给自己的小程序打个广告,大家可以去体验一下订阅流程喔~

  0

评论

📧 邮箱: 留下邮箱,别人回复后会收到通知喔
😉 头像: 自动同步邮箱对应的「Gravatar」头像
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×