使用Python發送飛書消息


配置文件
# 飛書機器人key
bot_app = {
    "app_id": "************************************",
    "app_secret": "************************************"
}

}
# 飛書群機器人
bot = {
    "bot_test": "************************************",  # 測試機器人
}

url_api = {
    "url_msg": "https://open.feishu.cn/open-apis/bot/v2/hook/",  # 發送普通消息時用
    "url_card": "https://open.feishu.cn/open-apis/message/v4/send/",  # 發送卡片消息時用
    "url_img": "https://open.feishu.cn/open-apis/image/v4/put/",  # 發送圖片消息時用
    "url_token": "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal/"  # 獲取機器人的key
}
主程序
import json
import requests
from .config import url_api, bot_app, bot1_app


def get_token(app):
    """獲取應用token"""
    url = url_api['url_token']
    headers = {"Content-Type": "text/plain"}
    r = requests.post(url, headers=headers, json=app)
    return json.loads(r.text)


def upload_image(image_path):
    """上傳圖片"""
    with open(image_path, 'rb') as f:
        image = f.read()
    resp = requests.post(
        url=url_api['url_img'],
        headers={'Authorization': "Bearer " + get_token(bot_app)['tenant_access_token']},
        files={
            "image": image
        },
        data={
            "image_type": "message"
        },
        stream=True)
    resp.raise_for_status()
    content = resp.json()
    if content.get("code") == 0:
        return content['data']['image_key']
    else:
        return Exception("Call Api Error, errorCode is %s" % content["code"])


def send_text(Text, bot):
    """發送普通消息"""
    url = url_api['url_msg'] + bot
    headers = {"Content-Type": "text/plain"}
    data = {
        "msg_type": "text",
        "content": {
            "text": Text
        }
    }
    r = requests.post(url, headers=headers, json=data)
    return r.text


def send_img(path, bot):
    """發送圖片消息"""
    url = url_api['url_msg'] + bot
    headers = {"Content-Type": "text/plain"}
    data = {
        "msg_type": "image",
        "content": {
            "image_key": upload_image(path)
        }
    }
    r = requests.post(url, headers=headers, json=data)
    return r.text


def send_markdown(text, bot):
    """發送富文本消息"""
    url = url_api['url_msg'] + bot
    headers = {"Content-Type": "text/plain"}
    data = {
        "msg_type": "interactive",
        "card": {
            "config": {
                "wide_screen_mode": True
            },
            "header": {
                "title": {
                    "tag": "plain_text",
                    "content": "提醒"
                },
                "template": "red"
            },
            "elements": [{"tag": "div",
                          "text": {"content": text,
                                   "tag": "lark_md"}}]}
    }
    r = requests.post(url, headers=headers, json=data)
    return r.text


def send_card(Text, bot):
    """發送卡片消息"""
    url = url_api['url_msg'] + bot
    headers = {"Content-Type": "text/plain"}
    data = {
        "msg_type": "interactive",
        "card": Text
    }
    r = requests.post(url, headers=headers, json=data)
    return r.text


def send_file(localfile, bot):
    """發送文件,根據send_markdown改的,主要是將七牛的地址放進來"""
    url = url = url_api['url_msg'] + bot
    headers = {"Content-Type": "text/plain"}
    key = localfile.split('/')[-1]
    data = {
        "msg_type": "post",
        "content": {
            "post": {
                "zh_cn": {
                    "title": key.split('.')[0],
                    "content": [[{"tag": "text",
                                  "text": "數據鏈接: "},
                                 {"tag": "a",
                                  "text": "點擊下載",
                                  "href": qn_url(localfile)}]]
                }}}}
    r = requests.post(url, headers=headers, json=data)
    return r.text

def send_fscard(mail, data):
    """發送飛書卡片消息"""
    header = {
        "Authorization": "Bearer " + get_token(bot1_app)['tenant_access_token'],
        "Content-Type": "application/json; charset=utf-8"
    }
    body = {
        "msg_type": "interactive",
        "email": mail,
        "card": data
    }
    r = requests.post(url_api['url_card'], json=body, headers=header)
    return r.text


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM