在这篇文章中:【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_urlself.token = token or os.environ["WXPUSHER_TOKEN"] # 1 从环境变量中获取token,所以你需要在环境变量中配置WXPUSHER_TOKEN或在配置文件中设置WXPUSHER_TOKENasync 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)进入页面后,如果没有创建过应用,会先让你创建一个应用

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

2.2 uids的获取

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

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

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


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