投放接口错误处理指引

在调用 Marketing API 时,可能会出现两种类型的错误响应:BusinessExceptionSysException。当接口返回 BusinessException 错误时,这表示发生了业务异常。建议您根据返回的 code 值和 message 信息来处理错误并调整请求参数。另外,偶尔接口可能会返回 SysException 错误(例如错误码 30000-30099),这类错误通常是由于网络波动、请求超时或底层服务短暂不可用所导致。遇到这种情况,建议开发者对接口进行延时 1 到 3 次的重试。

对于需要幂等性的投放接口,即每次请求只创建一个唯一的广告资源,您可以在请求时添加一个名为 X-Request-Id 的请求头,用来标识该次请求的唯一值,并与您提供的请求参数相对应。例如,当请求参数为 A 时,X-Request-Id 可设为 AA。这样,即使请求重复,API 也不会创建新的广告资源,从而避免在重试时重复创建。如果使用相同的请求参数和 X-Request-Id 重复创建,API 将返回对应的唯一广告资源。

目前支持 X-Request-Id 的请求头的有:

"adgroups/add",
"dynamic_creatives/add"

在使用的过程中,如果开发者用了相同的 X-Request-Id,但是不同的请求参数,那么 API 会返回 31060 错误码,错误消息 – “您的请求参数与之前具有相同 X-Request-Id 的请求不同,请更新参数后重试”。

实际应用场景

请求接口:adgroups/add
请求体

{
    "account_id":10000001,
    "adgroup_name":"腾讯广告投放 2024",
    "bid_amount":5000,
    "bid_strategy":"BID_STRATEGY_TARGET_COST",
   	"begin_date": "2024-03-29",
    "end_date": "2024-03-31",
    "optimization_goal": "OPTIMIZATIONGOAL_ECOMMERCE_ORDER",
    "marketing_goal": "MARKETING_GOAL_PRODUCT_SALES",
    "marketing_sub_goal": "MARKETING_SUB_GOAL_UNKNOWN",
    "site_set":[
        "SITE_SET_WECHAT"
    ],
    "targeting":{
        "age":[
            {
                "max":66,
                "min":36
            }
        ],
        "game_consumption_level":[
            "HIGH"
        ],
        "gender":[
            "MALE"
        ],
        "geo_location":{
            "location_types":[
                "LIVE_IN"
            ],
            "regions":[
                500000,
                110000
            ]
        },
        "wechat_ad_behavior":{
            "actions":[

            ],
            "excluded_actions":[
                "MINI_GAME_WECHAT_REGISTERED"
            ]
        }
    },
    "time_series":"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
}

返回体

{
    "code":30021,
    "message":"Delivery service interface error,please contact our dedicated operation team,interface error code: 101",
    "message_cn":"投放服务接口错误,请联系我们的专业运营团队,接口错误码为: 101 "
    "code_type":"SysException",
    "trace_id":"qe58b8ea67f4sab5ec89hcf23d15gh7fa09"
}

此时请求返回是 30021(参考范围 30000~30099),表示系统遇到不可预见的一些情况,建议重试。但是此时因为没有加 X-Request-Id 头,所以高并发的重试,可能会让上述相同参数的请求创建多个 adgroup 出来。X-Request-Id 头就是为了解决该问题。

解决后的请求:
请求接口:adgroups/add

{
    "account_id":10000001,
    "adgroup_name":"腾讯广告投放 2024",
    "bid_amount":5000,
    "bid_strategy":"BID_STRATEGY_TARGET_COST",
   	"begin_date": "2024-03-29",
    "end_date": "2024-03-31",
    "optimization_goal": "OPTIMIZATIONGOAL_ECOMMERCE_ORDER",
    "marketing_goal": "MARKETING_GOAL_PRODUCT_SALES",
    "marketing_sub_goal": "MARKETING_SUB_GOAL_UNKNOWN",
    "site_set":[
        "SITE_SET_WECHAT"
    ],
    "targeting":{
        "age":[
            {
                "max":66,
                "min":36
            }
        ],
        "game_consumption_level":[
            "HIGH"
        ],
        "gender":[
            "MALE"
        ],
        "geo_location":{
            "location_types":[
                "LIVE_IN"
            ],
            "regions":[
                500000,
                110000
            ]
        },
        "wechat_ad_behavior":{
            "actions":[

            ],
            "excluded_actions":[
                "MINI_GAME_WECHAT_REGISTERED"
            ]
        }
    },
    "time_series":"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"
}

请求头:X-Request-Id:adgroup_001
返回体

{
    "code":0,
    "data":{
        "adgroup_id":123123123
    },
    "message":"",
    "message_cn":""
}

注意点

  • 相同的请求体,对应的请求头 X-Request-Id 应当相同,否则系统会报如下错误,表示相同请求体有不同的 X-Request-Id 的请求头,不合法。

    	{
    		"code":31060,
    		"message":"Your request differs from a previous request with the same X-Request-Id. ",
    		"message_cn":"您的请求参数与之前具有相同 X-Request-Id 的请求不同,请更新参数后重试."
    	  "code_type":"BusinessException",
    	  "trace_id":"bn68b4ea67a4fab3ec457cf3141157fa56"
    	}
    

  • 满足上述条件的请求,可以重试请求,请求的返回结果都是该请求参数和 X-Request-Id 对应的 adgroup_id,不会造成相同参数的请求创建多个 adgroup 的结果。

  • 建议相同请求体跟 X-Request-Id 保持一一对应的映射关系。

  • 在同一时间,用相同 X-Request-Id 高并发请求相同的接口,只有一个请求会成功。其他的请求会收到如下返回信息。

	{
		"code":36019,
		"message":"You have multiple concurrent requests with the same X-Request-ID at the same time, and only one of them succeeds.",
		"message_cn":"您在同一时刻具有多个相同 X-Request-Id 的并发请求,只有一个会请求成功."
	  "code_type":"BusinessException",
	  "trace_id":"a7b4ead4a4fab3ec697cf314d157fa53"
	}