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失败")
相关推荐
16月6日-晴6 分钟前
Java面向对象进阶—多态
java·开发语言
kyriewen8 分钟前
我带着DeepSeek Harness跑了一周真实需求——这份避坑速查表请收好
前端·ai编程·deepseek
计算机魔术师13 分钟前
OpenAI不单独发o3了,Altman说GPT-5才是终局
前端
一座古城1 小时前
Claude Code 架构源码解析:AI 应用开发的范式跃迁
前端·后端
K哥爬虫1 小时前
【JS 逆向百例】Vaptcha V4 手势验证码逆向分析
前端·后端
用户921080262861 小时前
复盘 AI Coding 工作台的流式链路:从 Sender 输入到 SSE 分流,再到 BubbleList 和右侧预览
前端
了不起的小明1 小时前
SwiftMesh:本地 3D 模型查看器,加密交付 + 转盘录屏一站式搞定,开源免费
前端
qq_185198691 小时前
SpringBoot-五-AOT
java·spring boot·后端
默_笙1 小时前
👍 我的代码被 ESLint 抓包了:单引号、var、没分号——全被当场点名
前端·javascript
搞个锤子哟1 小时前
vue项目引入icon的问题
前端