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

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

在这里插入图片描述

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

包括如下的权限,可以获取群的chat_id。
python调用飞书机器人发送文件_第1张图片

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

app_id
app_secret

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

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

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```


上传文件

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

发送文件到群

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

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')

发送成功
python调用飞书机器人发送文件_第2张图片

你可能感兴趣的:(python,飞书,机器人)