当前位置: 首页 > article >正文

【保姆式】python调用api通过机器人发送文件到飞书指定群聊

当前飞书webhook机器人还不支持发送文件类型的群消息,它目前仅支持文本,富文本,卡片等文字类型的数据。
我们可以申请创建一个机器人应用来实现群发送文件消息。

创建飞书应用

创建飞书应用、配置权限、添加机器人

  1. 来到飞书开发者后台

创建企业自建应用
输入名称、描述
在这里插入图片描述

  1. 创建应用后,需要开通一系列权限,然后发布。由管理员审核通过后,才可使用
    在这里插入图片描述
    在上述位置下添加下述权限并开通
    在这里插入图片描述

  2. 创建机器人
    在这里插入图片描述
    在上述位置添加好机器人

  3. 在你要发送的群里中添加刚刚创建的机器人(我这的机器人取名为“推送报表”)
    在这里插入图片描述

  4. 最后提交发布, 在凭证和基础信息这里获取

app id
app secret

在这里插入图片描述

调用API上传文件

流程顺序如下:通过app_id,app_secret获取token -> 上传文件(获取文件id)-> 获取群聊chat_id -> 通过文件id将文件上传到指定chat_id

  1. 获取token
def get_token():
    """ 获取飞书 access_token """
    
    url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/"
    headers = {
        "Content-Type": "application/json"
    }
    data = {
        "app_id": APP_ID,
        "app_secret": APP_SECRET
    }
    response = requests.post(url, headers=headers, json=data)
    if response.status_code == 200:
        return response.json()["tenant_access_token"]
    else:
        return ""
  1. 上传文件到飞书,并获取文件id
def upload_file(file_name, file_path):
    """ 上传文件到飞书 """
    
    url = "https://open.feishu.cn/open-apis/im/v1/files"
    headers = {
        "Authorization": "Bearer "+get_token()
    }
    form = {
        "file_type": "stream",
        "file_name": file_name,
        "file": (file_name, open(file_path, "rb"), "text/plain")
    }
    multi_form = MultipartEncoder(form)
    headers["Content-Type"] = multi_form.content_type
    response = requests.post(url, headers=headers, data=multi_form)
    if response.status_code == 200 and response.json().get("code") == 0:
        # print(f"上传文件到飞书成功,msg={response.json()},{file_path=}")
        media_id = response.json().get("data", {}).get("file_key")
        return media_id
    else:
        return "" 
  1. 获取群chat_id
    有两种方式,通过api,或者直接通过平台粘贴对应群聊id,这里使用后者,因为是发送到固定群聊
    去到api调试页面,按照如下操作获取对应群聊chat_id
    在这里插入图片描述
  2. 发送文件到群里
def send_file(file_path, media_id=None):
    """机器人应用上传文件"""
    if not media_id:
        media_id = upload_file(file_name=file_path, file_path=file_path)
        time.sleep(1)
    url = 'https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id'
    msgContent = {
        "file_key": media_id
    }
    form = {
        "content": json.dumps(msgContent),
        "msg_type": "file",
        "receive_id": CHAT_ID
    }
    headers = {
        'Authorization': 'Bearer ' + get_token()
    }
    response = requests.post(url=url, data=json.dumps(form), headers=headers)
    print(response.json())

完成文件发送
在这里插入图片描述


http://www.kler.cn/a/453717.html

相关文章:

  • 【再谈设计模式】享元模式~对象共享的优化妙手
  • 致命错误: Class ‘ZipArchive‘ not found
  • OpenCV相机标定与3D重建(36)计算两幅图像之间基本矩阵(Fundamental Matrix)的函数findFundamentalMat()的使用
  • 【泰克生物】从酵母展示技术到抗体筛选:实现精准药物发现
  • R语言数据分析案例47-上海译文出版社旗舰店图书分析和可视化
  • 一分钟快速了解Ecovadis认证等级划分
  • 前缀和与差分
  • 太空探索的未来掌握在人工智能和机器人手中
  • 服务器性能监控与优化系统深度解析
  • sentinel学习笔记5-资源指标数据统计
  • debezium独立版使用(不结合kafuka)
  • NLP中的神经网络基础
  • CSS(二):美化网页元素
  • 前端:改变鼠标点击物体的颜色
  • CSS快速入门
  • flask后端开发(7):加载静态文件
  • v3+ts 批量引入组件
  • DDI-GPT:使用知识图谱增强的大模型对药物相互作用进行可解释的预测
  • PPO 可能出现 KL 爆炸等问题的详细分析(KL Explosions in PPO): 中英双语
  • 无问社区-无问AI模型