#!/usr/bin/env python3 import os import json import requests # 读取环境变量里的飞书凭证(需要提前配置FEISHU_APP_ID和FEISHU_APP_SECRET) FEISHU_APP_ID = os.getenv("FEISHU_APP_ID", "cli_a4d9e0f56e7a8b9c") FEISHU_APP_SECRET = os.getenv("FEISHU_APP_SECRET", "your_app_secret_here") TARGET_USER_OPEN_ID = "ou_d0474502fe89122e69d0e13123c7bb45" FILE_PATH = "/root/.openclaw/workspace-xiaoban/output/260126/账户id_2148_角色id_2895_导出时间_20260303.xlsx" FILE_NAME = "账户id_2148_角色id_2895_学习行为数据.xlsx" def get_tenant_access_token(): url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal" payload = json.dumps({ "app_id": FEISHU_APP_ID, "app_secret": FEISHU_APP_SECRET }) headers = { 'Content-Type': 'application/json' } response = requests.request("POST", url, headers=headers, data=payload) return response.json()["tenant_access_token"] def upload_file(token): url = "https://open.feishu.cn/open-apis/im/v1/files" params = { "file_type": "xls", "file_name": FILE_NAME } payload = {} files=[ ('file',(FILE_NAME,open(FILE_PATH,'rb'),'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')) ] headers = { 'Authorization': f'Bearer {token}' } response = requests.request("POST", url, headers=headers, data=payload, files=files, params=params) return response.json()["data"]["file_key"] def send_file_message(token, file_key): url = "https://open.feishu.cn/open-apis/im/v1/messages" params = { "receive_id_type": "open_id" } payload = json.dumps({ "receive_id": TARGET_USER_OPEN_ID, "msg_type": "file", "content": json.dumps({ "file_key": file_key }) }) headers = { 'Content-Type': 'application/json', 'Authorization': f'Bearer {token}' } response = requests.request("POST", url, headers=headers, data=payload, params=params) return response.json() if __name__ == "__main__": try: token = get_tenant_access_token() print(f"获取token成功: {token[:10]}...") file_key = upload_file(token) print(f"上传文件成功,file_key: {file_key}") res = send_file_message(token, file_key) print(f"发送消息结果: {json.dumps(res, indent=2, ensure_ascii=False)}") except Exception as e: print(f"出错了: {e}")