You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Pipedrive获取含当前阶段的线索?代码问题排查

解决Pipedrive API无法返回线索阶段信息的问题

问题分析

你的代码无法返回阶段信息,主要存在以下几个问题:

  1. 分页逻辑失效:get_next_link_from_pagination函数未定义,导致无法正确遍历所有线索;且初始start=1000会直接跳过前1000条线索,数据获取不完整。
  2. 阶段数据解析错误:Pipedrive API返回的线索阶段结构并非stages[-1].get("stage_id").get("name"),实际字段路径不符。
  3. 请求效率低下:逐个线索调用API获取阶段信息,触发大量请求,易触发API限流,且增加不必要的耗时。
  4. 缺少异常处理:未处理API请求失败、字段缺失等情况,程序易中途中断。

解决方案

以下是修正后的完整代码,解决了上述所有问题,同时满足你获取当前阶段、创建日期、最后阶段更新日期的需求:

import requests
import pandas as pd

# 替换为你的Pipedrive API Token
API_TOKEN = "YOUR_API_TOKEN_HERE"

def fetch_leads():
    leads = []
    start = 0
    limit = 500

    while True:
        # 请求时直接指定需要的字段,包含阶段相关数据,避免额外API调用
        url = (
            f"https://api.pipedrive.com/v1/leads?api_token={API_TOKEN}"
            f"&start={start}&limit={limit}&include_deleted=0"
            f"&fields=id,add_time,update_time,stage_id,lead_flow_stages"
        )
        
        try:
            response = requests.get(url)
            response.raise_for_status()  # 抛出HTTP请求异常
        except requests.exceptions.RequestException as e:
            print(f"获取线索列表失败: {e}")
            break

        data = response.json()
        leads_data = data.get("data", [])
        if not leads_data:
            break

        leads.extend(leads_data)

        # 检查分页,判断是否还有更多数据
        pagination = data.get("additional_data", {}).get("pagination", {})
        if not pagination.get("more_items_in_collection"):
            break

        start = pagination.get("next_start", start + limit)

    return leads

# 初始化DataFrame
df = pd.DataFrame(columns=[
    "Lead ID", 
    "Current Stage", 
    "Creation Date", 
    "Last Stage Update Date"
])

# 获取所有线索数据
leads = fetch_leads()

# 处理每条线索的信息
for lead in leads:
    lead_id = lead.get("id")
    creation_date = lead.get("add_time")
    
    # 获取当前阶段名称
    current_stage = lead.get("stage_id", {}).get("name", "无阶段")
    
    # 获取最后阶段更新日期(从阶段历史中提取)
    last_stage_update = None
    lead_flow_stages = lead.get("lead_flow_stages", [])
    if lead_flow_stages:
        last_stage_update = lead_flow_stages[-1].get("update_time")

    # 添加到DataFrame
    df.loc[len(df)] = {
        "Lead ID": lead_id,
        "Current Stage": current_stage,
        "Creation Date": creation_date,
        "Last Stage Update Date": last_stage_update
    }

# 输出结果
print(df)

关键修正点说明

  • 修复分页逻辑:使用Pipedrive API返回的pagination字段判断是否有下一页,初始start设为0,确保获取所有线索。
  • 批量获取字段:在请求线索列表时直接指定需要的字段(包括stage_id和lead_flow_stages),无需单独调用API获取阶段信息,提升效率。
  • 正确解析阶段数据:通过stage_id直接获取当前阶段名称,通过lead_flow_stages列表的最后一项获取阶段的最后更新日期。
  • 添加异常处理:用try-except捕获HTTP请求异常,避免程序因单次请求失败而中断。

内容的提问来源于stack exchange,提问作者Vladislav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 17:57:42