python_【更新已发送的消息卡片】

链接:更新已发送的消息卡片

注意: 卡片结构要写全,因为不可以局部更新

python 复制代码
import requests
import json

def get_tenant_access_token(app_id, app_secret):
    """获取 tenant_access_token"""
    url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
    resp = requests.post(url, json={"app_id": app_id, "app_secret": app_secret})
    result = resp.json()
    return result.get("tenant_access_token") if result.get("code") == 0 else None

def update_message_card(message_id, card_content, app_token):
    """
    更新已发送的消息卡片
    :param message_id: 消息ID
    :param card_content: 卡片内容(字典或JSON字符串)
    :param app_token: tenant_access_token
    """
    url = f"https://open.feishu.cn/open-apis/im/v1/messages/{message_id}"
    headers = {
        "Authorization": f"Bearer {app_token}",
        "Content-Type": "application/json; charset=utf-8"
    }
    # 转换卡片内容为JSON字符串
    if isinstance(card_content, dict):
        card_content = json.dumps(card_content, ensure_ascii=False)
    
    body = {"content": card_content}
    response = requests.patch(url, json=body, headers=headers)
    return response.json()

# 使用示例
if __name__ == "__main__":
    APP_ID = "XXX"
    APP_SECRET = "XXX"
    
    token = get_tenant_access_token(APP_ID, APP_SECRET)
    if token:
        # 卡片内容(完整的新卡片)
        card_json = {
            "schema": "2.0",  
            "config": {
                "update_multi": True  # 必须显式设置为True
            },
            "body": {
                "elements": [
                    {
                        "tag": "button",
                        "element_id": "status",
                        "text": {
                            "tag": "plain_text",
                            "content": "已处理"
                        },
                        "type": "primary",
                        "disabled": True
                    }
                ]
            }
        }
        
        result = update_message_card(
            message_id="XXX",
            card_content=card_json,
            app_token=token
        )
        print(result)
    else:
        print("获取token失败")
相关推荐
WL_Aurora1 小时前
Java字符输入全攻略
java·开发语言
keineahnung23451 小时前
PyTorch SymNode 為何找不到方法實作?──sizes_strides_methods 動態安裝機制解析
人工智能·pytorch·python·深度学习
2501_901006471 小时前
golang如何使用DTM分布式事务框架_golang DTM分布式事务框架使用方法
jvm·数据库·python
一点一木1 小时前
2026 终端 AI 编码 Agent 六大工具深度横评
前端·人工智能·claude
2501_901200531 小时前
Golang如何做Clean Architecture_Golang整洁架构教程【详解】
jvm·数据库·python
Highcharts.js1 小时前
Highcharts React v5升级三问|最大的升级方向是什么?需要注意什么?有什么优化?
前端·javascript·react.js·前端框架·highcharts·大数据渲染·前端性能
马玉霞1 小时前
vue web端页面组件展示
前端·vue.js
weixin_459753941 小时前
Go 中嵌入类型字段在派生结构体字面量中的初始化规则详解
jvm·数据库·python
CLX05051 小时前
HTML5中Mediastream实现摄像头画面实时捕获
jvm·数据库·python