在这篇文章中:【AI的未来 - AI Agent系列】【MetaGPT】3. 实现一个订阅智能体,订阅消息并打通微信和邮件,我们实现了将收集到的信息推送给微信的功能,这个功能是如何打通的?今天我们来学习一下。
这里我们使用的是微信公众号的推送方式,第三方的公众号wxpusher提供了消息推送功能,并且代码开源,这种实现方式比较简单,而且可以直接使用markdown格式的文本推送,还没有被封号的风险。
wxpusher详细的开发文档见:https://wxpusher.zjiecode.com/docs/#/
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()
从代码可以看到需要的参数如下:
{
"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表示推送的时候,不验证付费,不验证用户订阅到期时间,用户订阅过期了,也能收到。
}
这个是必须的。APP_TOKEN是应用的身份标志,这个只能开发者你本人知道 ,拥有APP_TOKEN,就可以给对应的应用的用户发送消息
(1)注册(使用微信扫码登录,无需注册)并登录WxPusher的管理后台:https://wxpusher.zjiecode.com/admin/main
(2)进入页面后,如果没有创建过应用,会先让你创建一个应用
(3)创建完应用后,会显示该应用的APP_TOKEN。或者在侧边栏,在应用管理 --> appToken页面中,可以重置appToken以重新获取token。
微信用户标志,来说明要发给哪个用户,多个用户之间用","隔开。
(1)在后台,应用管理的关注应用页面,根据提供的关怀方式让用户关注
(2)用户关注了之后,在用户列表中可以看到用户的uid
有了Token和uid,就能推送了。将要推送的内容填到content字段中,就OK了。