late-sdk 0.0.866 → 0.0.868
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/README.md +1 -0
- data/docs/AdCampaignsApi.md +1 -1
- data/docs/CreateStandaloneAdRequest.md +2 -2
- data/docs/CreateWhatsAppTemplateRequest.md +1 -1
- data/docs/MetaLeadFormPlatformDataContextCard.md +1 -1
- data/docs/SendInboxMessage200Response.md +2 -0
- data/docs/SendInboxMessage200ResponseWarningsInner.md +22 -0
- data/docs/SendInboxMessageRequest.md +1 -1
- data/docs/UpdateAdRequestTargeting.md +2 -2
- data/docs/UpdateWhatsAppTemplateByIdRequest.md +1 -1
- data/docs/UpdateWhatsAppTemplateRequest.md +1 -1
- data/docs/WhatsAppApi.md +2 -2
- data/lib/zernio-sdk/api/ad_campaigns_api.rb +2 -2
- data/lib/zernio-sdk/api/contacts_api.rb +1 -1
- data/lib/zernio-sdk/api/whats_app_api.rb +4 -4
- data/lib/zernio-sdk/models/create_broadcast_request.rb +2 -2
- data/lib/zernio-sdk/models/create_contact_request.rb +2 -2
- data/lib/zernio-sdk/models/create_sequence_request.rb +2 -2
- data/lib/zernio-sdk/models/create_standalone_ad_request.rb +2 -2
- data/lib/zernio-sdk/models/create_whats_app_template_request.rb +1 -1
- data/lib/zernio-sdk/models/meta_lead_form_platform_data_context_card.rb +1 -0
- data/lib/zernio-sdk/models/send_inbox_message200_response.rb +13 -1
- data/lib/zernio-sdk/models/send_inbox_message200_response_warnings_inner.rb +243 -0
- data/lib/zernio-sdk/models/send_inbox_message_request.rb +1 -1
- data/lib/zernio-sdk/models/update_ad_request_targeting.rb +2 -2
- data/lib/zernio-sdk/models/update_whats_app_template_by_id_request.rb +1 -1
- data/lib/zernio-sdk/models/update_whats_app_template_request.rb +1 -1
- data/lib/zernio-sdk/version.rb +1 -1
- data/lib/zernio-sdk.rb +1 -0
- data/openapi.yaml +73 -19
- data/spec/api/ad_campaigns_api_spec.rb +1 -1
- data/spec/api/whats_app_api_spec.rb +2 -2
- data/spec/models/create_broadcast_request_spec.rb +1 -1
- data/spec/models/create_contact_request_spec.rb +1 -1
- data/spec/models/create_sequence_request_spec.rb +1 -1
- data/spec/models/send_inbox_message200_response_spec.rb +6 -0
- data/spec/models/send_inbox_message200_response_warnings_inner_spec.rb +56 -0
- data/zernio-sdk-0.0.868.gem +0 -0
- metadata +6 -2
- data/zernio-sdk-0.0.866.gem +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e06fee9735411ab7442820cf2eeb02725b9a5a459ba6b29ff9ef5893374e6959
|
|
4
|
+
data.tar.gz: c174725061e8e2d70b7aa9aa7bad04ccbceac1e05618bee1ae92053d8876d7e1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4c7589a963da7ce0d3910cf22dc41813516c32c9c72af90175a01df3c4c3a85f2a841aeb5d0a6b65e73e94ceddb2c002f94c8460f6b786900b031ebdcab90730
|
|
7
|
+
data.tar.gz: 1892e404bf923cbcdc01b509b5a200af09ddb6907faa03e5d9dbff7bb37608cd7f26f0366a0e3068f90fdcc1d95cd915e7f2ccc867d8a090b8b746573548cfe3
|
data/README.md
CHANGED
|
@@ -2030,6 +2030,7 @@ Class | Method | HTTP request | Description
|
|
|
2030
2030
|
- [Zernio::SendInboxMessage200ResponseDataAttachmentsInner](docs/SendInboxMessage200ResponseDataAttachmentsInner.md)
|
|
2031
2031
|
- [Zernio::SendInboxMessage200ResponseDataPartialFailure](docs/SendInboxMessage200ResponseDataPartialFailure.md)
|
|
2032
2032
|
- [Zernio::SendInboxMessage200ResponseDataPartialFailurePlatformError](docs/SendInboxMessage200ResponseDataPartialFailurePlatformError.md)
|
|
2033
|
+
- [Zernio::SendInboxMessage200ResponseWarningsInner](docs/SendInboxMessage200ResponseWarningsInner.md)
|
|
2033
2034
|
- [Zernio::SendInboxMessage400Response](docs/SendInboxMessage400Response.md)
|
|
2034
2035
|
- [Zernio::SendInboxMessage400ResponsePlatformError](docs/SendInboxMessage400ResponsePlatformError.md)
|
|
2035
2036
|
- [Zernio::SendInboxMessageRequest](docs/SendInboxMessageRequest.md)
|
data/docs/AdCampaignsApi.md
CHANGED
|
@@ -2183,7 +2183,7 @@ end
|
|
|
2183
2183
|
|
|
2184
2184
|
Update ad
|
|
2185
2185
|
|
|
2186
|
-
Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Google**: status, budget, KEYWORD edits via `targeting.keywords` / `targeting.negativeKeywords`, and DEVICE bid adjustments via `targeting.devices` — each list you send becomes the FULL new set of its kind (criteria not in the list are removed); a kind left out is untouched. Any other `targeting` field returns 400: Google cannot mutate broad targeting post-create without recreating the campaign. `creative` returns 501. - **LinkedIn**: status, budget, targeting (geo countries only, applied to the LinkedIn Campaign via PARTIAL_UPDATE), and creative (uploads new media, creates a replacement inline creative on the same campaign, pauses the old one). - **Pinterest / X / OpenAI Ads**: status + budget only. Sending `targeting` or `creative` returns 501 with code `unsupported_platform_operation`. OpenAI Ads budget is lifetime-only (see `budget.type` below).
|
|
2186
|
+
Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Google**: status, budget, KEYWORD edits via `targeting.keywords` / `targeting.negativeKeywords`, and DEVICE bid adjustments via `targeting.devices` — each list you send becomes the FULL new set of its kind (criteria not in the list are removed); a kind left out is untouched. Any other `targeting` field returns 400: Google cannot mutate broad targeting post-create without recreating the campaign. `creative` returns 501. - **LinkedIn**: status, budget, targeting (geo countries only, applied to the LinkedIn Campaign via PARTIAL_UPDATE), and creative (uploads new media, creates a replacement inline creative on the same campaign, pauses the old one). - **Pinterest / X / OpenAI Ads**: status + budget only. Sending `targeting` or `creative` returns 501 with code `unsupported_platform_operation`. OpenAI Ads budget is lifetime-only (see `budget.type` below). **Google keyword replacement:** These edits affect the ad's entire ad group, including sibling ads. Positive (`targeting.keywords`) and negative (`targeting.negativeKeywords`) sets are independent: omit a field to leave that set unchanged, or send `[]` to remove every keyword of that kind. Zernio compares each supplied set with Google's live criteria by case-insensitive keyword text and match type. A matching criterion is left untouched, retaining its criterion ID, enabled/paused status, keyword-level bid overrides, labels, and criterion-associated history/statistics. Zernio does not reset its quality score; Google continues to calculate scores and statistics normally. Text comparison does not trim whitespace. A bare string or an object without `matchType` means `broad`, not the existing criterion's match type. For example, resending an existing `{ \"text\": \"plumber\", \"matchType\": \"exact\" }` preserves it; sending `\"plumber\"` instead removes that EXACT criterion and requests a BROAD one. Changing text or match type removes criteria no longer requested and creates any missing criteria. New criteria get new IDs and do not inherit removed criteria's bid overrides, labels, or history. Historical reporting for a removed criterion is not transferred to its replacement. To add keywords without replacing a set, use [POST /v1/ads/keywords](https://docs.zernio.com/ad-campaigns/add-ad-keywords). Use `PATCH /v1/ads/keywords/{keywordId}` to pause/enable one keyword, or `DELETE /v1/ads/keywords/{keywordId}` to remove it.
|
|
2187
2187
|
|
|
2188
2188
|
### Examples
|
|
2189
2189
|
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
| **long_headline** | **String** | Google Display only — defaults to `headline` if omitted. On LinkedIn, reused as the optional secondary description text on traffic (link) ads; omitted if not provided. | [optional] |
|
|
30
30
|
| **body** | **String** | Required on legacy + attach shapes. For X/Twitter this is the tweet text (max 280 chars including a ~24-char URL when `linkUrl` is set). On LinkedIn this is the post commentary (the intro text shown above the ad). On OpenAI Ads this is the chat card's body text. Max: Google=90, Pinterest=500, OpenAI=100. | [optional] |
|
|
31
31
|
| **description** | **String** | Meta only (facebook/instagram). Link description — the secondary text shown below the headline (Meta's link_data.description; on video creatives mapped to video_data.link_description). When omitted, Meta auto-pulls the destination URL's OpenGraph description. Applies on legacy, attach, and placementAssets shapes; for multi-creative use creatives[].description (this field is the shared fallback). For multi-text variations use `descriptions` (array) instead. | [optional] |
|
|
32
|
-
| **bodies** | **Array<String>** | Meta only. Multiple Text Options (Advantage+ Flexible Format): supply 1-5 primary-text variations and Meta optimises delivery across them, WITHOUT enabling full Dynamic Creative (`dynamicCreative`). Uses `optimization_type: DEGREES_OF_FREEDOM` on the asset feed, so multiple ads per ad set are allowed (unlike `dynamicCreative` which is limited to one). Requires `imageUrl` or `video`, `linkUrl`, and `callToAction`. When set, the top-level `body` field is used as the `object_story_spec.link_data.message` (the preview text) and `headlines` must also be present. Mutually exclusive with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`. | [optional] |
|
|
33
|
-
| **headlines** | **Array<String>** | Meta only. Headline variations for Multiple Text Options. Must be sent alongside `bodies`. The top-level `headline` field is used as the `object_story_spec.link_data.name`
|
|
32
|
+
| **bodies** | **Array<String>** | Meta only. Multiple Text Options (Advantage+ Flexible Format): supply 1-5 primary-text variations and Meta optimises delivery across them, WITHOUT enabling full Dynamic Creative (`dynamicCreative`). Uses `optimization_type: DEGREES_OF_FREEDOM` on the asset feed, so multiple ads per ad set are allowed (unlike `dynamicCreative` which is limited to one). Requires `imageUrl` or `video`, `linkUrl`, and `callToAction`. When set, the top-level `body` field is used as the `object_story_spec.link_data.message` (the preview text) and `headlines` must also be present. On a video creative the copy lands in `video_data.message` / `video_data.title` instead of `link_data`. Mutually exclusive with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`. | [optional] |
|
|
33
|
+
| **headlines** | **Array<String>** | Meta only. Headline variations for Multiple Text Options. Must be sent alongside `bodies`. The top-level `headline` field is used as the `object_story_spec.link_data.name` (`video_data.title` on a video creative). | [optional] |
|
|
34
34
|
| **descriptions** | **Array<String>** | Meta only. Optional description variations for Multiple Text Options. Sent alongside `bodies` and `headlines`. | [optional] |
|
|
35
35
|
| **call_to_action** | **String** | Required on legacy + attach shapes for Meta. Honoured on TikTok (passes through to the Spark Ad creative's `call_to_action`) and on LinkedIn (the CTA button on the ad; defaults to LEARN_MORE when `linkUrl` is set). LinkedIn accepts: LEARN_MORE, SIGN_UP, DOWNLOAD, SUBSCRIBE, REGISTER, JOIN, ATTEND, REQUEST_DEMO, VIEW_QUOTE, APPLY, SEE_MORE, SHOP_NOW, BUY_NOW. Ignored by Google, Pinterest, and X/Twitter. | [optional] |
|
|
36
36
|
| **link_url** | **String** | Required on legacy + attach shapes (skip for multi-creative). On LinkedIn it's the ad's destination URL; required for `traffic` ads, optional for `engagement` / `awareness`. NOT required when `goal` is `lead_generation` (the ad opens a Lead Gen form instead of a destination). On LinkedIn, `imageUrl` + `linkUrl` publishes an ARTICLE-content creative; this is LinkedIn's article ad format, with the image as thumbnail and `longHeadline` as description. Required for OpenAI Ads (the chat card's target_url). | [optional] |
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
| **library_template_name** | **String** | Name of a pre-built template from Meta's template library (e.g., \"appointment_reminder\", \"auto_pay_reminder_1\", \"address_update\"). When provided, the template is pre-approved by Meta with no review wait. Omit components when using this field. | [optional] |
|
|
14
14
|
| **library_template_body_inputs** | **Object** | Optional body customizations for library templates. Available options depend on the template (e.g., add_contact_number, add_learn_more_link, add_security_recommendation, add_track_package_link, code_expiration_minutes). | [optional] |
|
|
15
15
|
| **library_template_button_inputs** | [**Array<CreateWhatsAppTemplateRequestLibraryTemplateButtonInputsInner>**](CreateWhatsAppTemplateRequestLibraryTemplateButtonInputsInner.md) | Optional button customizations for library templates. Each item specifies button type and configuration (e.g., URL, phone number, quick reply). | [optional] |
|
|
16
|
-
| **message_send_ttl_seconds** | **Integer** | Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1
|
|
16
|
+
| **message_send_ttl_seconds** | **Integer** | Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1 (create only) keeps the 30-day default on AUTHENTICATION and UTILITY. Meta defaults to 600 for AUTHENTICATION and 30 days otherwise. If Meta later recategorises the template, it clears the TTL (read it back to check). | [optional] |
|
|
17
17
|
|
|
18
18
|
## Example
|
|
19
19
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
| **content** | **Array<String>** | | [optional] |
|
|
9
9
|
| **style** | **String** | | [optional] |
|
|
10
10
|
| **button_text** | **String** | | [optional] |
|
|
11
|
-
| **cover_photo** | **String** |
|
|
11
|
+
| **cover_photo** | **String** | Direct public JPEG or PNG image URL, up to 5 MB. Redirects, Ad Image hashes and IDs are not supported. | [optional] |
|
|
12
12
|
|
|
13
13
|
## Example
|
|
14
14
|
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
| Name | Type | Description | Notes |
|
|
6
6
|
| ---- | ---- | ----------- | ----- |
|
|
7
7
|
| **success** | **Boolean** | | [optional] |
|
|
8
|
+
| **warnings** | [**Array<SendInboxMessage200ResponseWarningsInner>**](SendInboxMessage200ResponseWarningsInner.md) | Present when a successful send ignored replyTo on Instagram or Facebook Messenger. The message was sent without a quote; do not retry it to apply the reply. | [optional] |
|
|
8
9
|
| **data** | [**SendInboxMessage200ResponseData**](SendInboxMessage200ResponseData.md) | | [optional] |
|
|
9
10
|
|
|
10
11
|
## Example
|
|
@@ -14,6 +15,7 @@ require 'zernio-sdk'
|
|
|
14
15
|
|
|
15
16
|
instance = Zernio::SendInboxMessage200Response.new(
|
|
16
17
|
success: null,
|
|
18
|
+
warnings: null,
|
|
17
19
|
data: null
|
|
18
20
|
)
|
|
19
21
|
```
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Zernio::SendInboxMessage200ResponseWarningsInner
|
|
2
|
+
|
|
3
|
+
## Properties
|
|
4
|
+
|
|
5
|
+
| Name | Type | Description | Notes |
|
|
6
|
+
| ---- | ---- | ----------- | ----- |
|
|
7
|
+
| **code** | **String** | | |
|
|
8
|
+
| **param** | **String** | | |
|
|
9
|
+
| **message** | **String** | Human-readable explanation of the ignored field. | |
|
|
10
|
+
|
|
11
|
+
## Example
|
|
12
|
+
|
|
13
|
+
```ruby
|
|
14
|
+
require 'zernio-sdk'
|
|
15
|
+
|
|
16
|
+
instance = Zernio::SendInboxMessage200ResponseWarningsInner.new(
|
|
17
|
+
code: null,
|
|
18
|
+
param: null,
|
|
19
|
+
message: null
|
|
20
|
+
)
|
|
21
|
+
```
|
|
22
|
+
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
| **reply_markup** | [**SendInboxMessageRequestReplyMarkup**](SendInboxMessageRequestReplyMarkup.md) | | [optional] |
|
|
20
20
|
| **messaging_type** | **String** | Facebook messaging type. Required when using messageTag. | [optional] |
|
|
21
21
|
| **message_tag** | **String** | Facebook message tag for messaging outside 24h window. Requires messagingType MESSAGE_TAG. Instagram only supports HUMAN_AGENT. | [optional] |
|
|
22
|
-
| **reply_to** | **String** | Platform message ID to quote-reply to. For WhatsApp, pass the wamid; for Telegram, the Telegram message ID (delivered as message.platformMessageId on webhooks, and as `id` on each entry of the list-messages endpoint). On Slack it threads the reply (thread_ts) instead of quoting.
|
|
22
|
+
| **reply_to** | **String** | Platform message ID to quote-reply to. For WhatsApp, pass the wamid; for Telegram, the Telegram message ID (delivered as message.platformMessageId on webhooks, and as `id` on each entry of the list-messages endpoint). On Slack it threads the reply (thread_ts) instead of quoting. Instagram and Facebook Messenger do not support send-side quote replies: the message is sent without a quote and the successful response includes a warnings entry with code ignored_field and param replyTo. Other platforms without send-side reply support ignore this field. | [optional] |
|
|
23
23
|
| **location** | [**SendInboxMessageRequestLocation**](SendInboxMessageRequestLocation.md) | | [optional] |
|
|
24
24
|
| **contacts** | [**Array<SendInboxMessageRequestContactsInner>**](SendInboxMessageRequestContactsInner.md) | WhatsApp-only. Send one or more contact cards. | [optional] |
|
|
25
25
|
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
| Name | Type | Description | Notes |
|
|
6
6
|
| ---- | ---- | ----------- | ----- |
|
|
7
|
-
| **keywords** | [**Array<UpdateAdRequestTargetingKeywordsInner>**](UpdateAdRequestTargetingKeywordsInner.md) | Google only. The FULL
|
|
8
|
-
| **negative_keywords** | [**Array<UpdateAdRequestTargetingKeywordsInner>**](UpdateAdRequestTargetingKeywordsInner.md) | Google only.
|
|
7
|
+
| **keywords** | [**Array<UpdateAdRequestTargetingKeywordsInner>**](UpdateAdRequestTargetingKeywordsInner.md) | Google only. The FULL desired set of positive keywords for the entire ad group. Omit to leave positives unchanged; [] removes all positives. Negatives are independent. Entries are strings (BROAD) or { text, matchType } with matchType exact | phrase | broad; an omitted matchType also defaults to BROAD. Matching case-insensitive text AND match type retains the existing criterion ID, status, bid overrides, labels and history without a mutation. A changed text or match type uses remove/create, without transferring the old criterion's attributes or history. See Google keyword replacement above for an EXACT-to-BROAD example. Mirrored to GET /v1/ads/keywords immediately. | [optional] |
|
|
8
|
+
| **negative_keywords** | [**Array<UpdateAdRequestTargetingKeywordsInner>**](UpdateAdRequestTargetingKeywordsInner.md) | Google only. The FULL desired set of negative keywords for the entire ad group, independent of positives. Omit to leave negatives unchanged; [] removes all negatives. Uses the same text/match-type identity and preservation contract as keywords above. Strings and objects without matchType default to BROAD, so resending an EXACT or PHRASE negative as a bare string requests a different criterion. Campaign negatives are separate: use /v1/ads/campaigns/{campaignId}/negative-keywords to manage those. | [optional] |
|
|
9
9
|
| **devices** | [**Array<UpdateAdRequestTargetingDevicesInner>**](UpdateAdRequestTargetingDevicesInner.md) | Google only. The FULL new set of device criteria for the campaign; devices not listed are excluded. Entries are a device name alone (included, no bid adjustment) or { device, bidModifier }. | [optional] |
|
|
10
10
|
| **age_min** | **Integer** | | [optional] |
|
|
11
11
|
| **age_max** | **Integer** | | [optional] |
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
| ---- | ---- | ----------- | ----- |
|
|
7
7
|
| **account_id** | **String** | WhatsApp social account ID | |
|
|
8
8
|
| **components** | [**Array<WhatsAppTemplateComponent>**](WhatsAppTemplateComponent.md) | Updated template components. Optional when only message_send_ttl_seconds changes; at least one of the two is required. | [optional] |
|
|
9
|
-
| **message_send_ttl_seconds** | **Integer** | Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1
|
|
9
|
+
| **message_send_ttl_seconds** | **Integer** | Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1 is not accepted here (Meta treats it as an empty edit); send a value in range. A TTL-only edit keeps an APPROVED template approved, no re-review. Meta defaults to 600 for AUTHENTICATION and 30 days otherwise. If Meta later recategorises the template, it clears the TTL (read it back to check). | [optional] |
|
|
10
10
|
|
|
11
11
|
## Example
|
|
12
12
|
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
| **account_id** | **String** | WhatsApp social account ID | |
|
|
8
8
|
| **language** | **String** | Language code of the variant to edit (e.g. en_US, es, pt_BR). Required when the family has several languages. Body only: a language query parameter on PATCH is a 400. | [optional] |
|
|
9
9
|
| **components** | [**Array<WhatsAppTemplateComponent>**](WhatsAppTemplateComponent.md) | Updated template components. Optional when only message_send_ttl_seconds changes; at least one of the two is required. | [optional] |
|
|
10
|
-
| **message_send_ttl_seconds** | **Integer** | Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1
|
|
10
|
+
| **message_send_ttl_seconds** | **Integer** | Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1 is not accepted here (Meta treats it as an empty edit); send a value in range. A TTL-only edit keeps an APPROVED template approved, no re-review. Meta defaults to 600 for AUTHENTICATION and 30 days otherwise. If Meta later recategorises the template, it clears the TTL (read it back to check). | [optional] |
|
|
11
11
|
|
|
12
12
|
## Example
|
|
13
13
|
|
data/docs/WhatsAppApi.md
CHANGED
|
@@ -2615,7 +2615,7 @@ end
|
|
|
2615
2615
|
|
|
2616
2616
|
Update template
|
|
2617
2617
|
|
|
2618
|
-
Update one variant's components and/or its message_send_ttl_seconds. Name, language and category cannot change after creation. Meta stores one template per **name + language**, so a name identifies a family of variants, each with its own Meta id. Pass `language` to address one variant. Without it, a name with a single variant resolves to that variant; a name with several returns `409 ambiguous_template` with `details.languages`. A bare language (`es`) matches a single regional variant (`es_ES`); if the family has several regional variants for it, that is also a 409. A full code (`es_ES`) must match exactly. Variants in `PENDING_DELETION` are not part of the family. Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A
|
|
2618
|
+
Update one variant's components and/or its message_send_ttl_seconds. Name, language and category cannot change after creation. Meta stores one template per **name + language**, so a name identifies a family of variants, each with its own Meta id. Pass `language` to address one variant. Without it, a name with a single variant resolves to that variant; a name with several returns `409 ambiguous_template` with `details.languages`. A bare language (`es`) matches a single regional variant (`es_ES`); if the family has several regional variants for it, that is also a 409. A full code (`es_ES`) must match exactly. Variants in `PENDING_DELETION` are not part of the family. Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A component update sends the variant back to Meta for review, so the `status` returned here is normally `PENDING`; a TTL-only update keeps an APPROVED variant approved. The final outcome arrives on the `whatsapp.template.status_updated` webhook (which carries the variant's `templateId` and `language`). A variant already in `PENDING` cannot be edited again until Meta finishes reviewing it.
|
|
2619
2619
|
|
|
2620
2620
|
### Examples
|
|
2621
2621
|
|
|
@@ -2686,7 +2686,7 @@ end
|
|
|
2686
2686
|
|
|
2687
2687
|
Update template by id
|
|
2688
2688
|
|
|
2689
|
-
Update one variant's components and/or its message_send_ttl_seconds by its Meta id. Name, language and category cannot change. Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A
|
|
2689
|
+
Update one variant's components and/or its message_send_ttl_seconds by its Meta id. Name, language and category cannot change. Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A component update sends the variant back to Meta for review, so the `status` returned here is normally `PENDING`; a TTL-only update keeps an APPROVED variant approved. The final outcome arrives on the `whatsapp.template.status_updated` webhook (which carries the variant's `templateId` and `language`). A variant already in `PENDING` cannot be edited again until Meta finishes reviewing it.
|
|
2690
2690
|
|
|
2691
2691
|
### Examples
|
|
2692
2692
|
|
|
@@ -2264,7 +2264,7 @@ module Zernio
|
|
|
2264
2264
|
end
|
|
2265
2265
|
|
|
2266
2266
|
# Update ad
|
|
2267
|
-
# Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Google**: status, budget, KEYWORD edits via `targeting.keywords` / `targeting.negativeKeywords`, and DEVICE bid adjustments via `targeting.devices` — each list you send becomes the FULL new set of its kind (criteria not in the list are removed); a kind left out is untouched. Any other `targeting` field returns 400: Google cannot mutate broad targeting post-create without recreating the campaign. `creative` returns 501. - **LinkedIn**: status, budget, targeting (geo countries only, applied to the LinkedIn Campaign via PARTIAL_UPDATE), and creative (uploads new media, creates a replacement inline creative on the same campaign, pauses the old one). - **Pinterest / X / OpenAI Ads**: status + budget only. Sending `targeting` or `creative` returns 501 with code `unsupported_platform_operation`. OpenAI Ads budget is lifetime-only (see `budget.type` below).
|
|
2267
|
+
# Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Google**: status, budget, KEYWORD edits via `targeting.keywords` / `targeting.negativeKeywords`, and DEVICE bid adjustments via `targeting.devices` — each list you send becomes the FULL new set of its kind (criteria not in the list are removed); a kind left out is untouched. Any other `targeting` field returns 400: Google cannot mutate broad targeting post-create without recreating the campaign. `creative` returns 501. - **LinkedIn**: status, budget, targeting (geo countries only, applied to the LinkedIn Campaign via PARTIAL_UPDATE), and creative (uploads new media, creates a replacement inline creative on the same campaign, pauses the old one). - **Pinterest / X / OpenAI Ads**: status + budget only. Sending `targeting` or `creative` returns 501 with code `unsupported_platform_operation`. OpenAI Ads budget is lifetime-only (see `budget.type` below). **Google keyword replacement:** These edits affect the ad's entire ad group, including sibling ads. Positive (`targeting.keywords`) and negative (`targeting.negativeKeywords`) sets are independent: omit a field to leave that set unchanged, or send `[]` to remove every keyword of that kind. Zernio compares each supplied set with Google's live criteria by case-insensitive keyword text and match type. A matching criterion is left untouched, retaining its criterion ID, enabled/paused status, keyword-level bid overrides, labels, and criterion-associated history/statistics. Zernio does not reset its quality score; Google continues to calculate scores and statistics normally. Text comparison does not trim whitespace. A bare string or an object without `matchType` means `broad`, not the existing criterion's match type. For example, resending an existing `{ \"text\": \"plumber\", \"matchType\": \"exact\" }` preserves it; sending `\"plumber\"` instead removes that EXACT criterion and requests a BROAD one. Changing text or match type removes criteria no longer requested and creates any missing criteria. New criteria get new IDs and do not inherit removed criteria's bid overrides, labels, or history. Historical reporting for a removed criterion is not transferred to its replacement. To add keywords without replacing a set, use [POST /v1/ads/keywords](https://docs.zernio.com/ad-campaigns/add-ad-keywords). Use `PATCH /v1/ads/keywords/{keywordId}` to pause/enable one keyword, or `DELETE /v1/ads/keywords/{keywordId}` to remove it.
|
|
2268
2268
|
# @param ad_id [String]
|
|
2269
2269
|
# @param update_ad_request [UpdateAdRequest]
|
|
2270
2270
|
# @param [Hash] opts the optional parameters
|
|
@@ -2275,7 +2275,7 @@ module Zernio
|
|
|
2275
2275
|
end
|
|
2276
2276
|
|
|
2277
2277
|
# Update ad
|
|
2278
|
-
# Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Google**: status, budget, KEYWORD edits via `targeting.keywords` / `targeting.negativeKeywords`, and DEVICE bid adjustments via `targeting.devices` — each list you send becomes the FULL new set of its kind (criteria not in the list are removed); a kind left out is untouched. Any other `targeting` field returns 400: Google cannot mutate broad targeting post-create without recreating the campaign. `creative` returns 501. - **LinkedIn**: status, budget, targeting (geo countries only, applied to the LinkedIn Campaign via PARTIAL_UPDATE), and creative (uploads new media, creates a replacement inline creative on the same campaign, pauses the old one). - **Pinterest / X / OpenAI Ads**: status + budget only. Sending `targeting` or `creative` returns 501 with code `unsupported_platform_operation`. OpenAI Ads budget is lifetime-only (see `budget.type` below).
|
|
2278
|
+
# Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Google**: status, budget, KEYWORD edits via `targeting.keywords` / `targeting.negativeKeywords`, and DEVICE bid adjustments via `targeting.devices` — each list you send becomes the FULL new set of its kind (criteria not in the list are removed); a kind left out is untouched. Any other `targeting` field returns 400: Google cannot mutate broad targeting post-create without recreating the campaign. `creative` returns 501. - **LinkedIn**: status, budget, targeting (geo countries only, applied to the LinkedIn Campaign via PARTIAL_UPDATE), and creative (uploads new media, creates a replacement inline creative on the same campaign, pauses the old one). - **Pinterest / X / OpenAI Ads**: status + budget only. Sending `targeting` or `creative` returns 501 with code `unsupported_platform_operation`. OpenAI Ads budget is lifetime-only (see `budget.type` below). **Google keyword replacement:** These edits affect the ad's entire ad group, including sibling ads. Positive (`targeting.keywords`) and negative (`targeting.negativeKeywords`) sets are independent: omit a field to leave that set unchanged, or send `[]` to remove every keyword of that kind. Zernio compares each supplied set with Google's live criteria by case-insensitive keyword text and match type. A matching criterion is left untouched, retaining its criterion ID, enabled/paused status, keyword-level bid overrides, labels, and criterion-associated history/statistics. Zernio does not reset its quality score; Google continues to calculate scores and statistics normally. Text comparison does not trim whitespace. A bare string or an object without `matchType` means `broad`, not the existing criterion's match type. For example, resending an existing `{ \"text\": \"plumber\", \"matchType\": \"exact\" }` preserves it; sending `\"plumber\"` instead removes that EXACT criterion and requests a BROAD one. Changing text or match type removes criteria no longer requested and creates any missing criteria. New criteria get new IDs and do not inherit removed criteria's bid overrides, labels, or history. Historical reporting for a removed criterion is not transferred to its replacement. To add keywords without replacing a set, use [POST /v1/ads/keywords](https://docs.zernio.com/ad-campaigns/add-ad-keywords). Use `PATCH /v1/ads/keywords/{keywordId}` to pause/enable one keyword, or `DELETE /v1/ads/keywords/{keywordId}` to remove it.
|
|
2279
2279
|
# @param ad_id [String]
|
|
2280
2280
|
# @param update_ad_request [UpdateAdRequest]
|
|
2281
2281
|
# @param [Hash] opts the optional parameters
|
|
@@ -379,7 +379,7 @@ module Zernio
|
|
|
379
379
|
if @api_client.config.debugging
|
|
380
380
|
@api_client.config.logger.debug 'Calling API: ContactsApi.list_contacts ...'
|
|
381
381
|
end
|
|
382
|
-
allowable_values = ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp", "slack"]
|
|
382
|
+
allowable_values = ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp", "slack", "sms"]
|
|
383
383
|
if @api_client.config.client_side_validation && opts[:'platform'] && !allowable_values.include?(opts[:'platform'])
|
|
384
384
|
fail ArgumentError, "invalid value for \"platform\", must be one of #{allowable_values}"
|
|
385
385
|
end
|
|
@@ -2581,7 +2581,7 @@ module Zernio
|
|
|
2581
2581
|
end
|
|
2582
2582
|
|
|
2583
2583
|
# Update template
|
|
2584
|
-
# Update one variant's components and/or its message_send_ttl_seconds. Name, language and category cannot change after creation. Meta stores one template per **name + language**, so a name identifies a family of variants, each with its own Meta id. Pass `language` to address one variant. Without it, a name with a single variant resolves to that variant; a name with several returns `409 ambiguous_template` with `details.languages`. A bare language (`es`) matches a single regional variant (`es_ES`); if the family has several regional variants for it, that is also a 409. A full code (`es_ES`) must match exactly. Variants in `PENDING_DELETION` are not part of the family. Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A
|
|
2584
|
+
# Update one variant's components and/or its message_send_ttl_seconds. Name, language and category cannot change after creation. Meta stores one template per **name + language**, so a name identifies a family of variants, each with its own Meta id. Pass `language` to address one variant. Without it, a name with a single variant resolves to that variant; a name with several returns `409 ambiguous_template` with `details.languages`. A bare language (`es`) matches a single regional variant (`es_ES`); if the family has several regional variants for it, that is also a 409. A full code (`es_ES`) must match exactly. Variants in `PENDING_DELETION` are not part of the family. Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A component update sends the variant back to Meta for review, so the `status` returned here is normally `PENDING`; a TTL-only update keeps an APPROVED variant approved. The final outcome arrives on the `whatsapp.template.status_updated` webhook (which carries the variant's `templateId` and `language`). A variant already in `PENDING` cannot be edited again until Meta finishes reviewing it.
|
|
2585
2585
|
# @param template_name [String] Template name (the family).
|
|
2586
2586
|
# @param update_whats_app_template_request [UpdateWhatsAppTemplateRequest]
|
|
2587
2587
|
# @param [Hash] opts the optional parameters
|
|
@@ -2592,7 +2592,7 @@ module Zernio
|
|
|
2592
2592
|
end
|
|
2593
2593
|
|
|
2594
2594
|
# Update template
|
|
2595
|
-
# Update one variant's components and/or its message_send_ttl_seconds. Name, language and category cannot change after creation. Meta stores one template per **name + language**, so a name identifies a family of variants, each with its own Meta id. Pass `language` to address one variant. Without it, a name with a single variant resolves to that variant; a name with several returns `409 ambiguous_template` with `details.languages`. A bare language (`es`) matches a single regional variant (`es_ES`); if the family has several regional variants for it, that is also a 409. A full code (`es_ES`) must match exactly. Variants in `PENDING_DELETION` are not part of the family. Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A
|
|
2595
|
+
# Update one variant's components and/or its message_send_ttl_seconds. Name, language and category cannot change after creation. Meta stores one template per **name + language**, so a name identifies a family of variants, each with its own Meta id. Pass `language` to address one variant. Without it, a name with a single variant resolves to that variant; a name with several returns `409 ambiguous_template` with `details.languages`. A bare language (`es`) matches a single regional variant (`es_ES`); if the family has several regional variants for it, that is also a 409. A full code (`es_ES`) must match exactly. Variants in `PENDING_DELETION` are not part of the family. Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A component update sends the variant back to Meta for review, so the `status` returned here is normally `PENDING`; a TTL-only update keeps an APPROVED variant approved. The final outcome arrives on the `whatsapp.template.status_updated` webhook (which carries the variant's `templateId` and `language`). A variant already in `PENDING` cannot be edited again until Meta finishes reviewing it.
|
|
2596
2596
|
# @param template_name [String] Template name (the family).
|
|
2597
2597
|
# @param update_whats_app_template_request [UpdateWhatsAppTemplateRequest]
|
|
2598
2598
|
# @param [Hash] opts the optional parameters
|
|
@@ -2655,7 +2655,7 @@ module Zernio
|
|
|
2655
2655
|
end
|
|
2656
2656
|
|
|
2657
2657
|
# Update template by id
|
|
2658
|
-
# Update one variant's components and/or its message_send_ttl_seconds by its Meta id. Name, language and category cannot change. Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A
|
|
2658
|
+
# Update one variant's components and/or its message_send_ttl_seconds by its Meta id. Name, language and category cannot change. Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A component update sends the variant back to Meta for review, so the `status` returned here is normally `PENDING`; a TTL-only update keeps an APPROVED variant approved. The final outcome arrives on the `whatsapp.template.status_updated` webhook (which carries the variant's `templateId` and `language`). A variant already in `PENDING` cannot be edited again until Meta finishes reviewing it.
|
|
2659
2659
|
# @param template_id [String] Meta template id (numeric).
|
|
2660
2660
|
# @param update_whats_app_template_by_id_request [UpdateWhatsAppTemplateByIdRequest]
|
|
2661
2661
|
# @param [Hash] opts the optional parameters
|
|
@@ -2666,7 +2666,7 @@ module Zernio
|
|
|
2666
2666
|
end
|
|
2667
2667
|
|
|
2668
2668
|
# Update template by id
|
|
2669
|
-
# Update one variant's components and/or its message_send_ttl_seconds by its Meta id. Name, language and category cannot change. Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A
|
|
2669
|
+
# Update one variant's components and/or its message_send_ttl_seconds by its Meta id. Name, language and category cannot change. Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A component update sends the variant back to Meta for review, so the `status` returned here is normally `PENDING`; a TTL-only update keeps an APPROVED variant approved. The final outcome arrives on the `whatsapp.template.status_updated` webhook (which carries the variant's `templateId` and `language`). A variant already in `PENDING` cannot be edited again until Meta finishes reviewing it.
|
|
2670
2670
|
# @param template_id [String] Meta template id (numeric).
|
|
2671
2671
|
# @param update_whats_app_template_by_id_request [UpdateWhatsAppTemplateByIdRequest]
|
|
2672
2672
|
# @param [Hash] opts the optional parameters
|
|
@@ -185,7 +185,7 @@ module Zernio
|
|
|
185
185
|
return false if @profile_id.nil?
|
|
186
186
|
return false if @account_id.nil?
|
|
187
187
|
return false if @platform.nil?
|
|
188
|
-
platform_validator = EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp"])
|
|
188
|
+
platform_validator = EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp", "sms", "slack"])
|
|
189
189
|
return false unless platform_validator.valid?(@platform)
|
|
190
190
|
return false if @name.nil?
|
|
191
191
|
true
|
|
@@ -214,7 +214,7 @@ module Zernio
|
|
|
214
214
|
# Custom attribute writer method checking allowed values (enum).
|
|
215
215
|
# @param [Object] platform Object to be assigned
|
|
216
216
|
def platform=(platform)
|
|
217
|
-
validator = EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp"])
|
|
217
|
+
validator = EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp", "sms", "slack"])
|
|
218
218
|
unless validator.valid?(platform)
|
|
219
219
|
fail ArgumentError, "invalid value for \"platform\", must be one of #{validator.allowable_values}."
|
|
220
220
|
end
|
|
@@ -202,7 +202,7 @@ module Zernio
|
|
|
202
202
|
warn '[DEPRECATED] the `valid?` method is obsolete'
|
|
203
203
|
return false if @profile_id.nil?
|
|
204
204
|
return false if @name.nil?
|
|
205
|
-
platform_validator = EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp", "slack"])
|
|
205
|
+
platform_validator = EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp", "slack", "sms"])
|
|
206
206
|
return false unless platform_validator.valid?(@platform)
|
|
207
207
|
true
|
|
208
208
|
end
|
|
@@ -230,7 +230,7 @@ module Zernio
|
|
|
230
230
|
# Custom attribute writer method checking allowed values (enum).
|
|
231
231
|
# @param [Object] platform Object to be assigned
|
|
232
232
|
def platform=(platform)
|
|
233
|
-
validator = EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp", "slack"])
|
|
233
|
+
validator = EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp", "slack", "sms"])
|
|
234
234
|
unless validator.valid?(platform)
|
|
235
235
|
fail ArgumentError, "invalid value for \"platform\", must be one of #{validator.allowable_values}."
|
|
236
236
|
end
|
|
@@ -191,7 +191,7 @@ module Zernio
|
|
|
191
191
|
return false if @profile_id.nil?
|
|
192
192
|
return false if @account_id.nil?
|
|
193
193
|
return false if @platform.nil?
|
|
194
|
-
platform_validator = EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp"])
|
|
194
|
+
platform_validator = EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp", "slack"])
|
|
195
195
|
return false unless platform_validator.valid?(@platform)
|
|
196
196
|
return false if @name.nil?
|
|
197
197
|
true
|
|
@@ -220,7 +220,7 @@ module Zernio
|
|
|
220
220
|
# Custom attribute writer method checking allowed values (enum).
|
|
221
221
|
# @param [Object] platform Object to be assigned
|
|
222
222
|
def platform=(platform)
|
|
223
|
-
validator = EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp"])
|
|
223
|
+
validator = EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp", "slack"])
|
|
224
224
|
unless validator.valid?(platform)
|
|
225
225
|
fail ArgumentError, "invalid value for \"platform\", must be one of #{validator.allowable_values}."
|
|
226
226
|
end
|
|
@@ -86,10 +86,10 @@ module Zernio
|
|
|
86
86
|
# Meta only (facebook/instagram). Link description — the secondary text shown below the headline (Meta's link_data.description; on video creatives mapped to video_data.link_description). When omitted, Meta auto-pulls the destination URL's OpenGraph description. Applies on legacy, attach, and placementAssets shapes; for multi-creative use creatives[].description (this field is the shared fallback). For multi-text variations use `descriptions` (array) instead.
|
|
87
87
|
attr_accessor :description
|
|
88
88
|
|
|
89
|
-
# Meta only. Multiple Text Options (Advantage+ Flexible Format): supply 1-5 primary-text variations and Meta optimises delivery across them, WITHOUT enabling full Dynamic Creative (`dynamicCreative`). Uses `optimization_type: DEGREES_OF_FREEDOM` on the asset feed, so multiple ads per ad set are allowed (unlike `dynamicCreative` which is limited to one). Requires `imageUrl` or `video`, `linkUrl`, and `callToAction`. When set, the top-level `body` field is used as the `object_story_spec.link_data.message` (the preview text) and `headlines` must also be present. Mutually exclusive with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`.
|
|
89
|
+
# Meta only. Multiple Text Options (Advantage+ Flexible Format): supply 1-5 primary-text variations and Meta optimises delivery across them, WITHOUT enabling full Dynamic Creative (`dynamicCreative`). Uses `optimization_type: DEGREES_OF_FREEDOM` on the asset feed, so multiple ads per ad set are allowed (unlike `dynamicCreative` which is limited to one). Requires `imageUrl` or `video`, `linkUrl`, and `callToAction`. When set, the top-level `body` field is used as the `object_story_spec.link_data.message` (the preview text) and `headlines` must also be present. On a video creative the copy lands in `video_data.message` / `video_data.title` instead of `link_data`. Mutually exclusive with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`.
|
|
90
90
|
attr_accessor :bodies
|
|
91
91
|
|
|
92
|
-
# Meta only. Headline variations for Multiple Text Options. Must be sent alongside `bodies`. The top-level `headline` field is used as the `object_story_spec.link_data.name
|
|
92
|
+
# Meta only. Headline variations for Multiple Text Options. Must be sent alongside `bodies`. The top-level `headline` field is used as the `object_story_spec.link_data.name` (`video_data.title` on a video creative).
|
|
93
93
|
attr_accessor :headlines
|
|
94
94
|
|
|
95
95
|
# Meta only. Optional description variations for Multiple Text Options. Sent alongside `bodies` and `headlines`.
|
|
@@ -42,7 +42,7 @@ module Zernio
|
|
|
42
42
|
# Optional button customizations for library templates. Each item specifies button type and configuration (e.g., URL, phone number, quick reply).
|
|
43
43
|
attr_accessor :library_template_button_inputs
|
|
44
44
|
|
|
45
|
-
# Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1
|
|
45
|
+
# Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1 (create only) keeps the 30-day default on AUTHENTICATION and UTILITY. Meta defaults to 600 for AUTHENTICATION and 30 days otherwise. If Meta later recategorises the template, it clears the TTL (read it back to check).
|
|
46
46
|
attr_accessor :message_send_ttl_seconds
|
|
47
47
|
|
|
48
48
|
class EnumAttributeValidator
|
|
@@ -17,12 +17,16 @@ module Zernio
|
|
|
17
17
|
class SendInboxMessage200Response < ApiModelBase
|
|
18
18
|
attr_accessor :success
|
|
19
19
|
|
|
20
|
+
# Present when a successful send ignored replyTo on Instagram or Facebook Messenger. The message was sent without a quote; do not retry it to apply the reply.
|
|
21
|
+
attr_accessor :warnings
|
|
22
|
+
|
|
20
23
|
attr_accessor :data
|
|
21
24
|
|
|
22
25
|
# Attribute mapping from ruby-style variable name to JSON key.
|
|
23
26
|
def self.attribute_map
|
|
24
27
|
{
|
|
25
28
|
:'success' => :'success',
|
|
29
|
+
:'warnings' => :'warnings',
|
|
26
30
|
:'data' => :'data'
|
|
27
31
|
}
|
|
28
32
|
end
|
|
@@ -41,6 +45,7 @@ module Zernio
|
|
|
41
45
|
def self.openapi_types
|
|
42
46
|
{
|
|
43
47
|
:'success' => :'Boolean',
|
|
48
|
+
:'warnings' => :'Array<SendInboxMessage200ResponseWarningsInner>',
|
|
44
49
|
:'data' => :'SendInboxMessage200ResponseData'
|
|
45
50
|
}
|
|
46
51
|
end
|
|
@@ -71,6 +76,12 @@ module Zernio
|
|
|
71
76
|
self.success = attributes[:'success']
|
|
72
77
|
end
|
|
73
78
|
|
|
79
|
+
if attributes.key?(:'warnings')
|
|
80
|
+
if (value = attributes[:'warnings']).is_a?(Array)
|
|
81
|
+
self.warnings = value
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
74
85
|
if attributes.key?(:'data')
|
|
75
86
|
self.data = attributes[:'data']
|
|
76
87
|
end
|
|
@@ -97,6 +108,7 @@ module Zernio
|
|
|
97
108
|
return true if self.equal?(o)
|
|
98
109
|
self.class == o.class &&
|
|
99
110
|
success == o.success &&
|
|
111
|
+
warnings == o.warnings &&
|
|
100
112
|
data == o.data
|
|
101
113
|
end
|
|
102
114
|
|
|
@@ -109,7 +121,7 @@ module Zernio
|
|
|
109
121
|
# Calculates hash code according to all attributes.
|
|
110
122
|
# @return [Integer] Hash code
|
|
111
123
|
def hash
|
|
112
|
-
[success, data].hash
|
|
124
|
+
[success, warnings, data].hash
|
|
113
125
|
end
|
|
114
126
|
|
|
115
127
|
# Builds the object from hash
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
#Zernio API
|
|
3
|
+
|
|
4
|
+
#API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
|
|
5
|
+
|
|
6
|
+
The version of the OpenAPI document: 1.0.4
|
|
7
|
+
Contact: support@zernio.com
|
|
8
|
+
Generated by: https://openapi-generator.tech
|
|
9
|
+
Generator version: 7.19.0
|
|
10
|
+
|
|
11
|
+
=end
|
|
12
|
+
|
|
13
|
+
require 'date'
|
|
14
|
+
require 'time'
|
|
15
|
+
|
|
16
|
+
module Zernio
|
|
17
|
+
class SendInboxMessage200ResponseWarningsInner < ApiModelBase
|
|
18
|
+
attr_accessor :code
|
|
19
|
+
|
|
20
|
+
attr_accessor :param
|
|
21
|
+
|
|
22
|
+
# Human-readable explanation of the ignored field.
|
|
23
|
+
attr_accessor :message
|
|
24
|
+
|
|
25
|
+
class EnumAttributeValidator
|
|
26
|
+
attr_reader :datatype
|
|
27
|
+
attr_reader :allowable_values
|
|
28
|
+
|
|
29
|
+
def initialize(datatype, allowable_values)
|
|
30
|
+
@allowable_values = allowable_values.map do |value|
|
|
31
|
+
case datatype.to_s
|
|
32
|
+
when /Integer/i
|
|
33
|
+
value.to_i
|
|
34
|
+
when /Float/i
|
|
35
|
+
value.to_f
|
|
36
|
+
else
|
|
37
|
+
value
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def valid?(value)
|
|
43
|
+
!value || allowable_values.include?(value)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Attribute mapping from ruby-style variable name to JSON key.
|
|
48
|
+
def self.attribute_map
|
|
49
|
+
{
|
|
50
|
+
:'code' => :'code',
|
|
51
|
+
:'param' => :'param',
|
|
52
|
+
:'message' => :'message'
|
|
53
|
+
}
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
# Returns attribute mapping this model knows about
|
|
57
|
+
def self.acceptable_attribute_map
|
|
58
|
+
attribute_map
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Returns all the JSON keys this model knows about
|
|
62
|
+
def self.acceptable_attributes
|
|
63
|
+
acceptable_attribute_map.values
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Attribute type mapping.
|
|
67
|
+
def self.openapi_types
|
|
68
|
+
{
|
|
69
|
+
:'code' => :'String',
|
|
70
|
+
:'param' => :'String',
|
|
71
|
+
:'message' => :'String'
|
|
72
|
+
}
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# List of attributes with nullable: true
|
|
76
|
+
def self.openapi_nullable
|
|
77
|
+
Set.new([
|
|
78
|
+
])
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Initializes the object
|
|
82
|
+
# @param [Hash] attributes Model attributes in the form of hash
|
|
83
|
+
def initialize(attributes = {})
|
|
84
|
+
if (!attributes.is_a?(Hash))
|
|
85
|
+
fail ArgumentError, "The input argument (attributes) must be a hash in `Zernio::SendInboxMessage200ResponseWarningsInner` initialize method"
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# check to see if the attribute exists and convert string to symbol for hash key
|
|
89
|
+
acceptable_attribute_map = self.class.acceptable_attribute_map
|
|
90
|
+
attributes = attributes.each_with_object({}) { |(k, v), h|
|
|
91
|
+
if (!acceptable_attribute_map.key?(k.to_sym))
|
|
92
|
+
fail ArgumentError, "`#{k}` is not a valid attribute in `Zernio::SendInboxMessage200ResponseWarningsInner`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
|
|
93
|
+
end
|
|
94
|
+
h[k.to_sym] = v
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if attributes.key?(:'code')
|
|
98
|
+
self.code = attributes[:'code']
|
|
99
|
+
else
|
|
100
|
+
self.code = nil
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
if attributes.key?(:'param')
|
|
104
|
+
self.param = attributes[:'param']
|
|
105
|
+
else
|
|
106
|
+
self.param = nil
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
if attributes.key?(:'message')
|
|
110
|
+
self.message = attributes[:'message']
|
|
111
|
+
else
|
|
112
|
+
self.message = nil
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# Show invalid properties with the reasons. Usually used together with valid?
|
|
117
|
+
# @return Array for valid properties with the reasons
|
|
118
|
+
def list_invalid_properties
|
|
119
|
+
warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
|
|
120
|
+
invalid_properties = Array.new
|
|
121
|
+
if @code.nil?
|
|
122
|
+
invalid_properties.push('invalid value for "code", code cannot be nil.')
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
if @param.nil?
|
|
126
|
+
invalid_properties.push('invalid value for "param", param cannot be nil.')
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
if @message.nil?
|
|
130
|
+
invalid_properties.push('invalid value for "message", message cannot be nil.')
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
invalid_properties
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
# Check to see if the all the properties in the model are valid
|
|
137
|
+
# @return true if the model is valid
|
|
138
|
+
def valid?
|
|
139
|
+
warn '[DEPRECATED] the `valid?` method is obsolete'
|
|
140
|
+
return false if @code.nil?
|
|
141
|
+
code_validator = EnumAttributeValidator.new('String', ["ignored_field"])
|
|
142
|
+
return false unless code_validator.valid?(@code)
|
|
143
|
+
return false if @param.nil?
|
|
144
|
+
param_validator = EnumAttributeValidator.new('String', ["replyTo"])
|
|
145
|
+
return false unless param_validator.valid?(@param)
|
|
146
|
+
return false if @message.nil?
|
|
147
|
+
true
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# Custom attribute writer method checking allowed values (enum).
|
|
151
|
+
# @param [Object] code Object to be assigned
|
|
152
|
+
def code=(code)
|
|
153
|
+
validator = EnumAttributeValidator.new('String', ["ignored_field"])
|
|
154
|
+
unless validator.valid?(code)
|
|
155
|
+
fail ArgumentError, "invalid value for \"code\", must be one of #{validator.allowable_values}."
|
|
156
|
+
end
|
|
157
|
+
@code = code
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# Custom attribute writer method checking allowed values (enum).
|
|
161
|
+
# @param [Object] param Object to be assigned
|
|
162
|
+
def param=(param)
|
|
163
|
+
validator = EnumAttributeValidator.new('String', ["replyTo"])
|
|
164
|
+
unless validator.valid?(param)
|
|
165
|
+
fail ArgumentError, "invalid value for \"param\", must be one of #{validator.allowable_values}."
|
|
166
|
+
end
|
|
167
|
+
@param = param
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
# Custom attribute writer method with validation
|
|
171
|
+
# @param [Object] message Value to be assigned
|
|
172
|
+
def message=(message)
|
|
173
|
+
if message.nil?
|
|
174
|
+
fail ArgumentError, 'message cannot be nil'
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
@message = message
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
# Checks equality by comparing each attribute.
|
|
181
|
+
# @param [Object] Object to be compared
|
|
182
|
+
def ==(o)
|
|
183
|
+
return true if self.equal?(o)
|
|
184
|
+
self.class == o.class &&
|
|
185
|
+
code == o.code &&
|
|
186
|
+
param == o.param &&
|
|
187
|
+
message == o.message
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
# @see the `==` method
|
|
191
|
+
# @param [Object] Object to be compared
|
|
192
|
+
def eql?(o)
|
|
193
|
+
self == o
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
# Calculates hash code according to all attributes.
|
|
197
|
+
# @return [Integer] Hash code
|
|
198
|
+
def hash
|
|
199
|
+
[code, param, message].hash
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
# Builds the object from hash
|
|
203
|
+
# @param [Hash] attributes Model attributes in the form of hash
|
|
204
|
+
# @return [Object] Returns the model itself
|
|
205
|
+
def self.build_from_hash(attributes)
|
|
206
|
+
return nil unless attributes.is_a?(Hash)
|
|
207
|
+
attributes = attributes.transform_keys(&:to_sym)
|
|
208
|
+
transformed_hash = {}
|
|
209
|
+
openapi_types.each_pair do |key, type|
|
|
210
|
+
if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
|
|
211
|
+
transformed_hash["#{key}"] = nil
|
|
212
|
+
elsif type =~ /\AArray<(.*)>/i
|
|
213
|
+
# check to ensure the input is an array given that the attribute
|
|
214
|
+
# is documented as an array but the input is not
|
|
215
|
+
if attributes[attribute_map[key]].is_a?(Array)
|
|
216
|
+
transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
|
|
217
|
+
end
|
|
218
|
+
elsif !attributes[attribute_map[key]].nil?
|
|
219
|
+
transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
new(transformed_hash)
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
# Returns the object in the form of hash
|
|
226
|
+
# @return [Hash] Returns the object in the form of hash
|
|
227
|
+
def to_hash
|
|
228
|
+
hash = {}
|
|
229
|
+
self.class.attribute_map.each_pair do |attr, param|
|
|
230
|
+
value = self.send(attr)
|
|
231
|
+
if value.nil?
|
|
232
|
+
is_nullable = self.class.openapi_nullable.include?(attr)
|
|
233
|
+
next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
hash[param] = _to_hash(value)
|
|
237
|
+
end
|
|
238
|
+
hash
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
end
|
|
@@ -57,7 +57,7 @@ module Zernio
|
|
|
57
57
|
# Facebook message tag for messaging outside 24h window. Requires messagingType MESSAGE_TAG. Instagram only supports HUMAN_AGENT.
|
|
58
58
|
attr_accessor :message_tag
|
|
59
59
|
|
|
60
|
-
# Platform message ID to quote-reply to. For WhatsApp, pass the wamid; for Telegram, the Telegram message ID (delivered as message.platformMessageId on webhooks, and as `id` on each entry of the list-messages endpoint). On Slack it threads the reply (thread_ts) instead of quoting.
|
|
60
|
+
# Platform message ID to quote-reply to. For WhatsApp, pass the wamid; for Telegram, the Telegram message ID (delivered as message.platformMessageId on webhooks, and as `id` on each entry of the list-messages endpoint). On Slack it threads the reply (thread_ts) instead of quoting. Instagram and Facebook Messenger do not support send-side quote replies: the message is sent without a quote and the successful response includes a warnings entry with code ignored_field and param replyTo. Other platforms without send-side reply support ignore this field.
|
|
61
61
|
attr_accessor :reply_to
|
|
62
62
|
|
|
63
63
|
attr_accessor :location
|
|
@@ -16,10 +16,10 @@ require 'time'
|
|
|
16
16
|
module Zernio
|
|
17
17
|
# Meta + TikTok (demographics/interests), Google (keyword and device bid adjustment edits only), and LinkedIn (geo countries). Pinterest / X return 501.
|
|
18
18
|
class UpdateAdRequestTargeting < ApiModelBase
|
|
19
|
-
# Google only. The FULL
|
|
19
|
+
# Google only. The FULL desired set of positive keywords for the entire ad group. Omit to leave positives unchanged; [] removes all positives. Negatives are independent. Entries are strings (BROAD) or { text, matchType } with matchType exact | phrase | broad; an omitted matchType also defaults to BROAD. Matching case-insensitive text AND match type retains the existing criterion ID, status, bid overrides, labels and history without a mutation. A changed text or match type uses remove/create, without transferring the old criterion's attributes or history. See Google keyword replacement above for an EXACT-to-BROAD example. Mirrored to GET /v1/ads/keywords immediately.
|
|
20
20
|
attr_accessor :keywords
|
|
21
21
|
|
|
22
|
-
# Google only.
|
|
22
|
+
# Google only. The FULL desired set of negative keywords for the entire ad group, independent of positives. Omit to leave negatives unchanged; [] removes all negatives. Uses the same text/match-type identity and preservation contract as keywords above. Strings and objects without matchType default to BROAD, so resending an EXACT or PHRASE negative as a bare string requests a different criterion. Campaign negatives are separate: use /v1/ads/campaigns/{campaignId}/negative-keywords to manage those.
|
|
23
23
|
attr_accessor :negative_keywords
|
|
24
24
|
|
|
25
25
|
# Google only. The FULL new set of device criteria for the campaign; devices not listed are excluded. Entries are a device name alone (included, no bid adjustment) or { device, bidModifier }.
|
|
@@ -21,7 +21,7 @@ module Zernio
|
|
|
21
21
|
# Updated template components. Optional when only message_send_ttl_seconds changes; at least one of the two is required.
|
|
22
22
|
attr_accessor :components
|
|
23
23
|
|
|
24
|
-
# Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1
|
|
24
|
+
# Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1 is not accepted here (Meta treats it as an empty edit); send a value in range. A TTL-only edit keeps an APPROVED template approved, no re-review. Meta defaults to 600 for AUTHENTICATION and 30 days otherwise. If Meta later recategorises the template, it clears the TTL (read it back to check).
|
|
25
25
|
attr_accessor :message_send_ttl_seconds
|
|
26
26
|
|
|
27
27
|
# Attribute mapping from ruby-style variable name to JSON key.
|
|
@@ -24,7 +24,7 @@ module Zernio
|
|
|
24
24
|
# Updated template components. Optional when only message_send_ttl_seconds changes; at least one of the two is required.
|
|
25
25
|
attr_accessor :components
|
|
26
26
|
|
|
27
|
-
# Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1
|
|
27
|
+
# Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1 is not accepted here (Meta treats it as an empty edit); send a value in range. A TTL-only edit keeps an APPROVED template approved, no re-review. Meta defaults to 600 for AUTHENTICATION and 30 days otherwise. If Meta later recategorises the template, it clears the TTL (read it back to check).
|
|
28
28
|
attr_accessor :message_send_ttl_seconds
|
|
29
29
|
|
|
30
30
|
# Attribute mapping from ruby-style variable name to JSON key.
|
data/lib/zernio-sdk/version.rb
CHANGED
data/lib/zernio-sdk.rb
CHANGED
|
@@ -1348,6 +1348,7 @@ require 'zernio-sdk/models/send_inbox_message200_response_data'
|
|
|
1348
1348
|
require 'zernio-sdk/models/send_inbox_message200_response_data_attachments_inner'
|
|
1349
1349
|
require 'zernio-sdk/models/send_inbox_message200_response_data_partial_failure'
|
|
1350
1350
|
require 'zernio-sdk/models/send_inbox_message200_response_data_partial_failure_platform_error'
|
|
1351
|
+
require 'zernio-sdk/models/send_inbox_message200_response_warnings_inner'
|
|
1351
1352
|
require 'zernio-sdk/models/send_inbox_message400_response'
|
|
1352
1353
|
require 'zernio-sdk/models/send_inbox_message400_response_platform_error'
|
|
1353
1354
|
require 'zernio-sdk/models/send_inbox_message_request'
|
data/openapi.yaml
CHANGED
|
@@ -28422,7 +28422,7 @@ paths:
|
|
|
28422
28422
|
description: Facebook message tag for messaging outside 24h window. Requires messagingType MESSAGE_TAG. Instagram only supports HUMAN_AGENT.
|
|
28423
28423
|
replyTo:
|
|
28424
28424
|
type: string
|
|
28425
|
-
description: 'Platform message ID to quote-reply to. For WhatsApp, pass the wamid; for Telegram, the Telegram message ID (delivered as message.platformMessageId on webhooks, and as `id` on each entry of the list-messages endpoint). On Slack it threads the reply (thread_ts) instead of quoting.
|
|
28425
|
+
description: 'Platform message ID to quote-reply to. For WhatsApp, pass the wamid; for Telegram, the Telegram message ID (delivered as message.platformMessageId on webhooks, and as `id` on each entry of the list-messages endpoint). On Slack it threads the reply (thread_ts) instead of quoting. Instagram and Facebook Messenger do not support send-side quote replies: the message is sent without a quote and the successful response includes a warnings entry with code ignored_field and param replyTo. Other platforms without send-side reply support ignore this field.'
|
|
28426
28426
|
location:
|
|
28427
28427
|
type: object
|
|
28428
28428
|
description: WhatsApp-only. Send a location pin.
|
|
@@ -28512,7 +28512,7 @@ paths:
|
|
|
28512
28512
|
description: Message tag (requires messagingType MESSAGE_TAG)
|
|
28513
28513
|
replyTo:
|
|
28514
28514
|
type: string
|
|
28515
|
-
description: 'Platform message ID to quote-reply to. For WhatsApp, pass the wamid; for Telegram, the Telegram message ID (delivered as message.platformMessageId on webhooks, and as `id` on each entry of the list-messages endpoint). On Slack it threads the reply (thread_ts) instead of quoting.
|
|
28515
|
+
description: 'Platform message ID to quote-reply to. For WhatsApp, pass the wamid; for Telegram, the Telegram message ID (delivered as message.platformMessageId on webhooks, and as `id` on each entry of the list-messages endpoint). On Slack it threads the reply (thread_ts) instead of quoting. Instagram and Facebook Messenger do not support send-side quote replies: the message is sent without a quote and the successful response includes a warnings entry with code ignored_field and param replyTo. Other platforms without send-side reply support ignore this field.'
|
|
28516
28516
|
voiceNote:
|
|
28517
28517
|
type: string
|
|
28518
28518
|
enum: ['true']
|
|
@@ -28526,6 +28526,16 @@ paths:
|
|
|
28526
28526
|
type: object
|
|
28527
28527
|
properties:
|
|
28528
28528
|
success: { type: boolean }
|
|
28529
|
+
warnings:
|
|
28530
|
+
type: array
|
|
28531
|
+
description: Present when a successful send ignored replyTo on Instagram or Facebook Messenger. The message was sent without a quote; do not retry it to apply the reply.
|
|
28532
|
+
items:
|
|
28533
|
+
type: object
|
|
28534
|
+
required: [code, param, message]
|
|
28535
|
+
properties:
|
|
28536
|
+
code: { type: string, enum: [ignored_field] }
|
|
28537
|
+
param: { type: string, enum: [replyTo] }
|
|
28538
|
+
message: { type: string, description: Human-readable explanation of the ignored field. }
|
|
28529
28539
|
data:
|
|
28530
28540
|
type: object
|
|
28531
28541
|
properties:
|
|
@@ -31329,7 +31339,7 @@ paths:
|
|
|
31329
31339
|
type: string
|
|
31330
31340
|
message_send_ttl_seconds:
|
|
31331
31341
|
type: integer
|
|
31332
|
-
description: 'Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1
|
|
31342
|
+
description: 'Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1 (create only) keeps the 30-day default on AUTHENTICATION and UTILITY. Meta defaults to 600 for AUTHENTICATION and 30 days otherwise. If Meta later recategorises the template, it clears the TTL (read it back to check).'
|
|
31333
31343
|
examples:
|
|
31334
31344
|
custom:
|
|
31335
31345
|
summary: Custom template (requires review)
|
|
@@ -31482,8 +31492,9 @@ paths:
|
|
|
31482
31492
|
must match exactly. Variants in `PENDING_DELETION` are not part of the family.
|
|
31483
31493
|
|
|
31484
31494
|
Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved
|
|
31485
|
-
template can be edited once per 24 hours and up to 10 times per 30 days. A
|
|
31486
|
-
sends the variant back to Meta for review, so the `status` returned here is normally `PENDING
|
|
31495
|
+
template can be edited once per 24 hours and up to 10 times per 30 days. A component update
|
|
31496
|
+
sends the variant back to Meta for review, so the `status` returned here is normally `PENDING`;
|
|
31497
|
+
a TTL-only update keeps an APPROVED variant approved.
|
|
31487
31498
|
The final outcome arrives on the `whatsapp.template.status_updated` webhook (which carries the
|
|
31488
31499
|
variant's `templateId` and `language`). A variant already in `PENDING` cannot be edited again
|
|
31489
31500
|
until Meta finishes reviewing it.
|
|
@@ -31519,7 +31530,7 @@ paths:
|
|
|
31519
31530
|
$ref: '#/components/schemas/WhatsAppTemplateComponent'
|
|
31520
31531
|
message_send_ttl_seconds:
|
|
31521
31532
|
type: integer
|
|
31522
|
-
description: 'Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1
|
|
31533
|
+
description: 'Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1 is not accepted here (Meta treats it as an empty edit); send a value in range. A TTL-only edit keeps an APPROVED template approved, no re-review. Meta defaults to 600 for AUTHENTICATION and 30 days otherwise. If Meta later recategorises the template, it clears the TTL (read it back to check).'
|
|
31523
31534
|
example:
|
|
31524
31535
|
accountId: "507f1f77bcf86cd799439011"
|
|
31525
31536
|
language: "es"
|
|
@@ -31695,8 +31706,9 @@ paths:
|
|
|
31695
31706
|
Update one variant's components and/or its message_send_ttl_seconds by its Meta id. Name, language and category cannot change.
|
|
31696
31707
|
|
|
31697
31708
|
Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved
|
|
31698
|
-
template can be edited once per 24 hours and up to 10 times per 30 days. A
|
|
31699
|
-
sends the variant back to Meta for review, so the `status` returned here is normally `PENDING
|
|
31709
|
+
template can be edited once per 24 hours and up to 10 times per 30 days. A component update
|
|
31710
|
+
sends the variant back to Meta for review, so the `status` returned here is normally `PENDING`;
|
|
31711
|
+
a TTL-only update keeps an APPROVED variant approved.
|
|
31700
31712
|
The final outcome arrives on the `whatsapp.template.status_updated` webhook (which carries the
|
|
31701
31713
|
variant's `templateId` and `language`). A variant already in `PENDING` cannot be edited again
|
|
31702
31714
|
until Meta finishes reviewing it.
|
|
@@ -31729,7 +31741,7 @@ paths:
|
|
|
31729
31741
|
$ref: '#/components/schemas/WhatsAppTemplateComponent'
|
|
31730
31742
|
message_send_ttl_seconds:
|
|
31731
31743
|
type: integer
|
|
31732
|
-
description: 'Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1
|
|
31744
|
+
description: 'Delivery validity window in seconds: a message not delivered within it is dropped. Range depends on category: AUTHENTICATION 30 to 900, UTILITY 30 to 43200 (12h), MARKETING 43200 to 2592000 (30 days); -1 is not accepted here (Meta treats it as an empty edit); send a value in range. A TTL-only edit keeps an APPROVED template approved, no re-review. Meta defaults to 600 for AUTHENTICATION and 30 days otherwise. If Meta later recategorises the template, it clears the TTL (read it back to check).'
|
|
31733
31745
|
responses:
|
|
31734
31746
|
'200':
|
|
31735
31747
|
description: Template updated successfully
|
|
@@ -38981,7 +38993,7 @@ paths:
|
|
|
38981
38993
|
- { name: search, in: query, schema: { type: string }, description: 'Case-insensitive substring match on the contact name, email and company. Phone numbers and other platform identifiers are not matched: they live on the contact channel, not on the contact. To reach a contact from an inbox webhook, use the conversation.contactId it already carries.' }
|
|
38982
38994
|
- { name: tag, in: query, schema: { type: string } }
|
|
38983
38995
|
- { name: tags, in: query, schema: { type: string }, description: 'Comma-separated tags, matches contacts carrying any of them' }
|
|
38984
|
-
- { name: platform, in: query, schema: { type: string, enum: [instagram, facebook, telegram, twitter, bluesky, reddit, whatsapp, slack] } }
|
|
38996
|
+
- { name: platform, in: query, schema: { type: string, enum: [instagram, facebook, telegram, twitter, bluesky, reddit, whatsapp, slack, sms] } }
|
|
38985
38997
|
- { name: isSubscribed, in: query, schema: { type: string, enum: ['true', 'false'] } }
|
|
38986
38998
|
- { name: limit, in: query, schema: { type: integer, default: 50, maximum: 200 } }
|
|
38987
38999
|
- { name: skip, in: query, schema: { type: integer, default: 0 } }
|
|
@@ -39052,7 +39064,7 @@ paths:
|
|
|
39052
39064
|
isSubscribed: { type: boolean, default: true }
|
|
39053
39065
|
notes: { type: string }
|
|
39054
39066
|
accountId: { type: string, description: Optional. Creates a channel if provided with platform + platformIdentifier }
|
|
39055
|
-
platform: { type: string, enum: [instagram, facebook, telegram, twitter, bluesky, reddit, whatsapp, slack], description: 'Channel platform. Only the enum values support contact channels; any other platform is rejected with code platform_not_supported.' }
|
|
39067
|
+
platform: { type: string, enum: [instagram, facebook, telegram, twitter, bluesky, reddit, whatsapp, slack, sms], description: 'Channel platform. Only the enum values support contact channels; any other platform is rejected with code platform_not_supported.' }
|
|
39056
39068
|
platformIdentifier: { type: string }
|
|
39057
39069
|
displayIdentifier: { type: string }
|
|
39058
39070
|
responses:
|
|
@@ -39523,7 +39535,7 @@ paths:
|
|
|
39523
39535
|
properties:
|
|
39524
39536
|
profileId: { type: string }
|
|
39525
39537
|
accountId: { type: string }
|
|
39526
|
-
platform: { type: string, enum: [instagram, facebook, telegram, twitter, bluesky, reddit, whatsapp] }
|
|
39538
|
+
platform: { type: string, enum: [instagram, facebook, telegram, twitter, bluesky, reddit, whatsapp, sms, slack] }
|
|
39527
39539
|
name: { type: string }
|
|
39528
39540
|
description: { type: string }
|
|
39529
39541
|
message:
|
|
@@ -40478,7 +40490,7 @@ paths:
|
|
|
40478
40490
|
properties:
|
|
40479
40491
|
profileId: { type: string }
|
|
40480
40492
|
accountId: { type: string }
|
|
40481
|
-
platform: { type: string, enum: [instagram, facebook, telegram, twitter, bluesky, reddit, whatsapp] }
|
|
40493
|
+
platform: { type: string, enum: [instagram, facebook, telegram, twitter, bluesky, reddit, whatsapp, slack] }
|
|
40482
40494
|
name: { type: string }
|
|
40483
40495
|
description: { type: string }
|
|
40484
40496
|
steps:
|
|
@@ -43363,6 +43375,32 @@ paths:
|
|
|
43363
43375
|
- **Pinterest / X / OpenAI Ads**: status + budget only. Sending
|
|
43364
43376
|
`targeting` or `creative` returns 501 with code `unsupported_platform_operation`.
|
|
43365
43377
|
OpenAI Ads budget is lifetime-only (see `budget.type` below).
|
|
43378
|
+
|
|
43379
|
+
**Google keyword replacement:** These edits affect the ad's entire ad group,
|
|
43380
|
+
including sibling ads. Positive (`targeting.keywords`) and negative
|
|
43381
|
+
(`targeting.negativeKeywords`) sets are independent: omit a field to leave
|
|
43382
|
+
that set unchanged, or send `[]` to remove every keyword of that kind.
|
|
43383
|
+
|
|
43384
|
+
Zernio compares each supplied set with Google's live criteria by
|
|
43385
|
+
case-insensitive keyword text and match type. A matching criterion is left
|
|
43386
|
+
untouched, retaining its criterion ID, enabled/paused status, keyword-level
|
|
43387
|
+
bid overrides, labels, and criterion-associated history/statistics. Zernio
|
|
43388
|
+
does not reset its quality score; Google continues to calculate scores and
|
|
43389
|
+
statistics normally. Text comparison does not trim whitespace.
|
|
43390
|
+
|
|
43391
|
+
A bare string or an object without `matchType` means `broad`, not the
|
|
43392
|
+
existing criterion's match type. For example, resending an existing
|
|
43393
|
+
`{ "text": "plumber", "matchType": "exact" }` preserves it; sending
|
|
43394
|
+
`"plumber"` instead removes that EXACT criterion and requests a BROAD one.
|
|
43395
|
+
Changing text or match type removes criteria no longer requested and
|
|
43396
|
+
creates any missing criteria. New criteria get new IDs and do not inherit
|
|
43397
|
+
removed criteria's bid overrides, labels, or history. Historical reporting
|
|
43398
|
+
for a removed criterion is not transferred to its replacement.
|
|
43399
|
+
|
|
43400
|
+
To add keywords without replacing a set, use
|
|
43401
|
+
[POST /v1/ads/keywords](https://docs.zernio.com/ad-campaigns/add-ad-keywords).
|
|
43402
|
+
Use `PATCH /v1/ads/keywords/{keywordId}` to pause/enable one keyword, or
|
|
43403
|
+
`DELETE /v1/ads/keywords/{keywordId}` to remove it.
|
|
43366
43404
|
security:
|
|
43367
43405
|
- bearerAuth: []
|
|
43368
43406
|
parameters:
|
|
@@ -43389,14 +43427,28 @@ paths:
|
|
|
43389
43427
|
properties:
|
|
43390
43428
|
keywords:
|
|
43391
43429
|
type: array
|
|
43392
|
-
description:
|
|
43430
|
+
description: |
|
|
43431
|
+
Google only. The FULL desired set of positive keywords for the entire ad group.
|
|
43432
|
+
Omit to leave positives unchanged; [] removes all positives. Negatives are independent.
|
|
43433
|
+
Entries are strings (BROAD) or { text, matchType } with matchType exact | phrase | broad;
|
|
43434
|
+
an omitted matchType also defaults to BROAD. Matching case-insensitive text AND match type
|
|
43435
|
+
retains the existing criterion ID, status, bid overrides, labels and history without a mutation.
|
|
43436
|
+
A changed text or match type uses remove/create, without transferring the old criterion's
|
|
43437
|
+
attributes or history. See Google keyword replacement above for an EXACT-to-BROAD example.
|
|
43438
|
+
Mirrored to GET /v1/ads/keywords immediately.
|
|
43393
43439
|
items:
|
|
43394
43440
|
oneOf:
|
|
43395
43441
|
- { type: string }
|
|
43396
43442
|
- { type: object, required: [text], properties: { text: { type: string, maxLength: 80 }, matchType: { type: string, enum: [exact, phrase, broad] } } }
|
|
43397
43443
|
negativeKeywords:
|
|
43398
43444
|
type: array
|
|
43399
|
-
description:
|
|
43445
|
+
description: |
|
|
43446
|
+
Google only. The FULL desired set of negative keywords for the entire ad group,
|
|
43447
|
+
independent of positives. Omit to leave negatives unchanged; [] removes all negatives.
|
|
43448
|
+
Uses the same text/match-type identity and preservation contract as keywords above.
|
|
43449
|
+
Strings and objects without matchType default to BROAD, so resending an EXACT or PHRASE
|
|
43450
|
+
negative as a bare string requests a different criterion. Campaign negatives are separate:
|
|
43451
|
+
use /v1/ads/campaigns/{campaignId}/negative-keywords to manage those.
|
|
43400
43452
|
items:
|
|
43401
43453
|
oneOf:
|
|
43402
43454
|
- { type: string }
|
|
@@ -46112,8 +46164,9 @@ paths:
|
|
|
46112
46164
|
multiple ads per ad set are allowed (unlike `dynamicCreative` which is limited to one).
|
|
46113
46165
|
Requires `imageUrl` or `video`, `linkUrl`, and `callToAction`. When set, the top-level
|
|
46114
46166
|
`body` field is used as the `object_story_spec.link_data.message` (the preview text) and
|
|
46115
|
-
`headlines` must also be present.
|
|
46116
|
-
`
|
|
46167
|
+
`headlines` must also be present. On a video creative the copy lands in
|
|
46168
|
+
`video_data.message` / `video_data.title` instead of `link_data`. Mutually exclusive
|
|
46169
|
+
with `dynamicCreative`, `placementAssets`, `carouselCards`, and `creatives[]`.
|
|
46117
46170
|
headlines:
|
|
46118
46171
|
type: array
|
|
46119
46172
|
minItems: 1
|
|
@@ -46121,7 +46174,8 @@ paths:
|
|
|
46121
46174
|
items: { type: string, maxLength: 255 }
|
|
46122
46175
|
description: |
|
|
46123
46176
|
Meta only. Headline variations for Multiple Text Options. Must be sent alongside `bodies`.
|
|
46124
|
-
The top-level `headline` field is used as the `object_story_spec.link_data.name
|
|
46177
|
+
The top-level `headline` field is used as the `object_story_spec.link_data.name`
|
|
46178
|
+
(`video_data.title` on a video creative).
|
|
46125
46179
|
descriptions:
|
|
46126
46180
|
type: array
|
|
46127
46181
|
minItems: 1
|
|
@@ -47257,7 +47311,7 @@ paths:
|
|
|
47257
47311
|
content: { type: array, items: { type: string } }
|
|
47258
47312
|
style: { type: string, enum: [LIST_STYLE, PARAGRAPH_STYLE] }
|
|
47259
47313
|
buttonText: { type: string }
|
|
47260
|
-
coverPhoto: { type: string }
|
|
47314
|
+
coverPhoto: { type: string, format: uri, description: "Direct public JPEG or PNG image URL, up to 5 MB. Redirects, Ad Image hashes and IDs are not supported." }
|
|
47261
47315
|
- type: object
|
|
47262
47316
|
title: LinkedInLeadFormPlatformData
|
|
47263
47317
|
required: [adAccountId, headline, description, questions]
|
|
@@ -453,7 +453,7 @@ describe 'AdCampaignsApi' do
|
|
|
453
453
|
|
|
454
454
|
# unit tests for update_ad
|
|
455
455
|
# Update ad
|
|
456
|
-
# Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Google**: status, budget, KEYWORD edits via `targeting.keywords` / `targeting.negativeKeywords`, and DEVICE bid adjustments via `targeting.devices` — each list you send becomes the FULL new set of its kind (criteria not in the list are removed); a kind left out is untouched. Any other `targeting` field returns 400: Google cannot mutate broad targeting post-create without recreating the campaign. `creative` returns 501. - **LinkedIn**: status, budget, targeting (geo countries only, applied to the LinkedIn Campaign via PARTIAL_UPDATE), and creative (uploads new media, creates a replacement inline creative on the same campaign, pauses the old one). - **Pinterest / X / OpenAI Ads**: status + budget only. Sending `targeting` or `creative` returns 501 with code `unsupported_platform_operation`. OpenAI Ads budget is lifetime-only (see `budget.type` below).
|
|
456
|
+
# Patch one or more fields on an ad. Status, budget, targeting, and creative changes are propagated to the platform. Per-platform support: - **Meta** (Facebook + Instagram): all fields supported. - **TikTok**: status, budget, targeting (via `/v2/adgroup/update/`), and creative (via `/v2/ad/update/` patch-style — `headline` is ignored, `body` becomes `ad_text`). - **Google**: status, budget, KEYWORD edits via `targeting.keywords` / `targeting.negativeKeywords`, and DEVICE bid adjustments via `targeting.devices` — each list you send becomes the FULL new set of its kind (criteria not in the list are removed); a kind left out is untouched. Any other `targeting` field returns 400: Google cannot mutate broad targeting post-create without recreating the campaign. `creative` returns 501. - **LinkedIn**: status, budget, targeting (geo countries only, applied to the LinkedIn Campaign via PARTIAL_UPDATE), and creative (uploads new media, creates a replacement inline creative on the same campaign, pauses the old one). - **Pinterest / X / OpenAI Ads**: status + budget only. Sending `targeting` or `creative` returns 501 with code `unsupported_platform_operation`. OpenAI Ads budget is lifetime-only (see `budget.type` below). **Google keyword replacement:** These edits affect the ad's entire ad group, including sibling ads. Positive (`targeting.keywords`) and negative (`targeting.negativeKeywords`) sets are independent: omit a field to leave that set unchanged, or send `[]` to remove every keyword of that kind. Zernio compares each supplied set with Google's live criteria by case-insensitive keyword text and match type. A matching criterion is left untouched, retaining its criterion ID, enabled/paused status, keyword-level bid overrides, labels, and criterion-associated history/statistics. Zernio does not reset its quality score; Google continues to calculate scores and statistics normally. Text comparison does not trim whitespace. A bare string or an object without `matchType` means `broad`, not the existing criterion's match type. For example, resending an existing `{ \"text\": \"plumber\", \"matchType\": \"exact\" }` preserves it; sending `\"plumber\"` instead removes that EXACT criterion and requests a BROAD one. Changing text or match type removes criteria no longer requested and creates any missing criteria. New criteria get new IDs and do not inherit removed criteria's bid overrides, labels, or history. Historical reporting for a removed criterion is not transferred to its replacement. To add keywords without replacing a set, use [POST /v1/ads/keywords](https://docs.zernio.com/ad-campaigns/add-ad-keywords). Use `PATCH /v1/ads/keywords/{keywordId}` to pause/enable one keyword, or `DELETE /v1/ads/keywords/{keywordId}` to remove it.
|
|
457
457
|
# @param ad_id
|
|
458
458
|
# @param update_ad_request
|
|
459
459
|
# @param [Hash] opts the optional parameters
|
|
@@ -498,7 +498,7 @@ describe 'WhatsAppApi' do
|
|
|
498
498
|
|
|
499
499
|
# unit tests for update_whats_app_template
|
|
500
500
|
# Update template
|
|
501
|
-
# Update one variant's components and/or its message_send_ttl_seconds. Name, language and category cannot change after creation. Meta stores one template per **name + language**, so a name identifies a family of variants, each with its own Meta id. Pass `language` to address one variant. Without it, a name with a single variant resolves to that variant; a name with several returns `409 ambiguous_template` with `details.languages`. A bare language (`es`) matches a single regional variant (`es_ES`); if the family has several regional variants for it, that is also a 409. A full code (`es_ES`) must match exactly. Variants in `PENDING_DELETION` are not part of the family. Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A
|
|
501
|
+
# Update one variant's components and/or its message_send_ttl_seconds. Name, language and category cannot change after creation. Meta stores one template per **name + language**, so a name identifies a family of variants, each with its own Meta id. Pass `language` to address one variant. Without it, a name with a single variant resolves to that variant; a name with several returns `409 ambiguous_template` with `details.languages`. A bare language (`es`) matches a single regional variant (`es_ES`); if the family has several regional variants for it, that is also a 409. A full code (`es_ES`) must match exactly. Variants in `PENDING_DELETION` are not part of the family. Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A component update sends the variant back to Meta for review, so the `status` returned here is normally `PENDING`; a TTL-only update keeps an APPROVED variant approved. The final outcome arrives on the `whatsapp.template.status_updated` webhook (which carries the variant's `templateId` and `language`). A variant already in `PENDING` cannot be edited again until Meta finishes reviewing it.
|
|
502
502
|
# @param template_name Template name (the family).
|
|
503
503
|
# @param update_whats_app_template_request
|
|
504
504
|
# @param [Hash] opts the optional parameters
|
|
@@ -511,7 +511,7 @@ describe 'WhatsAppApi' do
|
|
|
511
511
|
|
|
512
512
|
# unit tests for update_whats_app_template_by_id
|
|
513
513
|
# Update template by id
|
|
514
|
-
# Update one variant's components and/or its message_send_ttl_seconds by its Meta id. Name, language and category cannot change. Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A
|
|
514
|
+
# Update one variant's components and/or its message_send_ttl_seconds by its Meta id. Name, language and category cannot change. Meta only allows editing templates in `APPROVED`, `REJECTED` or `PAUSED` state; an approved template can be edited once per 24 hours and up to 10 times per 30 days. A component update sends the variant back to Meta for review, so the `status` returned here is normally `PENDING`; a TTL-only update keeps an APPROVED variant approved. The final outcome arrives on the `whatsapp.template.status_updated` webhook (which carries the variant's `templateId` and `language`). A variant already in `PENDING` cannot be edited again until Meta finishes reviewing it.
|
|
515
515
|
# @param template_id Meta template id (numeric).
|
|
516
516
|
# @param update_whats_app_template_by_id_request
|
|
517
517
|
# @param [Hash] opts the optional parameters
|
|
@@ -42,7 +42,7 @@ describe Zernio::CreateBroadcastRequest do
|
|
|
42
42
|
describe 'test attribute "platform"' do
|
|
43
43
|
it 'should work' do
|
|
44
44
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
45
|
-
# validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp"])
|
|
45
|
+
# validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp", "sms", "slack"])
|
|
46
46
|
# validator.allowable_values.each do |value|
|
|
47
47
|
# expect { instance.platform = value }.not_to raise_error
|
|
48
48
|
# end
|
|
@@ -78,7 +78,7 @@ describe Zernio::CreateContactRequest do
|
|
|
78
78
|
describe 'test attribute "platform"' do
|
|
79
79
|
it 'should work' do
|
|
80
80
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
81
|
-
# validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp", "slack"])
|
|
81
|
+
# validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp", "slack", "sms"])
|
|
82
82
|
# validator.allowable_values.each do |value|
|
|
83
83
|
# expect { instance.platform = value }.not_to raise_error
|
|
84
84
|
# end
|
|
@@ -42,7 +42,7 @@ describe Zernio::CreateSequenceRequest do
|
|
|
42
42
|
describe 'test attribute "platform"' do
|
|
43
43
|
it 'should work' do
|
|
44
44
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
45
|
-
# validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp"])
|
|
45
|
+
# validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["instagram", "facebook", "telegram", "twitter", "bluesky", "reddit", "whatsapp", "slack"])
|
|
46
46
|
# validator.allowable_values.each do |value|
|
|
47
47
|
# expect { instance.platform = value }.not_to raise_error
|
|
48
48
|
# end
|
|
@@ -33,6 +33,12 @@ describe Zernio::SendInboxMessage200Response do
|
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
|
|
36
|
+
describe 'test attribute "warnings"' 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 "data"' do
|
|
37
43
|
it 'should work' do
|
|
38
44
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
#Zernio API
|
|
3
|
+
|
|
4
|
+
#API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
|
|
5
|
+
|
|
6
|
+
The version of the OpenAPI document: 1.0.4
|
|
7
|
+
Contact: support@zernio.com
|
|
8
|
+
Generated by: https://openapi-generator.tech
|
|
9
|
+
Generator version: 7.19.0
|
|
10
|
+
|
|
11
|
+
=end
|
|
12
|
+
|
|
13
|
+
require 'spec_helper'
|
|
14
|
+
require 'json'
|
|
15
|
+
require 'date'
|
|
16
|
+
|
|
17
|
+
# Unit tests for Zernio::SendInboxMessage200ResponseWarningsInner
|
|
18
|
+
# Automatically generated by openapi-generator (https://openapi-generator.tech)
|
|
19
|
+
# Please update as you see appropriate
|
|
20
|
+
describe Zernio::SendInboxMessage200ResponseWarningsInner do
|
|
21
|
+
#let(:instance) { Zernio::SendInboxMessage200ResponseWarningsInner.new }
|
|
22
|
+
|
|
23
|
+
describe 'test an instance of SendInboxMessage200ResponseWarningsInner' do
|
|
24
|
+
it 'should create an instance of SendInboxMessage200ResponseWarningsInner' do
|
|
25
|
+
# uncomment below to test the instance creation
|
|
26
|
+
#expect(instance).to be_instance_of(Zernio::SendInboxMessage200ResponseWarningsInner)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe 'test attribute "code"' do
|
|
31
|
+
it 'should work' do
|
|
32
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
33
|
+
# validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["ignored_field"])
|
|
34
|
+
# validator.allowable_values.each do |value|
|
|
35
|
+
# expect { instance.code = value }.not_to raise_error
|
|
36
|
+
# end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
describe 'test attribute "param"' do
|
|
41
|
+
it 'should work' do
|
|
42
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
43
|
+
# validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["replyTo"])
|
|
44
|
+
# validator.allowable_values.each do |value|
|
|
45
|
+
# expect { instance.param = value }.not_to raise_error
|
|
46
|
+
# end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe 'test attribute "message"' do
|
|
51
|
+
it 'should work' do
|
|
52
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
Binary file
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: late-sdk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.868
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- OpenAPI-Generator
|
|
@@ -1447,6 +1447,7 @@ files:
|
|
|
1447
1447
|
- docs/SendInboxMessage200ResponseDataAttachmentsInner.md
|
|
1448
1448
|
- docs/SendInboxMessage200ResponseDataPartialFailure.md
|
|
1449
1449
|
- docs/SendInboxMessage200ResponseDataPartialFailurePlatformError.md
|
|
1450
|
+
- docs/SendInboxMessage200ResponseWarningsInner.md
|
|
1450
1451
|
- docs/SendInboxMessage400Response.md
|
|
1451
1452
|
- docs/SendInboxMessage400ResponsePlatformError.md
|
|
1452
1453
|
- docs/SendInboxMessageRequest.md
|
|
@@ -3380,6 +3381,7 @@ files:
|
|
|
3380
3381
|
- lib/zernio-sdk/models/send_inbox_message200_response_data_attachments_inner.rb
|
|
3381
3382
|
- lib/zernio-sdk/models/send_inbox_message200_response_data_partial_failure.rb
|
|
3382
3383
|
- lib/zernio-sdk/models/send_inbox_message200_response_data_partial_failure_platform_error.rb
|
|
3384
|
+
- lib/zernio-sdk/models/send_inbox_message200_response_warnings_inner.rb
|
|
3383
3385
|
- lib/zernio-sdk/models/send_inbox_message400_response.rb
|
|
3384
3386
|
- lib/zernio-sdk/models/send_inbox_message400_response_platform_error.rb
|
|
3385
3387
|
- lib/zernio-sdk/models/send_inbox_message_request.rb
|
|
@@ -5289,6 +5291,7 @@ files:
|
|
|
5289
5291
|
- spec/models/send_inbox_message200_response_data_partial_failure_spec.rb
|
|
5290
5292
|
- spec/models/send_inbox_message200_response_data_spec.rb
|
|
5291
5293
|
- spec/models/send_inbox_message200_response_spec.rb
|
|
5294
|
+
- spec/models/send_inbox_message200_response_warnings_inner_spec.rb
|
|
5292
5295
|
- spec/models/send_inbox_message400_response_platform_error_spec.rb
|
|
5293
5296
|
- spec/models/send_inbox_message400_response_spec.rb
|
|
5294
5297
|
- spec/models/send_inbox_message_request_buttons_inner_spec.rb
|
|
@@ -5800,7 +5803,7 @@ files:
|
|
|
5800
5803
|
- spec/models/you_tube_video_retention_response_retention_curve_inner_spec.rb
|
|
5801
5804
|
- spec/models/you_tube_video_retention_response_spec.rb
|
|
5802
5805
|
- spec/spec_helper.rb
|
|
5803
|
-
- zernio-sdk-0.0.
|
|
5806
|
+
- zernio-sdk-0.0.868.gem
|
|
5804
5807
|
- zernio-sdk.gemspec
|
|
5805
5808
|
homepage: https://openapi-generator.tech
|
|
5806
5809
|
licenses:
|
|
@@ -6960,6 +6963,7 @@ test_files:
|
|
|
6960
6963
|
- spec/models/update_google_business_location_details_request_profile_spec.rb
|
|
6961
6964
|
- spec/models/create_standalone_ad_request_regions_inner_spec.rb
|
|
6962
6965
|
- spec/models/create_phone_number_port_in201_response_orders_inner_spec.rb
|
|
6966
|
+
- spec/models/send_inbox_message200_response_warnings_inner_spec.rb
|
|
6963
6967
|
- spec/models/search_available_phone_numbers200_response_spec.rb
|
|
6964
6968
|
- spec/models/list_comment_automation_logs200_response_misses_samples_inner_spec.rb
|
|
6965
6969
|
- spec/models/update_whats_app_template200_response_template_spec.rb
|
data/zernio-sdk-0.0.866.gem
DELETED
|
Binary file
|