python调用飞书机器人发送文件

当前飞书webhook机器人还不支持发送文件类型的群消息,可以申请创建一个机器人应用来实现群发送文件消息。

创建机器人后,需要开通一系列权限,然后发布。由管理员审核通过后,才可使用。

包括如下的权限,可以获取群的chat_id。

开通权限发布应用后,可以取到两个重要的参数:

app_id

app_secret

使用两个参数可以生成密钥tenant_access_token,

headers = {'Authorization': f'Bearer {get_token()}', ## 获取tenant_access_token, 需要替换为实际的token

python 复制代码
def get_token():
    # 获取tenant_access_token,供上传图片接口使用
    url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
    headers = {
        "Content-Type": "application/json; charset=utf-8",
    }
    payload_data = {
        "app_id": "cli_xxx",
        "app_secret": "xxx",
    }
    response = requests.post(url=url, data=json.dumps(payload_data), headers=headers).json()
    print(response)
    token = response['tenant_access_token']
    return token```

上传文件

python 复制代码
def upload_file(file_path):
    try:
        file_name = file_path.split(',')[0]
        url = "https://open.feishu.cn/open-apis/im/v1/files"
        form = {'file_type': 'stream',
                'file_name': file_name,
                'file': (file_name, open(file_path, 'rb'),
                         'text/plain')}  # 需要替换具体的path  具体的格式参考  https://www.w3school.com.cn/media/media_mimeref.asp
        multi_form = MultipartEncoder(form)
        headers = {'Authorization': f'Bearer {get_token()}',  ## 获取tenant_access_token, 需要替换为实际的token
                   }
        headers['Content-Type'] = multi_form.content_type
        r = requests.request("POST", url, headers=headers, data=multi_form)
        print(r.json())
        # print(response.headers['X-Tt-Logid'])  # for debug or oncall
        # print(response.content)  # Print Response
        if r.json().get("code") == 0 and r.json().get("msg") == "success":
            logger.info(f"上传文件到飞书成功,msg={r.json()},{file_path=}")
            media_id = r.json().get('data').get('file_key')
            return media_id
        else:
            logger.warning(f"上传文件到飞书异常,{r.json()=},{file_path=}")

        # Press the green button in the gutter to run the script.

    except Exception as e:
        # logger.warning("上传文件到企业微信失败")
        print("上传文件到飞书失败")
        print(e)
        # logger.warning(e)
        pass

发送文件到群

python 复制代码
def send_file(file_path=None, media_id=""):
    """机器人应用上传文件"""
    if not media_id:
        media_id = upload_file(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": "oc_xxx"
    }
    headers = {
        'Authorization': 'Bearer ' + get_token()
    }
    response = requests.post(url=url, data=json.dumps(form), headers=headers)
    print(response.json())

获取群的chat_id

python 复制代码
def get_qun_list():
    url = 'https://open.feishu.cn/open-apis/im/v1/chats'
    headers = {
        'Authorization': 'Bearer ' + get_token()
    }
    response = requests.get(url=url, headers=headers)
    print(response.json())
    return response.json()['data']['items']


def get_ _by_name(qun_name):
    items = get_qun_list()
    for i in items:
        if i.get('name') == str(qun_name):
            print(i.get('chat_id'))
            return i.get('chat_id')

发送成功

相关推荐
Hello eveybody1 天前
介绍一下背包DP(Python)
开发语言·python·动态规划·dp·背包dp
2301_795099741 天前
让 CSS Grid 自适应容器尺寸的动态布局方案
jvm·数据库·python
AI进化营-智能译站1 天前
ROS2 C++开发系列12-用多态与虚函数构建可扩展的ROS2机器人行为模块
开发语言·c++·ai·机器人
呆萌的代Ma1 天前
python读取并加载.env的配置文件
python
Muyuan19981 天前
27.RAG 系统中的上下文充分性判断:从 Chunk 数量、FAISS 距离到 LLM Relevance Gate
python·django·pdf·fastapi·faiss
U盘失踪了1 天前
python curl转python脚本
开发语言·chrome·python
FQNmxDG4S1 天前
Java泛型编程:类型擦除与泛型方法的应用场景
java·开发语言·python
bzmK1DTbd1 天前
JDBC编程规范:PreparedStatement与事务管理
数据库·python·eclipse
我星期八休息1 天前
IT疑难杂症诊疗室:AI时代工程师Superpowers进化论
linux·开发语言·数据结构·人工智能·python·散列表
代码小书生1 天前
math,一个基础的 Python 库!
人工智能·python·算法