注册企业微信

1.搜索下载企业,并使用手机号进行企业微信注册

2.选择成立企业

3.输入企业名称等信息

4.完成后,在通讯录内添加成员

企业微信创建一个应用

在 “企业微信 —— 应用管理” 最底部的 “自建” 应用处,新建一个 “应用”。名称比如就叫消息通知,配置完成后记录下应用页面的 AgentId 和 Secret。注意,查看 Secret 需要安装一个企业微信,查看完可以卸载。

在 “企业微信 —— 我的企业” 底部,记录下 “企业 ID”。

至此,微信配置完成,开始配置提醒 API。

创建 API 云函数

首先参考 Heo 的教程,创建一个腾讯云或 vercel 版本的云函数。

Vercel版本

我之前使用vercel部署过twikoo,因此不需要再创建新的云函数。如果你不是使用vercel,参考这里

安装python

下载并安装python,安装时注意勾选Add Python 3.10 to PATH

安装pipenv

找到你的twikoo github仓库,clone到本地,进入api/,执行以下命令:

1
pip install pipenv

如果安装时报错:ERROR: Exception: Traceback (most recent call last),就使用一下命令安装:

1
pip install pipenv -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

下载requests

继续在api/文件夹下执行以下命令:

1
pipenv install requests

如果按照报错,请先关闭dl。

新建python.py

然后在该目录创建一个python.py文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from http.server import BaseHTTPRequestHandler
import json
import requests
from urllib.parse import parse_qs
# -*- coding: utf8 -*-


class handler(BaseHTTPRequestHandler):


def do_GET(self):
def getTocken(id, secert, msg, agentId):
url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + \
id + "&corpsecret=" + secert

r = requests.get(url)
tocken_json = json.loads(r.text)
# print(tocken_json['access_token'])
sendText(tocken=tocken_json['access_token'], agentId=agentId, msg=msg)

def sendText(tocken, agentId, msg):
sendUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + tocken
# print(sendUrl)
data = json.dumps({
"safe": 0,
"touser": "@all",
"msgtype": "text",
"agentid": agentId,
"text": {
"content": str(msg)
}
})
requests.post(sendUrl, data)

try:
params = parse_qs(self.path[12:])
apiid = params['id'][0]
apisecert = params['secert'][0]
apiagentId = params['agentId'][0]
apimsg = params['msg'][0]
except:
apimsg = self.path
else:
#try:
# 执行主程序
getTocken(id=apiid, secert=apisecert,
msg=apimsg, agentId=apiagentId)
#except:
# status = 1
# apimsg = '主程序运行时出现错误,请检查参数是否填写正确。详情可以参阅:https://blog.zhheo.com/p/1e9f35bc.html'
#else:
# status = 0
# print(event)
# print("Received event: " + json.dumps(event, indent = 2))
# print("Received context: " + str(context))
# print("Hello world")

self.send_response(200)
self.send_header('Content-type', 'text/plain')
self.end_headers()
self.wfile.write(apimsg)
return

push当前的更改之后,当Vercel完成部署后,你可以使用下面这样的方式,拼接一个 URL,浏览器访问,看看手机微信能不能接收到消息。

1
https://< vercel_app_address>/api/python?id=<ww....>&secert=<secret...>&agentId=<agentId...>&msg=测试一下吧

如果成功的话你的手机会接收到对应的推送(如果你的企业微信注册成功且所填信息正确)。

在twikoo中配置

在twikoo后台管理WECOM_API_URL中添加你拼接的url即可。注意msg后面不要有参数:

1
https://<vercel_app_address>/api/python?id=<企业id>&secert=<secret>&agentId=<agentId>&msg=

2022.3.6 Twikoo v1.5.0更新: 消息推送逻辑,从 1.5.0 之前的版本升级后,请在管理面板重新配置评论提醒的消息推送服务,增加了对 Bark、Telegram 等平台的支持

企业微信 缩写: wecom

企业微信应用消息推送,免费,限制较少。

  1. 用电脑打开 https://work.weixin.qq.com/,注册一个企业
  2. 注册成功后,点「管理企业」进入管理界面,选择「应用管理」 → 「自建」 → 「创建应用」
  3. 应用名称填入机器人的名称,应用 logo 选择机器人的头像,可见范围选择公司名
  4. 创建完成后进入应用详情页,可以得到应用ID( agentid ),应用Secret( secret ),复制
    PS:获取应用Secret时,可能会将其推送到企业微信客户端,这时候微信里边是看不到的,需要在企业微信客户端里边才能看到
  5. 进入「我的企业」页面,拉到最下边,可以看到企业ID,复制
  6. 进入「我的企业」 → 「微信插件」,拉到下边扫描二维码,关注以后即可收到推送的消息
  7. 将第 4 步和第 5 步取得的 企业ID#应用Secret#应用ID 拼到一起,中间用 “#” 号分隔,填入 pushoo 的 token 中

示例 token:ww97a01a*****1e5f1#xHapDXmgZtlBgRQQXMb4kfh3y75Ynoubl*****l9ytE#1000005

PS:如果出现接口请求正常,企业微信接受消息正常,个人微信无法收到消息的情况,请确认如下配置:

  • 进入「我的企业」 → 「微信插件」,拉到最下方,勾选「允许成员在微信插件中接收和回复聊天消息 」
  • 在企业微信客户端 「我」 → 「设置」 → 「新消息通知」中关闭「仅在企业微信中接受消息」限制条件

在微信中接收企业微信消息

在“企业微信——我的企业——微信插件”页面配置,点击这里查看

使用微信扫码,关注你的企业微信,并且在设置中打开允许成员在微信插件中接收和回复聊天消息选项。

腾讯云版本

可以复用之前 Twikoo 那个云开发环境,直接创建一个新的云函数,名称自定义如 weixin-push,选择 helloworld 空白模板函数,Python3.6 环境, 128MB 就 OK 了。下一步粘贴下面的代码,点击创建:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# -*- coding: utf8 -*-
import requests
import json

def getTocken(id,secert,msg,agentId):
url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + id + "&corpsecret=" + secert

r =requests.get(url)
tocken_json = json.loads(r.text)
# print(tocken_json['access_token'])
sendText(tocken=tocken_json['access_token'],agentId=agentId,msg=msg)

def sendText(tocken,agentId,msg):
sendUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + tocken
# print(sendUrl)
data = json.dumps({
"safe": 0,
"touser" : "@all",
"msgtype" : "text",
"agentid" : agentId,
"text" : {
"content" : msg
}
})
requests.post(sendUrl,data)

def main(event, context):
try:
apiid=event['queryStringParameters']['id']
apisecert=event['queryStringParameters']['secert']
apiagentId = event['queryStringParameters']['agentId']
apimsg = event['queryStringParameters']['msg']
except:
apimsg = '有必填参数没有填写,请检查是否填写正确和格式是否错误。详情可以参阅:https://blog.zhheo.com/p/1e9f35bc.html'
status = 1
else:
try:
# 执行主程序
getTocken(id=apiid,secert=apisecert,msg=apimsg,agentId=apiagentId)
except:
status = 1
apimsg = '主程序运行时出现错误,请检查参数是否填写正确。详情可以参阅:https://blog.zhheo.com/p/1e9f35bc.html'
else:
status = 0
# print(event)
# print("Received event: " + json.dumps(event, indent = 2))
# print("Received context: " + str(context))
# print("Hello world")
status_str = json.dumps({
"status":status,
"msg":apimsg
})
return(status_str)

配置好访问服务(如果第一次创建,参考 Twikoo 教程还需要配置安全域名等):

1
2
3
域名:*
触发路径:/weixin-push (自定义)
关联资源:云函数 weixin-push (上文创建的云函数)

至此,云函数创建完成。可以使用下面这样的方式,拼接一个 URL,浏览器访问,看看手机微信能不能接收到消息。

云函数的访问服务 URL + 触发路径 + ?id = 你的企业微信 ID + secert = 上文记录的 secert + Id = 上文记录的 AgentId + &msg = 随便测试一下吧

如我下面这样的:

1
https://blogpkly-13278c-1258453354.ap-shanghai.app.tcloudbase.com/weixin-push?id=ww*******&secert=Ne******&agentId=1000003&msg=随便测试一下吧

浏览器返回以下内容,说明配置完成 (msg 后的内容,是 Unicode 编码后的 “随便测试一下吧” 内容,点击这里可以转换 )。

1
{"status": 0, "msg": "\u968f\u4fbf\u6d4b\u8bd5\u4e00\u4e0b\u5427"}

Twikoo 配置

在 Twikoo v1.4.5 及以上版本中,打开控制面板,在上述企业微信 API 搭建完成后,拼接成下述样式的 URL,填写在即时通知 ——WECOM_API_URL 中即可完成配置。

1
https://blogpkly-13278c-1258453354.ap-shanghai.app.tcloudbase.com/weixin-push?id=企业微信获取&secert=企业微信获取&agentId=企业微信获取&msg=

微信关注自己的企业微信账号,然后用其他非博主邮箱在网站留言,试试即时通知吧!

参考链接