diff --git a/marketing-api/OCEANENGINE.md b/marketing-api/OCEANENGINE.md index 5603122..52a08ed 100644 --- a/marketing-api/OCEANENGINE.md +++ b/marketing-api/OCEANENGINE.md @@ -131,6 +131,9 @@ - 更新预算组 [ BudgetGroupUpdate(clt *core.SDKClient, accessToken string, req*project.BudgetGroupUpdateRequest) (uint64, error) ] - 批量删除预算组 [ BudgetGroupDelete(clt *core.SDKClient, accessToken string, req*project.BudgetGroupDeleteRequest) (*project.BudgetGroupDeleteResult, error) ] - 获取预算组列表 [ BudgetGroupList(clt *core.SDKClient, accessToken string, req*project.BudgetGroupListRequest) (*project.BudgetGroupListResult, error) ] + - 智擎版标准投放能力 (api/v3/stdproject) + - 获取标准项目列表 [ List(ctx context.Context, clt *core.SDKClient, accessToken string, req*stdproject.ListRequest) (*stdproject.ListResponseData, error) ] + - 获取投放项目下素材 [ MaterialGet(ctx context.Context, clt *core.SDKClient, accessToken string, req*stdproject.MaterialGetRequest) (*stdproject.MaterialGetResponseData, error) ] - 广告管理模块 (api/v3/promotion) - 创建广告 [ Create(clt *core.SDKClient, accessToken string, req*promotion.CreateRequest) (uint64, error) ] - 修改广告 [ Update(clt *core.SDKClient, accessToken string, req*promotion.UpdateRequest) (*promotion.UpdateResponseData, error) ] diff --git a/marketing-api/api/v3/stdproject/doc.go b/marketing-api/api/v3/stdproject/doc.go new file mode 100644 index 0000000..4caf274 --- /dev/null +++ b/marketing-api/api/v3/stdproject/doc.go @@ -0,0 +1,2 @@ +// Package stdproject 巨量营销智擎版标准投放项目管理模块 +package stdproject diff --git a/marketing-api/api/v3/stdproject/list.go b/marketing-api/api/v3/stdproject/list.go new file mode 100644 index 0000000..ea9259c --- /dev/null +++ b/marketing-api/api/v3/stdproject/list.go @@ -0,0 +1,17 @@ +package stdproject + +import ( + "context" + + "github.com/bububa/oceanengine/marketing-api/core" + "github.com/bububa/oceanengine/marketing-api/model/v3/stdproject" +) + +// List 获取标准项目列表 +func List(ctx context.Context, clt *core.SDKClient, accessToken string, req *stdproject.ListRequest) (*stdproject.ListResponseData, error) { + var resp stdproject.ListResponse + if err := clt.GetAPI(ctx, "v3.0/std_project/list/", req, &resp, accessToken); err != nil { + return nil, err + } + return resp.Data, nil +} diff --git a/marketing-api/api/v3/stdproject/material_get.go b/marketing-api/api/v3/stdproject/material_get.go new file mode 100644 index 0000000..17ceeae --- /dev/null +++ b/marketing-api/api/v3/stdproject/material_get.go @@ -0,0 +1,17 @@ +package stdproject + +import ( + "context" + + "github.com/bububa/oceanengine/marketing-api/core" + "github.com/bububa/oceanengine/marketing-api/model/v3/stdproject" +) + +// MaterialGet 获取投放项目下素材 +func MaterialGet(ctx context.Context, clt *core.SDKClient, accessToken string, req *stdproject.MaterialGetRequest) (*stdproject.MaterialGetResponseData, error) { + var resp stdproject.MaterialGetResponse + if err := clt.GetAPI(ctx, "v3.0/oc_project/material/get/", req, &resp, accessToken); err != nil { + return nil, err + } + return resp.Data, nil +} diff --git a/marketing-api/enum/anchor_related_type.go b/marketing-api/enum/anchor_related_type.go new file mode 100644 index 0000000..eb16b8d --- /dev/null +++ b/marketing-api/enum/anchor_related_type.go @@ -0,0 +1,13 @@ +package enum + +// AnchorRelatedType 原生锚点关联类型 +type AnchorRelatedType string + +const ( + // AnchorRelatedType_AUTO 自动生成 + AnchorRelatedType_AUTO AnchorRelatedType = "AUTO" + // AnchorRelatedType_OFF 不启用 + AnchorRelatedType_OFF AnchorRelatedType = "OFF" + // AnchorRelatedType_SELECT 手动选择 + AnchorRelatedType_SELECT AnchorRelatedType = "SELECT" +) diff --git a/marketing-api/enum/material_opt_status.go b/marketing-api/enum/material_opt_status.go new file mode 100644 index 0000000..ade1f78 --- /dev/null +++ b/marketing-api/enum/material_opt_status.go @@ -0,0 +1,11 @@ +package enum + +// MaterialOptStatus 素材操作状态 +type MaterialOptStatus string + +const ( + // MaterialOptStatus_ENABLE 启用 + MaterialOptStatus_ENABLE MaterialOptStatus = "ENABLE" + // MaterialOptStatus_DISABLE 暂停 + MaterialOptStatus_DISABLE MaterialOptStatus = "DISABLE" +) diff --git a/marketing-api/enum/material_status_first.go b/marketing-api/enum/material_status_first.go new file mode 100644 index 0000000..99ccf36 --- /dev/null +++ b/marketing-api/enum/material_status_first.go @@ -0,0 +1,17 @@ +package enum + +// MaterialStatusFirst 素材一级状态 +type MaterialStatusFirst string + +const ( + // MaterialStatusFirst_STATUS_DELETE 已删除 + MaterialStatusFirst_STATUS_DELETE MaterialStatusFirst = "STATUS_DELETE" + // MaterialStatusFirst_STATUS_DISABLE 未投放 + MaterialStatusFirst_STATUS_DISABLE MaterialStatusFirst = "STATUS_DISABLE" + // MaterialStatusFirst_STATUS_FROZEN 已终止 + MaterialStatusFirst_STATUS_FROZEN MaterialStatusFirst = "STATUS_FROZEN" + // MaterialStatusFirst_STATUS_OK 投放中 + MaterialStatusFirst_STATUS_OK MaterialStatusFirst = "STATUS_OK" + // MaterialStatusFirst_STATUS_TIME_DONE 已完成 + MaterialStatusFirst_STATUS_TIME_DONE MaterialStatusFirst = "STATUS_TIME_DONE" +) diff --git a/marketing-api/enum/material_status_second.go b/marketing-api/enum/material_status_second.go new file mode 100644 index 0000000..b828fbd --- /dev/null +++ b/marketing-api/enum/material_status_second.go @@ -0,0 +1,90 @@ +package enum + +// MaterialStatusSecond 素材二级状态 +// 该枚举为视频/图片/图文/试玩/直玩等素材类型 status_second 字段的并集,具体可用值随素材类型不同而不同 +type MaterialStatusSecond string + +const ( + // MaterialStatusSecond_AUDIT 未投放-新建审核中 + MaterialStatusSecond_AUDIT MaterialStatusSecond = "MATERIAL_STATUS_AUDIT" + // MaterialStatusSecond_AWEME_ACCOUNT_OFFLINE 抖音账号不可投放 + MaterialStatusSecond_AWEME_ACCOUNT_OFFLINE MaterialStatusSecond = "MATERIAL_STATUS_AWEME_ACCOUNT_OFFLINE" + // MaterialStatusSecond_DELETE 素材已删除 + MaterialStatusSecond_DELETE MaterialStatusSecond = "MATERIAL_STATUS_DELETE" + // MaterialStatusSecond_DISABLE 手动暂停/已暂停 + MaterialStatusSecond_DISABLE MaterialStatusSecond = "MATERIAL_STATUS_DISABLE" + // MaterialStatusSecond_NO_SCHEDULE 项目不在投放时段 + MaterialStatusSecond_NO_SCHEDULE MaterialStatusSecond = "MATERIAL_STATUS_NO_SCHEDULE" + // MaterialStatusSecond_OFFLINE_AUDIT 审核不通过 + MaterialStatusSecond_OFFLINE_AUDIT MaterialStatusSecond = "MATERIAL_STATUS_OFFLINE_AUDIT" + // MaterialStatusSecond_OFFLINE_BALANCE 账户余额不足 + MaterialStatusSecond_OFFLINE_BALANCE MaterialStatusSecond = "MATERIAL_STATUS_OFFLINE_BALANCE" + // MaterialStatusSecond_OFFLINE_BUDGET 账户超出预算 + MaterialStatusSecond_OFFLINE_BUDGET MaterialStatusSecond = "MATERIAL_STATUS_OFFLINE_BUDGET" + // MaterialStatusSecond_PRODUCT_OFFLINE 商品不可投放 + MaterialStatusSecond_PRODUCT_OFFLINE MaterialStatusSecond = "MATERIAL_STATUS_PRODUCT_OFFLINE" + // MaterialStatusSecond_PROJECT_DISABLE 项目已暂停 + MaterialStatusSecond_PROJECT_DISABLE MaterialStatusSecond = "MATERIAL_STATUS_PROJECT_DISABLE" + // MaterialStatusSecond_PROJECT_OFFLINE_BUDGET 项目超出预算 + MaterialStatusSecond_PROJECT_OFFLINE_BUDGET MaterialStatusSecond = "MATERIAL_STATUS_PROJECT_OFFLINE_BUDGET" + // MaterialStatusSecond_TIME_NO_REACH 项目未达投放时间 + MaterialStatusSecond_TIME_NO_REACH MaterialStatusSecond = "MATERIAL_STATUS_TIME_NO_REACH" + // MaterialStatusSecond_FROZEN 素材已终止 + MaterialStatusSecond_FROZEN MaterialStatusSecond = "MATERIAL_STATUS_FROZEN" + // MaterialStatusSecond_PROCEDURAL_DISABLE 系统暂停 + MaterialStatusSecond_PROCEDURAL_DISABLE MaterialStatusSecond = "MATERIAL_STATUS_PROCEDURAL_DISABLE" + // MaterialStatusSecond_PROJECT_STATUS_DELETE 项目已删除 + MaterialStatusSecond_PROJECT_STATUS_DELETE MaterialStatusSecond = "PROJECT_STATUS_DELETE" + // MaterialStatusSecond_PROJECT_STATUS_FROZEN 项目已终止 + MaterialStatusSecond_PROJECT_STATUS_FROZEN MaterialStatusSecond = "PROJECT_STATUS_FROZEN" + // MaterialStatusSecond_PROJECT_STATUS_REAUDIT 未投放-修改审核中 + MaterialStatusSecond_PROJECT_STATUS_REAUDIT MaterialStatusSecond = "PROJECT_STATUS_REAUDIT" + // MaterialStatusSecond_PROJECT_STATUS_AUDIT 项目新建审核中 + MaterialStatusSecond_PROJECT_STATUS_AUDIT MaterialStatusSecond = "PROJECT_STATUS_AUDIT" + // MaterialStatusSecond_PROJECT_AUDIT_REJECTED 项目审核不通过 + MaterialStatusSecond_PROJECT_AUDIT_REJECTED MaterialStatusSecond = "PROJECT_AUDIT_REJECTED" + // MaterialStatusSecond_PROJECT_REACHED_DELIVERY_DURATION 项目已达投放时长 + MaterialStatusSecond_PROJECT_REACHED_DELIVERY_DURATION MaterialStatusSecond = "PROJECT_REACHED_DELIVERY_DURATION" + // MaterialStatusSecond_SHARED_WALLET_EXCEEDS_BUDGET 共享钱包超出预算 + MaterialStatusSecond_SHARED_WALLET_EXCEEDS_BUDGET MaterialStatusSecond = "SHARED_WALLET_EXCEEDS_BUDGET" + // MaterialStatusSecond_ACCOUNT_AVATAR_NOT_AVAILABLE_FOR_DELIVERY 账户头像不可投放 + MaterialStatusSecond_ACCOUNT_AVATAR_NOT_AVAILABLE_FOR_DELIVERY MaterialStatusSecond = "ACCOUNT_AVATAR_NOT_AVAILABLE_FOR_DELIVERY" + // MaterialStatusSecond_APP_NOT_AVAILABLE_FOR_DELIVERY 应用不可投放 + MaterialStatusSecond_APP_NOT_AVAILABLE_FOR_DELIVERY MaterialStatusSecond = "APP_NOT_AVAILABLE_FOR_DELIVERY" + // MaterialStatusSecond_DOUYIN_ITEM_NOT_AVAILABLE_FOR_DELIVERY 抖音素材不可投放 + MaterialStatusSecond_DOUYIN_ITEM_NOT_AVAILABLE_FOR_DELIVERY MaterialStatusSecond = "DOUYIN_ITEM_NOT_AVAILABLE_FOR_DELIVERY" + // MaterialStatusSecond_GUIDE_VIDEO_NOT_EXIST 引导视频不存在 + MaterialStatusSecond_GUIDE_VIDEO_NOT_EXIST MaterialStatusSecond = "GUIDE_VIDEO_NOT_EXIST" + // MaterialStatusSecond_LACK_BASIC_MATERIAL_STATUS 项目素材待补充 + MaterialStatusSecond_LACK_BASIC_MATERIAL_STATUS MaterialStatusSecond = "LACK_BASIC_MATERIAL_STATUS" + // MaterialStatusSecond_LIVE_ROOM_NOT_AVAILABLE_FOR_DELIVERY 直播间不可投/不可投放 + MaterialStatusSecond_LIVE_ROOM_NOT_AVAILABLE_FOR_DELIVERY MaterialStatusSecond = "LIVE_ROOM_NOT_AVAILABLE_FOR_DELIVERY" + // 图文素材二级状态 + MaterialStatusSecond_ACCOUNT_EXCEEDS_BUDGET MaterialStatusSecond = "ACCOUNT_EXCEEDS_BUDGET" + MaterialStatusSecond_ALL_KEYWORDS_DELETED MaterialStatusSecond = "ALL_KEYWORDS_DELETED" + MaterialStatusSecond_ALL_MATERIALS_DELETED MaterialStatusSecond = "ALL_MATERIALS_DELETED" + MaterialStatusSecond_AUDIT_REJECTED MaterialStatusSecond = "AUDIT_REJECTED" + MaterialStatusSecond_DOUYIN_ACCOUNT_NOT_AVAILABLE MaterialStatusSecond = "DOUYIN_ACCOUNT_NOT_AVAILABLE_FOR_DELIVERY" + MaterialStatusSecond_GOODS_NOT_AVAILABLE MaterialStatusSecond = "GOODS_NOT_AVAILABLE_FOR_DELIVERY" + MaterialStatusSecond_LIVE_ROOM_NOT_STARTED MaterialStatusSecond = "LIVE_ROOM_NOT_STARTED" + MaterialStatusSecond_MANUAL_PAUSE MaterialStatusSecond = "MANUAL_PAUSE" + MaterialStatusSecond_MODIFY_AUDITING MaterialStatusSecond = "MODIFY_AUDITING" + MaterialStatusSecond_NEW_CREATED_AUDITING MaterialStatusSecond = "NEW_CREATED_AUDITING" + MaterialStatusSecond_PAUSED MaterialStatusSecond = "PAUSED" + MaterialStatusSecond_PROJECT_AUDIENCE_SETTING_CONFLICT MaterialStatusSecond = "PROJECT_AUDIENCE_SETTING_CONFLICT" + MaterialStatusSecond_PROJECT_BALANCE_INSUFFICIENT MaterialStatusSecond = "PROJECT_BALANCE_INSUFFICIENT" + MaterialStatusSecond_PROJECT_COMPLETED MaterialStatusSecond = "PROJECT_COMPLETED" + MaterialStatusSecond_PROJECT_DELETED MaterialStatusSecond = "PROJECT_DELETED" + MaterialStatusSecond_PROJECT_EXCEEDS_BUDGET MaterialStatusSecond = "PROJECT_EXCEEDS_BUDGET" + MaterialStatusSecond_PROJECT_MODIFY_AUDITING MaterialStatusSecond = "PROJECT_MODIFY_AUDITING" + MaterialStatusSecond_PROJECT_NEW_CREATED_AUDITING MaterialStatusSecond = "PROJECT_NEW_CREATED_AUDITING" + MaterialStatusSecond_PROJECT_NOT_IN_DELIVERY_PERIOD MaterialStatusSecond = "PROJECT_NOT_IN_DELIVERY_PERIOD" + MaterialStatusSecond_PROJECT_NOT_REACH_DELIVERY_TIME MaterialStatusSecond = "PROJECT_NOT_REACH_DELIVERY_TIME" + MaterialStatusSecond_PROJECT_PAUSED MaterialStatusSecond = "PROJECT_PAUSED" + MaterialStatusSecond_PROJECT_TERMINATED MaterialStatusSecond = "PROJECT_TERMINATED" + MaterialStatusSecond_REACHED_REGULATION_BUDGET_UPPER_LIMIT MaterialStatusSecond = "REACHED_REGULATION_BUDGET_UPPER_LIMIT" + MaterialStatusSecond_TASK_BID_EXCEEDS_PROJECT_BUDGET MaterialStatusSecond = "TASK_BID_EXCEEDS_PROJECT_BUDGET" + MaterialStatusSecond_TASK_DELETED MaterialStatusSecond = "TASK_DELETED" + MaterialStatusSecond_TASK_REACHED_REGULATION_DURATION MaterialStatusSecond = "TASK_REACHED_REGULATION_DURATION" + MaterialStatusSecond_TASK_TERMINATED MaterialStatusSecond = "TASK_TERMINATED" +) diff --git a/marketing-api/enum/native_type.go b/marketing-api/enum/native_type.go new file mode 100644 index 0000000..c69f058 --- /dev/null +++ b/marketing-api/enum/native_type.go @@ -0,0 +1,11 @@ +package enum + +// NativeType 投放身份 +type NativeType string + +const ( + // NativeType_ACCOUNT 账户信息 + NativeType_ACCOUNT NativeType = "ACCOUNT" + // NativeType_AWEME 抖音号 + NativeType_AWEME NativeType = "AWEME" +) diff --git a/marketing-api/enum/playlet_series_url_type.go b/marketing-api/enum/playlet_series_url_type.go new file mode 100644 index 0000000..890a464 --- /dev/null +++ b/marketing-api/enum/playlet_series_url_type.go @@ -0,0 +1,11 @@ +package enum + +// PlayletSeriesURLType 短剧专辑类型 +type PlayletSeriesURLType string + +const ( + // PlayletSeriesURLType_IAA IAA + PlayletSeriesURLType_IAA PlayletSeriesURLType = "IAA" + // PlayletSeriesURLType_IAP IAP + PlayletSeriesURLType_IAP PlayletSeriesURLType = "IAP" +) diff --git a/marketing-api/enum/std_material_type.go b/marketing-api/enum/std_material_type.go new file mode 100644 index 0000000..0917355 --- /dev/null +++ b/marketing-api/enum/std_material_type.go @@ -0,0 +1,23 @@ +package enum + +// StdMaterialType 标准投放项目素材类型 +type StdMaterialType string + +const ( + // StdMaterialType_VIDEO 视频 + StdMaterialType_VIDEO StdMaterialType = "VIDEO" + // StdMaterialType_TITLE 标题 + StdMaterialType_TITLE StdMaterialType = "TITLE" + // StdMaterialType_IMAGE 图片 + StdMaterialType_IMAGE StdMaterialType = "IMAGE" + // StdMaterialType_CAROUSEL 图文 + StdMaterialType_CAROUSEL StdMaterialType = "CAROUSEL" + // StdMaterialType_TRIAL_PLAY_MATERIAL 试玩素材 + StdMaterialType_TRIAL_PLAY_MATERIAL StdMaterialType = "TRIAL_PLAY_MATERIAL" + // StdMaterialType_INSTANT_PLAY_MATERIAL 直玩素材 + StdMaterialType_INSTANT_PLAY_MATERIAL StdMaterialType = "INSTANT_PLAY_MATERIAL" + // StdMaterialType_MINI_PROGRAM_INFO 字节小程序&小游戏信息 + StdMaterialType_MINI_PROGRAM_INFO StdMaterialType = "MINI_PROGRAM_INFO" + // StdMaterialType_OTHER 其他素材类型(包括产品信息、短剧专辑链接、落地页、行动号召等) + StdMaterialType_OTHER StdMaterialType = "OTHER" +) diff --git a/marketing-api/enum/std_project_status_first.go b/marketing-api/enum/std_project_status_first.go new file mode 100644 index 0000000..1babfe0 --- /dev/null +++ b/marketing-api/enum/std_project_status_first.go @@ -0,0 +1,21 @@ +package enum + +// StdProjectStatusFirst 标准项目一级状态过滤 +type StdProjectStatusFirst string + +const ( + // StdProjectStatusFirst_PROJECT_STATUS_DELETE 已删除 + StdProjectStatusFirst_PROJECT_STATUS_DELETE StdProjectStatusFirst = "PROJECT_STATUS_DELETE" + // StdProjectStatusFirst_PROJECT_STATUS_DONE 已完成 + StdProjectStatusFirst_PROJECT_STATUS_DONE StdProjectStatusFirst = "PROJECT_STATUS_DONE" + // StdProjectStatusFirst_PROJECT_STATUS_DISABLE 未投放 + StdProjectStatusFirst_PROJECT_STATUS_DISABLE StdProjectStatusFirst = "PROJECT_STATUS_DISABLE" + // StdProjectStatusFirst_PROJECT_STATUS_ENABLE 投放中 + StdProjectStatusFirst_PROJECT_STATUS_ENABLE StdProjectStatusFirst = "PROJECT_STATUS_ENABLE" + // StdProjectStatusFirst_PROJECT_STATUS_FROZEN 已终止 + StdProjectStatusFirst_PROJECT_STATUS_FROZEN StdProjectStatusFirst = "PROJECT_STATUS_FROZEN" + // StdProjectStatusFirst_ALL_EXCEPT_DELETE 不限(默认值) + StdProjectStatusFirst_ALL_EXCEPT_DELETE StdProjectStatusFirst = "ALL_EXCEPT_DELETE" + // StdProjectStatusFirst_ALL 不限(包含已删除和已终止) + StdProjectStatusFirst_ALL StdProjectStatusFirst = "ALL" +) diff --git a/marketing-api/enum/std_project_status_second.go b/marketing-api/enum/std_project_status_second.go new file mode 100644 index 0000000..15b5faa --- /dev/null +++ b/marketing-api/enum/std_project_status_second.go @@ -0,0 +1,43 @@ +package enum + +// StdProjectStatusSecond 标准项目二级状态 +type StdProjectStatusSecond string + +const ( + // StdProjectStatusSecond_AVATAR_DISABLED 账户头像不可投 + StdProjectStatusSecond_AVATAR_DISABLED StdProjectStatusSecond = "AVATAR_DISABLED" + // StdProjectStatusSecond_AUDIT_STATUS 新建审核中 + StdProjectStatusSecond_AUDIT_STATUS StdProjectStatusSecond = "AUDIT_STATUS" + // StdProjectStatusSecond_AWEME_ACCOUNT_DISABLED 抖音账号不可投放 + StdProjectStatusSecond_AWEME_ACCOUNT_DISABLED StdProjectStatusSecond = "AWEME_ACCOUNT_DISABLED" + // StdProjectStatusSecond_PROMOTION_APP_UNAVAILABLE 应用不可投放 + StdProjectStatusSecond_PROMOTION_APP_UNAVAILABLE StdProjectStatusSecond = "PROMOTION_APP_UNAVAILABLE" + // StdProjectStatusSecond_REAUDIT_STATUS 修改审核中 + StdProjectStatusSecond_REAUDIT_STATUS StdProjectStatusSecond = "REAUDIT_STATUS" + // StdProjectStatusSecond_OFFLINE_AUDIT_STATUS 审核不通过 + StdProjectStatusSecond_OFFLINE_AUDIT_STATUS StdProjectStatusSecond = "OFFLINE_AUDIT_STATUS" + // StdProjectStatusSecond_DISABLE 手动暂停 + StdProjectStatusSecond_DISABLE StdProjectStatusSecond = "DISABLE" + // StdProjectStatusSecond_SYSTEM_DISABLE_STATUS 系统暂停 + StdProjectStatusSecond_SYSTEM_DISABLE_STATUS StdProjectStatusSecond = "SYSTEM_DISABLE_STATUS" + // StdProjectStatusSecond_ADV_OFFLINE_BUDGET 账户超出预算 + StdProjectStatusSecond_ADV_OFFLINE_BUDGET StdProjectStatusSecond = "ADV_OFFLINE_BUDGET" + // StdProjectStatusSecond_PROJECT_OFFLINE_BUDGET 项目超出预算 + StdProjectStatusSecond_PROJECT_OFFLINE_BUDGET StdProjectStatusSecond = "PROJECT_OFFLINE_BUDGET" + // StdProjectStatusSecond_TIME_NO_REACH 未达投放时间 + StdProjectStatusSecond_TIME_NO_REACH StdProjectStatusSecond = "TIME_NO_REACH" + // StdProjectStatusSecond_PROJECT_REACH_DAILY_DELIVERY_STATUS 已达投放时长 + StdProjectStatusSecond_PROJECT_REACH_DAILY_DELIVERY_STATUS StdProjectStatusSecond = "PROJECT_REACH_DAILY_DELIVERY_STATUS" + // StdProjectStatusSecond_NO_SCHEDUAL 不在投放时段 + StdProjectStatusSecond_NO_SCHEDUAL StdProjectStatusSecond = "NO_SCHEDUAL" + // StdProjectStatusSecond_LIVE_ROOM_OFF 关联直播间不可投 + StdProjectStatusSecond_LIVE_ROOM_OFF StdProjectStatusSecond = "LIVE_ROOM_OFF" + // StdProjectStatusSecond_PRODUCT_OFFLINE 关联商品不可投 + StdProjectStatusSecond_PRODUCT_OFFLINE StdProjectStatusSecond = "PRODUCT_OFFLINE" + // StdProjectStatusSecond_LACK_BASIC_MATERIAL_STATUS 素材待补充 + StdProjectStatusSecond_LACK_BASIC_MATERIAL_STATUS StdProjectStatusSecond = "LACK_BASIC_MATERIAL_STATUS" + // StdProjectStatusSecond_SHARED_WALLET_OFFLINE_BUDGET 共享钱包超出预算 + StdProjectStatusSecond_SHARED_WALLET_OFFLINE_BUDGET StdProjectStatusSecond = "SHARED_WALLET_OFFLINE_BUDGET" + // StdProjectStatusSecond_PROMOTION_OFFLINE_BALANCE 账户余额不足 + StdProjectStatusSecond_PROMOTION_OFFLINE_BALANCE StdProjectStatusSecond = "PROMOTION_OFFLINE_BALANCE" +) diff --git a/marketing-api/model/v3/stdproject/doc.go b/marketing-api/model/v3/stdproject/doc.go new file mode 100644 index 0000000..b87b678 --- /dev/null +++ b/marketing-api/model/v3/stdproject/doc.go @@ -0,0 +1,2 @@ +// Package stdproject 巨量营销智擎版标准投放项目管理模块API models +package stdproject diff --git a/marketing-api/model/v3/stdproject/list.go b/marketing-api/model/v3/stdproject/list.go new file mode 100644 index 0000000..3a9ed14 --- /dev/null +++ b/marketing-api/model/v3/stdproject/list.go @@ -0,0 +1,129 @@ +package stdproject + +import ( + "encoding/json" + "strconv" + + "github.com/bububa/oceanengine/marketing-api/enum" + "github.com/bububa/oceanengine/marketing-api/model" + "github.com/bububa/oceanengine/marketing-api/util" +) + +// ListRequest 获取标准项目列表 API Request +type ListRequest struct { + // AdvertiserID 投放账户ID + AdvertiserID uint64 `json:"advertiser_id,omitempty"` + // Filtering 过滤条件 + Filtering *ListFilter `json:"filtering,omitempty"` + // Page 页码,默认值:1 + Page int `json:"page,omitempty"` + // PageSize 页面大小,允许值:10, 20, 50, 100,默认值:10 + PageSize int `json:"page_size,omitempty"` +} + +// ListFilter 过滤条件 +type ListFilter struct { + // ProjectIDs 项目IDs + ProjectIDs []uint64 `json:"project_ids,omitempty"` + // Name 项目名称 + Name string `json:"name,omitempty"` + // StatusFirst 项目一级状态过滤,允许值: + // PROJECT_STATUS_DELETE 已删除 + // PROJECT_STATUS_DONE 已完成 + // PROJECT_STATUS_DISABLE 未投放 + // PROJECT_STATUS_ENABLE 投放中 + // PROJECT_STATUS_FROZEN 已终止 + // ALL_EXCEPT_DELETE 不限 + // ALL 不限(包含已删除和已终止) + // 默认值: ALL_EXCEPT_DELETE + StatusFirst enum.StdProjectStatusFirst `json:"status_first,omitempty"` + // StatusSecond 项目二级状态 + StatusSecond enum.StdProjectStatusSecond `json:"status_second,omitempty"` + // AdType 营销类型,允许值:ALL 通投、SEARCH 搜索 + AdType enum.CampaignType `json:"ad_type,omitempty"` + // MarketingGoal 营销场景,允许值:VIDEO_AND_IMAGE 短视频/图片、LIVE 直播 + MarketingGoal []enum.MarketingGoal `json:"marketing_goal,omitempty"` + // LandingType 营销目的,可选值:APP 应用、LINK 销售线索、MICRO_GAME 小程序、SHOP 电商 + LandingType []enum.LandingType `json:"landing_type,omitempty"` + // BidType 竞价策略,允许值:CUSTOM 稳定成本、NO_BID 最大转化投放 + BidType []enum.BidType `json:"bid_type,omitempty"` + // Platform 按平台过滤,允许值:ANDROID 安卓、HARMONY 鸿蒙、IOS IOS + Platform []enum.AudiencePlatform `json:"platform,omitempty"` + // StarDeliveryType 是否为星广联投项目,允许值:NOT_STAR_DELIVERY 非星广联投项目、STAR_DELIVERY 星广联投项目 + StarDeliveryType []string `json:"star_delivery_type,omitempty"` + // BudgetMode 项目预算类型,允许值:BUDGET_MODE_INFINITE 不限、BUDGET_MODE_DAY 日预算、BUDGET_MODE_TOTAL 总预算 + BudgetMode enum.BudgetMode `json:"budget_mode,omitempty"` + // NativeType 投放身份,允许值:ACCOUNT 账户信息、AWEME 抖音号 + NativeType enum.NativeType `json:"native_type,omitempty"` + // RejectReasonType 审核建议类型,允许值:NONE 无建议、SUGGEST_MODIFYING 建议修改、REVIEW_REJECT 审核不通过 + RejectReasonType string `json:"reject_reason_type,omitempty"` + // Pricing 按计费方式过滤,可选值: + // PRICING_CPC 按点击计费(CPC) + // PRICING_CPM 按千次展示(CPM) + // PRICING_OCPC 按转化优化,按点击计费 + // PRICING_OCPM 按转化优化,按展示计费 + Pricing enum.PricingType `json:"pricing,omitempty"` + // BlueFlowPackageSetting 是否投放蓝海流量,允许值:OFF、ON + BlueFlowPackageSetting string `json:"blue_flow_package_setting,omitempty"` + // ProjectCreateStartTime 项目创建开始时间,格式yyyy-mm-dd,表示过滤出当天创建的项目 + ProjectCreateStartTime string `json:"project_create_start_time,omitempty"` + // ProjectCreateEndTime 项目创建结束时间,格式yyyy-mm-dd,表示过滤出当天创建的项目 + ProjectCreateEndTime string `json:"project_create_end_time,omitempty"` + // ProjectModifyStartTime 项目更新开始时间,格式yyyy-mm-dd hh:mm:ss + ProjectModifyStartTime string `json:"project_modify_start_time,omitempty"` + // ProjectModifyEndTime 项目更新结束时间,格式yyyy-mm-dd hh:mm:ss + ProjectModifyEndTime string `json:"project_modify_end_time,omitempty"` + // AwemeID 抖音号ID + AwemeID string `json:"aweme_id,omitempty"` + // ProductID 商品ID + ProductID uint64 `json:"product_id,omitempty"` + // ProductPlatformID 商品库ID + ProductPlatformID uint64 `json:"product_platform_id,omitempty"` + // UniqueProductID 升级版商品库商品ID + UniqueProductID uint64 `json:"unique_product_id,omitempty"` + // InstanceID 字节小游戏/小程序、微信小游戏/小程序ID + InstanceID uint64 `json:"instance_id,omitempty"` + // BrandID 品牌ID + BrandID uint64 `json:"brand_id,omitempty"` + // ExternalAction 优化目标 + ExternalAction string `json:"external_action,omitempty"` + // DeepExternalAction 深度优化目标 + DeepExternalAction string `json:"deep_external_action,omitempty"` + // DeepBidType 深度优化方式 + DeepBidType string `json:"deep_bid_type,omitempty"` + // GameAddictionID 关键行为ID + GameAddictionID uint64 `json:"game_addiction_id,omitempty"` +} + +// Encode implement GetRequest interface +func (r ListRequest) Encode() string { + values := util.GetUrlValues() + values.Set("advertiser_id", strconv.FormatUint(r.AdvertiserID, 10)) + if r.Filtering != nil { + filtering, _ := json.Marshal(r.Filtering) + values.Set("filtering", string(filtering)) + } + if r.Page > 0 { + values.Set("page", strconv.Itoa(r.Page)) + } + if r.PageSize > 0 { + values.Set("page_size", strconv.Itoa(r.PageSize)) + } + ret := values.Encode() + util.PutUrlValues(values) + return ret +} + +// ListResponse 获取标准项目列表 API Response +type ListResponse struct { + model.BaseResponse + Data *ListResponseData `json:"data,omitempty"` +} + +// ListResponseData 获取标准项目列表返回数据 +type ListResponseData struct { + // List 项目列表 + List []StdProject `json:"list,omitempty"` + // PageInfo 分页信息 + PageInfo *model.PageInfo `json:"page_info,omitempty"` +} diff --git a/marketing-api/model/v3/stdproject/material.go b/marketing-api/model/v3/stdproject/material.go new file mode 100644 index 0000000..66a89b4 --- /dev/null +++ b/marketing-api/model/v3/stdproject/material.go @@ -0,0 +1,161 @@ +package stdproject + +import ( + "github.com/bububa/oceanengine/marketing-api/enum" +) + +// VideoMaterial 视频素材信息 +type VideoMaterial struct { + // VideoID 视频id + VideoID string `json:"video_id,omitempty"` + // VideoCoverURI 视频封面图片ID + VideoCoverURI string `json:"video_cover_uri,omitempty"` + // MaterialID 素材id + MaterialID uint64 `json:"material_id,omitempty"` + // MaterialOptStatus 视频素材操作状态,枚举值:DISABLE 暂停、ENABLE 启用 + MaterialOptStatus enum.MaterialOptStatus `json:"material_opt_status,omitempty"` + // MaterialStatusFirst 素材一级状态,可选值: + // STATUS_DELETE 已删除、STATUS_DISABLE 未投放、STATUS_FROZEN 已终止、STATUS_OK 投放中、STATUS_TIME_DONE 已完成 + // 注意:官方应答字段名为 material_status_frist(拼写如此),此处 json tag 保留原样 + MaterialStatusFirst enum.MaterialStatusFirst `json:"material_status_frist,omitempty"` + // MaterialStatusSecond 素材二级状态 + MaterialStatusSecond []string `json:"material_status_second,omitempty"` + // ImageMode 素材类型,可选值: + // CREATIVE_IMAGE_MODE_CALIBRATION_FREE_VIDEO 穿山甲免校验 + // CREATIVE_IMAGE_MODE_UNION_SPLASH_VIDEO 互动创意 + // CREATIVE_IMAGE_MODE_VIDEO 视频 + // CREATIVE_IMAGE_MODE_VIDEO_VERTICAL 抖音&火山竖版视频素材 + ImageMode enum.ImageMode `json:"image_mode,omitempty"` +} + +// ImageMaterial 图片素材信息 +type ImageMaterial struct { + // ImageMode 素材类型,可选值: + // CREATIVE_IMAGE_MODE_LARGE、CREATIVE_IMAGE_MODE_LARGE_VERTICAL 大图竖版图、 + // CREATIVE_IMAGE_MODE_SMALL、SEARCH_AD_SMALL_IMAGE 搜索小图、TOUTIAO_SEARCH_AD_IMAGE 搜索大图 + ImageMode enum.ImageMode `json:"image_mode,omitempty"` + // ImageIDs 图片id + ImageIDs []string `json:"image_ids,omitempty"` + // MaterialID 素材id + MaterialID uint64 `json:"material_id,omitempty"` + // MaterialStatusFirst 素材一级状态(官方应答字段名为 material_status_frist) + MaterialStatusFirst enum.MaterialStatusFirst `json:"material_status_frist,omitempty"` + // MaterialStatusSecond 素材二级状态 + MaterialStatusSecond []string `json:"material_status_second,omitempty"` +} + +// CarouselMaterial 图文素材信息 +type CarouselMaterial struct { + // CarouselID 图文id + CarouselID uint64 `json:"carousel_id,omitempty"` + // ItemID 抖音主页图文id + ItemID uint64 `json:"item_id,omitempty"` + // VideoHpVisibility 主页可见性,可选值:ALWAYS_VISIBLE 主页始终可见、HIDE_VIDEO_ON_HP 主页隐藏(默认值) + VideoHpVisibility enum.VideoHpVisibility `json:"video_hp_visibility,omitempty"` + // MaterialStatusFirst 素材一级状态(官方应答字段名为 material_status_frist) + MaterialStatusFirst enum.MaterialStatusFirst `json:"material_status_frist,omitempty"` + // MaterialStatusSecond 素材二级状态 + MaterialStatusSecond []string `json:"material_status_second,omitempty"` +} + +// TrialPlayMaterial 试玩素材信息 +type TrialPlayMaterial struct { + // AppPlayURI 试玩素材uri + AppPlayURI string `json:"app_play_uri,omitempty"` + // GuideVideoID 引导视频ID + GuideVideoID string `json:"guide_video_id,omitempty"` + // ImageMode 素材类型,可选值: + // CREATIVE_IMAGE_MODE_TRIAL_PLAY_LARGE 试玩横屏、CREATIVE_IMAGE_MODE_TRIAL_PLAY_VERTICAL 试玩竖屏 + ImageMode enum.ImageMode `json:"image_mode,omitempty"` + // AppPlayVersion 试玩素材版本号 + AppPlayVersion string `json:"app_play_version,omitempty"` + // FileName 素材名称 + FileName string `json:"file_name,omitempty"` + // MaterialID 素材id + MaterialID uint64 `json:"material_id,omitempty"` + // MaterialStatusFirst 素材一级状态(官方应答字段名为 material_status_frist) + MaterialStatusFirst enum.MaterialStatusFirst `json:"material_status_frist,omitempty"` + // MaterialStatusSecond 素材二级状态 + MaterialStatusSecond []string `json:"material_status_second,omitempty"` +} + +// InstantPlayMaterial 直玩素材信息 +type InstantPlayMaterial struct { + // AppPlayURI 直玩素材uri + AppPlayURI string `json:"app_play_uri,omitempty"` + // ImageMode 直玩素材类型,可选值:CREATIVE_IMAGE_MODE_INSTANT_PLAY 直玩 + ImageMode enum.ImageMode `json:"image_mode,omitempty"` + // CoverURI 封面图 + CoverURI string `json:"cover_uri,omitempty"` + // FileName 封面名称 + FileName string `json:"file_name,omitempty"` + // MaterialID 素材id + MaterialID uint64 `json:"material_id,omitempty"` + // MaterialStatusFirst 素材一级状态(官方应答字段名为 material_status_frist) + MaterialStatusFirst enum.MaterialStatusFirst `json:"material_status_frist,omitempty"` + // MaterialStatusSecond 素材二级状态 + MaterialStatusSecond []string `json:"material_status_second,omitempty"` +} + +// TitleMaterial 标题素材信息 +type TitleMaterial struct { + // Title 创意标题 + Title string `json:"title,omitempty"` + // MaterialID 创意id + MaterialID uint64 `json:"material_id,omitempty"` +} + +// ComponentMaterial 创意组件信息 +type ComponentMaterial struct { + // ComponentID 组件id + ComponentID uint64 `json:"component_id,omitempty"` +} + +// AnchorMaterial 原生锚点素材 +type AnchorMaterial struct { + // AnchorID 原生锚点id + AnchorID string `json:"anchor_id,omitempty"` + // AnchorType 锚点类型,可选值: + // APP_GAME、APP_INTERNET_SERVICE、APP_SHOP、INSURANCE、ONLINE_SUBSCRIBE、PRIVATE_CHAT、SHOPPING_CART + AnchorType enum.AnchorType `json:"anchor_type,omitempty"` + // AnchorRelatedType 锚点关联类型,可选值:AUTO 自动生成、OFF 不启用、SELECT 手动选择 + AnchorRelatedType enum.AnchorRelatedType `json:"anchor_related_type,omitempty"` + // OpenURL 直达链接 + OpenURL string `json:"open_url,omitempty"` + // UlinkURLType 直达链接备用链接类型,可选值:UNIVERSAL_LINK、APPLINK + UlinkURLType string `json:"ulink_url_type,omitempty"` + // UlinkURL 直达链接备用链接 + UlinkURL string `json:"ulink_url,omitempty"` +} + +// PlayletSeriesURLInfo 短剧专辑链接信息 +type PlayletSeriesURLInfo struct { + // PlayletSeriesURLType 短剧专辑类型,可选值:IAA、IAP + PlayletSeriesURLType enum.PlayletSeriesURLType `json:"playlet_series_url_type,omitempty"` + // PlayletSeriesURL 短剧专辑链接 + PlayletSeriesURL string `json:"playlet_series_url,omitempty"` +} + +// ProductInfo 产品信息 +type ProductInfo struct { + // Titles 产品名称 + Titles []string `json:"titles,omitempty"` + // ImageIDs 产品主图 + ImageIDs []string `json:"image_ids,omitempty"` + // SellingPoints 产品卖点 + SellingPoints []string `json:"selling_points,omitempty"` + // CallToActionButtons 行动号召 + CallToActionButtons []string `json:"call_to_action_buttons,omitempty"` +} + +// MiniProgramInfo 字节小程序&小游戏信息 +type MiniProgramInfo struct { + // URL 字节小程序&小游戏调起链接 + URL string `json:"url,omitempty"` + // AppID 小程序/小游戏原始id + AppID string `json:"app_id,omitempty"` + // StartPath 启动路径 + StartPath string `json:"start_path,omitempty"` + // Params 页面检测参数 + Params string `json:"params,omitempty"` +} diff --git a/marketing-api/model/v3/stdproject/material_get.go b/marketing-api/model/v3/stdproject/material_get.go new file mode 100644 index 0000000..660b180 --- /dev/null +++ b/marketing-api/model/v3/stdproject/material_get.go @@ -0,0 +1,112 @@ +package stdproject + +import ( + "encoding/json" + "strconv" + + "github.com/bububa/oceanengine/marketing-api/enum" + "github.com/bububa/oceanengine/marketing-api/model" + "github.com/bububa/oceanengine/marketing-api/util" +) + +// MaterialGetRequest 获取投放项目下素材 API Request +type MaterialGetRequest struct { + // AdvertiserID 客户id + AdvertiserID uint64 `json:"advertiser_id,omitempty"` + // ProjectID 项目id + ProjectID uint64 `json:"project_id,omitempty"` + // Filtering 过滤器 + Filtering *MaterialGetFilter `json:"filtering,omitempty"` + // Page 页码,默认值:1 + // 当且仅当 material_type 为 VIDEO、IMAGE、CAROUSEL、TRIAL_PLAY_MATERIAL 时支持传入 + Page int `json:"page,omitempty"` + // PageSize 页面大小,允许值:10, 20, 50, 100,默认值:10 + // 仅 material_type 为 VIDEO 时支持传入 + PageSize int `json:"page_size,omitempty"` +} + +// MaterialGetFilter 素材过滤器 +type MaterialGetFilter struct { + // MaterialType 素材类型,单次仅支持传入一个,可选值: + // VIDEO 视频 + // TITLE 标题 + // IMAGE 图片 + // CAROUSEL 图文 + // TRIAL_PLAY_MATERIAL 试玩素材 + // INSTANT_PLAY_MATERIAL 直玩素材 + // MINI_PROGRAM_INFO 字节小程序&小游戏信息 + // OTHER 其他素材类型(包括产品信息、短剧专辑链接、落地页、行动号召等) + MaterialType enum.StdMaterialType `json:"material_type,omitempty"` + // SearchKeyword 搜索关键词,支持根据视频mid进行搜索 + // 当且仅当 material_type 为 VIDEO、IMAGE、CAROUSEL 时支持传入 + SearchKeyword string `json:"search_keyword,omitempty"` + // MaterialStatusFirst 素材一级状态过滤,可选值: + // STATUS_DELETE 已删除、STATUS_DISABLE 未投放、STATUS_FROZEN 已终止、STATUS_OK 投放中、STATUS_TIME_DONE 已完成 + MaterialStatusFirst enum.MaterialStatusFirst `json:"material_status_first,omitempty"` + // MaterialStatusSecond 素材二级状态过滤,可选值: + // MATERIAL_STATUS_OFFLINE_AUDIT、MATERIAL_STATUS_AUDIT、MATERIAL_STATUS_DISABLE、 + // MATERIAL_STATUS_PROCEDURAL_DISABLE、DOUYIN_ITEM_NOT_AVAILABLE_FOR_DELIVERY、GUIDE_VIDEO_NOT_EXIST + MaterialStatusSecond enum.MaterialStatusSecond `json:"material_status_second,omitempty"` +} + +// Encode implement GetRequest interface +func (r MaterialGetRequest) Encode() string { + values := util.GetUrlValues() + values.Set("advertiser_id", strconv.FormatUint(r.AdvertiserID, 10)) + values.Set("project_id", strconv.FormatUint(r.ProjectID, 10)) + if r.Filtering != nil { + filtering, _ := json.Marshal(r.Filtering) + values.Set("filtering", string(filtering)) + } + if r.Page > 0 { + values.Set("page", strconv.Itoa(r.Page)) + } + if r.PageSize > 0 { + values.Set("page_size", strconv.Itoa(r.PageSize)) + } + ret := values.Encode() + util.PutUrlValues(values) + return ret +} + +// MaterialGetResponse 获取投放项目下素材 API Response +type MaterialGetResponse struct { + model.BaseResponse + Data *MaterialGetResponseData `json:"data,omitempty"` +} + +// MaterialGetResponseData 获取投放项目下素材返回数据 +type MaterialGetResponseData struct { + // VideoMaterialList 视频素材信息 + VideoMaterialList []VideoMaterial `json:"video_material_list,omitempty"` + // ImageMaterialList 图片素材信息 + ImageMaterialList []ImageMaterial `json:"image_material_list,omitempty"` + // CarouselMaterialList 图文素材信息 + CarouselMaterialList []CarouselMaterial `json:"carousel_material_list,omitempty"` + // TrialPlayMaterialList 试玩素材信息 + TrialPlayMaterialList []TrialPlayMaterial `json:"trial_play_material_list,omitempty"` + // TitleMaterialList 标题素材信息 + TitleMaterialList []TitleMaterial `json:"title_material_list,omitempty"` + // ProductInfo 产品信息 + ProductInfo *ProductInfo `json:"product_info,omitempty"` + // PlayletSeriesURLInfoList 短剧专辑链接信息 + PlayletSeriesURLInfoList []PlayletSeriesURLInfo `json:"playlet_series_url_info,omitempty"` + // ExternalURLMaterialList 普通落地页链接素材 + ExternalURLMaterialList []string `json:"external_url_material_list,omitempty"` + // WebURLMaterialList 应用下载详情页 + WebURLMaterialList []string `json:"web_url_material_list,omitempty"` + // ComponentMaterialList 创意组件信息 + ComponentMaterialList []ComponentMaterial `json:"component_material_list,omitempty"` + // AnchorMaterialList 原生锚点素材 + AnchorMaterialList []AnchorMaterial `json:"anchor_material_list,omitempty"` + // InstantPlayMaterialList 直玩素材信息 + InstantPlayMaterialList []InstantPlayMaterial `json:"instant_play_material_list,omitempty"` + // MiniProgramInfo 字节小程序&小游戏信息 + MiniProgramInfo *MiniProgramInfo `json:"mini_program_info,omitempty"` + // PlayletSeriesURLList 短剧合集链接url + PlayletSeriesURLList []string `json:"playlet_series_url_list,omitempty"` + // OpenURLs 多直达链接 + OpenURLs []string `json:"open_urls,omitempty"` + // PageInfo 分页信息 + PageInfo *model.PageInfo `json:"page_info,omitempty"` +} diff --git a/marketing-api/model/v3/stdproject/project.go b/marketing-api/model/v3/stdproject/project.go new file mode 100644 index 0000000..30b7b1c --- /dev/null +++ b/marketing-api/model/v3/stdproject/project.go @@ -0,0 +1,248 @@ +package stdproject + +import ( + "github.com/bububa/oceanengine/marketing-api/enum" + "github.com/bububa/oceanengine/marketing-api/model" +) + +// StdProject 标准项目 +type StdProject struct { + // ProjectID 项目id + ProjectID uint64 `json:"project_id,omitempty"` + // AdvertiserID 投放账户id + AdvertiserID uint64 `json:"advertiser_id,omitempty"` + // Name 项目名称 + Name string `json:"name,omitempty"` + // AdType 营销类型,可选值:ALL 信息流、SEARCH 搜索 + AdType enum.CampaignType `json:"ad_type,omitempty"` + // LandingType 营销目的,可选值:APP 应用、LINK 销售线索、MICRO_GAME 小程序、SHOP 电商 + LandingType enum.LandingType `json:"landing_type,omitempty"` + // MarketingGoal 营销场景,可选值:LIVE 直播、VIDEO_AND_IMAGE 短视频图文 + MarketingGoal enum.MarketingGoal `json:"marketing_goal,omitempty"` + // DeliveryMode 投放模式,可选值:PROCEDURAL 自动 + DeliveryMode enum.DeliveryMode `json:"delivery_mode,omitempty"` + // AppPromotionType 子目标,可选值:DOWNLOAD 应用下载、LAUNCH 应用调起、RESERVE 预约下载 + AppPromotionType enum.AppPromotionType `json:"app_promotion_type,omitempty"` + // StatusFirst 项目状态(一级),可选值: + // PROJECT_STATUS_DELETE 已删除 + // PROJECT_STATUS_DISABLE 未投放 + // PROJECT_STATUS_DONE 已完成 + // PROJECT_STATUS_ENABLE 启用中 + // PROJECT_STATUS_FROZEN 已终止 + StatusFirst enum.StdProjectStatusFirst `json:"status_first,omitempty"` + // StatusSecond 项目二级状态 + StatusSecond []string `json:"status_second,omitempty"` + // OptStatus 项目操作状态,可选值:DISABLE、ENABLE + OptStatus enum.OptStatus `json:"opt_status,omitempty"` + // ProjectCreateTime 项目创建时间 + ProjectCreateTime string `json:"project_create_time,omitempty"` + // ProjectModifyTime 项目修改时间 + ProjectModifyTime string `json:"project_modify_time,omitempty"` + // ProductID 产品ID + ProductID string `json:"product_id,omitempty"` + // ProductPlatformID 商品库ID + ProductPlatformID uint64 `json:"product_platform_id,omitempty"` + // UniqueProductID 升级版商品库产品ID + UniqueProductID uint64 `json:"unique_product_id,omitempty"` + // DeliveryMedium 投放载体,可选值: + // APP 应用、AWEME 抖音号、BYTE_APP 字节小程序、BYTE_GAME 字节小游戏、ENTERPRISE 企业号落地页、 + // ORANGE 橙子落地页、THIRDPARTY 自研落地页、WECHAT_APP 微信小程序、WECHAT_GAME 微信小游戏 + DeliveryMedium enum.DeliveryMedium `json:"delivery_medium,omitempty"` + // DownloadURL 下载链接 + DownloadURL string `json:"download_url,omitempty"` + // SubscribeURL 预约链接 + SubscribeURL string `json:"subscribe_url,omitempty"` + // AppName 应用名称 + AppName string `json:"app_name,omitempty"` + // PackageName 应用包名 + PackageName string `json:"package_name,omitempty"` + // ExternalAction 优化目标 + ExternalAction string `json:"external_action,omitempty"` + // DeepExternalAction 深度优化目标 + DeepExternalAction string `json:"deep_external_action,omitempty"` + // DeepBidType 深度优化方式 + DeepBidType string `json:"deep_bid_type,omitempty"` + // NativeType 投放身份 + NativeType enum.NativeType `json:"native_type,omitempty"` + // InventoryCatalog 投放版位,可选值:UNIVERSAL_SMART 通投智选 + InventoryCatalog enum.InventoryCatalog `json:"inventory_catalog,omitempty"` + // AwemeID 抖音号ID + AwemeID string `json:"aweme_id,omitempty"` + // ScheduleType 投放时间类型,允许值: + // SCHEDULE_FROM_NOW 从今天起长期投放 + // SCHEDULE_START_END 设置开始和结束日期 + // SCHEDULE_7_DAYS 7日稳投 + ScheduleType enum.ScheduleType `json:"schedule_type,omitempty"` + // StartTime 投放起始时间 + StartTime string `json:"start_time,omitempty"` + // EndTime 投放结束时间 + EndTime string `json:"end_time,omitempty"` + // ScheduleTime 投放时段,默认全时段投放,格式是48*7位字符串,且都是0或1 + ScheduleTime string `json:"schedule_time,omitempty"` + // SearchContinueDelivery 续投,允许值:OFF 关闭、ON 开启 + SearchContinueDelivery enum.OnOff `json:"search_continue_delivery,omitempty"` + // BidType 竞价策略,可选值:CUSTOM 稳定成本、NO_BID 最大转化投放 + BidType enum.BidType `json:"bid_type,omitempty"` + // BudgetMode 预算类型,可选值:BUDGET_MODE_DAY 日预算、BUDGET_MODE_INFINITE 不限、BUDGET_MODE_TOTAL 总预算 + BudgetMode enum.BudgetMode `json:"budget_mode,omitempty"` + // Budget 预算 + Budget float64 `json:"budget,omitempty"` + // Pricing 付费方式,可选值:PRICING_CPC、PRICING_CPM、PRICING_OCPC、PRICING_OCPM + Pricing enum.PricingType `json:"pricing,omitempty"` + // Bid 出价 + Bid float64 `json:"bid,omitempty"` + // CpaBid 目标转化出价 + CpaBid float64 `json:"cpa_bid,omitempty"` + // DeepCpaBid 深度转化出价 + DeepCpaBid float64 `json:"deep_cpabid,omitempty"` + // RoiGoal ROI系数 + RoiGoal float64 `json:"roi_goal,omitempty"` + // FirstRoiGoal 首日roi系数 + FirstRoiGoal float64 `json:"first_roi_goal,omitempty"` + // DownloadType 下载类型,可选值:DOWNLOAD_URL 下载链接、EXTERNAL_URL 包含下载链接的落地页 + DownloadType enum.DownloadType `json:"download_type,omitempty"` + // DownloadMode 下载模式(优先从应用商店下载),允许值:APP_STORE_DELIVERY 优先商店下载、DEFAULT 默认下载 + DownloadMode enum.DownloadMode `json:"download_mode,omitempty"` + // LaunchType 调起方式,允许值:DIRECT_OPEN 直接调起、EXTERNAL_OPEN 落地页调起 + LaunchType enum.LaunchType `json:"launch_type,omitempty"` + // IsCommentDisable 评论管理,可选值:OFF 不允许评论、ON 允许评论 + IsCommentDisable enum.OnOff `json:"is_comment_disable,omitempty"` + // BlueFlowKeywordName 蓝海关键词 + BlueFlowKeywordName []string `json:"blue_flow_keyword_name,omitempty"` + // StarTaskIDList 星广联投任务ID + StarTaskIDList []uint64 `json:"star_task_id_list,omitempty"` + // StarAutoDeliverySwitch 星广联投全自动化开关,OFF 关闭、ON 开启 + StarAutoDeliverySwitch enum.OnOff `json:"star_auto_delivery_switch,omitempty"` + // AigcDynamicCreativeSwitch 是否开启AIGC动态创意,OFF 关闭、ON 开启 + AigcDynamicCreativeSwitch enum.OnOff `json:"aigc_dynamic_creative_switch,omitempty"` + // TrackURLSetting 监测链接 + TrackURLSetting *StdTrackURLSetting `json:"track_url_setting,omitempty"` + // Audience 定向类型 + Audience *StdAudience `json:"audience,omitempty"` + // BrandInfo 品牌信息 + BrandInfo *StdBrandInfo `json:"brand_info,omitempty"` + // GameAddictionID 关键行为ID + GameAddictionID string `json:"game_addiction_id,omitempty"` + // MultiDeliveryMedium 多投放载体,可选值:ORANGE_AND_AWEME 建站落地页和抖音主页 + MultiDeliveryMedium enum.MultiDeliveryMedium `json:"multi_delivery_medium,omitempty"` + // InstanceID 字节小游戏/小程序、微信小游戏/小程序 资产id + InstanceID uint64 `json:"instance_id,omitempty"` + // ShopPlatform 电商平台 + ShopPlatform enum.ShopPlatform `json:"shop_platform,omitempty"` + // DeliveryType 投放类型,可选值:NORMAL 常规投放、UBX_INTELLIGENT 智能托管 + DeliveryType enum.DeliveryType `json:"delivery_type,omitempty"` + // LiveDuration 直播每日投放时长 + LiveDuration float64 `json:"live_duration,omitempty"` + // SevenRoiGoal 7日Roi + SevenRoiGoal float64 `json:"seven_roi_goal,omitempty"` + // LayerRoiSwitch ROI分层出价开关,ON、OFF + LayerRoiSwitch enum.OnOff `json:"layer_roi_switch,omitempty"` + // LayerRoiGoal ROI分层出价 + LayerRoiGoal []LayerRoiGoal `json:"layer_roi_goal,omitempty"` + // LandingPageStayTime 店铺停留时长,单位为毫秒 + LandingPageStayTime int `json:"landing_page_stay_time,omitempty"` +} + +// LayerRoiGoal ROI分层出价 +type LayerRoiGoal struct { + // Lower 下限区间 + Lower int `json:"lower,omitempty"` + // Upper 上限区间 + Upper int `json:"upper,omitempty"` + // RoiGoal roi系数 + RoiGoal float64 `json:"roi_goal,omitempty"` +} + +// StdTrackURLSetting 监测链接 +type StdTrackURLSetting struct { + // TrackURLType 监测链接类型,可选值:CUSTOM 自定义链接、GROUP_ID 监测链接组 + TrackURLType string `json:"track_url_type,omitempty"` + // TrackURLGroupID 监测链接组id,通过【事件资产下创建监测链接组】获得 + TrackURLGroupID uint64 `json:"track_url_group_id,omitempty"` + // TrackURL 展示(监测链接) + TrackURL []string `json:"track_url,omitempty"` + // ActionTrackURL 点击(监测链接) + ActionTrackURL []string `json:"action_track_url,omitempty"` + // ActiveTrackURL 激活检测链接 + ActiveTrackURL []string `json:"active_track_url,omitempty"` + // VideoPlayEffectiveTrackURL 视频有效播放(监测链接) + VideoPlayEffectiveTrackURL []string `json:"video_play_effective_track_url,omitempty"` + // VideoPlayDoneTrackURL 视频播完(监测链接) + VideoPlayDoneTrackURL []string `json:"video_play_done_track_url,omitempty"` + // VideoPlayFirstTrackURL 视频开始播放(监测链接) + VideoPlayFirstTrackURL []string `json:"video_play_first_track_url,omitempty"` + // SendType 数据发送方式,允许值:SERVER_SEND 服务器端上传、CLIENT_SEND 客户端上传 + SendType enum.SendType `json:"send_type,omitempty"` +} + +// StdAudience 定向类型 +type StdAudience struct { + // AudienceType 定向设置方式,允许值:UNLIMITED 不限、CUSTOM 自定义 + AudienceType string `json:"audience_type,omitempty"` + // District 地域类型,允许值:BUSINESS_DISTRICT 商圈、REGION 行政区域、OVERSEA 海外区域、NONE 不限 + District enum.District `json:"district,omitempty"` + // Geolocation 从地图添加(地图位置),district为"BUSINESS_DISTRICT"时填写,最多允许添加1000个 + Geolocation []model.Geolocation `json:"geolocation,omitempty"` + // RegionVersion 行政区域版本号 + RegionVersion string `json:"region_version,omitempty"` + // City 地域定向省市或者区县列表 + City []uint64 `json:"city,omitempty"` + // LocationType 位置类型,允许值:CURRENT、HOME、TRAVEL、ALL + LocationType enum.LocationType `json:"location_type,omitempty"` + // Gender 性别,允许值:GENDER_FEMALE、GENDER_MALE、NONE + Gender enum.AudienceGender `json:"gender,omitempty"` + // Age 年龄区间,允许值:AGE_BETWEEN_18_23 等 + Age []enum.AudienceAge `json:"age,omitempty"` + // RetargetingTagsInclude 定向人群包列表(自定义人群) + RetargetingTagsInclude []uint64 `json:"retargeting_tags_include,omitempty"` + // RetargetingTagsExclude 排除人群包列表(自定义人群) + RetargetingTagsExclude []uint64 `json:"retargeting_tags_exclude,omitempty"` + // HideIfExists 过滤已安装,允许值:UNLIMITED、FILTER、TARGETING + HideIfExists string `json:"hide_if_exists,omitempty"` + // HideIfConverted 过滤已转化用户,允许值:NO_EXCLUDE、PROJECT、ADVERTISER、APP、CUSTOMER、ORGANIZATION、GLOBAL_APP + HideIfConverted string `json:"hide_if_converted,omitempty"` + // ConvertedTimeDuration 过滤时间范围 + ConvertedTimeDuration enum.ConvertedTimeDuration `json:"converted_time_duration,omitempty"` + // Platform 投放平台列表,允许值:ANDROID、IOS、HARMONY + Platform []enum.AudiencePlatform `json:"platform,omitempty"` + // AndroidOsv 最低安卓版本 + AndroidOsv string `json:"android_osv,omitempty"` + // IosOsv 最低IOS版本 + IosOsv string `json:"ios_osv,omitempty"` + // HarmonyOsv 鸿蒙版本 + HarmonyOsv string `json:"harmony_osv,omitempty"` + // FilterOwnAwemeFans 过滤自己的粉丝,可选值:OFF 不过滤、ON 过滤 + FilterOwnAwemeFans enum.OnOff `json:"filter_own_aweme_fans,omitempty"` + // Ac 网络,可选值:2G、3G、4G、5G、WIFI + Ac []string `json:"ac,omitempty"` + // LaunchPrice 手机价格 + LaunchPrice []int `json:"launch_price,omitempty"` + // SmartExtend 智能拓展开关,可选值:OFF 不启用、ON 启用 + SmartExtend enum.OnOff `json:"smart_extend,omitempty"` + // InterestActionMode 行为兴趣,可选值:CUSTOM、RECOMMEND、UNLIMITED + InterestActionMode enum.InterestActionMode `json:"interest_action_mode,omitempty"` + // InterestCategories 兴趣类目词 + InterestCategories []uint64 `json:"interest_categories,omitempty"` + // InterestWords 兴趣关键词 + InterestWords []uint64 `json:"interest_words,omitempty"` + // ActionDays 用户发生行为天数 + ActionDays int `json:"action_days,omitempty"` + // ActionCategories 行为类目词 + ActionCategories []uint64 `json:"action_categories,omitempty"` + // ActionWords 行为关键词 + ActionWords []uint64 `json:"action_words,omitempty"` +} + +// StdBrandInfo 品牌信息 +type StdBrandInfo struct { + // YuntuCategoryID 所属类别(品牌分类ID) + YuntuCategoryID uint64 `json:"yuntu_category_id,omitempty"` + // CdpBrandID 品牌id + CdpBrandID uint64 `json:"cdp_brand_id,omitempty"` + // BrandNameID 品牌名称 + BrandNameID uint64 `json:"brand_name_id,omitempty"` + // CdpBrandName 产品系列ID + CdpBrandName string `json:"cdp_brand_name,omitempty"` + // SubBrandNames 产品系列名称 + SubBrandNames []string `json:"sub_brand_names,omitempty"` +}