在这篇文章中:【AI的未来 - AI Agent系列】【MetaGPT】3. 实现一个订阅智能体,订阅消息并打通微信和邮件,我们实现了将收集到的信息推送给微信的功能,这个功能是如何打通的?今天我们来学习一下。

这里我们使用的是微信公众号的推送方式,第三方的公众号wxpusher提供了消息推送功能,并且代码开源,这种实现方式比较简单,而且可以直接使用markdown格式的文本推送,还没有被封号的风险。

wxpusher详细的开发文档见:https://wxpusher.zjiecode.com/docs/#/

1. 先来封装好调用wxpusher进行消息推送的接口

class WxPusherClient:
    def __init__(self, token: Optional[str] = None, base_url: str = "http://wxpusher.zjiecode.com"):
        self.base_url = base_url
        self.token = token or os.environ["WXPUSHER_TOKEN"] # 1 从环境变量中获取token,所以你需要在环境变量中配置WXPUSHER_TOKEN或在配置文件中设置WXPUSHER_TOKEN

    async def send_message(
        self,
        content,
        summary: Optional[str] = None,
        content_type: int = 1,
        topic_ids: Optional[list[int]] = None,
        uids: Optional[list[int]] = None,
        verify: bool = False,
        url: Optional[str] = None,
    ):
        payload = {
            "appToken": self.token,
            "content": content,
            "summary": summary,
            "contentType": content_type,
            "topicIds": topic_ids or [],
            # 2 从环境变量中获取uids,所以你需要在环境变量中配置WXPUSHER_UIDS
            # uids是你想推送给哪个微信,必须是关注了你这个订阅号的微信才可以知道uid
            "uids": uids or os.environ["WXPUSHER_UIDS"].split(","), 
            "verifyPay": verify,
            "url": url,
        }
        url = f"{self.base_url}/api/send/message"
        return await self._request("POST", url, json=payload)

    async def _request(self, method, url, **kwargs):
        async with aiohttp.ClientSession() as session:
            async with session.request(method, url, **kwargs) as response:
                response.raise_for_status()
                return await response.json()

2. 参数解释和获取方法

从代码可以看到需要的参数如下:

{
  "appToken":"AT_xxx",
  "content":"Wxpusher祝你中秋节快乐!",
  "summary":"消息摘要",//消息摘要,显示在微信聊天页面或者模版消息卡片上,限制长度100,可以不传,不传默认截取content前面的内容。
  "contentType":1,//内容类型 1表示文字  2表示html(只发送body标签内部的数据即可,不包括body标签) 3表示markdown 
  "topicIds":[ //发送目标的topicId,是一个数组!!!,也就是群发,使用uids单发的时候, 可以不传。
      123
  ],
  "uids":[//发送目标的UID,是一个数组。注意uids和topicIds可以同时填写,也可以只填写一个。
      "UID_xxxx"
  ],
  "url":"https://wxpusher.zjiecode.com", //原文链接,可选参数
  "verifyPay":false //是否验证订阅时间,true表示只推送给付费订阅用户,false表示推送的时候,不验证付费,不验证用户订阅到期时间,用户订阅过期了,也能收到。
}

2.1 token的获取

这个是必须的。APP_TOKEN是应用的身份标志,这个只能开发者你本人知道 ,拥有APP_TOKEN,就可以给对应的应用的用户发送消息
(1)注册(使用微信扫码登录,无需注册)并登录WxPusher的管理后台:https://wxpusher.zjiecode.com/admin/main

(2)进入页面后,如果没有创建过应用,会先让你创建一个应用

python 微信公众号后台数据 python微信公众号消息接口_笔记


(3)创建完应用后,会显示该应用的APP_TOKEN。或者在侧边栏,在应用管理 --> appToken页面中,可以重置appToken以重新获取token。

python 微信公众号后台数据 python微信公众号消息接口_开发语言_02


python 微信公众号后台数据 python微信公众号消息接口_笔记_03

2.2 uids的获取

微信用户标志,来说明要发给哪个用户,多个用户之间用","隔开。

(1)在后台,应用管理的关注应用页面,根据提供的关怀方式让用户关注

python 微信公众号后台数据 python微信公众号消息接口_笔记_04


(2)用户关注了之后,在用户列表中可以看到用户的uid

python 微信公众号后台数据 python微信公众号消息接口_开发语言_05


有了Token和uid,就能推送了。将要推送的内容填到content字段中,就OK了。