【python_使用指定应用发送飞书卡片】

【python_使用指定应用发送飞书卡片】

python 复制代码
import requests
import json

def get_tenant_access_token():
    """
    步骤一:获取 tenant_access_token
    这是调用飞书服务端 API 的全局唯一凭证
    """
    url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
    headers = {
        "Content-Type": "application/json"
    }
    payload = {
        "app_id": APP_ID,
        "app_secret": APP_SECRET
    }
    
    response = requests.post(url, headers=headers, data=json.dumps(payload))
    result = response.json()
    
    if result.get("code") == 0:
        return result["tenant_access_token"]
    else:
        raise Exception(f"获取 Token 失败: {result}")

def send_card_message(receive_open_id, card_template_id,submit_time, rpa_coach_open_id, record_id_in_aw, enterprise_name, start_and_end_time, support_content_needed, customer_success_open_id,multiTerminalUrl):
    """
    步骤二:发送卡片消息
    :param receive_open_id: 接收者的 Open ID
    :param card_template_id: 在卡片搭建平台创建的卡片模板 ID
    """
    # 获取凭证
    token = get_tenant_access_token()
    
    # 构建请求 URL
    url = "https://open.feishu.cn/open-apis/im/v1/messages"
    
    # 查询参数:指定 ID 类型为 open_id
    params = {
        "receive_id_type": "open_id"
    }
    
    # 请求头
    headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json"
    }
    
    # 请求体:发送模板卡片
    data = {
        "receive_id": receive_open_id,
        "msg_type": "interactive", # 卡片消息类型固定为 interactive
        "content": json.dumps({
            "type": "template",
            "data": {
                "template_id": card_template_id,
                # 如果你的卡片绑定了变量,需要在这里传入 template_variable 字段
                "template_variable": {
                    "submit_time": submit_time,
                    "rpa_coach_open_id": rpa_coach_open_id,
                    "customer_success_open_id": customer_success_open_id,
                    "record_id_in_aw": record_id_in_aw,
                    "enterprise_name": enterprise_name,
                    "start_and_end_time": start_and_end_time,
                    "support_content_needed": support_content_needed,
                    "multiTerminalUrl": multiTerminalUrl
                }
            }
        })
    }
    
    # 发送 POST 请求
    response = requests.post(url, params=params, headers=headers, data=json.dumps(data))
    result = response.json()
    
    if result.get("code") == 0:
        print("🎉 卡片发送成功!")
        print("消息 ID:", result.get("data", {}).get("message_id"))
    else:
        print("❌ 发送失败:", result)

# --- 执行代码 ---
if __name__ == "__main__":
    # 1. 配置你的应用凭证 (请替换为你的实际 ID 和 Secret)
    APP_ID = "XXX"
    APP_SECRET = "XXX"

    # 替换为实际的接收者 Open ID 和卡片 ID
    RECEIVER_OPEN_ID = "XXX"
    CARD_ID = "XXX" 

    #卡片里面的参数
    submit_time = "2024-06-01 09:00:00"
    rpa_coach_open_id= "XXX"  # 替换为实际的 RPA 教练 Open ID
    customer_success_open_id="XXX"  # 替换为实际的客户成功经理 Open ID
    record_id_in_aw="1234567890"
    enterprise_name="飞书科技有限公司"
    start_and_end_time="2024-06-01 10:00:00 ~ 2024-06-01 11:00:00"
    support_content_needed="需要支持的内容示例"
    file_url="https://winrobot-ai-power.yingdao.com/ca778869-49c2-4ead-90f7-1c52b731f32e"
    multiTerminalUrl={
        "pc_url": file_url,
        "android_url": file_url,
        "ios_url": file_url,
        "url": file_url
        }
    
    send_card_message(RECEIVER_OPEN_ID, CARD_ID,submit_time,rpa_coach_open_id, record_id_in_aw, enterprise_name, start_and_end_time, support_content_needed, customer_success_open_id,multiTerminalUrl)
相关推荐
SimonKing3 分钟前
零大模型依赖!SQLite FTS5 + jieba 打造纯本地知识库搜索
后端·python·程序员
慢云智慧空间4 分钟前
从智能终端到空间AI,慢云科技如何重新定义智慧人居?
人工智能·python·科技
李福春7 分钟前
斗破Google ADK Java苍穹-第5境斗灵-凝物通脉-Context与State
java·开发语言·人工智能·java-ee·google adk·深圳同盟·腾讯云架构师技术同盟
十年Java程序媛8 分钟前
Java 接口和抽象类对比|抛弃老旧八股,正确选型
java·开发语言·spring boot·后端
范中勤10 分钟前
OSS 多文件打包回流上传:流式管道无落地 VS 临时磁盘落地,两种工业方案深度对比
java·高并发·zip·oss·架构选型
无毁的湖光-Al12 分钟前
解Bug之路-隔离故障点后业务不恢复?-热点Key处理与亚稳态故障
java·数据库·mysql
yi01114 分钟前
LeetCode 3. 无重复字符的最长子串|不定长滑动窗口:什么时候更新最大值?
笔记·python·算法·leetcode·双指针·滑动窗口
Eyfcom18 分钟前
快递管理系统中的电子围栏实战:高德与谷歌双平台技术选型与实现
java·后端·快递管理系统
Rain的Java大神之路19 分钟前
Java PDF导出,90%的人选错库!11个生产坑+选型+代码,一次讲透
java·后端·面试
y1su21 分钟前
Leetcode 单调栈模板
java·开发语言·数据结构·算法·leetcode