zernio-sdk 0.0.735 → 0.0.737
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/docs/ConnectApi.md +1 -1
- data/docs/ConnectWhatsAppCredentials200Response.md +2 -0
- data/docs/ConnectWhatsAppCredentials200ResponseAccount.md +6 -2
- data/docs/CreateCallAdRequest.md +5 -1
- data/docs/CreateMessagingAdRequest.md +5 -1
- data/docs/CtwaAdRequestBody.md +5 -1
- data/docs/CtwaAdRequestBodyCreativesInnerVideo.md +4 -2
- data/docs/CtwaAdRequestBodyVideo.md +4 -2
- data/lib/zernio-sdk/api/connect_api.rb +2 -2
- data/lib/zernio-sdk/models/connect_whats_app_credentials200_response.rb +11 -1
- data/lib/zernio-sdk/models/connect_whats_app_credentials200_response_account.rb +27 -7
- data/lib/zernio-sdk/models/create_call_ad_request.rb +46 -2
- data/lib/zernio-sdk/models/create_messaging_ad_request.rb +46 -2
- data/lib/zernio-sdk/models/ctwa_ad_request_body.rb +46 -2
- data/lib/zernio-sdk/models/ctwa_ad_request_body_creatives_inner_video.rb +13 -36
- data/lib/zernio-sdk/models/ctwa_ad_request_body_video.rb +13 -36
- data/lib/zernio-sdk/version.rb +1 -1
- data/openapi.yaml +47 -13
- data/spec/api/connect_api_spec.rb +1 -1
- data/spec/models/connect_whats_app_credentials200_response_account_spec.rb +13 -1
- data/spec/models/connect_whats_app_credentials200_response_spec.rb +6 -0
- data/spec/models/create_call_ad_request_spec.rb +20 -0
- data/spec/models/create_messaging_ad_request_spec.rb +20 -0
- data/spec/models/ctwa_ad_request_body_creatives_inner_video_spec.rb +6 -0
- data/spec/models/ctwa_ad_request_body_spec.rb +20 -0
- data/spec/models/ctwa_ad_request_body_video_spec.rb +6 -0
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 819d897dc076c719e4b1797ef83d1398d882c4b16471432c2df6ee07bdfd689c
|
|
4
|
+
data.tar.gz: 8a17453dbd051e363180df70e571f2b08df2157e253bd18f3231f32cd1267ea2
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 18acc2df387b5373b5b33f22ebdbff93f65123a34cc9dc8927983adcba13c20dd2f9ef5998a1409c2f6973d305109ae02de7b4d9b9a07356c9b45748222843e5
|
|
7
|
+
data.tar.gz: ea17cd724391033e4e61d11ca97a12d338eb457d40c034931281c66314687a2ef99d7182f100d8a5c874677b4215cb8db1eab0ef1699e1f513126273234e62e7
|
data/docs/ConnectApi.md
CHANGED
|
@@ -631,7 +631,7 @@ end
|
|
|
631
631
|
|
|
632
632
|
Connect WhatsApp via credentials
|
|
633
633
|
|
|
634
|
-
Connect a WhatsApp Business Account by providing Meta credentials directly. This is the headless alternative to the Embedded Signup browser flow. To get the required credentials: 1. Go to Meta Business Suite (business.facebook.com) 2. Create or select a WhatsApp Business Account 3. In Business Settings > System Users, create a System User 4. Assign it the whatsapp_business_management and whatsapp_business_messaging permissions 5. Generate a permanent access token 6. Get the WABA ID from WhatsApp Manager > Account Tools > Phone Numbers 7. Get the Phone Number ID from the same page (click on the number)
|
|
634
|
+
Connect a WhatsApp Business Account by providing Meta credentials directly. This is the headless alternative to the Embedded Signup browser flow. To get the required credentials: 1. Go to Meta Business Suite (business.facebook.com) 2. Create or select a WhatsApp Business Account 3. In Business Settings > System Users, create a System User 4. Assign it the whatsapp_business_management and whatsapp_business_messaging permissions 5. Generate a permanent access token 6. Get the WABA ID from WhatsApp Manager > Account Tools > Phone Numbers 7. Get the Phone Number ID from the same page (click on the number) Warning: connecting subscribes your own Meta app to this WABA with an override callback that redirects its webhook delivery to Zernio. This WABA's events stop reaching any callback URL you had configured before, immediately and with no overlap window. Do not unsubscribe your app from the WABA afterward: that also cuts off Zernio's delivery, and recovery requires calling this endpoint again.
|
|
635
635
|
|
|
636
636
|
### Examples
|
|
637
637
|
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
| ---- | ---- | ----------- | ----- |
|
|
7
7
|
| **message** | **String** | | [optional] |
|
|
8
8
|
| **registration_warning** | **String** | Present when the account was created but Meta rejected the Cloud API registration. The number cannot send messages until this is resolved. | [optional] |
|
|
9
|
+
| **webhook_notice** | **String** | Present when the WABA webhook subscription (with the Zernio override callback) succeeded. Explains the delivery cutover and warns against unsubscribing the app from the WABA afterward. | [optional] |
|
|
9
10
|
| **account** | [**ConnectWhatsAppCredentials200ResponseAccount**](ConnectWhatsAppCredentials200ResponseAccount.md) | | [optional] |
|
|
10
11
|
|
|
11
12
|
## Example
|
|
@@ -16,6 +17,7 @@ require 'zernio-sdk'
|
|
|
16
17
|
instance = Zernio::ConnectWhatsAppCredentials200Response.new(
|
|
17
18
|
message: null,
|
|
18
19
|
registration_warning: null,
|
|
20
|
+
webhook_notice: null,
|
|
19
21
|
account: null
|
|
20
22
|
)
|
|
21
23
|
```
|
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
| **username** | **String** | Display phone number | [optional] |
|
|
10
10
|
| **display_name** | **String** | Meta-verified business name | [optional] |
|
|
11
11
|
| **is_active** | **Boolean** | | [optional] |
|
|
12
|
-
| **
|
|
12
|
+
| **phone_number** | **String** | The connected phone number | [optional] |
|
|
13
|
+
| **verified_name** | **String** | Meta-verified business name for the phone number | [optional] |
|
|
14
|
+
| **quality_rating** | **String** | Meta quality rating for the phone number (e.g. GREEN, YELLOW, RED, UNKNOWN) | [optional] |
|
|
13
15
|
|
|
14
16
|
## Example
|
|
15
17
|
|
|
@@ -22,7 +24,9 @@ instance = Zernio::ConnectWhatsAppCredentials200ResponseAccount.new(
|
|
|
22
24
|
username: null,
|
|
23
25
|
display_name: null,
|
|
24
26
|
is_active: null,
|
|
25
|
-
|
|
27
|
+
phone_number: null,
|
|
28
|
+
verified_name: null,
|
|
29
|
+
quality_rating: null
|
|
26
30
|
)
|
|
27
31
|
```
|
|
28
32
|
|
data/docs/CreateCallAdRequest.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
| **image_url** | **String** | Image asset for single-creative shape. Mutually exclusive with `video` and with `creatives[]`. Required on the single-creative shape if `video` is not supplied. | [optional] |
|
|
13
13
|
| **video** | [**CtwaAdRequestBodyVideo**](CtwaAdRequestBodyVideo.md) | | [optional] |
|
|
14
14
|
| **creatives** | [**Array<CtwaAdRequestBodyCreativesInner>**](CtwaAdRequestBodyCreativesInner.md) | Multi-creative shape: N CTWA ads under one campaign + one ad set, sharing budget and targeting. Mutually exclusive with the top-level single-creative fields (`headline` / `body` / `imageUrl` / `video`). Each entry must supply its own headline, body, and exactly one of `imageUrl` / `video`. | [optional] |
|
|
15
|
-
| **ad_set_id** | **String** | Attach the creatives to this EXISTING messaging ad set instead of building a campaign, so the ad set keeps its learning phase. It then owns budget, targeting and schedule, so `budgetAmount`, `budgetType`, `endDate`, `objective`, `countries`, `interests` and `
|
|
15
|
+
| **ad_set_id** | **String** | Attach the creatives to this EXISTING messaging ad set instead of building a campaign, so the ad set keeps its learning phase. It then owns budget, targeting and schedule, so `budgetAmount`, `budgetType`, `endDate`, `objective`, `countries`, `interests`, `audienceId` and `campaignStatus` are rejected with a 400 alongside it. Its `destination_type` must match the ad's destination. | [optional] |
|
|
16
16
|
| **budget_amount** | **Float** | Budget amount in the ad account's currency major units (e.g. dollars for USD, not cents). Must be > 0. Required unless `adSetId` is set, where the ad set owns it. | [optional] |
|
|
17
17
|
| **budget_type** | **String** | Required unless `adSetId` is set. | [optional] |
|
|
18
18
|
| **currency** | **String** | ISO 4217 currency code matching the ad account's currency (e.g. `USD`). Optional: Zernio resolves it from the ad account when omitted. The value selects the minor-unit exponent Zernio converts budget/bid amounts by before calling Meta (most currencies are cents; zero-decimal currencies like JPY/KRW are sent as-is). | [optional] |
|
|
@@ -30,6 +30,8 @@
|
|
|
30
30
|
| **placements** | [**CtwaAdRequestBodyPlacements**](CtwaAdRequestBodyPlacements.md) | | [optional] |
|
|
31
31
|
| **advantage_audience** | **Integer** | Meta's Advantage+ audience expansion. `0` (default) keeps targeting strict; `1` lets Meta expand beyond the supplied targeting when its delivery system finds better matches. Always sent on CREATE (Meta requires it). | [optional] |
|
|
32
32
|
| **objective** | **String** | Defaults to `OUTCOME_ENGAGEMENT`. `OUTCOME_SALES` and `OUTCOME_LEADS` require additional account configuration (Dataset linked to the WABA for sales) and may be rejected by Meta if missing. | [optional] |
|
|
33
|
+
| **status** | **String** | Ad-level status. Defaults to `ACTIVE`. `PAUSED` skips activating the newly created ad(s) after Meta accepts them. | [optional] |
|
|
34
|
+
| **campaign_status** | **String** | Campaign-level status, same semantics as `POST /v1/ads/create`. Defaults to `ACTIVE`. `PAUSED` holds activation at the campaign so it never spends before the advertiser reviews it, while the ad set and ad still switch on (one resume call brings the whole hierarchy live). Only meaningful when a new campaign is being created; rejected with a 400 alongside `adSetId` (the attach shape reuses an existing campaign). | [optional] |
|
|
33
35
|
| **bid_strategy** | **String** | Meta bid strategy applied to the shared ad set. Defaults to `LOWEST_COST_WITHOUT_CAP` (auto-bid) when omitted. `LOWEST_COST_WITH_BID_CAP` and `COST_CAP` require `bidAmount`. `LOWEST_COST_WITH_MIN_ROAS` requires `roasAverageFloor`. CTWA's `optimization_goal` is fixed to `CONVERSATIONS`, but the bid strategy is independent. | [optional] |
|
|
34
36
|
| **bid_amount** | **Float** | Whole currency units (e.g. `5` = $5.00 on a USD account). Required when `bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`; rejected otherwise. | [optional] |
|
|
35
37
|
| **roas_average_floor** | **Float** | Decimal ROAS multiplier (e.g. `2.0` = 2.0× ROAS floor). Required when `bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`; rejected otherwise. Meta enforces its own upper bound server-side. | [optional] |
|
|
@@ -70,6 +72,8 @@ instance = Zernio::CreateCallAdRequest.new(
|
|
|
70
72
|
placements: null,
|
|
71
73
|
advantage_audience: null,
|
|
72
74
|
objective: null,
|
|
75
|
+
status: null,
|
|
76
|
+
campaign_status: null,
|
|
73
77
|
bid_strategy: null,
|
|
74
78
|
bid_amount: null,
|
|
75
79
|
roas_average_floor: null,
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
| **image_url** | **String** | Image asset for single-creative shape. Mutually exclusive with `video` and with `creatives[]`. Required on the single-creative shape if `video` is not supplied. | [optional] |
|
|
13
13
|
| **video** | [**CtwaAdRequestBodyVideo**](CtwaAdRequestBodyVideo.md) | | [optional] |
|
|
14
14
|
| **creatives** | [**Array<CtwaAdRequestBodyCreativesInner>**](CtwaAdRequestBodyCreativesInner.md) | Multi-creative shape: N CTWA ads under one campaign + one ad set, sharing budget and targeting. Mutually exclusive with the top-level single-creative fields (`headline` / `body` / `imageUrl` / `video`). Each entry must supply its own headline, body, and exactly one of `imageUrl` / `video`. | [optional] |
|
|
15
|
-
| **ad_set_id** | **String** | Attach the creatives to this EXISTING messaging ad set instead of building a campaign, so the ad set keeps its learning phase. It then owns budget, targeting and schedule, so `budgetAmount`, `budgetType`, `endDate`, `objective`, `countries`, `interests` and `
|
|
15
|
+
| **ad_set_id** | **String** | Attach the creatives to this EXISTING messaging ad set instead of building a campaign, so the ad set keeps its learning phase. It then owns budget, targeting and schedule, so `budgetAmount`, `budgetType`, `endDate`, `objective`, `countries`, `interests`, `audienceId` and `campaignStatus` are rejected with a 400 alongside it. Its `destination_type` must match the ad's destination. | [optional] |
|
|
16
16
|
| **budget_amount** | **Float** | Budget amount in the ad account's currency major units (e.g. dollars for USD, not cents). Must be > 0. Required unless `adSetId` is set, where the ad set owns it. | [optional] |
|
|
17
17
|
| **budget_type** | **String** | Required unless `adSetId` is set. | [optional] |
|
|
18
18
|
| **currency** | **String** | ISO 4217 currency code matching the ad account's currency (e.g. `USD`). Optional: Zernio resolves it from the ad account when omitted. The value selects the minor-unit exponent Zernio converts budget/bid amounts by before calling Meta (most currencies are cents; zero-decimal currencies like JPY/KRW are sent as-is). | [optional] |
|
|
@@ -30,6 +30,8 @@
|
|
|
30
30
|
| **placements** | [**CtwaAdRequestBodyPlacements**](CtwaAdRequestBodyPlacements.md) | | [optional] |
|
|
31
31
|
| **advantage_audience** | **Integer** | Meta's Advantage+ audience expansion. `0` (default) keeps targeting strict; `1` lets Meta expand beyond the supplied targeting when its delivery system finds better matches. Always sent on CREATE (Meta requires it). | [optional] |
|
|
32
32
|
| **objective** | **String** | Defaults to `OUTCOME_ENGAGEMENT`. `OUTCOME_SALES` and `OUTCOME_LEADS` require additional account configuration (Dataset linked to the WABA for sales) and may be rejected by Meta if missing. | [optional] |
|
|
33
|
+
| **status** | **String** | Ad-level status. Defaults to `ACTIVE`. `PAUSED` skips activating the newly created ad(s) after Meta accepts them. | [optional] |
|
|
34
|
+
| **campaign_status** | **String** | Campaign-level status, same semantics as `POST /v1/ads/create`. Defaults to `ACTIVE`. `PAUSED` holds activation at the campaign so it never spends before the advertiser reviews it, while the ad set and ad still switch on (one resume call brings the whole hierarchy live). Only meaningful when a new campaign is being created; rejected with a 400 alongside `adSetId` (the attach shape reuses an existing campaign). | [optional] |
|
|
33
35
|
| **bid_strategy** | **String** | Meta bid strategy applied to the shared ad set. Defaults to `LOWEST_COST_WITHOUT_CAP` (auto-bid) when omitted. `LOWEST_COST_WITH_BID_CAP` and `COST_CAP` require `bidAmount`. `LOWEST_COST_WITH_MIN_ROAS` requires `roasAverageFloor`. CTWA's `optimization_goal` is fixed to `CONVERSATIONS`, but the bid strategy is independent. | [optional] |
|
|
34
36
|
| **bid_amount** | **Float** | Whole currency units (e.g. `5` = $5.00 on a USD account). Required when `bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`; rejected otherwise. | [optional] |
|
|
35
37
|
| **roas_average_floor** | **Float** | Decimal ROAS multiplier (e.g. `2.0` = 2.0× ROAS floor). Required when `bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`; rejected otherwise. Meta enforces its own upper bound server-side. | [optional] |
|
|
@@ -69,6 +71,8 @@ instance = Zernio::CreateMessagingAdRequest.new(
|
|
|
69
71
|
placements: null,
|
|
70
72
|
advantage_audience: null,
|
|
71
73
|
objective: null,
|
|
74
|
+
status: null,
|
|
75
|
+
campaign_status: null,
|
|
72
76
|
bid_strategy: null,
|
|
73
77
|
bid_amount: null,
|
|
74
78
|
roas_average_floor: null,
|
data/docs/CtwaAdRequestBody.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
| **image_url** | **String** | Image asset for single-creative shape. Mutually exclusive with `video` and with `creatives[]`. Required on the single-creative shape if `video` is not supplied. | [optional] |
|
|
13
13
|
| **video** | [**CtwaAdRequestBodyVideo**](CtwaAdRequestBodyVideo.md) | | [optional] |
|
|
14
14
|
| **creatives** | [**Array<CtwaAdRequestBodyCreativesInner>**](CtwaAdRequestBodyCreativesInner.md) | Multi-creative shape: N CTWA ads under one campaign + one ad set, sharing budget and targeting. Mutually exclusive with the top-level single-creative fields (`headline` / `body` / `imageUrl` / `video`). Each entry must supply its own headline, body, and exactly one of `imageUrl` / `video`. | [optional] |
|
|
15
|
-
| **ad_set_id** | **String** | Attach the creatives to this EXISTING messaging ad set instead of building a campaign, so the ad set keeps its learning phase. It then owns budget, targeting and schedule, so `budgetAmount`, `budgetType`, `endDate`, `objective`, `countries`, `interests` and `
|
|
15
|
+
| **ad_set_id** | **String** | Attach the creatives to this EXISTING messaging ad set instead of building a campaign, so the ad set keeps its learning phase. It then owns budget, targeting and schedule, so `budgetAmount`, `budgetType`, `endDate`, `objective`, `countries`, `interests`, `audienceId` and `campaignStatus` are rejected with a 400 alongside it. Its `destination_type` must match the ad's destination. | [optional] |
|
|
16
16
|
| **budget_amount** | **Float** | Budget amount in the ad account's currency major units (e.g. dollars for USD, not cents). Must be > 0. Required unless `adSetId` is set, where the ad set owns it. | [optional] |
|
|
17
17
|
| **budget_type** | **String** | Required unless `adSetId` is set. | [optional] |
|
|
18
18
|
| **currency** | **String** | ISO 4217 currency code matching the ad account's currency (e.g. `USD`). Optional: Zernio resolves it from the ad account when omitted. The value selects the minor-unit exponent Zernio converts budget/bid amounts by before calling Meta (most currencies are cents; zero-decimal currencies like JPY/KRW are sent as-is). | [optional] |
|
|
@@ -30,6 +30,8 @@
|
|
|
30
30
|
| **placements** | [**CtwaAdRequestBodyPlacements**](CtwaAdRequestBodyPlacements.md) | | [optional] |
|
|
31
31
|
| **advantage_audience** | **Integer** | Meta's Advantage+ audience expansion. `0` (default) keeps targeting strict; `1` lets Meta expand beyond the supplied targeting when its delivery system finds better matches. Always sent on CREATE (Meta requires it). | [optional] |
|
|
32
32
|
| **objective** | **String** | Defaults to `OUTCOME_ENGAGEMENT`. `OUTCOME_SALES` and `OUTCOME_LEADS` require additional account configuration (Dataset linked to the WABA for sales) and may be rejected by Meta if missing. | [optional] |
|
|
33
|
+
| **status** | **String** | Ad-level status. Defaults to `ACTIVE`. `PAUSED` skips activating the newly created ad(s) after Meta accepts them. | [optional] |
|
|
34
|
+
| **campaign_status** | **String** | Campaign-level status, same semantics as `POST /v1/ads/create`. Defaults to `ACTIVE`. `PAUSED` holds activation at the campaign so it never spends before the advertiser reviews it, while the ad set and ad still switch on (one resume call brings the whole hierarchy live). Only meaningful when a new campaign is being created; rejected with a 400 alongside `adSetId` (the attach shape reuses an existing campaign). | [optional] |
|
|
33
35
|
| **bid_strategy** | **String** | Meta bid strategy applied to the shared ad set. Defaults to `LOWEST_COST_WITHOUT_CAP` (auto-bid) when omitted. `LOWEST_COST_WITH_BID_CAP` and `COST_CAP` require `bidAmount`. `LOWEST_COST_WITH_MIN_ROAS` requires `roasAverageFloor`. CTWA's `optimization_goal` is fixed to `CONVERSATIONS`, but the bid strategy is independent. | [optional] |
|
|
34
36
|
| **bid_amount** | **Float** | Whole currency units (e.g. `5` = $5.00 on a USD account). Required when `bidStrategy` is `LOWEST_COST_WITH_BID_CAP` or `COST_CAP`; rejected otherwise. | [optional] |
|
|
35
37
|
| **roas_average_floor** | **Float** | Decimal ROAS multiplier (e.g. `2.0` = 2.0× ROAS floor). Required when `bidStrategy` is `LOWEST_COST_WITH_MIN_ROAS`; rejected otherwise. Meta enforces its own upper bound server-side. | [optional] |
|
|
@@ -68,6 +70,8 @@ instance = Zernio::CtwaAdRequestBody.new(
|
|
|
68
70
|
placements: null,
|
|
69
71
|
advantage_audience: null,
|
|
70
72
|
objective: null,
|
|
73
|
+
status: null,
|
|
74
|
+
campaign_status: null,
|
|
71
75
|
bid_strategy: null,
|
|
72
76
|
bid_amount: null,
|
|
73
77
|
roas_average_floor: null,
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
| Name | Type | Description | Notes |
|
|
6
6
|
| ---- | ---- | ----------- | ----- |
|
|
7
|
-
| **url** | **String** |
|
|
8
|
-
| **
|
|
7
|
+
| **url** | **String** | Public URL of the video to upload. Provide either `url` or `id`. | [optional] |
|
|
8
|
+
| **id** | **String** | Reuse a video already uploaded to this ad account (list them with GET /v1/ads/videos) instead of re-uploading. Wins over `url`. Provide either `url` or `id`. | [optional] |
|
|
9
|
+
| **thumbnail_url** | **String** | OPTIONAL: when omitted, the poster is auto-generated from Meta's own preferred video thumbnail. When Meta produces no candidate the request fails with a 502 platform_error (reason: video_thumbnail_unavailable). | [optional] |
|
|
9
10
|
|
|
10
11
|
## Example
|
|
11
12
|
|
|
@@ -14,6 +15,7 @@ require 'zernio-sdk'
|
|
|
14
15
|
|
|
15
16
|
instance = Zernio::CtwaAdRequestBodyCreativesInnerVideo.new(
|
|
16
17
|
url: null,
|
|
18
|
+
id: null,
|
|
17
19
|
thumbnail_url: null
|
|
18
20
|
)
|
|
19
21
|
```
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
| Name | Type | Description | Notes |
|
|
6
6
|
| ---- | ---- | ----------- | ----- |
|
|
7
|
-
| **url** | **String** |
|
|
8
|
-
| **
|
|
7
|
+
| **url** | **String** | Public URL of the video to upload. Provide either `url` or `id`. | [optional] |
|
|
8
|
+
| **id** | **String** | Reuse a video already uploaded to this ad account (list them with GET /v1/ads/videos) instead of re-uploading. Wins over `url`. Provide either `url` or `id`. | [optional] |
|
|
9
|
+
| **thumbnail_url** | **String** | OPTIONAL: when omitted, the poster is auto-generated from Meta's own preferred video thumbnail. When Meta produces no candidate the request fails with a 502 platform_error (reason: video_thumbnail_unavailable) — retry, or supply this field to control the poster frame exactly. | [optional] |
|
|
9
10
|
|
|
10
11
|
## Example
|
|
11
12
|
|
|
@@ -14,6 +15,7 @@ require 'zernio-sdk'
|
|
|
14
15
|
|
|
15
16
|
instance = Zernio::CtwaAdRequestBodyVideo.new(
|
|
16
17
|
url: null,
|
|
18
|
+
id: null,
|
|
17
19
|
thumbnail_url: null
|
|
18
20
|
)
|
|
19
21
|
```
|
|
@@ -594,7 +594,7 @@ module Zernio
|
|
|
594
594
|
end
|
|
595
595
|
|
|
596
596
|
# Connect WhatsApp via credentials
|
|
597
|
-
# Connect a WhatsApp Business Account by providing Meta credentials directly. This is the headless alternative to the Embedded Signup browser flow. To get the required credentials: 1. Go to Meta Business Suite (business.facebook.com) 2. Create or select a WhatsApp Business Account 3. In Business Settings > System Users, create a System User 4. Assign it the whatsapp_business_management and whatsapp_business_messaging permissions 5. Generate a permanent access token 6. Get the WABA ID from WhatsApp Manager > Account Tools > Phone Numbers 7. Get the Phone Number ID from the same page (click on the number)
|
|
597
|
+
# Connect a WhatsApp Business Account by providing Meta credentials directly. This is the headless alternative to the Embedded Signup browser flow. To get the required credentials: 1. Go to Meta Business Suite (business.facebook.com) 2. Create or select a WhatsApp Business Account 3. In Business Settings > System Users, create a System User 4. Assign it the whatsapp_business_management and whatsapp_business_messaging permissions 5. Generate a permanent access token 6. Get the WABA ID from WhatsApp Manager > Account Tools > Phone Numbers 7. Get the Phone Number ID from the same page (click on the number) Warning: connecting subscribes your own Meta app to this WABA with an override callback that redirects its webhook delivery to Zernio. This WABA's events stop reaching any callback URL you had configured before, immediately and with no overlap window. Do not unsubscribe your app from the WABA afterward: that also cuts off Zernio's delivery, and recovery requires calling this endpoint again.
|
|
598
598
|
# @param connect_whats_app_credentials_request [ConnectWhatsAppCredentialsRequest]
|
|
599
599
|
# @param [Hash] opts the optional parameters
|
|
600
600
|
# @return [ConnectWhatsAppCredentials200Response]
|
|
@@ -604,7 +604,7 @@ module Zernio
|
|
|
604
604
|
end
|
|
605
605
|
|
|
606
606
|
# Connect WhatsApp via credentials
|
|
607
|
-
# Connect a WhatsApp Business Account by providing Meta credentials directly. This is the headless alternative to the Embedded Signup browser flow. To get the required credentials: 1. Go to Meta Business Suite (business.facebook.com) 2. Create or select a WhatsApp Business Account 3. In Business Settings > System Users, create a System User 4. Assign it the whatsapp_business_management and whatsapp_business_messaging permissions 5. Generate a permanent access token 6. Get the WABA ID from WhatsApp Manager > Account Tools > Phone Numbers 7. Get the Phone Number ID from the same page (click on the number)
|
|
607
|
+
# Connect a WhatsApp Business Account by providing Meta credentials directly. This is the headless alternative to the Embedded Signup browser flow. To get the required credentials: 1. Go to Meta Business Suite (business.facebook.com) 2. Create or select a WhatsApp Business Account 3. In Business Settings > System Users, create a System User 4. Assign it the whatsapp_business_management and whatsapp_business_messaging permissions 5. Generate a permanent access token 6. Get the WABA ID from WhatsApp Manager > Account Tools > Phone Numbers 7. Get the Phone Number ID from the same page (click on the number) Warning: connecting subscribes your own Meta app to this WABA with an override callback that redirects its webhook delivery to Zernio. This WABA's events stop reaching any callback URL you had configured before, immediately and with no overlap window. Do not unsubscribe your app from the WABA afterward: that also cuts off Zernio's delivery, and recovery requires calling this endpoint again.
|
|
608
608
|
# @param connect_whats_app_credentials_request [ConnectWhatsAppCredentialsRequest]
|
|
609
609
|
# @param [Hash] opts the optional parameters
|
|
610
610
|
# @return [Array<(ConnectWhatsAppCredentials200Response, Integer, Hash)>] ConnectWhatsAppCredentials200Response data, response status code and response headers
|
|
@@ -20,6 +20,9 @@ module Zernio
|
|
|
20
20
|
# Present when the account was created but Meta rejected the Cloud API registration. The number cannot send messages until this is resolved.
|
|
21
21
|
attr_accessor :registration_warning
|
|
22
22
|
|
|
23
|
+
# Present when the WABA webhook subscription (with the Zernio override callback) succeeded. Explains the delivery cutover and warns against unsubscribing the app from the WABA afterward.
|
|
24
|
+
attr_accessor :webhook_notice
|
|
25
|
+
|
|
23
26
|
attr_accessor :account
|
|
24
27
|
|
|
25
28
|
# Attribute mapping from ruby-style variable name to JSON key.
|
|
@@ -27,6 +30,7 @@ module Zernio
|
|
|
27
30
|
{
|
|
28
31
|
:'message' => :'message',
|
|
29
32
|
:'registration_warning' => :'registrationWarning',
|
|
33
|
+
:'webhook_notice' => :'webhookNotice',
|
|
30
34
|
:'account' => :'account'
|
|
31
35
|
}
|
|
32
36
|
end
|
|
@@ -46,6 +50,7 @@ module Zernio
|
|
|
46
50
|
{
|
|
47
51
|
:'message' => :'String',
|
|
48
52
|
:'registration_warning' => :'String',
|
|
53
|
+
:'webhook_notice' => :'String',
|
|
49
54
|
:'account' => :'ConnectWhatsAppCredentials200ResponseAccount'
|
|
50
55
|
}
|
|
51
56
|
end
|
|
@@ -80,6 +85,10 @@ module Zernio
|
|
|
80
85
|
self.registration_warning = attributes[:'registration_warning']
|
|
81
86
|
end
|
|
82
87
|
|
|
88
|
+
if attributes.key?(:'webhook_notice')
|
|
89
|
+
self.webhook_notice = attributes[:'webhook_notice']
|
|
90
|
+
end
|
|
91
|
+
|
|
83
92
|
if attributes.key?(:'account')
|
|
84
93
|
self.account = attributes[:'account']
|
|
85
94
|
end
|
|
@@ -107,6 +116,7 @@ module Zernio
|
|
|
107
116
|
self.class == o.class &&
|
|
108
117
|
message == o.message &&
|
|
109
118
|
registration_warning == o.registration_warning &&
|
|
119
|
+
webhook_notice == o.webhook_notice &&
|
|
110
120
|
account == o.account
|
|
111
121
|
end
|
|
112
122
|
|
|
@@ -119,7 +129,7 @@ module Zernio
|
|
|
119
129
|
# Calculates hash code according to all attributes.
|
|
120
130
|
# @return [Integer] Hash code
|
|
121
131
|
def hash
|
|
122
|
-
[message, registration_warning, account].hash
|
|
132
|
+
[message, registration_warning, webhook_notice, account].hash
|
|
123
133
|
end
|
|
124
134
|
|
|
125
135
|
# Builds the object from hash
|
|
@@ -28,7 +28,13 @@ module Zernio
|
|
|
28
28
|
attr_accessor :is_active
|
|
29
29
|
|
|
30
30
|
# The connected phone number
|
|
31
|
-
attr_accessor :
|
|
31
|
+
attr_accessor :phone_number
|
|
32
|
+
|
|
33
|
+
# Meta-verified business name for the phone number
|
|
34
|
+
attr_accessor :verified_name
|
|
35
|
+
|
|
36
|
+
# Meta quality rating for the phone number (e.g. GREEN, YELLOW, RED, UNKNOWN)
|
|
37
|
+
attr_accessor :quality_rating
|
|
32
38
|
|
|
33
39
|
class EnumAttributeValidator
|
|
34
40
|
attr_reader :datatype
|
|
@@ -60,7 +66,9 @@ module Zernio
|
|
|
60
66
|
:'username' => :'username',
|
|
61
67
|
:'display_name' => :'displayName',
|
|
62
68
|
:'is_active' => :'isActive',
|
|
63
|
-
:'
|
|
69
|
+
:'phone_number' => :'phoneNumber',
|
|
70
|
+
:'verified_name' => :'verifiedName',
|
|
71
|
+
:'quality_rating' => :'qualityRating'
|
|
64
72
|
}
|
|
65
73
|
end
|
|
66
74
|
|
|
@@ -82,7 +90,9 @@ module Zernio
|
|
|
82
90
|
:'username' => :'String',
|
|
83
91
|
:'display_name' => :'String',
|
|
84
92
|
:'is_active' => :'Boolean',
|
|
85
|
-
:'
|
|
93
|
+
:'phone_number' => :'String',
|
|
94
|
+
:'verified_name' => :'String',
|
|
95
|
+
:'quality_rating' => :'String'
|
|
86
96
|
}
|
|
87
97
|
end
|
|
88
98
|
|
|
@@ -128,8 +138,16 @@ module Zernio
|
|
|
128
138
|
self.is_active = attributes[:'is_active']
|
|
129
139
|
end
|
|
130
140
|
|
|
131
|
-
if attributes.key?(:'
|
|
132
|
-
self.
|
|
141
|
+
if attributes.key?(:'phone_number')
|
|
142
|
+
self.phone_number = attributes[:'phone_number']
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
if attributes.key?(:'verified_name')
|
|
146
|
+
self.verified_name = attributes[:'verified_name']
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
if attributes.key?(:'quality_rating')
|
|
150
|
+
self.quality_rating = attributes[:'quality_rating']
|
|
133
151
|
end
|
|
134
152
|
end
|
|
135
153
|
|
|
@@ -170,7 +188,9 @@ module Zernio
|
|
|
170
188
|
username == o.username &&
|
|
171
189
|
display_name == o.display_name &&
|
|
172
190
|
is_active == o.is_active &&
|
|
173
|
-
|
|
191
|
+
phone_number == o.phone_number &&
|
|
192
|
+
verified_name == o.verified_name &&
|
|
193
|
+
quality_rating == o.quality_rating
|
|
174
194
|
end
|
|
175
195
|
|
|
176
196
|
# @see the `==` method
|
|
@@ -182,7 +202,7 @@ module Zernio
|
|
|
182
202
|
# Calculates hash code according to all attributes.
|
|
183
203
|
# @return [Integer] Hash code
|
|
184
204
|
def hash
|
|
185
|
-
[account_id, platform, username, display_name, is_active,
|
|
205
|
+
[account_id, platform, username, display_name, is_active, phone_number, verified_name, quality_rating].hash
|
|
186
206
|
end
|
|
187
207
|
|
|
188
208
|
# Builds the object from hash
|
|
@@ -38,7 +38,7 @@ module Zernio
|
|
|
38
38
|
# Multi-creative shape: N CTWA ads under one campaign + one ad set, sharing budget and targeting. Mutually exclusive with the top-level single-creative fields (`headline` / `body` / `imageUrl` / `video`). Each entry must supply its own headline, body, and exactly one of `imageUrl` / `video`.
|
|
39
39
|
attr_accessor :creatives
|
|
40
40
|
|
|
41
|
-
# Attach the creatives to this EXISTING messaging ad set instead of building a campaign, so the ad set keeps its learning phase. It then owns budget, targeting and schedule, so `budgetAmount`, `budgetType`, `endDate`, `objective`, `countries`, `interests` and `
|
|
41
|
+
# Attach the creatives to this EXISTING messaging ad set instead of building a campaign, so the ad set keeps its learning phase. It then owns budget, targeting and schedule, so `budgetAmount`, `budgetType`, `endDate`, `objective`, `countries`, `interests`, `audienceId` and `campaignStatus` are rejected with a 400 alongside it. Its `destination_type` must match the ad's destination.
|
|
42
42
|
attr_accessor :ad_set_id
|
|
43
43
|
|
|
44
44
|
# Budget amount in the ad account's currency major units (e.g. dollars for USD, not cents). Must be > 0. Required unless `adSetId` is set, where the ad set owns it.
|
|
@@ -88,6 +88,12 @@ module Zernio
|
|
|
88
88
|
# Defaults to `OUTCOME_ENGAGEMENT`. `OUTCOME_SALES` and `OUTCOME_LEADS` require additional account configuration (Dataset linked to the WABA for sales) and may be rejected by Meta if missing.
|
|
89
89
|
attr_accessor :objective
|
|
90
90
|
|
|
91
|
+
# Ad-level status. Defaults to `ACTIVE`. `PAUSED` skips activating the newly created ad(s) after Meta accepts them.
|
|
92
|
+
attr_accessor :status
|
|
93
|
+
|
|
94
|
+
# Campaign-level status, same semantics as `POST /v1/ads/create`. Defaults to `ACTIVE`. `PAUSED` holds activation at the campaign so it never spends before the advertiser reviews it, while the ad set and ad still switch on (one resume call brings the whole hierarchy live). Only meaningful when a new campaign is being created; rejected with a 400 alongside `adSetId` (the attach shape reuses an existing campaign).
|
|
95
|
+
attr_accessor :campaign_status
|
|
96
|
+
|
|
91
97
|
# Meta bid strategy applied to the shared ad set. Defaults to `LOWEST_COST_WITHOUT_CAP` (auto-bid) when omitted. `LOWEST_COST_WITH_BID_CAP` and `COST_CAP` require `bidAmount`. `LOWEST_COST_WITH_MIN_ROAS` requires `roasAverageFloor`. CTWA's `optimization_goal` is fixed to `CONVERSATIONS`, but the bid strategy is independent.
|
|
92
98
|
attr_accessor :bid_strategy
|
|
93
99
|
|
|
@@ -160,6 +166,8 @@ module Zernio
|
|
|
160
166
|
:'placements' => :'placements',
|
|
161
167
|
:'advantage_audience' => :'advantageAudience',
|
|
162
168
|
:'objective' => :'objective',
|
|
169
|
+
:'status' => :'status',
|
|
170
|
+
:'campaign_status' => :'campaignStatus',
|
|
163
171
|
:'bid_strategy' => :'bidStrategy',
|
|
164
172
|
:'bid_amount' => :'bidAmount',
|
|
165
173
|
:'roas_average_floor' => :'roasAverageFloor',
|
|
@@ -209,6 +217,8 @@ module Zernio
|
|
|
209
217
|
:'placements' => :'CtwaAdRequestBodyPlacements',
|
|
210
218
|
:'advantage_audience' => :'Integer',
|
|
211
219
|
:'objective' => :'String',
|
|
220
|
+
:'status' => :'String',
|
|
221
|
+
:'campaign_status' => :'String',
|
|
212
222
|
:'bid_strategy' => :'String',
|
|
213
223
|
:'bid_amount' => :'Float',
|
|
214
224
|
:'roas_average_floor' => :'Float',
|
|
@@ -374,6 +384,14 @@ module Zernio
|
|
|
374
384
|
self.objective = attributes[:'objective']
|
|
375
385
|
end
|
|
376
386
|
|
|
387
|
+
if attributes.key?(:'status')
|
|
388
|
+
self.status = attributes[:'status']
|
|
389
|
+
end
|
|
390
|
+
|
|
391
|
+
if attributes.key?(:'campaign_status')
|
|
392
|
+
self.campaign_status = attributes[:'campaign_status']
|
|
393
|
+
end
|
|
394
|
+
|
|
377
395
|
if attributes.key?(:'bid_strategy')
|
|
378
396
|
self.bid_strategy = attributes[:'bid_strategy']
|
|
379
397
|
end
|
|
@@ -521,6 +539,10 @@ module Zernio
|
|
|
521
539
|
return false unless advantage_audience_validator.valid?(@advantage_audience)
|
|
522
540
|
objective_validator = EnumAttributeValidator.new('String', ["OUTCOME_ENGAGEMENT", "OUTCOME_SALES", "OUTCOME_LEADS"])
|
|
523
541
|
return false unless objective_validator.valid?(@objective)
|
|
542
|
+
status_validator = EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
543
|
+
return false unless status_validator.valid?(@status)
|
|
544
|
+
campaign_status_validator = EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
545
|
+
return false unless campaign_status_validator.valid?(@campaign_status)
|
|
524
546
|
bid_strategy_validator = EnumAttributeValidator.new('String', ["LOWEST_COST_WITHOUT_CAP", "LOWEST_COST_WITH_BID_CAP", "COST_CAP", "LOWEST_COST_WITH_MIN_ROAS"])
|
|
525
547
|
return false unless bid_strategy_validator.valid?(@bid_strategy)
|
|
526
548
|
return false if !@dsa_beneficiary.nil? && @dsa_beneficiary.to_s.length > 100
|
|
@@ -702,6 +724,26 @@ module Zernio
|
|
|
702
724
|
@objective = objective
|
|
703
725
|
end
|
|
704
726
|
|
|
727
|
+
# Custom attribute writer method checking allowed values (enum).
|
|
728
|
+
# @param [Object] status Object to be assigned
|
|
729
|
+
def status=(status)
|
|
730
|
+
validator = EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
731
|
+
unless validator.valid?(status)
|
|
732
|
+
fail ArgumentError, "invalid value for \"status\", must be one of #{validator.allowable_values}."
|
|
733
|
+
end
|
|
734
|
+
@status = status
|
|
735
|
+
end
|
|
736
|
+
|
|
737
|
+
# Custom attribute writer method checking allowed values (enum).
|
|
738
|
+
# @param [Object] campaign_status Object to be assigned
|
|
739
|
+
def campaign_status=(campaign_status)
|
|
740
|
+
validator = EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
741
|
+
unless validator.valid?(campaign_status)
|
|
742
|
+
fail ArgumentError, "invalid value for \"campaign_status\", must be one of #{validator.allowable_values}."
|
|
743
|
+
end
|
|
744
|
+
@campaign_status = campaign_status
|
|
745
|
+
end
|
|
746
|
+
|
|
705
747
|
# Custom attribute writer method checking allowed values (enum).
|
|
706
748
|
# @param [Object] bid_strategy Object to be assigned
|
|
707
749
|
def bid_strategy=(bid_strategy)
|
|
@@ -791,6 +833,8 @@ module Zernio
|
|
|
791
833
|
placements == o.placements &&
|
|
792
834
|
advantage_audience == o.advantage_audience &&
|
|
793
835
|
objective == o.objective &&
|
|
836
|
+
status == o.status &&
|
|
837
|
+
campaign_status == o.campaign_status &&
|
|
794
838
|
bid_strategy == o.bid_strategy &&
|
|
795
839
|
bid_amount == o.bid_amount &&
|
|
796
840
|
roas_average_floor == o.roas_average_floor &&
|
|
@@ -809,7 +853,7 @@ module Zernio
|
|
|
809
853
|
# Calculates hash code according to all attributes.
|
|
810
854
|
# @return [Integer] Hash code
|
|
811
855
|
def hash
|
|
812
|
-
[account_id, ad_account_id, name, headline, body, image_url, video, creatives, ad_set_id, budget_amount, budget_type, currency, end_date, countries, cities, regions, zips, metros, custom_locations, age_min, age_max, interests, audience_id, placements, advantage_audience, objective, bid_strategy, bid_amount, roas_average_floor, dsa_beneficiary, dsa_payor, phone_number, link_url].hash
|
|
856
|
+
[account_id, ad_account_id, name, headline, body, image_url, video, creatives, ad_set_id, budget_amount, budget_type, currency, end_date, countries, cities, regions, zips, metros, custom_locations, age_min, age_max, interests, audience_id, placements, advantage_audience, objective, status, campaign_status, bid_strategy, bid_amount, roas_average_floor, dsa_beneficiary, dsa_payor, phone_number, link_url].hash
|
|
813
857
|
end
|
|
814
858
|
|
|
815
859
|
# Builds the object from hash
|
|
@@ -38,7 +38,7 @@ module Zernio
|
|
|
38
38
|
# Multi-creative shape: N CTWA ads under one campaign + one ad set, sharing budget and targeting. Mutually exclusive with the top-level single-creative fields (`headline` / `body` / `imageUrl` / `video`). Each entry must supply its own headline, body, and exactly one of `imageUrl` / `video`.
|
|
39
39
|
attr_accessor :creatives
|
|
40
40
|
|
|
41
|
-
# Attach the creatives to this EXISTING messaging ad set instead of building a campaign, so the ad set keeps its learning phase. It then owns budget, targeting and schedule, so `budgetAmount`, `budgetType`, `endDate`, `objective`, `countries`, `interests` and `
|
|
41
|
+
# Attach the creatives to this EXISTING messaging ad set instead of building a campaign, so the ad set keeps its learning phase. It then owns budget, targeting and schedule, so `budgetAmount`, `budgetType`, `endDate`, `objective`, `countries`, `interests`, `audienceId` and `campaignStatus` are rejected with a 400 alongside it. Its `destination_type` must match the ad's destination.
|
|
42
42
|
attr_accessor :ad_set_id
|
|
43
43
|
|
|
44
44
|
# Budget amount in the ad account's currency major units (e.g. dollars for USD, not cents). Must be > 0. Required unless `adSetId` is set, where the ad set owns it.
|
|
@@ -88,6 +88,12 @@ module Zernio
|
|
|
88
88
|
# Defaults to `OUTCOME_ENGAGEMENT`. `OUTCOME_SALES` and `OUTCOME_LEADS` require additional account configuration (Dataset linked to the WABA for sales) and may be rejected by Meta if missing.
|
|
89
89
|
attr_accessor :objective
|
|
90
90
|
|
|
91
|
+
# Ad-level status. Defaults to `ACTIVE`. `PAUSED` skips activating the newly created ad(s) after Meta accepts them.
|
|
92
|
+
attr_accessor :status
|
|
93
|
+
|
|
94
|
+
# Campaign-level status, same semantics as `POST /v1/ads/create`. Defaults to `ACTIVE`. `PAUSED` holds activation at the campaign so it never spends before the advertiser reviews it, while the ad set and ad still switch on (one resume call brings the whole hierarchy live). Only meaningful when a new campaign is being created; rejected with a 400 alongside `adSetId` (the attach shape reuses an existing campaign).
|
|
95
|
+
attr_accessor :campaign_status
|
|
96
|
+
|
|
91
97
|
# Meta bid strategy applied to the shared ad set. Defaults to `LOWEST_COST_WITHOUT_CAP` (auto-bid) when omitted. `LOWEST_COST_WITH_BID_CAP` and `COST_CAP` require `bidAmount`. `LOWEST_COST_WITH_MIN_ROAS` requires `roasAverageFloor`. CTWA's `optimization_goal` is fixed to `CONVERSATIONS`, but the bid strategy is independent.
|
|
92
98
|
attr_accessor :bid_strategy
|
|
93
99
|
|
|
@@ -157,6 +163,8 @@ module Zernio
|
|
|
157
163
|
:'placements' => :'placements',
|
|
158
164
|
:'advantage_audience' => :'advantageAudience',
|
|
159
165
|
:'objective' => :'objective',
|
|
166
|
+
:'status' => :'status',
|
|
167
|
+
:'campaign_status' => :'campaignStatus',
|
|
160
168
|
:'bid_strategy' => :'bidStrategy',
|
|
161
169
|
:'bid_amount' => :'bidAmount',
|
|
162
170
|
:'roas_average_floor' => :'roasAverageFloor',
|
|
@@ -205,6 +213,8 @@ module Zernio
|
|
|
205
213
|
:'placements' => :'CtwaAdRequestBodyPlacements',
|
|
206
214
|
:'advantage_audience' => :'Integer',
|
|
207
215
|
:'objective' => :'String',
|
|
216
|
+
:'status' => :'String',
|
|
217
|
+
:'campaign_status' => :'String',
|
|
208
218
|
:'bid_strategy' => :'String',
|
|
209
219
|
:'bid_amount' => :'Float',
|
|
210
220
|
:'roas_average_floor' => :'Float',
|
|
@@ -369,6 +379,14 @@ module Zernio
|
|
|
369
379
|
self.objective = attributes[:'objective']
|
|
370
380
|
end
|
|
371
381
|
|
|
382
|
+
if attributes.key?(:'status')
|
|
383
|
+
self.status = attributes[:'status']
|
|
384
|
+
end
|
|
385
|
+
|
|
386
|
+
if attributes.key?(:'campaign_status')
|
|
387
|
+
self.campaign_status = attributes[:'campaign_status']
|
|
388
|
+
end
|
|
389
|
+
|
|
372
390
|
if attributes.key?(:'bid_strategy')
|
|
373
391
|
self.bid_strategy = attributes[:'bid_strategy']
|
|
374
392
|
end
|
|
@@ -506,6 +524,10 @@ module Zernio
|
|
|
506
524
|
return false unless advantage_audience_validator.valid?(@advantage_audience)
|
|
507
525
|
objective_validator = EnumAttributeValidator.new('String', ["OUTCOME_ENGAGEMENT", "OUTCOME_SALES", "OUTCOME_LEADS"])
|
|
508
526
|
return false unless objective_validator.valid?(@objective)
|
|
527
|
+
status_validator = EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
528
|
+
return false unless status_validator.valid?(@status)
|
|
529
|
+
campaign_status_validator = EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
530
|
+
return false unless campaign_status_validator.valid?(@campaign_status)
|
|
509
531
|
bid_strategy_validator = EnumAttributeValidator.new('String', ["LOWEST_COST_WITHOUT_CAP", "LOWEST_COST_WITH_BID_CAP", "COST_CAP", "LOWEST_COST_WITH_MIN_ROAS"])
|
|
510
532
|
return false unless bid_strategy_validator.valid?(@bid_strategy)
|
|
511
533
|
return false if !@dsa_beneficiary.nil? && @dsa_beneficiary.to_s.length > 100
|
|
@@ -688,6 +710,26 @@ module Zernio
|
|
|
688
710
|
@objective = objective
|
|
689
711
|
end
|
|
690
712
|
|
|
713
|
+
# Custom attribute writer method checking allowed values (enum).
|
|
714
|
+
# @param [Object] status Object to be assigned
|
|
715
|
+
def status=(status)
|
|
716
|
+
validator = EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
717
|
+
unless validator.valid?(status)
|
|
718
|
+
fail ArgumentError, "invalid value for \"status\", must be one of #{validator.allowable_values}."
|
|
719
|
+
end
|
|
720
|
+
@status = status
|
|
721
|
+
end
|
|
722
|
+
|
|
723
|
+
# Custom attribute writer method checking allowed values (enum).
|
|
724
|
+
# @param [Object] campaign_status Object to be assigned
|
|
725
|
+
def campaign_status=(campaign_status)
|
|
726
|
+
validator = EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
727
|
+
unless validator.valid?(campaign_status)
|
|
728
|
+
fail ArgumentError, "invalid value for \"campaign_status\", must be one of #{validator.allowable_values}."
|
|
729
|
+
end
|
|
730
|
+
@campaign_status = campaign_status
|
|
731
|
+
end
|
|
732
|
+
|
|
691
733
|
# Custom attribute writer method checking allowed values (enum).
|
|
692
734
|
# @param [Object] bid_strategy Object to be assigned
|
|
693
735
|
def bid_strategy=(bid_strategy)
|
|
@@ -767,6 +809,8 @@ module Zernio
|
|
|
767
809
|
placements == o.placements &&
|
|
768
810
|
advantage_audience == o.advantage_audience &&
|
|
769
811
|
objective == o.objective &&
|
|
812
|
+
status == o.status &&
|
|
813
|
+
campaign_status == o.campaign_status &&
|
|
770
814
|
bid_strategy == o.bid_strategy &&
|
|
771
815
|
bid_amount == o.bid_amount &&
|
|
772
816
|
roas_average_floor == o.roas_average_floor &&
|
|
@@ -784,7 +828,7 @@ module Zernio
|
|
|
784
828
|
# Calculates hash code according to all attributes.
|
|
785
829
|
# @return [Integer] Hash code
|
|
786
830
|
def hash
|
|
787
|
-
[account_id, ad_account_id, name, headline, body, image_url, video, creatives, ad_set_id, budget_amount, budget_type, currency, end_date, countries, cities, regions, zips, metros, custom_locations, age_min, age_max, interests, audience_id, placements, advantage_audience, objective, bid_strategy, bid_amount, roas_average_floor, dsa_beneficiary, dsa_payor, destination].hash
|
|
831
|
+
[account_id, ad_account_id, name, headline, body, image_url, video, creatives, ad_set_id, budget_amount, budget_type, currency, end_date, countries, cities, regions, zips, metros, custom_locations, age_min, age_max, interests, audience_id, placements, advantage_audience, objective, status, campaign_status, bid_strategy, bid_amount, roas_average_floor, dsa_beneficiary, dsa_payor, destination].hash
|
|
788
832
|
end
|
|
789
833
|
|
|
790
834
|
# Builds the object from hash
|
|
@@ -39,7 +39,7 @@ module Zernio
|
|
|
39
39
|
# Multi-creative shape: N CTWA ads under one campaign + one ad set, sharing budget and targeting. Mutually exclusive with the top-level single-creative fields (`headline` / `body` / `imageUrl` / `video`). Each entry must supply its own headline, body, and exactly one of `imageUrl` / `video`.
|
|
40
40
|
attr_accessor :creatives
|
|
41
41
|
|
|
42
|
-
# Attach the creatives to this EXISTING messaging ad set instead of building a campaign, so the ad set keeps its learning phase. It then owns budget, targeting and schedule, so `budgetAmount`, `budgetType`, `endDate`, `objective`, `countries`, `interests` and `
|
|
42
|
+
# Attach the creatives to this EXISTING messaging ad set instead of building a campaign, so the ad set keeps its learning phase. It then owns budget, targeting and schedule, so `budgetAmount`, `budgetType`, `endDate`, `objective`, `countries`, `interests`, `audienceId` and `campaignStatus` are rejected with a 400 alongside it. Its `destination_type` must match the ad's destination.
|
|
43
43
|
attr_accessor :ad_set_id
|
|
44
44
|
|
|
45
45
|
# Budget amount in the ad account's currency major units (e.g. dollars for USD, not cents). Must be > 0. Required unless `adSetId` is set, where the ad set owns it.
|
|
@@ -89,6 +89,12 @@ module Zernio
|
|
|
89
89
|
# Defaults to `OUTCOME_ENGAGEMENT`. `OUTCOME_SALES` and `OUTCOME_LEADS` require additional account configuration (Dataset linked to the WABA for sales) and may be rejected by Meta if missing.
|
|
90
90
|
attr_accessor :objective
|
|
91
91
|
|
|
92
|
+
# Ad-level status. Defaults to `ACTIVE`. `PAUSED` skips activating the newly created ad(s) after Meta accepts them.
|
|
93
|
+
attr_accessor :status
|
|
94
|
+
|
|
95
|
+
# Campaign-level status, same semantics as `POST /v1/ads/create`. Defaults to `ACTIVE`. `PAUSED` holds activation at the campaign so it never spends before the advertiser reviews it, while the ad set and ad still switch on (one resume call brings the whole hierarchy live). Only meaningful when a new campaign is being created; rejected with a 400 alongside `adSetId` (the attach shape reuses an existing campaign).
|
|
96
|
+
attr_accessor :campaign_status
|
|
97
|
+
|
|
92
98
|
# Meta bid strategy applied to the shared ad set. Defaults to `LOWEST_COST_WITHOUT_CAP` (auto-bid) when omitted. `LOWEST_COST_WITH_BID_CAP` and `COST_CAP` require `bidAmount`. `LOWEST_COST_WITH_MIN_ROAS` requires `roasAverageFloor`. CTWA's `optimization_goal` is fixed to `CONVERSATIONS`, but the bid strategy is independent.
|
|
93
99
|
attr_accessor :bid_strategy
|
|
94
100
|
|
|
@@ -155,6 +161,8 @@ module Zernio
|
|
|
155
161
|
:'placements' => :'placements',
|
|
156
162
|
:'advantage_audience' => :'advantageAudience',
|
|
157
163
|
:'objective' => :'objective',
|
|
164
|
+
:'status' => :'status',
|
|
165
|
+
:'campaign_status' => :'campaignStatus',
|
|
158
166
|
:'bid_strategy' => :'bidStrategy',
|
|
159
167
|
:'bid_amount' => :'bidAmount',
|
|
160
168
|
:'roas_average_floor' => :'roasAverageFloor',
|
|
@@ -202,6 +210,8 @@ module Zernio
|
|
|
202
210
|
:'placements' => :'CtwaAdRequestBodyPlacements',
|
|
203
211
|
:'advantage_audience' => :'Integer',
|
|
204
212
|
:'objective' => :'String',
|
|
213
|
+
:'status' => :'String',
|
|
214
|
+
:'campaign_status' => :'String',
|
|
205
215
|
:'bid_strategy' => :'String',
|
|
206
216
|
:'bid_amount' => :'Float',
|
|
207
217
|
:'roas_average_floor' => :'Float',
|
|
@@ -358,6 +368,14 @@ module Zernio
|
|
|
358
368
|
self.objective = attributes[:'objective']
|
|
359
369
|
end
|
|
360
370
|
|
|
371
|
+
if attributes.key?(:'status')
|
|
372
|
+
self.status = attributes[:'status']
|
|
373
|
+
end
|
|
374
|
+
|
|
375
|
+
if attributes.key?(:'campaign_status')
|
|
376
|
+
self.campaign_status = attributes[:'campaign_status']
|
|
377
|
+
end
|
|
378
|
+
|
|
361
379
|
if attributes.key?(:'bid_strategy')
|
|
362
380
|
self.bid_strategy = attributes[:'bid_strategy']
|
|
363
381
|
end
|
|
@@ -485,6 +503,10 @@ module Zernio
|
|
|
485
503
|
return false unless advantage_audience_validator.valid?(@advantage_audience)
|
|
486
504
|
objective_validator = EnumAttributeValidator.new('String', ["OUTCOME_ENGAGEMENT", "OUTCOME_SALES", "OUTCOME_LEADS"])
|
|
487
505
|
return false unless objective_validator.valid?(@objective)
|
|
506
|
+
status_validator = EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
507
|
+
return false unless status_validator.valid?(@status)
|
|
508
|
+
campaign_status_validator = EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
509
|
+
return false unless campaign_status_validator.valid?(@campaign_status)
|
|
488
510
|
bid_strategy_validator = EnumAttributeValidator.new('String', ["LOWEST_COST_WITHOUT_CAP", "LOWEST_COST_WITH_BID_CAP", "COST_CAP", "LOWEST_COST_WITH_MIN_ROAS"])
|
|
489
511
|
return false unless bid_strategy_validator.valid?(@bid_strategy)
|
|
490
512
|
return false if !@dsa_beneficiary.nil? && @dsa_beneficiary.to_s.length > 100
|
|
@@ -664,6 +686,26 @@ module Zernio
|
|
|
664
686
|
@objective = objective
|
|
665
687
|
end
|
|
666
688
|
|
|
689
|
+
# Custom attribute writer method checking allowed values (enum).
|
|
690
|
+
# @param [Object] status Object to be assigned
|
|
691
|
+
def status=(status)
|
|
692
|
+
validator = EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
693
|
+
unless validator.valid?(status)
|
|
694
|
+
fail ArgumentError, "invalid value for \"status\", must be one of #{validator.allowable_values}."
|
|
695
|
+
end
|
|
696
|
+
@status = status
|
|
697
|
+
end
|
|
698
|
+
|
|
699
|
+
# Custom attribute writer method checking allowed values (enum).
|
|
700
|
+
# @param [Object] campaign_status Object to be assigned
|
|
701
|
+
def campaign_status=(campaign_status)
|
|
702
|
+
validator = EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
703
|
+
unless validator.valid?(campaign_status)
|
|
704
|
+
fail ArgumentError, "invalid value for \"campaign_status\", must be one of #{validator.allowable_values}."
|
|
705
|
+
end
|
|
706
|
+
@campaign_status = campaign_status
|
|
707
|
+
end
|
|
708
|
+
|
|
667
709
|
# Custom attribute writer method checking allowed values (enum).
|
|
668
710
|
# @param [Object] bid_strategy Object to be assigned
|
|
669
711
|
def bid_strategy=(bid_strategy)
|
|
@@ -733,6 +775,8 @@ module Zernio
|
|
|
733
775
|
placements == o.placements &&
|
|
734
776
|
advantage_audience == o.advantage_audience &&
|
|
735
777
|
objective == o.objective &&
|
|
778
|
+
status == o.status &&
|
|
779
|
+
campaign_status == o.campaign_status &&
|
|
736
780
|
bid_strategy == o.bid_strategy &&
|
|
737
781
|
bid_amount == o.bid_amount &&
|
|
738
782
|
roas_average_floor == o.roas_average_floor &&
|
|
@@ -749,7 +793,7 @@ module Zernio
|
|
|
749
793
|
# Calculates hash code according to all attributes.
|
|
750
794
|
# @return [Integer] Hash code
|
|
751
795
|
def hash
|
|
752
|
-
[account_id, ad_account_id, name, headline, body, image_url, video, creatives, ad_set_id, budget_amount, budget_type, currency, end_date, countries, cities, regions, zips, metros, custom_locations, age_min, age_max, interests, audience_id, placements, advantage_audience, objective, bid_strategy, bid_amount, roas_average_floor, dsa_beneficiary, dsa_payor].hash
|
|
796
|
+
[account_id, ad_account_id, name, headline, body, image_url, video, creatives, ad_set_id, budget_amount, budget_type, currency, end_date, countries, cities, regions, zips, metros, custom_locations, age_min, age_max, interests, audience_id, placements, advantage_audience, objective, status, campaign_status, bid_strategy, bid_amount, roas_average_floor, dsa_beneficiary, dsa_payor].hash
|
|
753
797
|
end
|
|
754
798
|
|
|
755
799
|
# Builds the object from hash
|
|
@@ -16,15 +16,20 @@ require 'time'
|
|
|
16
16
|
module Zernio
|
|
17
17
|
# Video creative. Mutually exclusive with this entry's `imageUrl`. Required if `imageUrl` is not supplied.
|
|
18
18
|
class CtwaAdRequestBodyCreativesInnerVideo < ApiModelBase
|
|
19
|
+
# Public URL of the video to upload. Provide either `url` or `id`.
|
|
19
20
|
attr_accessor :url
|
|
20
21
|
|
|
21
|
-
#
|
|
22
|
+
# Reuse a video already uploaded to this ad account (list them with GET /v1/ads/videos) instead of re-uploading. Wins over `url`. Provide either `url` or `id`.
|
|
23
|
+
attr_accessor :id
|
|
24
|
+
|
|
25
|
+
# OPTIONAL: when omitted, the poster is auto-generated from Meta's own preferred video thumbnail. When Meta produces no candidate the request fails with a 502 platform_error (reason: video_thumbnail_unavailable).
|
|
22
26
|
attr_accessor :thumbnail_url
|
|
23
27
|
|
|
24
28
|
# Attribute mapping from ruby-style variable name to JSON key.
|
|
25
29
|
def self.attribute_map
|
|
26
30
|
{
|
|
27
31
|
:'url' => :'url',
|
|
32
|
+
:'id' => :'id',
|
|
28
33
|
:'thumbnail_url' => :'thumbnailUrl'
|
|
29
34
|
}
|
|
30
35
|
end
|
|
@@ -43,6 +48,7 @@ module Zernio
|
|
|
43
48
|
def self.openapi_types
|
|
44
49
|
{
|
|
45
50
|
:'url' => :'String',
|
|
51
|
+
:'id' => :'String',
|
|
46
52
|
:'thumbnail_url' => :'String'
|
|
47
53
|
}
|
|
48
54
|
end
|
|
@@ -71,14 +77,14 @@ module Zernio
|
|
|
71
77
|
|
|
72
78
|
if attributes.key?(:'url')
|
|
73
79
|
self.url = attributes[:'url']
|
|
74
|
-
|
|
75
|
-
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
if attributes.key?(:'id')
|
|
83
|
+
self.id = attributes[:'id']
|
|
76
84
|
end
|
|
77
85
|
|
|
78
86
|
if attributes.key?(:'thumbnail_url')
|
|
79
87
|
self.thumbnail_url = attributes[:'thumbnail_url']
|
|
80
|
-
else
|
|
81
|
-
self.thumbnail_url = nil
|
|
82
88
|
end
|
|
83
89
|
end
|
|
84
90
|
|
|
@@ -87,14 +93,6 @@ module Zernio
|
|
|
87
93
|
def list_invalid_properties
|
|
88
94
|
warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
|
|
89
95
|
invalid_properties = Array.new
|
|
90
|
-
if @url.nil?
|
|
91
|
-
invalid_properties.push('invalid value for "url", url cannot be nil.')
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
if @thumbnail_url.nil?
|
|
95
|
-
invalid_properties.push('invalid value for "thumbnail_url", thumbnail_url cannot be nil.')
|
|
96
|
-
end
|
|
97
|
-
|
|
98
96
|
invalid_properties
|
|
99
97
|
end
|
|
100
98
|
|
|
@@ -102,37 +100,16 @@ module Zernio
|
|
|
102
100
|
# @return true if the model is valid
|
|
103
101
|
def valid?
|
|
104
102
|
warn '[DEPRECATED] the `valid?` method is obsolete'
|
|
105
|
-
return false if @url.nil?
|
|
106
|
-
return false if @thumbnail_url.nil?
|
|
107
103
|
true
|
|
108
104
|
end
|
|
109
105
|
|
|
110
|
-
# Custom attribute writer method with validation
|
|
111
|
-
# @param [Object] url Value to be assigned
|
|
112
|
-
def url=(url)
|
|
113
|
-
if url.nil?
|
|
114
|
-
fail ArgumentError, 'url cannot be nil'
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
@url = url
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
# Custom attribute writer method with validation
|
|
121
|
-
# @param [Object] thumbnail_url Value to be assigned
|
|
122
|
-
def thumbnail_url=(thumbnail_url)
|
|
123
|
-
if thumbnail_url.nil?
|
|
124
|
-
fail ArgumentError, 'thumbnail_url cannot be nil'
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
@thumbnail_url = thumbnail_url
|
|
128
|
-
end
|
|
129
|
-
|
|
130
106
|
# Checks equality by comparing each attribute.
|
|
131
107
|
# @param [Object] Object to be compared
|
|
132
108
|
def ==(o)
|
|
133
109
|
return true if self.equal?(o)
|
|
134
110
|
self.class == o.class &&
|
|
135
111
|
url == o.url &&
|
|
112
|
+
id == o.id &&
|
|
136
113
|
thumbnail_url == o.thumbnail_url
|
|
137
114
|
end
|
|
138
115
|
|
|
@@ -145,7 +122,7 @@ module Zernio
|
|
|
145
122
|
# Calculates hash code according to all attributes.
|
|
146
123
|
# @return [Integer] Hash code
|
|
147
124
|
def hash
|
|
148
|
-
[url, thumbnail_url].hash
|
|
125
|
+
[url, id, thumbnail_url].hash
|
|
149
126
|
end
|
|
150
127
|
|
|
151
128
|
# Builds the object from hash
|
|
@@ -16,15 +16,20 @@ require 'time'
|
|
|
16
16
|
module Zernio
|
|
17
17
|
# Video creative for single-creative shape. Mutually exclusive with `imageUrl` and with `creatives[]`. Required on the single-creative shape if `imageUrl` is not supplied.
|
|
18
18
|
class CtwaAdRequestBodyVideo < ApiModelBase
|
|
19
|
+
# Public URL of the video to upload. Provide either `url` or `id`.
|
|
19
20
|
attr_accessor :url
|
|
20
21
|
|
|
21
|
-
#
|
|
22
|
+
# Reuse a video already uploaded to this ad account (list them with GET /v1/ads/videos) instead of re-uploading. Wins over `url`. Provide either `url` or `id`.
|
|
23
|
+
attr_accessor :id
|
|
24
|
+
|
|
25
|
+
# OPTIONAL: when omitted, the poster is auto-generated from Meta's own preferred video thumbnail. When Meta produces no candidate the request fails with a 502 platform_error (reason: video_thumbnail_unavailable) — retry, or supply this field to control the poster frame exactly.
|
|
22
26
|
attr_accessor :thumbnail_url
|
|
23
27
|
|
|
24
28
|
# Attribute mapping from ruby-style variable name to JSON key.
|
|
25
29
|
def self.attribute_map
|
|
26
30
|
{
|
|
27
31
|
:'url' => :'url',
|
|
32
|
+
:'id' => :'id',
|
|
28
33
|
:'thumbnail_url' => :'thumbnailUrl'
|
|
29
34
|
}
|
|
30
35
|
end
|
|
@@ -43,6 +48,7 @@ module Zernio
|
|
|
43
48
|
def self.openapi_types
|
|
44
49
|
{
|
|
45
50
|
:'url' => :'String',
|
|
51
|
+
:'id' => :'String',
|
|
46
52
|
:'thumbnail_url' => :'String'
|
|
47
53
|
}
|
|
48
54
|
end
|
|
@@ -71,14 +77,14 @@ module Zernio
|
|
|
71
77
|
|
|
72
78
|
if attributes.key?(:'url')
|
|
73
79
|
self.url = attributes[:'url']
|
|
74
|
-
|
|
75
|
-
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
if attributes.key?(:'id')
|
|
83
|
+
self.id = attributes[:'id']
|
|
76
84
|
end
|
|
77
85
|
|
|
78
86
|
if attributes.key?(:'thumbnail_url')
|
|
79
87
|
self.thumbnail_url = attributes[:'thumbnail_url']
|
|
80
|
-
else
|
|
81
|
-
self.thumbnail_url = nil
|
|
82
88
|
end
|
|
83
89
|
end
|
|
84
90
|
|
|
@@ -87,14 +93,6 @@ module Zernio
|
|
|
87
93
|
def list_invalid_properties
|
|
88
94
|
warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
|
|
89
95
|
invalid_properties = Array.new
|
|
90
|
-
if @url.nil?
|
|
91
|
-
invalid_properties.push('invalid value for "url", url cannot be nil.')
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
if @thumbnail_url.nil?
|
|
95
|
-
invalid_properties.push('invalid value for "thumbnail_url", thumbnail_url cannot be nil.')
|
|
96
|
-
end
|
|
97
|
-
|
|
98
96
|
invalid_properties
|
|
99
97
|
end
|
|
100
98
|
|
|
@@ -102,37 +100,16 @@ module Zernio
|
|
|
102
100
|
# @return true if the model is valid
|
|
103
101
|
def valid?
|
|
104
102
|
warn '[DEPRECATED] the `valid?` method is obsolete'
|
|
105
|
-
return false if @url.nil?
|
|
106
|
-
return false if @thumbnail_url.nil?
|
|
107
103
|
true
|
|
108
104
|
end
|
|
109
105
|
|
|
110
|
-
# Custom attribute writer method with validation
|
|
111
|
-
# @param [Object] url Value to be assigned
|
|
112
|
-
def url=(url)
|
|
113
|
-
if url.nil?
|
|
114
|
-
fail ArgumentError, 'url cannot be nil'
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
@url = url
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
# Custom attribute writer method with validation
|
|
121
|
-
# @param [Object] thumbnail_url Value to be assigned
|
|
122
|
-
def thumbnail_url=(thumbnail_url)
|
|
123
|
-
if thumbnail_url.nil?
|
|
124
|
-
fail ArgumentError, 'thumbnail_url cannot be nil'
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
@thumbnail_url = thumbnail_url
|
|
128
|
-
end
|
|
129
|
-
|
|
130
106
|
# Checks equality by comparing each attribute.
|
|
131
107
|
# @param [Object] Object to be compared
|
|
132
108
|
def ==(o)
|
|
133
109
|
return true if self.equal?(o)
|
|
134
110
|
self.class == o.class &&
|
|
135
111
|
url == o.url &&
|
|
112
|
+
id == o.id &&
|
|
136
113
|
thumbnail_url == o.thumbnail_url
|
|
137
114
|
end
|
|
138
115
|
|
|
@@ -145,7 +122,7 @@ module Zernio
|
|
|
145
122
|
# Calculates hash code according to all attributes.
|
|
146
123
|
# @return [Integer] Hash code
|
|
147
124
|
def hash
|
|
148
|
-
[url, thumbnail_url].hash
|
|
125
|
+
[url, id, thumbnail_url].hash
|
|
149
126
|
end
|
|
150
127
|
|
|
151
128
|
# Builds the object from hash
|
data/lib/zernio-sdk/version.rb
CHANGED
data/openapi.yaml
CHANGED
|
@@ -825,15 +825,18 @@ components:
|
|
|
825
825
|
single-creative shape if `video` is not supplied.
|
|
826
826
|
video:
|
|
827
827
|
type: object
|
|
828
|
-
required: [url, thumbnailUrl]
|
|
829
828
|
properties:
|
|
830
|
-
url: { type: string, format: uri }
|
|
829
|
+
url: { type: string, format: uri, description: "Public URL of the video to upload. Provide either `url` or `id`." }
|
|
830
|
+
id: { type: string, description: "Reuse a video already uploaded to this ad account (list them with GET /v1/ads/videos) instead of re-uploading. Wins over `url`. Provide either `url` or `id`." }
|
|
831
831
|
thumbnailUrl:
|
|
832
832
|
type: string
|
|
833
833
|
format: uri
|
|
834
834
|
description: |
|
|
835
|
-
|
|
836
|
-
|
|
835
|
+
OPTIONAL: when omitted, the poster is auto-generated from
|
|
836
|
+
Meta's own preferred video thumbnail. When Meta produces no
|
|
837
|
+
candidate the request fails with a 502 platform_error
|
|
838
|
+
(reason: video_thumbnail_unavailable) — retry, or supply
|
|
839
|
+
this field to control the poster frame exactly.
|
|
837
840
|
description: |
|
|
838
841
|
Video creative for single-creative shape. Mutually
|
|
839
842
|
exclusive with `imageUrl` and with `creatives[]`. Required
|
|
@@ -871,15 +874,17 @@ components:
|
|
|
871
874
|
`video`. Required if `video` is not supplied.
|
|
872
875
|
video:
|
|
873
876
|
type: object
|
|
874
|
-
required: [url, thumbnailUrl]
|
|
875
877
|
properties:
|
|
876
|
-
url: { type: string, format: uri }
|
|
878
|
+
url: { type: string, format: uri, description: "Public URL of the video to upload. Provide either `url` or `id`." }
|
|
879
|
+
id: { type: string, description: "Reuse a video already uploaded to this ad account (list them with GET /v1/ads/videos) instead of re-uploading. Wins over `url`. Provide either `url` or `id`." }
|
|
877
880
|
thumbnailUrl:
|
|
878
881
|
type: string
|
|
879
882
|
format: uri
|
|
880
883
|
description: |
|
|
881
|
-
|
|
882
|
-
|
|
884
|
+
OPTIONAL: when omitted, the poster is auto-generated
|
|
885
|
+
from Meta's own preferred video thumbnail. When Meta
|
|
886
|
+
produces no candidate the request fails with a 502
|
|
887
|
+
platform_error (reason: video_thumbnail_unavailable).
|
|
883
888
|
description: |
|
|
884
889
|
Video creative. Mutually exclusive with this entry's
|
|
885
890
|
`imageUrl`. Required if `imageUrl` is not supplied.
|
|
@@ -889,9 +894,9 @@ components:
|
|
|
889
894
|
Attach the creatives to this EXISTING messaging ad set instead of
|
|
890
895
|
building a campaign, so the ad set keeps its learning phase. It then
|
|
891
896
|
owns budget, targeting and schedule, so `budgetAmount`, `budgetType`,
|
|
892
|
-
`endDate`, `objective`, `countries`, `interests
|
|
893
|
-
rejected with a 400 alongside it. Its
|
|
894
|
-
the ad's destination.
|
|
897
|
+
`endDate`, `objective`, `countries`, `interests`, `audienceId` and
|
|
898
|
+
`campaignStatus` are rejected with a 400 alongside it. Its
|
|
899
|
+
`destination_type` must match the ad's destination.
|
|
895
900
|
budgetAmount:
|
|
896
901
|
type: number
|
|
897
902
|
exclusiveMinimum: 0
|
|
@@ -1057,6 +1062,22 @@ components:
|
|
|
1057
1062
|
Defaults to `OUTCOME_ENGAGEMENT`. `OUTCOME_SALES` and `OUTCOME_LEADS` require
|
|
1058
1063
|
additional account configuration (Dataset linked to the WABA
|
|
1059
1064
|
for sales) and may be rejected by Meta if missing.
|
|
1065
|
+
status:
|
|
1066
|
+
type: string
|
|
1067
|
+
enum: [ACTIVE, PAUSED]
|
|
1068
|
+
description: |
|
|
1069
|
+
Ad-level status. Defaults to `ACTIVE`. `PAUSED` skips activating the
|
|
1070
|
+
newly created ad(s) after Meta accepts them.
|
|
1071
|
+
campaignStatus:
|
|
1072
|
+
type: string
|
|
1073
|
+
enum: [ACTIVE, PAUSED]
|
|
1074
|
+
description: |
|
|
1075
|
+
Campaign-level status, same semantics as `POST /v1/ads/create`. Defaults
|
|
1076
|
+
to `ACTIVE`. `PAUSED` holds activation at the campaign so it never
|
|
1077
|
+
spends before the advertiser reviews it, while the ad set and ad still
|
|
1078
|
+
switch on (one resume call brings the whole hierarchy live). Only
|
|
1079
|
+
meaningful when a new campaign is being created; rejected with a 400
|
|
1080
|
+
alongside `adSetId` (the attach shape reuses an existing campaign).
|
|
1060
1081
|
bidStrategy:
|
|
1061
1082
|
type: string
|
|
1062
1083
|
enum:
|
|
@@ -20492,6 +20513,12 @@ paths:
|
|
|
20492
20513
|
5. Generate a permanent access token
|
|
20493
20514
|
6. Get the WABA ID from WhatsApp Manager > Account Tools > Phone Numbers
|
|
20494
20515
|
7. Get the Phone Number ID from the same page (click on the number)
|
|
20516
|
+
|
|
20517
|
+
Warning: connecting subscribes your own Meta app to this WABA with an override
|
|
20518
|
+
callback that redirects its webhook delivery to Zernio. This WABA's events stop
|
|
20519
|
+
reaching any callback URL you had configured before, immediately and with no
|
|
20520
|
+
overlap window. Do not unsubscribe your app from the WABA afterward: that also
|
|
20521
|
+
cuts off Zernio's delivery, and recovery requires calling this endpoint again.
|
|
20495
20522
|
security:
|
|
20496
20523
|
- bearerAuth: []
|
|
20497
20524
|
requestBody:
|
|
@@ -20536,6 +20563,9 @@ paths:
|
|
|
20536
20563
|
registrationWarning:
|
|
20537
20564
|
type: string
|
|
20538
20565
|
description: 'Present when the account was created but Meta rejected the Cloud API registration. The number cannot send messages until this is resolved.'
|
|
20566
|
+
webhookNotice:
|
|
20567
|
+
type: string
|
|
20568
|
+
description: 'Present when the WABA webhook subscription (with the Zernio override callback) succeeded. Explains the delivery cutover and warns against unsubscribing the app from the WABA afterward.'
|
|
20539
20569
|
account:
|
|
20540
20570
|
type: object
|
|
20541
20571
|
properties:
|
|
@@ -20544,7 +20574,9 @@ paths:
|
|
|
20544
20574
|
username: { type: string, description: Display phone number }
|
|
20545
20575
|
displayName: { type: string, description: Meta-verified business name }
|
|
20546
20576
|
isActive: { type: boolean }
|
|
20547
|
-
|
|
20577
|
+
phoneNumber: { type: string, description: The connected phone number }
|
|
20578
|
+
verifiedName: { type: string, description: Meta-verified business name for the phone number }
|
|
20579
|
+
qualityRating: { type: string, description: 'Meta quality rating for the phone number (e.g. GREEN, YELLOW, RED, UNKNOWN)' }
|
|
20548
20580
|
example:
|
|
20549
20581
|
message: "WhatsApp connected successfully"
|
|
20550
20582
|
account:
|
|
@@ -20553,7 +20585,9 @@ paths:
|
|
|
20553
20585
|
username: "+1 555-123-4567"
|
|
20554
20586
|
displayName: "Acme Corp"
|
|
20555
20587
|
isActive: true
|
|
20556
|
-
|
|
20588
|
+
phoneNumber: "+1 555-123-4567"
|
|
20589
|
+
verifiedName: "Acme Corp"
|
|
20590
|
+
qualityRating: "GREEN"
|
|
20557
20591
|
'400':
|
|
20558
20592
|
description: |
|
|
20559
20593
|
Invalid request. Missing fields, a `pin` that is not 6 digits, or the
|
|
@@ -139,7 +139,7 @@ describe 'ConnectApi' do
|
|
|
139
139
|
|
|
140
140
|
# unit tests for connect_whats_app_credentials
|
|
141
141
|
# Connect WhatsApp via credentials
|
|
142
|
-
# Connect a WhatsApp Business Account by providing Meta credentials directly. This is the headless alternative to the Embedded Signup browser flow. To get the required credentials: 1. Go to Meta Business Suite (business.facebook.com) 2. Create or select a WhatsApp Business Account 3. In Business Settings > System Users, create a System User 4. Assign it the whatsapp_business_management and whatsapp_business_messaging permissions 5. Generate a permanent access token 6. Get the WABA ID from WhatsApp Manager > Account Tools > Phone Numbers 7. Get the Phone Number ID from the same page (click on the number)
|
|
142
|
+
# Connect a WhatsApp Business Account by providing Meta credentials directly. This is the headless alternative to the Embedded Signup browser flow. To get the required credentials: 1. Go to Meta Business Suite (business.facebook.com) 2. Create or select a WhatsApp Business Account 3. In Business Settings > System Users, create a System User 4. Assign it the whatsapp_business_management and whatsapp_business_messaging permissions 5. Generate a permanent access token 6. Get the WABA ID from WhatsApp Manager > Account Tools > Phone Numbers 7. Get the Phone Number ID from the same page (click on the number) Warning: connecting subscribes your own Meta app to this WABA with an override callback that redirects its webhook delivery to Zernio. This WABA's events stop reaching any callback URL you had configured before, immediately and with no overlap window. Do not unsubscribe your app from the WABA afterward: that also cuts off Zernio's delivery, and recovery requires calling this endpoint again.
|
|
143
143
|
# @param connect_whats_app_credentials_request
|
|
144
144
|
# @param [Hash] opts the optional parameters
|
|
145
145
|
# @return [ConnectWhatsAppCredentials200Response]
|
|
@@ -61,7 +61,19 @@ describe Zernio::ConnectWhatsAppCredentials200ResponseAccount do
|
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
|
|
64
|
-
describe 'test attribute "
|
|
64
|
+
describe 'test attribute "phone_number"' do
|
|
65
|
+
it 'should work' do
|
|
66
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
describe 'test attribute "verified_name"' do
|
|
71
|
+
it 'should work' do
|
|
72
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe 'test attribute "quality_rating"' do
|
|
65
77
|
it 'should work' do
|
|
66
78
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
67
79
|
end
|
|
@@ -39,6 +39,12 @@ describe Zernio::ConnectWhatsAppCredentials200Response do
|
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
+
describe 'test attribute "webhook_notice"' do
|
|
43
|
+
it 'should work' do
|
|
44
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
42
48
|
describe 'test attribute "account"' do
|
|
43
49
|
it 'should work' do
|
|
44
50
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
@@ -195,6 +195,26 @@ describe Zernio::CreateCallAdRequest do
|
|
|
195
195
|
end
|
|
196
196
|
end
|
|
197
197
|
|
|
198
|
+
describe 'test attribute "status"' do
|
|
199
|
+
it 'should work' do
|
|
200
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
201
|
+
# validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
202
|
+
# validator.allowable_values.each do |value|
|
|
203
|
+
# expect { instance.status = value }.not_to raise_error
|
|
204
|
+
# end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
describe 'test attribute "campaign_status"' do
|
|
209
|
+
it 'should work' do
|
|
210
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
211
|
+
# validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
212
|
+
# validator.allowable_values.each do |value|
|
|
213
|
+
# expect { instance.campaign_status = value }.not_to raise_error
|
|
214
|
+
# end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
198
218
|
describe 'test attribute "bid_strategy"' do
|
|
199
219
|
it 'should work' do
|
|
200
220
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
@@ -195,6 +195,26 @@ describe Zernio::CreateMessagingAdRequest do
|
|
|
195
195
|
end
|
|
196
196
|
end
|
|
197
197
|
|
|
198
|
+
describe 'test attribute "status"' do
|
|
199
|
+
it 'should work' do
|
|
200
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
201
|
+
# validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
202
|
+
# validator.allowable_values.each do |value|
|
|
203
|
+
# expect { instance.status = value }.not_to raise_error
|
|
204
|
+
# end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
describe 'test attribute "campaign_status"' do
|
|
209
|
+
it 'should work' do
|
|
210
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
211
|
+
# validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
212
|
+
# validator.allowable_values.each do |value|
|
|
213
|
+
# expect { instance.campaign_status = value }.not_to raise_error
|
|
214
|
+
# end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
198
218
|
describe 'test attribute "bid_strategy"' do
|
|
199
219
|
it 'should work' do
|
|
200
220
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
@@ -33,6 +33,12 @@ describe Zernio::CtwaAdRequestBodyCreativesInnerVideo do
|
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
+
describe 'test attribute "id"' do
|
|
37
|
+
it 'should work' do
|
|
38
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
36
42
|
describe 'test attribute "thumbnail_url"' do
|
|
37
43
|
it 'should work' do
|
|
38
44
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
@@ -195,6 +195,26 @@ describe Zernio::CtwaAdRequestBody do
|
|
|
195
195
|
end
|
|
196
196
|
end
|
|
197
197
|
|
|
198
|
+
describe 'test attribute "status"' do
|
|
199
|
+
it 'should work' do
|
|
200
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
201
|
+
# validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
202
|
+
# validator.allowable_values.each do |value|
|
|
203
|
+
# expect { instance.status = value }.not_to raise_error
|
|
204
|
+
# end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
describe 'test attribute "campaign_status"' do
|
|
209
|
+
it 'should work' do
|
|
210
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
211
|
+
# validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["ACTIVE", "PAUSED"])
|
|
212
|
+
# validator.allowable_values.each do |value|
|
|
213
|
+
# expect { instance.campaign_status = value }.not_to raise_error
|
|
214
|
+
# end
|
|
215
|
+
end
|
|
216
|
+
end
|
|
217
|
+
|
|
198
218
|
describe 'test attribute "bid_strategy"' do
|
|
199
219
|
it 'should work' do
|
|
200
220
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
@@ -33,6 +33,12 @@ describe Zernio::CtwaAdRequestBodyVideo do
|
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
+
describe 'test attribute "id"' do
|
|
37
|
+
it 'should work' do
|
|
38
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
36
42
|
describe 'test attribute "thumbnail_url"' do
|
|
37
43
|
it 'should work' do
|
|
38
44
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|