# 腾讯广告创建功能说明 ## 功能概述 本文档介绍如何使用gdt-auto项目创建腾讯广告组(Adgroup)。 ## 核心实现 ### 1. Service层实现 [TencentAdsAdgroupService.java](file:///Users/pudongliang/moka_workspace/gdt-auto/src/main/java/com/moka/gdtauto/service/TencentAdsAdgroupService.java#L284-L312) ```java public AdgroupsAddResponseData createAdgroup(String accountId, AdgroupsAddRequest request) throws TencentAdsResponseException, TencentAdsSDKException, Exception { log.info("开始创建广告,accountId={}, adgroupName={}", accountId, request.getAdgroupName()); // 获取TencentAds实例 TencentAds tencentAds = clientFactory.getTencentAds(accountId); // 设置账户ID request.setAccountId(Long.parseLong(accountId)); // 调用SDK创建广告 AdgroupsAddResponseData response = tencentAds.adgroups() .adgroupsAdd(request); log.info("创建广告成功,adgroupId={}", response.getAdgroupId()); return response; } ``` ### 2. 测试实现 [TencentAdsAdgroupCreateTest.java](file:///Users/pudongliang/moka_workspace/gdt-auto/src/test/java/com/moka/gdtauto/service/TencentAdsAdgroupCreateTest.java) 测试类实现了: - 完整的创建广告测试用例 - 根据您提供的测试数据构建请求对象 - 定向设置的构建(地域、性别、年龄、排除人群等) ## 测试数据说明 ### 基础字段 | 字段 | 类型 | 说明 | 示例 | |-----|-----|-----|-----| | adgroup_name | String | 广告名称 | "测试ROI-0204" + 时间戳 | | marketing_goal | MarketingGoal | 营销目标 | MARKETING_GOAL_USER_GROWTH | | marketing_carrier_type | MarketingCarrierType | 营销载体类型 | MARKETING_CARRIER_TYPE_JUMP_PAGE | | begin_date | String | 开始日期 | "2026-02-03" | | end_date | String | 结束日期 | "2026-02-03" | | optimization_goal | OptimizationGoal | 优化目标 | OPTIMIZATIONGOAL_APP_REGISTER | | time_series | String | 投放时间段 | 336位字符串 | | bid_amount | Long | 出价金额(分) | 100 | | daily_budget | Long | 日预算(分) | 1000 | | conversion_id | Long | 转化ID | 74719216 | | bid_mode | BidMode | 出价模式 | BID_MODE_OCPM | | auto_derived_creative_enabled | Boolean | 自动衍生创意 | false | | bid_scene | BidScene | 出价场景 | BID_SCENE_UNKNOWN | ### 定向设置(targeting) #### 地域定向(geo_location) ```java GeoLocations geoLocation = new GeoLocations(); List locationTypes = new ArrayList<>(); locationTypes.add("LIVE_IN"); // 居住地 geoLocation.setLocationTypes(locationTypes); List regions = new ArrayList<>(); regions.add(1156L); // 中国 geoLocation.setRegions(regions); ``` #### 性别定向(gender) ```java List gender = new ArrayList<>(); gender.add("MALE"); // 男性 ``` #### 年龄定向(age) ```java List age = new ArrayList<>(); AgeStruct ageRange = new AgeStruct(); ageRange.setMin(35L); ageRange.setMax(66L); age.add(ageRange); ``` #### 排除转化用户(excluded_converted_audience) ```java ExcludedConvertedAudience excludedConverted = new ExcludedConvertedAudience(); excludedConverted.setExcludedDimension(ExcludedDimension.EXCLUDED_DIMENSION_GROUP); List conversionBehaviorList = new ArrayList<>(); conversionBehaviorList.add("OPTIMIZATIONGOAL_BRAND_CONVERSION"); conversionBehaviorList.add("OPTIMIZATIONGOAL_PAGE_SCAN_CODE"); excludedConverted.setConversionBehaviorList(conversionBehaviorList); excludedConverted.setExcludedDay(ExcludedDay.EXCLUDED_DAY_ONE_MONTH); ``` #### 排除自定义人群(excluded_custom_audience) ```java List excludedCustomAudience = new ArrayList<>(); excludedCustomAudience.add(43712084L); excludedCustomAudience.add(44107982L); excludedCustomAudience.add(44106830L); excludedCustomAudience.add(44241932L); ``` ### 投放站点(site_set) ```java List siteSet = new ArrayList<>(); siteSet.add("SITE_SET_SEARCH_SCENE"); // 搜索场景 siteSet.add("SITE_SET_MOBILE_UNION"); // 移动联盟 siteSet.add("SITE_SET_WECHAT"); // 微信 siteSet.add("SITE_SET_KANDIAN"); // 看点 siteSet.add("SITE_SET_QQ_MUSIC_GAME"); // QQ音乐游戏 siteSet.add("SITE_SET_TENCENT_NEWS"); // 腾讯新闻 siteSet.add("SITE_SET_TENCENT_VIDEO"); // 腾讯视频 ``` ## 运行测试 ### 1. 修改配置 在 `src/main/resources/application-local.yml` 中配置: - 腾讯广告的账户信息 - Access Token ### 2. 运行测试 ```bash cd /Users/pudongliang/moka_workspace/gdt-auto mvn test -Dtest=TencentAdsAdgroupCreateTest#testCreateAdgroupWithTestData ``` ### 3. 查看测试数据JSON 可以运行打印JSON的测试方法查看请求数据结构: ```bash mvn test -Dtest=TencentAdsAdgroupCreateTest#printTestDataJson ``` ## API文档参考 - [腾讯广告创建广告API文档](https://developers.e.qq.com/v3.0/docs/api/adgroups/add) - SDK版本:marketing-api-java-sdk 1.1.106 ## 注意事项 1. **时间序列**: time_series是336位字符串,表示7天*48个半小时的投放时间,1表示投放,0表示不投放 2. **金额单位**: bid_amount和daily_budget的单位都是**分**(¥0.01) 3. **枚举值**: SDK中的枚举类型需要使用valueOf()方法转换字符串 4. **定向设置**: targeting是一个复杂对象,包含多种定向条件 5. **账户ID**: 需要在调用前确保账户已完成OAuth授权 ## 常见问题 ### Q1: 如何获取Access Token? A: 需要先进行OAuth授权,具体参考[TencentAdsAuthService.java](file:///Users/pudongliang/moka_workspace/gdt-auto/src/main/java/com/moka/gdtauto/service/TencentAdsAuthService.java) ### Q2: 如何查看更多字段? A: 参考SDK中的[AdgroupsAddRequest.class](file:///marketing-api-java-sdk-1.1.106.jar/com.tencent.ads.model.v3/AdgroupsAddRequest.class)类,包含所有可用字段 ### Q3: 如何自定义定向条件? A: 可以参考[WriteTargetingSetting](file:///marketing-api-java-sdk-1.1.106.jar/com.tencent.ads.model.v3/WriteTargetingSetting.class)类,支持更多定向维度 ## 相关文件 - Service层: [TencentAdsAdgroupService.java](file:///Users/pudongliang/moka_workspace/gdt-auto/src/main/java/com/moka/gdtauto/service/TencentAdsAdgroupService.java) - 测试类: [TencentAdsAdgroupCreateTest.java](file:///Users/pudongliang/moka_workspace/gdt-auto/src/test/java/com/moka/gdtauto/service/TencentAdsAdgroupCreateTest.java) - API客户端工厂: [TencentAdsApiClientFactory.java](file:///Users/pudongliang/moka_workspace/gdt-auto/src/main/java/com/moka/gdtauto/client/TencentAdsApiClientFactory.java) - 实体类: [TencentAdsAdgroup.java](file:///Users/pudongliang/moka_workspace/gdt-auto/src/main/java/com/moka/gdtauto/entity/TencentAdsAdgroup.java)