飞书webhook发送富文本(非指令)-代码分享
评论
收藏

飞书webhook发送富文本(非指令)-代码分享

经验分享
啊噜喂豆
2024-09-18 15:36·浏览量:3135
啊噜喂豆
发布于 2024-09-18 15:363135浏览

前置条件:

一、创建企业应用并申请权限、添加应用能力

  • 需要到开放平台中申请企业应用获取appid,appsecrect
  • 企业应用管理页面中要添加【机器人】应用能力
  • 还需要额外申请

二、群聊添加机器人

  • 群聊添加webhook飞书机器人
  • 并获取webhook_url和签名校验


函数及对应的功能:

# 生成签名校验
def gen_sign(timestamp, sign):
    # 拼接timestamp和secret
    string_to_sign = '{}\n{}'.format(timestamp, sign)
    hmac_code = hmac.new(string_to_sign.encode("utf-8"), digestmod=hashlib.sha256).digest()
    # 对结果进行base64处理
    sign_secrect = base64.b64encode(hmac_code).decode('utf-8')
    return sign_secrect

# 鉴权
def get_access_token(appid,appsecret):
    url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
    payload = {
        "app_id": appid,
        "app_secret": appsecret
    }
    headers = {
        "Content-Type": "application/json; charset=utf-8",
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate, br",
        "Connection": "keep-alive"
    }

    res = requests.post(url=url, json=payload, headers=headers)
    return json.loads(res.content)["tenant_access_token"]

# 获取imgkey
def upload_png_get_imgkey(token, img_path):
    url = "https://open.feishu.cn/open-apis/im/v1/images"
    headers = {
        "Authorization": "Bearer "+ token,
    }
    payload = {
        "image_type":"message"
    }
    # 准备上传的文件
    files=[
        ('image',('1234.png',open(img_path,'rb'),'application/json'))
    ]
    res = requests.post(url, headers=headers, data=payload, files=files)

    return json.loads(res.content)["data"]["image_key"]

# 发送富文本消息
def send_post(webhook_url, app_id, app_screct, sign, content):

    now_timestamp = int(time.time())
    sign_secret = gen_sign(now_timestamp, sign)
    body = {
        "timestamp":str(now_timestamp),
        "sign":sign_secret,
        "msg_type": "post",
        "content": content
    }
    print(body)
    headers = {
        "Content-Type": "application/json"
    }

    res = requests.post(webhook_url, headers=headers, json=body)
    return json.loads(res.content)

调用方法:

def main(args):

    # 以下的参数替换成自己的

    webhook_url = "https://open.feishu.cn/open-apis/bot/v2/hook/749ead4sdsdsdf06ecf"
    sign = "kvimdsdsdsdCy"
    app_id = "cli_aaaaaaaaaa"
    app_secret = "DoLHgseSgAwDYay1"
    img_path = r"C:\Users\31376\Desktop\测试.png"
    # -----参数-------

    access_token = get_access_token(app_id,app_secret)
    img_key = upload_png_get_imgkey(access_token, img_path)

    content = {
        "post": {
            "zh_cn": {
                "title": "这是一个标题",
                "content": [
                    [{
                        "tag": "text",
                        "text": "这是一串文本"
                    }],
                    [{
                        "tag": "img",
                        "image_key": img_key
                    }]
                ]
            }
        }
    }

    send_post(webhook_url,app_id,app_secret,sign,content)

实际的运行效果:

收藏1
全部评论1
最新
发布评论
评论