企业飞书应用机器人,使用python发送图文信息到群
企业飞书应用的自动化,需要创建企业应用,应用开通机器人能力,并获取机器人所需的app_id
与app_secret
(这一部分大家可以在飞书的控制台获取:https://open.feishu.cn/api-explorer/)
文章目录
- 步骤1:上传图片
- 步骤2:构造富文本信息
飞书发送图文信息到群需要以下几个步骤:
- 使用机器人先上传图片,获取图片对应的
file_key
- 将图片对应的
file_key
与文字内容构造成一个富文本(核心) - 在群里发送构造好的富文本
步骤1:上传图片
比如说上传这样的一个图片叫robot.jpg
:
博主提供一个整理好的工具函数:
def fs_upload_pic(pic_path, app_id=None, app_secret=None):
"""上传图片"""
# 创建client
client = lark.Client.builder().app_id(app_id).app_secret(app_secret).log_level(lark.LogLevel.DEBUG).build()
# 构造请求对象
request: CreateImageRequest = CreateImageRequest.builder().request_body(
CreateImageRequestBody.builder().image_type("message").image(open(pic_path, "rb")).build()).build()
# 发起请求
response: CreateImageResponse = client.im.v1.image.create(request)
# 处理失败返回
if not response.success():
lark.logger.error(
f"client.im.v1.image.create failed, code: {response.code}, msg: {response.msg}, log_id: {response.get_log_id()}")
return None
# 处理业务结果
return eval(lark.JSON.marshal(response.data))['image_key']
使用方法:
app_id="cli_xxxx",
app_secret="xxxxx",
img_key = fs_upload_pic("robot.jpg", app_id, app_secret)
print(img_key)
成功上传后得到如下img_key
:
img_v3_02xxxxxxxx
步骤2:构造富文本信息
发送富文本的更多信息可以参考:https://open.feishu.cn/document/server-docs/im-v1/message-content-description/create_json
富文本的内容需要构造成字典的格式:
{
"zh_cn": {
"title": "我是一个标题",
"content": [
[
{
"tag": "text",
"text": "第一行:",
"style": ["bold", "underline"]
},
{"tag": "a", "href": "http://www.feishu.cn", "text": "超链接", "style": ["bold", "italic"]},
{"tag": "at", "user_id": "ou_1avnmsbv3k45jnk34j5", "style": ["lineThrough"]}
],
]
}}
发送富文本,博主这里提供一个工具函数,其中几个参数:
- rich_content:字典格式的富文本内容
- chat_id:发送的群id,在API调试台可以直接获取(https://open.feishu.cn/api-explorer/)
在工具函数中,富文本会经过处理:str(rich_content).replace("'", "\"")
,这样处理后的字典格式数据就能直接发送了
def fs_send_rich_text(rich_content: dict, chat_id, app_id=None, app_secret=None):
"""发送富文本"""
# 创建client
client = lark.Client.builder().app_id(app_id).app_secret(app_secret).log_level(lark.LogLevel.DEBUG).build()
# 构造请求对象
request: CreateMessageRequest = CreateMessageRequest.builder() \
.receive_id_type("chat_id") \
.request_body(CreateMessageRequestBody.builder()
.receive_id(chat_id)
.msg_type("post")
.content(str(rich_content).replace("'", "\""))
.build()) \
.build()
# 发起请求
response: CreateMessageResponse = client.im.v1.message.create(request)
# 处理失败返回
if not response.success():
lark.logger.error(
f"client.im.v1.message.create failed, code: {response.code}, msg: {response.msg}, log_id: {response.get_log_id()}")
return
# 处理业务结果
lark.logger.info(lark.JSON.marshal(response.data, indent=4))
使用方法:
img_key = "img_v3_02xxxxxx"
chat_id = "oc_00xxxxxxx"
# 构造富文本
send_info = {
"zh_cn": {
"title": f"测试发送富文本信息",
"content": [
[
{
"tag": "text",
"text": "下面是图片:",
"style": ["bold", "underline"]
},
],
[{"tag": "img", "image_key": img_key}],
]
},
}
fs_send_rich_text(send_info, chat_id, app_id, app_secret)
发送后的效果如下: