前文
使用python request库向飞书群聊机器人推送消息,代码推送纯文本消息,富文本消息需要按官方要求格式编辑request data数据
飞书开发者社区https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot
飞书群聊机器人设置
1.群聊机器人:群里添加机器人后获取webhook
自定义关键词:推送消息中包含关键词才接收,不包含关键词不会接收;
IP白名单:在白名单内的IP地址推送的消息才会接收;
签名校验:使用密钥进行签名
2.指令机器人:创建指令流程 -> 选择webhook触发器(获取webhook) -> 选择触发指令(自定义)
使用指令机器人就是将data通过webhokk推送,机器人接收到data(json格式)后触发指令,指令中可引用data中参数
推送消息代码
# -*- coding: UTF-8 -*-
"""
__Project__:
__IDE__: PyCharm
__Author__: Achen, email to ***
__CreateDate__: 2024/5/11 13:21
__Desc__:通过飞书机器人推送消息
"""
import json
import time
import requests
import hmac
import hashlib
import base64
from typing import Optional, Union
class FeiShuMSG:
def __init__(self, token: str, text: Union[str, dict], secret: Optional[str] = None):
self.token = token
self.secret = secret # 默认None,所以没有签名时无需传参
self.text = text
self.msg = self.prepare_message()
def send_msg_info(self):
"""
main
"""
if self.token == "":
raise ValueError("token is none")
if self.secret is not None:
self.gen_sign()
self.send_msg()
def gen_sign(self):
"""
签名加密
"""
t_stamp = str(round(time.time()))
sign_s = f'{t_stamp}\n{self.secret}'
hmac_sign = hmac.new(sign_s.encode("utf-8"), digestmod=hashlib.sha256).digest()
sign_bs = base64.b64encode(hmac_sign).decode('utf-8')
self.msg["timestamp"] = t_stamp
self.msg["sign"] = sign_bs
def prepare_message(self):
"""
处理消息类型
"""
if isinstance(self.text, str):
# 纯文本
return {
"msg_type": "text",
"content": {
"text": self.text
}
}
elif isinstance(self.text, dict):
# TODO:富文本消息格式化 飞书baseline:https://open.feishu.cn/document/client-docs/bot-v3/add-custom-bot
return self.text
else:
raise ValueError("text must is str or dict")
def send_msg(self):
"""
send post request
"""
headers = {
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
'Content-Type': 'application/json'
}
self.msg = json.dumps(self.msg)
self.msg = bytes(self.msg, "utf8")
try:
requests.post(self.token, data=self.msg, headers=headers)
except requests.RequestException as e:
raise e
if __name__ == '__main__':
webhook = f'https://open.feishu.cn/open-apis/bot/v2/hook/********************'
secrets = f"ZRHiGlHCp3W******" # 签名密钥 没有无需传参
message_text = "test" # 推送消息,纯文本为字符串,富文本格式见飞书开发者社区
feishu = FeiShuMSG(token=webhook, secret=secrets, text=message_text)
# feishu = FeiShuMSG(token=webhook, text=message_text)
feishu.send_msg_info()