python_查询并删除飞书多维表格中的记录

import requests
import json

# 飞书应用配置
APP_ID = "XXX"
APP_SECRET = "XXX"

# 表格配置
FEISHU_CONFIG = {
    "售前": {
        "app_token": "售前的app_token",
        "table_id": "售前的table_id",
        "view_id": "售前的view_id"
    },
    "售后": {
        "app_token": "XXX",
        "table_id": "XXX",
        "view_id": "XXX"
    }
}

startTriggerDict={"data":{"service_stage":"售后","rpa_coach":"火山","support_record_id_in_aw":"3"}}

APP_TOKEN = FEISHU_CONFIG[startTriggerDict["data"]["service_stage"]]["app_token"]
TABLE_ID = FEISHU_CONFIG[startTriggerDict["data"]["service_stage"]]["table_id"]
VIEW_ID = FEISHU_CONFIG[startTriggerDict["data"]["service_stage"]]["view_id"]

def get_tenant_access_token():
    """获取 tenant_access_token"""
    url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"
    headers = {
        "Content-Type": "application/json; charset=utf-8"
    }
    data = {
        "app_id": APP_ID,
        "app_secret": APP_SECRET
    }
    
    response = requests.post(url, headers=headers, json=data)
    result = response.json()
    
    if result.get("code") == 0:
        return result.get("tenant_access_token")
    else:
        raise Exception(f"获取token失败: {result.get('msg')}")

def query_support_info_in_feishu_by_aw_record_id(token,support_record_id_in_aw):
    """查询飞书多维表格里面AW中的支持记录对应ID所在行信息"""
    url = f"https://open.feishu.cn/open-apis/bitable/v1/apps/{APP_TOKEN}/tables/{TABLE_ID}/records/search"
    headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json; charset=utf-8"
    }
    data = {
        "view_id":VIEW_ID,
        "field_names": ["AW中的ID"],
        "filter": {
            "conjunction": "and",
            "conditions": [
                {
                    "field_name": "AW中的ID",
                    "operator": "is",
                    "value": [support_record_id_in_aw]
                }
            ]
        }
    }
    
    response = requests.post(url, headers=headers, json=data)
    result = response.json()
    
    if result.get("code") == 0:
        items = result.get("data", {}).get("items", [])
        if len(items) > 0:
            feishu_record_id=items[0]["record_id"]
            return feishu_record_id
        else:
            raise Exception("未找到对应的支持记录行信息")
    else:
        raise Exception(f"查询记录失败: {result.get('msg')}")

def delete_support_info_by_feishu_record_id(token, feishu_record_id):
    """删除飞书多维表格中的支持记录行信息"""
    url = f"https://open.feishu.cn/open-apis/bitable/v1/apps/{APP_TOKEN}/tables/{TABLE_ID}/records/{feishu_record_id}"
    headers = {
        "Authorization": f"Bearer {token}",
        "Content-Type": "application/json; charset=utf-8"
    }
    response = requests.delete(url, headers=headers)
    result = response.json()

    if result.get("code") == 0:
        return f"飞书多维表格中'AW中的ID'为:{startTriggerDict['data']['support_record_id_in_aw']}的行信息已删除"
    else:
        raise Exception(f"删除记录失败: {result.get('msg')}")

def main():
    try:
        print("开始获取 tenant_access_token...")
        token = get_tenant_access_token()
        print(f"成功获取 token: {token[:20]}...")
        
        print(f"\n开始")
        feishu_record_id = query_support_info_in_feishu_by_aw_record_id(token,startTriggerDict['data']["support_record_id_in_aw"])
        print(f"查询结果: {feishu_record_id}")

        delete_result = delete_support_info_by_feishu_record_id(token, feishu_record_id)
        print(f"删除结果: {delete_result}")

    except Exception as e:
        print(f"\n❌ 错误: {e}")
        import traceback
        traceback.print_exc()

if __name__ == "__main__":
    main()


JS代码留存

async function feishuDeleteSupportRecordIfPreSales() {
  // 仅售前阶段执行删除操作
  if (startTrigger.data.service_stage !== '售前') {
    return '非售前阶段,无需删除记录';
  }

  // 飞书应用配置
  const APP_ID = "XXX";
  const APP_SECRET = "XXX";

  // 表格配置
  const FEISHU_CONFIG = {
    "售前": {
      app_token: "XXX",
      table_id: "xxx",
      view_id: "XXX"
    }
  };

  const service_stage = startTrigger.data.service_stage;
  const support_record_id_in_aw = startTrigger.data.support_record_id_in_aw;

  const APP_TOKEN = FEISHU_CONFIG[service_stage].app_token;
  const TABLE_ID = FEISHU_CONFIG[service_stage].table_id;
  const VIEW_ID = FEISHU_CONFIG[service_stage].view_id;

  async function getTenantAccessToken() {
    const url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal";
    const headers = {
      "Content-Type": "application/json; charset=utf-8"
    };
    const body = JSON.stringify({
      app_id: APP_ID,
      app_secret: APP_SECRET
    });

    const response = await fetch(url, {
      method: "POST",
      headers,
      body
    });
    const result = await response.json();

    if (result.code === 0) {
      return result.tenant_access_token;
    } else {
      throw new Error(`获取token失败: ${result.msg}`);
    }
  }

  async function querySupportInfoByAwRecordId(token, supportId) {
    const url = `https://open.feishu.cn/open-apis/bitable/v1/apps/${APP_TOKEN}/tables/${TABLE_ID}/records/search`;
    const headers = {
      Authorization: `Bearer ${token}`,
      "Content-Type": "application/json; charset=utf-8"
    };
    const body = JSON.stringify({
      view_id: VIEW_ID,
      field_names: ["AW中的ID"],
      filter: {
        conjunction: "and",
        conditions: [
          {
            field_name: "AW中的ID",
            operator: "is",
            value: [supportId]
          }
        ]
      }
    });

    const response = await fetch(url, {
      method: "POST",
      headers,
      body
    });
    const result = await response.json();

    if (result.code === 0) {
      const items = result.data?.items || [];
      if (items.length > 0) {
        return items[0].record_id;
      } else {
        throw new Error("未找到对应的支持记录行信息");
      }
    } else {
      throw new Error(`查询记录失败: ${result.msg}`);
    }
  }

  async function deleteSupportInfoByFeishuRecordId(token, feishuRecordId) {
    const url = `https://open.feishu.cn/open-apis/bitable/v1/apps/${APP_TOKEN}/tables/${TABLE_ID}/records/${feishuRecordId}`;
    const headers = {
      Authorization: `Bearer ${token}`,
      "Content-Type": "application/json; charset=utf-8"
    };

    const response = await fetch(url, {
      method: "DELETE",
      headers
    });
    const result = await response.json();

    if (result.code === 0) {
      return `飞书多维表格中'AW中的ID'为:${support_record_id_in_aw}的行信息已删除`;
    } else {
      throw new Error(`删除记录失败: ${result.msg}`);
    }
  }

  try {
    const token = await getTenantAccessToken();
    const feishuRecordId = await querySupportInfoByAwRecordId(token, support_record_id_in_aw);
    const deleteResult = await deleteSupportInfoByFeishuRecordId(token, feishuRecordId);
    return deleteResult;
  } catch (error) {
    return `❌ 错误: ${error.message}`;
  }
}

return feishuDeleteSupportRecordIfPreSales();
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐