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

将Pandas DataFrame数据导入HubSpot CRM时遇415错误的解决方法

解决HubSpot CRM导入DataFrame数据的415错误问题

错误原因

你遇到的415 Unsupported Media Type错误,核心问题有两个:

  1. 请求格式错误:HubSpot CRM v3的导入API不支持用application/json格式直接传递CSV内容,必须用multipart/form-data来上传文件,同时附带导入配置信息。
  2. 缺少导入配置:原代码没有指定关键的导入规则(比如要导入到HubSpot的哪个对象、字段映射关系、导入行为),即使格式正确也会失败。

修正后的完整代码

以下是适配HubSpot导入API的正确实现,以导入联系人(Contacts)为例,你可以根据自己的业务需求调整对象类型和字段映射:

import pandas as pd
import requests
import json
from io import BytesIO

# 假设你的DataFrame已经存在(变量名df)
# df = pd.read_csv("your_data.csv")  # 示例:如果是从本地读取的话

# 将DataFrame转为CSV字节流(multipart上传需要bytes格式)
csv_buffer = BytesIO()
df.to_csv(csv_buffer, index=False, encoding='utf-8')
csv_buffer.seek(0)

# HubSpot配置
api_token = "your_private_app_token"  # 替换成你的私有应用token
endpoint = "https://api.hubapi.com/crm/v3/imports"

# 核心导入配置:定义导入规则
import_config = {
    "name": "从DataFrame导入联系人数据",
    "files": [
        {
            "fileName": "contacts_data.csv",
            "fileFormat": "CSV",
            "fileImportPage": {
                "hasHeader": True,
                "columnMappings": [
                    # 这里要严格对应你的DataFrame列和HubSpot属性
                    {"columnName": "email", "propertyName": "email", "columnObjectType": "contacts"},
                    {"columnName": "first_name", "propertyName": "firstname", "columnObjectType": "contacts"},
                    {"columnName": "last_name", "propertyName": "lastname", "columnObjectType": "contacts"},
                    # 更多字段映射请按需添加
                ]
            }
        }
    ],
    "importRequest": {
        "objectTypeId": "0-1",  # 0-1是联系人(contacts)的对象ID,公司(companies)是0-2,其他对象ID可查HubSpot文档
        "name": "联系人批量导入",
        "updateStrategy": "UPSERT",  # 策略:UPSERT=存在则更新,不存在则创建;还有CREATE_ONLY等选项
        "fileId": 0  # 对应上面files数组的索引,这里只有一个文件所以是0
    }
}

# 构造multipart请求:同时上传CSV文件和导入配置
files = {
    'file': ('contacts_data.csv', csv_buffer, 'text/csv'),
    'importRequest': ('', json.dumps(import_config), 'application/json')
}

headers = {
    "Authorization": f"Bearer {api_token}"
}

# 发送请求
response = requests.post(endpoint, files=files, headers=headers)

# 处理响应
if response.status_code in (200, 201):
    print("数据导入成功!导入ID:", response.json()['id'])
else:
    print(f"导入失败,状态码:{response.status_code},响应信息:{response.text}")

关键注意事项

  • 对象ID对应:如果导入的是公司(Companies),把objectTypeId改成0-2;其他对象类型的ID可在HubSpot开发者文档中查询。
  • 字段映射:columnMappings里的columnName必须和你的DataFrame列名完全一致,propertyName必须是HubSpot中对应对象的合法属性名(比如联系人的phone、company等)。
  • 权限检查:确保你的私有应用token拥有对应的权限,比如crm.objects.contacts.write(导入联系人需要)、crm.objects.companies.write(导入公司需要)。
  • CSV编码:统一用UTF-8编码,避免中文乱码或解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 12:22:26