基于微信通知API实现Twikoo消息推送

565 阅读3分钟

「这是我参与2022首次更文挑战的第8天,活动详情查看:2022首次更文挑战

前言

基于腾讯云函数+twikoo组合,将评论信息推送至企业微信(注册企业微信、创建应用),编写云函数(接收数据并封装,调用企业微信API获取token验证并触发消息发送)

开发说明

<1>注册企业微信,创建一个应用

登录网页版企业微信,进入企业微信管理后台,选择应用管理->自建(创建应用)

应用创建完成,则可查看相关的AgentIdSecret,在企业微信后台中查看我的企业->企业信息(查看企业ID)

<2>创建API函数,参考hexo引入twikoo的内容,创建基于腾讯云的云函数

需要CloudBase环境支持,可选择适配的套餐组合进行构建

创建云函数,环境选择Python3.6,代码填充如下所示:()

# 构建思路
a.调用企业微信API获取token信息并验证
b.根据toekn触发企业微信消息发送
c.定义主函数接收请求参数并校验,调用方法触发消息发送
# -*- coding: utf8 -*-
import requests
import json
​
# 调用企业微信API获取token信息
def getToken(id,secert):
    url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" + id + "&corpsecret=" + secert
    r =requests.get(url)
    token_json = json.loads(r.text)
    # print(tocken_json['access_token'])
    # 返回验证的token信息
    return token_json['access_token']# 自定义封装方法验证toekn信息并触发企业微信消息发送
def sendMsg(token,agentId,msg):
    # 配置企业微信消息发送url
    sendUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + token
    # 配置发送策略(发送对象、消息等)
    data = json.dumps({
        "safe": 0,
        "touser" : "@all",
        "msgtype" : "text",
        "agentid" : agentId,
        "text" : {
            "content" : msg
        }
    })
    # 触发请求发送消息
    requests.post(sendUrl,data)
​
# 主函数定义
def main(event, context):
    # 验证请求参数,调用API触发企业微信消息发送
    try:
        apiId=event['queryStringParameters']['id']
        apiSecert=event['queryStringParameters']['secert']
        apiAgentId = event['queryStringParameters']['agentId']
        apiMsg = event['queryStringParameters']['msg']
    except:
        apiMsg = '请检查是否请求参数格式和内容是否填写正确(企业微信ID、应用secert、应用agentId、发送消息内容)'
        status = 1
    else:
        try:
            # 执行主程序:获取token、根据token触发企业微信消息通知
            token = getToken(apiId,apiSecert)
            sendMsg(token,apiAgentId,apiMsg)
        except:
            status = 1
            apiMsg = '主程序运行时出现错误'
        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)

<3>环境->访问服务->新建(配置信息)

构建完成待函数正常生效,随后访问URL进行测试:

云函数的访问服务 URL + 触发路径 + ? id = 企业微信ID & secert = 应用secert & agentId=应用 AgentId & msg = 消息内容

随后在twikoo中配置企业微信发送,配置即时通知,企业微信消息通知URL配置

# URL配置:配置管理->即时通知->WECOM_API_URL
https://<vercel_app_address>/api/python?id=<企业id>&secert=<应用secret>&agentId=<应用agentId>&msg=
# 对应msg内容会自动拼接触发消息通知

常见问题 在测试url访问的时候如果提示异常则可参考相应提示一步步排查问题,构建完成可在测试窗口编写模板在线测试

image.png

响应成功则查看响应报文(可结合官方API进行参考,一步步定位)