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

使用Facebook Python Business SDK调用remote_create时触发TypeError求助

排查Facebook Python Business SDK remote_create 触发的TypeError

你遇到的TypeError: string indices must be integers本质是SDK期望API返回JSON格式的响应(字典类型),但实际拿到的是字符串,导致尝试用json_body['success']索引时失败。下面是具体的排查方向和解决建议:

核心原因分析

从报错栈可以看到,SDK在is_success()方法里尝试读取json_body['success'],但此时json_body是一个字符串而非字典。这种情况通常是因为Facebook API返回了非JSON格式的响应——比如权限错误的HTML页面、网关错误提示、或者请求被拦截后的非标准返回。

逐步排查步骤

1. 先确认API响应的真实内容

最快的方式是临时调试SDK的返回内容,或者开启日志查看完整请求/响应:

  • 开启SDK调试日志:在你的代码开头加入以下代码,会打印所有API请求的详细信息,包括返回的原始内容:
    import logging
    logging.basicConfig(level=logging.DEBUG)
    
  • 临时修改SDK代码(可选):找到facebook_business/api.py里的is_success方法,在return json_body['success']前添加两行打印:
    def is_success(self):
        print("Raw response body:", self._body)
        json_body = self.json()
        print("Parsed json_body:", json_body)
        return json_body['success']
    
    这样你就能直观看到API返回的到底是JSON还是其他内容(比如HTML错误页)。

2. 检查权限与凭证正确性

这是最常见的触发原因:

  • 确认access_token拥有足够权限:需要ads_management、business_management等核心权限,且令牌未过期。可以用Facebook官方的Graph API工具测试令牌的有效性。
  • 确认act_id格式正确:必须是act_xxxxxx的格式,且该广告账户属于你的业务资产范围内。
  • 检查账号权限:你的Facebook账号是否被授权管理该广告账户,有没有被限制广告操作(比如账户审核中、违规限制)。

3. 验证API版本与SDK兼容性

Facebook API版本迭代很快,旧版SDK可能不兼容最新API:

  • 检查当前SDK使用的API版本:可以通过FacebookAdsApi.get_default_api().api_version查看。
  • 更新SDK到最新版本:运行pip install --upgrade facebook-business,确保SDK与当前Facebook API版本兼容。
  • 显式指定API版本:初始化API时指定一个稳定的版本,比如:
    FacebookAdsApi.init(access_token=config['access_token'], api_version='v18.0')
    

4. 检查请求参数合法性

虽然你的代码设置了name和objective,但某些API版本可能有额外的必填项或格式要求:

  • 确认objective值正确:REACH是合法的目标,但要注意大小写(SDK通常要求大写格式)。
  • 尝试添加status参数:部分场景下,Facebook要求显式指定广告系列状态,比如:
    campaign.update({
        Campaign.Field.name: 'My First Campaign',
        Campaign.Field.objective: 'REACH',
        Campaign.Field.status: 'ACTIVE'
    })
    

5. 排查网络环境问题

如果你的服务器在国内或者有代理/防火墙,可能导致请求被拦截,返回非JSON响应:

  • 用curl直接调用API测试:
    curl -X POST "https://graph.facebook.com/v18.0/act_xxxxxx/campaigns" \
    -H "Content-Type: application/json" \
    -d '{"name":"My First Campaign","objective":"REACH","status":"ACTIVE"}' \
    -d "access_token=your_access_token"
    
    看返回的内容是否为JSON,还是错误页面。

总结

大概率是权限不足、API版本不兼容,或者网络环境导致API返回了非JSON响应。先通过调试日志查看真实响应内容,再针对性解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:29:43