late-sdk 0.0.638 → 0.0.640
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/docs/AdCampaignsApi.md +2 -2
- data/docs/MessagesApi.md +9 -5
- data/docs/PostAnalytics.md +2 -0
- data/docs/ProfilesApi.md +2 -2
- data/docs/SMSApi.md +2 -2
- data/docs/VoiceApi.md +2 -2
- data/docs/WhatsAppCallingApi.md +2 -2
- data/lib/zernio-sdk/api/ad_campaigns_api.rb +2 -2
- data/lib/zernio-sdk/api/messages_api.rb +9 -2
- data/lib/zernio-sdk/api/profiles_api.rb +2 -2
- data/lib/zernio-sdk/api/sms_api.rb +2 -2
- data/lib/zernio-sdk/api/voice_api.rb +2 -2
- data/lib/zernio-sdk/api/whats_app_calling_api.rb +2 -2
- data/lib/zernio-sdk/models/post_analytics.rb +12 -1
- data/lib/zernio-sdk/version.rb +1 -1
- data/openapi.yaml +32 -46
- data/spec/api/ad_campaigns_api_spec.rb +1 -1
- data/spec/api/messages_api_spec.rb +2 -1
- data/spec/api/profiles_api_spec.rb +1 -1
- data/spec/api/sms_api_spec.rb +1 -1
- data/spec/api/voice_api_spec.rb +1 -1
- data/spec/api/whats_app_calling_api_spec.rb +1 -1
- data/spec/models/post_analytics_spec.rb +6 -0
- data/zernio-sdk-0.0.640.gem +0 -0
- metadata +3 -3
- data/zernio-sdk-0.0.638.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: 32bb14aec05997cfeca00157d2d0ea0cadcf0d08248172c1f278e8527aeb42c3
|
|
4
|
+
data.tar.gz: 16ea777414e16dad693c883626bc8ca18f5fef73da8acde9826689c8ba5ddffa
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1fa12aa135577a9f00d36492136b22239c01379c3862ad8d891f5004404b9c1e3cd5d991bb26b58b7535d70c32f5ef80e79edf4b7ea73558a2dd8eb3e5052bdc
|
|
7
|
+
data.tar.gz: ca5c2452f4220ce8c067de3cf4da992931a51256a45e4fabe83237fb73d4499a090d201495c784de1b521c1d41c9f49e5c865ea292c60b5804000c5b9bc69c81
|
data/docs/AdCampaignsApi.md
CHANGED
|
@@ -261,7 +261,7 @@ end
|
|
|
261
261
|
api_instance = Zernio::AdCampaignsApi.new
|
|
262
262
|
create_standalone_ad_request = Zernio::CreateStandaloneAdRequest.new({account_id: 'account_id_example', ad_account_id: 'ad_account_id_example', name: 'name_example'}) # CreateStandaloneAdRequest |
|
|
263
263
|
opts = {
|
|
264
|
-
idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes
|
|
264
|
+
idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
265
265
|
}
|
|
266
266
|
|
|
267
267
|
begin
|
|
@@ -296,7 +296,7 @@ end
|
|
|
296
296
|
| Name | Type | Description | Notes |
|
|
297
297
|
| ---- | ---- | ----------- | ----- |
|
|
298
298
|
| **create_standalone_ad_request** | [**CreateStandaloneAdRequest**](CreateStandaloneAdRequest.md) | | |
|
|
299
|
-
| **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes
|
|
299
|
+
| **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
|
|
300
300
|
|
|
301
301
|
### Return type
|
|
302
302
|
|
data/docs/MessagesApi.md
CHANGED
|
@@ -770,11 +770,11 @@ end
|
|
|
770
770
|
|
|
771
771
|
## send_inbox_message
|
|
772
772
|
|
|
773
|
-
> <SendInboxMessage200Response> send_inbox_message(conversation_id, send_inbox_message_request)
|
|
773
|
+
> <SendInboxMessage200Response> send_inbox_message(conversation_id, send_inbox_message_request, opts)
|
|
774
774
|
|
|
775
775
|
Send message
|
|
776
776
|
|
|
777
|
-
Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp template messages: to send an approved template into this conversation (required when the 24-hour customer-service window is closed), use the `template` field with a single element carrying the template reference: `{ \"elements\": [{ \"name\": ..., \"language\": ..., \"components\": [...] }] }`. See the `template` field below for the exact shape. To send a template to a phone number you have no conversation with yet, use the create-conversation endpoint (POST /v1/inbox/conversations) instead. WhatsApp rich interactive messages (list, CTA URL, Flow, location request) are available via the `interactive` field. Tap events are delivered through the `message.received` webhook with WhatsApp-specific `metadata` fields (`interactiveType`, `interactiveId`, `flowResponseJson`, `flowResponseData`).
|
|
777
|
+
Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp template messages: to send an approved template into this conversation (required when the 24-hour customer-service window is closed), use the `template` field with a single element carrying the template reference: `{ \"elements\": [{ \"name\": ..., \"language\": ..., \"components\": [...] }] }`. See the `template` field below for the exact shape. To send a template to a phone number you have no conversation with yet, use the create-conversation endpoint (POST /v1/inbox/conversations) instead. WhatsApp rich interactive messages (list, CTA URL, Flow, location request) are available via the `interactive` field. Tap events are delivered through the `message.received` webhook with WhatsApp-specific `metadata` fields (`interactiveType`, `interactiveId`, `flowResponseJson`, `flowResponseData`). **Idempotency:** send an `Idempotency-Key` header to make retries safe (e.g. after a client-side timeout where delivery is unknown): same key + same body replays the original response (with `Idempotent-Replayed: true`) instead of sending the message a second time; same key + different body returns 422; a key still in flight returns 409. Works for JSON and multipart (file upload) requests alike. Keys are retained for 24 hours.
|
|
778
778
|
|
|
779
779
|
### Examples
|
|
780
780
|
|
|
@@ -790,10 +790,13 @@ end
|
|
|
790
790
|
api_instance = Zernio::MessagesApi.new
|
|
791
791
|
conversation_id = 'conversation_id_example' # String | The conversation ID (id field from list conversations endpoint). This is the platform-specific conversation identifier, not an internal database ID.
|
|
792
792
|
send_inbox_message_request = Zernio::SendInboxMessageRequest.new({account_id: 'account_id_example'}) # SendInboxMessageRequest |
|
|
793
|
+
opts = {
|
|
794
|
+
idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
795
|
+
}
|
|
793
796
|
|
|
794
797
|
begin
|
|
795
798
|
# Send message
|
|
796
|
-
result = api_instance.send_inbox_message(conversation_id, send_inbox_message_request)
|
|
799
|
+
result = api_instance.send_inbox_message(conversation_id, send_inbox_message_request, opts)
|
|
797
800
|
p result
|
|
798
801
|
rescue Zernio::ApiError => e
|
|
799
802
|
puts "Error when calling MessagesApi->send_inbox_message: #{e}"
|
|
@@ -804,12 +807,12 @@ end
|
|
|
804
807
|
|
|
805
808
|
This returns an Array which contains the response data, status code and headers.
|
|
806
809
|
|
|
807
|
-
> <Array(<SendInboxMessage200Response>, Integer, Hash)> send_inbox_message_with_http_info(conversation_id, send_inbox_message_request)
|
|
810
|
+
> <Array(<SendInboxMessage200Response>, Integer, Hash)> send_inbox_message_with_http_info(conversation_id, send_inbox_message_request, opts)
|
|
808
811
|
|
|
809
812
|
```ruby
|
|
810
813
|
begin
|
|
811
814
|
# Send message
|
|
812
|
-
data, status_code, headers = api_instance.send_inbox_message_with_http_info(conversation_id, send_inbox_message_request)
|
|
815
|
+
data, status_code, headers = api_instance.send_inbox_message_with_http_info(conversation_id, send_inbox_message_request, opts)
|
|
813
816
|
p status_code # => 2xx
|
|
814
817
|
p headers # => { ... }
|
|
815
818
|
p data # => <SendInboxMessage200Response>
|
|
@@ -824,6 +827,7 @@ end
|
|
|
824
827
|
| ---- | ---- | ----------- | ----- |
|
|
825
828
|
| **conversation_id** | **String** | The conversation ID (id field from list conversations endpoint). This is the platform-specific conversation identifier, not an internal database ID. | |
|
|
826
829
|
| **send_inbox_message_request** | [**SendInboxMessageRequest**](SendInboxMessageRequest.md) | | |
|
|
830
|
+
| **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
|
|
827
831
|
|
|
828
832
|
### Return type
|
|
829
833
|
|
data/docs/PostAnalytics.md
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
| **follows** | **Integer** | Instagram feed posts and stories only: organic accounts that started following from this post. 0 for reels and other platforms. | [optional] |
|
|
16
16
|
| **ig_reels_avg_watch_time** | **Integer** | Instagram Reels only: average watch time per play, in milliseconds. 0 for non-Reels media and other platforms. | [optional] |
|
|
17
17
|
| **ig_reels_video_view_total_time** | **Integer** | Instagram Reels only: total watch time including replays, in milliseconds. 0 for non-Reels media and other platforms. | [optional] |
|
|
18
|
+
| **video_duration_seconds** | **Integer** | Video length in seconds. Currently Instagram Reels only; combine with igReelsAvgWatchTime (ms) to estimate retention. Null when unknown (other platforms, non-video media, or when Instagram does not expose the media URL, e.g. reels with copyrighted audio). | [optional] |
|
|
18
19
|
| **engagement_rate** | **Float** | | [optional] |
|
|
19
20
|
| **last_updated** | **Time** | | [optional] |
|
|
20
21
|
|
|
@@ -35,6 +36,7 @@ instance = Zernio::PostAnalytics.new(
|
|
|
35
36
|
follows: 0,
|
|
36
37
|
ig_reels_avg_watch_time: 0,
|
|
37
38
|
ig_reels_video_view_total_time: 0,
|
|
39
|
+
video_duration_seconds: 30,
|
|
38
40
|
engagement_rate: 0,
|
|
39
41
|
last_updated: null
|
|
40
42
|
)
|
data/docs/ProfilesApi.md
CHANGED
|
@@ -33,7 +33,7 @@ end
|
|
|
33
33
|
api_instance = Zernio::ProfilesApi.new
|
|
34
34
|
create_profile_request = Zernio::CreateProfileRequest.new({name: 'name_example'}) # CreateProfileRequest |
|
|
35
35
|
opts = {
|
|
36
|
-
idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes
|
|
36
|
+
idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
begin
|
|
@@ -68,7 +68,7 @@ end
|
|
|
68
68
|
| Name | Type | Description | Notes |
|
|
69
69
|
| ---- | ---- | ----------- | ----- |
|
|
70
70
|
| **create_profile_request** | [**CreateProfileRequest**](CreateProfileRequest.md) | | |
|
|
71
|
-
| **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes
|
|
71
|
+
| **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
|
|
72
72
|
|
|
73
73
|
### Return type
|
|
74
74
|
|
data/docs/SMSApi.md
CHANGED
|
@@ -1157,7 +1157,7 @@ end
|
|
|
1157
1157
|
api_instance = Zernio::SMSApi.new
|
|
1158
1158
|
send_sms_request = Zernio::SendSmsRequest.new({from: 'from_example', to: 'to_example'}) # SendSmsRequest |
|
|
1159
1159
|
opts = {
|
|
1160
|
-
idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes
|
|
1160
|
+
idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
1161
1161
|
}
|
|
1162
1162
|
|
|
1163
1163
|
begin
|
|
@@ -1192,7 +1192,7 @@ end
|
|
|
1192
1192
|
| Name | Type | Description | Notes |
|
|
1193
1193
|
| ---- | ---- | ----------- | ----- |
|
|
1194
1194
|
| **send_sms_request** | [**SendSmsRequest**](SendSmsRequest.md) | | |
|
|
1195
|
-
| **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes
|
|
1195
|
+
| **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
|
|
1196
1196
|
|
|
1197
1197
|
### Return type
|
|
1198
1198
|
|
data/docs/VoiceApi.md
CHANGED
|
@@ -39,7 +39,7 @@ end
|
|
|
39
39
|
api_instance = Zernio::VoiceApi.new
|
|
40
40
|
create_voice_call_request = Zernio::CreateVoiceCallRequest.new({to: 'to_example'}) # CreateVoiceCallRequest |
|
|
41
41
|
opts = {
|
|
42
|
-
idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes
|
|
42
|
+
idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
begin
|
|
@@ -74,7 +74,7 @@ end
|
|
|
74
74
|
| Name | Type | Description | Notes |
|
|
75
75
|
| ---- | ---- | ----------- | ----- |
|
|
76
76
|
| **create_voice_call_request** | [**CreateVoiceCallRequest**](CreateVoiceCallRequest.md) | | |
|
|
77
|
-
| **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes
|
|
77
|
+
| **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
|
|
78
78
|
|
|
79
79
|
### Return type
|
|
80
80
|
|
data/docs/WhatsAppCallingApi.md
CHANGED
|
@@ -756,7 +756,7 @@ end
|
|
|
756
756
|
api_instance = Zernio::WhatsAppCallingApi.new
|
|
757
757
|
initiate_whats_app_call_request = Zernio::InitiateWhatsAppCallRequest.new({account_id: 'account_id_example', to: 'to_example'}) # InitiateWhatsAppCallRequest |
|
|
758
758
|
opts = {
|
|
759
|
-
idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes
|
|
759
|
+
idempotency_key: 'idempotency_key_example' # String | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
760
760
|
}
|
|
761
761
|
|
|
762
762
|
begin
|
|
@@ -791,7 +791,7 @@ end
|
|
|
791
791
|
| Name | Type | Description | Notes |
|
|
792
792
|
| ---- | ---- | ----------- | ----- |
|
|
793
793
|
| **initiate_whats_app_call_request** | [**InitiateWhatsAppCallRequest**](InitiateWhatsAppCallRequest.md) | | |
|
|
794
|
-
| **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes
|
|
794
|
+
| **idempotency_key** | **String** | Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409. | [optional] |
|
|
795
795
|
|
|
796
796
|
### Return type
|
|
797
797
|
|
|
@@ -234,7 +234,7 @@ module Zernio
|
|
|
234
234
|
# Creates a paid ad with custom creative across Meta, Google Ads, Pinterest, TikTok, X/Twitter, LinkedIn, and OpenAI Ads (ChatGPT Ads). Supports three mutually-exclusive request shapes selected by the body, a legacy single-creative shape (all platforms, default), a Meta-only multi-creative shape via the creatives array (one ad set with N ads sharing budget and targeting), and an attach shape via adSetId that adds one new ad to an existing ad set, inheriting its budget, targeting, and schedule (Meta, TikTok, and LinkedIn; on LinkedIn adSetId is the existing Campaign id, and the budget, schedule, targeting and bidding fields must be omitted). Per-platform required fields, budget minimums, and video-ad rules are documented on each property below. LinkedIn creates a Single Image or Single Video Ad backed by a Direct Sponsored Content \"dark post\" authored by a Company Page (see `organizationId`); supported goals are engagement, traffic, awareness, and video_views (video ads use the `video` field; video_views requires a video), and traffic ads require `linkUrl`. **Idempotency:** this endpoint is not idempotent at the platform level (a blind retry creates a second campaign/ad set/ad). Send an `Idempotency-Key` header to make retries safe: the first request with a given key creates the ad and we store the response; a retry with the same key replays that exact response (with `Idempotent-Replayed: true`) instead of creating duplicates. Reusing a key with a different body returns 422; a key whose first request is still in flight returns 409 (retry after a short backoff). Keys are scoped to your credential and expire after 24h.
|
|
235
235
|
# @param create_standalone_ad_request [CreateStandaloneAdRequest]
|
|
236
236
|
# @param [Hash] opts the optional parameters
|
|
237
|
-
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes
|
|
237
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
238
238
|
# @return [CreateStandaloneAd200Response]
|
|
239
239
|
def create_standalone_ad(create_standalone_ad_request, opts = {})
|
|
240
240
|
data, _status_code, _headers = create_standalone_ad_with_http_info(create_standalone_ad_request, opts)
|
|
@@ -245,7 +245,7 @@ module Zernio
|
|
|
245
245
|
# Creates a paid ad with custom creative across Meta, Google Ads, Pinterest, TikTok, X/Twitter, LinkedIn, and OpenAI Ads (ChatGPT Ads). Supports three mutually-exclusive request shapes selected by the body, a legacy single-creative shape (all platforms, default), a Meta-only multi-creative shape via the creatives array (one ad set with N ads sharing budget and targeting), and an attach shape via adSetId that adds one new ad to an existing ad set, inheriting its budget, targeting, and schedule (Meta, TikTok, and LinkedIn; on LinkedIn adSetId is the existing Campaign id, and the budget, schedule, targeting and bidding fields must be omitted). Per-platform required fields, budget minimums, and video-ad rules are documented on each property below. LinkedIn creates a Single Image or Single Video Ad backed by a Direct Sponsored Content \"dark post\" authored by a Company Page (see `organizationId`); supported goals are engagement, traffic, awareness, and video_views (video ads use the `video` field; video_views requires a video), and traffic ads require `linkUrl`. **Idempotency:** this endpoint is not idempotent at the platform level (a blind retry creates a second campaign/ad set/ad). Send an `Idempotency-Key` header to make retries safe: the first request with a given key creates the ad and we store the response; a retry with the same key replays that exact response (with `Idempotent-Replayed: true`) instead of creating duplicates. Reusing a key with a different body returns 422; a key whose first request is still in flight returns 409 (retry after a short backoff). Keys are scoped to your credential and expire after 24h.
|
|
246
246
|
# @param create_standalone_ad_request [CreateStandaloneAdRequest]
|
|
247
247
|
# @param [Hash] opts the optional parameters
|
|
248
|
-
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes
|
|
248
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
249
249
|
# @return [Array<(CreateStandaloneAd200Response, Integer, Hash)>] CreateStandaloneAd200Response data, response status code and response headers
|
|
250
250
|
def create_standalone_ad_with_http_info(create_standalone_ad_request, opts = {})
|
|
251
251
|
if @api_client.config.debugging
|
|
@@ -839,10 +839,11 @@ module Zernio
|
|
|
839
839
|
end
|
|
840
840
|
|
|
841
841
|
# Send message
|
|
842
|
-
# Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp template messages: to send an approved template into this conversation (required when the 24-hour customer-service window is closed), use the `template` field with a single element carrying the template reference: `{ \"elements\": [{ \"name\": ..., \"language\": ..., \"components\": [...] }] }`. See the `template` field below for the exact shape. To send a template to a phone number you have no conversation with yet, use the create-conversation endpoint (POST /v1/inbox/conversations) instead. WhatsApp rich interactive messages (list, CTA URL, Flow, location request) are available via the `interactive` field. Tap events are delivered through the `message.received` webhook with WhatsApp-specific `metadata` fields (`interactiveType`, `interactiveId`, `flowResponseJson`, `flowResponseData`).
|
|
842
|
+
# Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp template messages: to send an approved template into this conversation (required when the 24-hour customer-service window is closed), use the `template` field with a single element carrying the template reference: `{ \"elements\": [{ \"name\": ..., \"language\": ..., \"components\": [...] }] }`. See the `template` field below for the exact shape. To send a template to a phone number you have no conversation with yet, use the create-conversation endpoint (POST /v1/inbox/conversations) instead. WhatsApp rich interactive messages (list, CTA URL, Flow, location request) are available via the `interactive` field. Tap events are delivered through the `message.received` webhook with WhatsApp-specific `metadata` fields (`interactiveType`, `interactiveId`, `flowResponseJson`, `flowResponseData`). **Idempotency:** send an `Idempotency-Key` header to make retries safe (e.g. after a client-side timeout where delivery is unknown): same key + same body replays the original response (with `Idempotent-Replayed: true`) instead of sending the message a second time; same key + different body returns 422; a key still in flight returns 409. Works for JSON and multipart (file upload) requests alike. Keys are retained for 24 hours.
|
|
843
843
|
# @param conversation_id [String] The conversation ID (id field from list conversations endpoint). This is the platform-specific conversation identifier, not an internal database ID.
|
|
844
844
|
# @param send_inbox_message_request [SendInboxMessageRequest]
|
|
845
845
|
# @param [Hash] opts the optional parameters
|
|
846
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
846
847
|
# @return [SendInboxMessage200Response]
|
|
847
848
|
def send_inbox_message(conversation_id, send_inbox_message_request, opts = {})
|
|
848
849
|
data, _status_code, _headers = send_inbox_message_with_http_info(conversation_id, send_inbox_message_request, opts)
|
|
@@ -850,10 +851,11 @@ module Zernio
|
|
|
850
851
|
end
|
|
851
852
|
|
|
852
853
|
# Send message
|
|
853
|
-
# Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp template messages: to send an approved template into this conversation (required when the 24-hour customer-service window is closed), use the `template` field with a single element carrying the template reference: `{ \"elements\": [{ \"name\": ..., \"language\": ..., \"components\": [...] }] }`. See the `template` field below for the exact shape. To send a template to a phone number you have no conversation with yet, use the create-conversation endpoint (POST /v1/inbox/conversations) instead. WhatsApp rich interactive messages (list, CTA URL, Flow, location request) are available via the `interactive` field. Tap events are delivered through the `message.received` webhook with WhatsApp-specific `metadata` fields (`interactiveType`, `interactiveId`, `flowResponseJson`, `flowResponseData`).
|
|
854
|
+
# Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp template messages: to send an approved template into this conversation (required when the 24-hour customer-service window is closed), use the `template` field with a single element carrying the template reference: `{ \"elements\": [{ \"name\": ..., \"language\": ..., \"components\": [...] }] }`. See the `template` field below for the exact shape. To send a template to a phone number you have no conversation with yet, use the create-conversation endpoint (POST /v1/inbox/conversations) instead. WhatsApp rich interactive messages (list, CTA URL, Flow, location request) are available via the `interactive` field. Tap events are delivered through the `message.received` webhook with WhatsApp-specific `metadata` fields (`interactiveType`, `interactiveId`, `flowResponseJson`, `flowResponseData`). **Idempotency:** send an `Idempotency-Key` header to make retries safe (e.g. after a client-side timeout where delivery is unknown): same key + same body replays the original response (with `Idempotent-Replayed: true`) instead of sending the message a second time; same key + different body returns 422; a key still in flight returns 409. Works for JSON and multipart (file upload) requests alike. Keys are retained for 24 hours.
|
|
854
855
|
# @param conversation_id [String] The conversation ID (id field from list conversations endpoint). This is the platform-specific conversation identifier, not an internal database ID.
|
|
855
856
|
# @param send_inbox_message_request [SendInboxMessageRequest]
|
|
856
857
|
# @param [Hash] opts the optional parameters
|
|
858
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
857
859
|
# @return [Array<(SendInboxMessage200Response, Integer, Hash)>] SendInboxMessage200Response data, response status code and response headers
|
|
858
860
|
def send_inbox_message_with_http_info(conversation_id, send_inbox_message_request, opts = {})
|
|
859
861
|
if @api_client.config.debugging
|
|
@@ -867,6 +869,10 @@ module Zernio
|
|
|
867
869
|
if @api_client.config.client_side_validation && send_inbox_message_request.nil?
|
|
868
870
|
fail ArgumentError, "Missing the required parameter 'send_inbox_message_request' when calling MessagesApi.send_inbox_message"
|
|
869
871
|
end
|
|
872
|
+
if @api_client.config.client_side_validation && !opts[:'idempotency_key'].nil? && opts[:'idempotency_key'].to_s.length > 255
|
|
873
|
+
fail ArgumentError, 'invalid value for "opts[:"idempotency_key"]" when calling MessagesApi.send_inbox_message, the character length must be smaller than or equal to 255.'
|
|
874
|
+
end
|
|
875
|
+
|
|
870
876
|
# resource path
|
|
871
877
|
local_var_path = '/v1/inbox/conversations/{conversationId}/messages'.sub('{' + 'conversationId' + '}', CGI.escape(conversation_id.to_s))
|
|
872
878
|
|
|
@@ -882,6 +888,7 @@ module Zernio
|
|
|
882
888
|
if !content_type.nil?
|
|
883
889
|
header_params['Content-Type'] = content_type
|
|
884
890
|
end
|
|
891
|
+
header_params[:'Idempotency-Key'] = opts[:'idempotency_key'] if !opts[:'idempotency_key'].nil?
|
|
885
892
|
|
|
886
893
|
# form parameters
|
|
887
894
|
form_params = opts[:form_params] || {}
|
|
@@ -23,7 +23,7 @@ module Zernio
|
|
|
23
23
|
# Creates a new profile with a name, optional description, and color. Names are unique per workspace: a duplicate returns a 409 whose details.existingProfileId carries the id of the existing profile. Send an Idempotency-Key header to make retries safe: a retried create with the same key and body replays the original 201 (same _id) instead of conflicting.
|
|
24
24
|
# @param create_profile_request [CreateProfileRequest]
|
|
25
25
|
# @param [Hash] opts the optional parameters
|
|
26
|
-
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes
|
|
26
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
27
27
|
# @return [ProfileCreateResponse]
|
|
28
28
|
def create_profile(create_profile_request, opts = {})
|
|
29
29
|
data, _status_code, _headers = create_profile_with_http_info(create_profile_request, opts)
|
|
@@ -34,7 +34,7 @@ module Zernio
|
|
|
34
34
|
# Creates a new profile with a name, optional description, and color. Names are unique per workspace: a duplicate returns a 409 whose details.existingProfileId carries the id of the existing profile. Send an Idempotency-Key header to make retries safe: a retried create with the same key and body replays the original 201 (same _id) instead of conflicting.
|
|
35
35
|
# @param create_profile_request [CreateProfileRequest]
|
|
36
36
|
# @param [Hash] opts the optional parameters
|
|
37
|
-
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes
|
|
37
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
38
38
|
# @return [Array<(ProfileCreateResponse, Integer, Hash)>] ProfileCreateResponse data, response status code and response headers
|
|
39
39
|
def create_profile_with_http_info(create_profile_request, opts = {})
|
|
40
40
|
if @api_client.config.debugging
|
|
@@ -1072,7 +1072,7 @@ module Zernio
|
|
|
1072
1072
|
# Sends an SMS (or MMS when `mediaUrls` is set) from one of your SMS-enabled numbers. At least one of `text` / `mediaUrls` is required. Both numbers are normalized to E.164, so `from` matches regardless of formatting and replies thread into the same inbox conversation. US numbers must have an approved carrier registration (`/v1/sms/registrations`) before messages deliver. **Idempotency:** send an `Idempotency-Key` header to make retries safe: same key + same body replays the original response instead of sending a second message; same key + different body returns 422; a key still in flight returns 409.
|
|
1073
1073
|
# @param send_sms_request [SendSmsRequest]
|
|
1074
1074
|
# @param [Hash] opts the optional parameters
|
|
1075
|
-
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes
|
|
1075
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
1076
1076
|
# @return [SendSms200Response]
|
|
1077
1077
|
def send_sms(send_sms_request, opts = {})
|
|
1078
1078
|
data, _status_code, _headers = send_sms_with_http_info(send_sms_request, opts)
|
|
@@ -1083,7 +1083,7 @@ module Zernio
|
|
|
1083
1083
|
# Sends an SMS (or MMS when `mediaUrls` is set) from one of your SMS-enabled numbers. At least one of `text` / `mediaUrls` is required. Both numbers are normalized to E.164, so `from` matches regardless of formatting and replies thread into the same inbox conversation. US numbers must have an approved carrier registration (`/v1/sms/registrations`) before messages deliver. **Idempotency:** send an `Idempotency-Key` header to make retries safe: same key + same body replays the original response instead of sending a second message; same key + different body returns 422; a key still in flight returns 409.
|
|
1084
1084
|
# @param send_sms_request [SendSmsRequest]
|
|
1085
1085
|
# @param [Hash] opts the optional parameters
|
|
1086
|
-
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes
|
|
1086
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
1087
1087
|
# @return [Array<(SendSms200Response, Integer, Hash)>] SendSms200Response data, response status code and response headers
|
|
1088
1088
|
def send_sms_with_http_info(send_sms_request, opts = {})
|
|
1089
1089
|
if @api_client.config.debugging
|
|
@@ -23,7 +23,7 @@ module Zernio
|
|
|
23
23
|
# Dials `to` FROM one of your voice-enabled numbers and, on answer, bridges the callee to the number's stored forward destination, or to the per-call `forwardTo` override. Destinations can be your own AI voice agent (Vapi/Retell), a phone, or a SIP endpoint. An optional `greeting` is spoken to the callee before the bridge. The 200 response means the call is dialing; the lifecycle continues asynchronously (track it via `GET /v1/voice/calls/{id}` or the `call.*` webhooks). Outbound calls are capped per rolling hour (429 when hit). **Idempotency:** send an `Idempotency-Key` header to make retries safe; same key + same body replays the original response instead of dialing (and billing) a second call.
|
|
24
24
|
# @param create_voice_call_request [CreateVoiceCallRequest]
|
|
25
25
|
# @param [Hash] opts the optional parameters
|
|
26
|
-
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes
|
|
26
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
27
27
|
# @return [CreateVoiceCall200Response]
|
|
28
28
|
def create_voice_call(create_voice_call_request, opts = {})
|
|
29
29
|
data, _status_code, _headers = create_voice_call_with_http_info(create_voice_call_request, opts)
|
|
@@ -34,7 +34,7 @@ module Zernio
|
|
|
34
34
|
# Dials `to` FROM one of your voice-enabled numbers and, on answer, bridges the callee to the number's stored forward destination, or to the per-call `forwardTo` override. Destinations can be your own AI voice agent (Vapi/Retell), a phone, or a SIP endpoint. An optional `greeting` is spoken to the callee before the bridge. The 200 response means the call is dialing; the lifecycle continues asynchronously (track it via `GET /v1/voice/calls/{id}` or the `call.*` webhooks). Outbound calls are capped per rolling hour (429 when hit). **Idempotency:** send an `Idempotency-Key` header to make retries safe; same key + same body replays the original response instead of dialing (and billing) a second call.
|
|
35
35
|
# @param create_voice_call_request [CreateVoiceCallRequest]
|
|
36
36
|
# @param [Hash] opts the optional parameters
|
|
37
|
-
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes
|
|
37
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
38
38
|
# @return [Array<(CreateVoiceCall200Response, Integer, Hash)>] CreateVoiceCall200Response data, response status code and response headers
|
|
39
39
|
def create_voice_call_with_http_info(create_voice_call_request, opts = {})
|
|
40
40
|
if @api_client.config.debugging
|
|
@@ -739,7 +739,7 @@ module Zernio
|
|
|
739
739
|
# Initiates an outbound Business-Initiated Call. The Telnyx-side SIP leg is originated server-side (Option B: SIP-first). Telnyx INVITEs Meta directly over TLS:5061 with the SIP digest credentials we captured at calling-enablement time). No client-side SDP is required; pass only `accountId` and `to`. To send the consumer the call-consent prompt instead of placing a call, pass `action: \"send_call_permission_request\"` (+ optional `bodyText`). The consumer must tap Allow in WhatsApp before `start_call` is permitted; Meta limits the prompt to 1 per consumer per 24h (2 per 7 days) and requires an open 24h service window. **Idempotency:** send an `Idempotency-Key` header to make retries safe; same key + same body replays the original response instead of dialing (and billing) a second call.
|
|
740
740
|
# @param initiate_whats_app_call_request [InitiateWhatsAppCallRequest]
|
|
741
741
|
# @param [Hash] opts the optional parameters
|
|
742
|
-
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes
|
|
742
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
743
743
|
# @return [InitiateWhatsAppCall200Response]
|
|
744
744
|
def initiate_whats_app_call(initiate_whats_app_call_request, opts = {})
|
|
745
745
|
data, _status_code, _headers = initiate_whats_app_call_with_http_info(initiate_whats_app_call_request, opts)
|
|
@@ -750,7 +750,7 @@ module Zernio
|
|
|
750
750
|
# Initiates an outbound Business-Initiated Call. The Telnyx-side SIP leg is originated server-side (Option B: SIP-first). Telnyx INVITEs Meta directly over TLS:5061 with the SIP digest credentials we captured at calling-enablement time). No client-side SDP is required; pass only `accountId` and `to`. To send the consumer the call-consent prompt instead of placing a call, pass `action: \"send_call_permission_request\"` (+ optional `bodyText`). The consumer must tap Allow in WhatsApp before `start_call` is permitted; Meta limits the prompt to 1 per consumer per 24h (2 per 7 days) and requires an open 24h service window. **Idempotency:** send an `Idempotency-Key` header to make retries safe; same key + same body replays the original response instead of dialing (and billing) a second call.
|
|
751
751
|
# @param initiate_whats_app_call_request [InitiateWhatsAppCallRequest]
|
|
752
752
|
# @param [Hash] opts the optional parameters
|
|
753
|
-
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes
|
|
753
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
754
754
|
# @return [Array<(InitiateWhatsAppCall200Response, Integer, Hash)>] InitiateWhatsAppCall200Response data, response status code and response headers
|
|
755
755
|
def initiate_whats_app_call_with_http_info(initiate_whats_app_call_request, opts = {})
|
|
756
756
|
if @api_client.config.debugging
|
|
@@ -41,6 +41,9 @@ module Zernio
|
|
|
41
41
|
# Instagram Reels only: total watch time including replays, in milliseconds. 0 for non-Reels media and other platforms.
|
|
42
42
|
attr_accessor :ig_reels_video_view_total_time
|
|
43
43
|
|
|
44
|
+
# Video length in seconds. Currently Instagram Reels only; combine with igReelsAvgWatchTime (ms) to estimate retention. Null when unknown (other platforms, non-video media, or when Instagram does not expose the media URL, e.g. reels with copyrighted audio).
|
|
45
|
+
attr_accessor :video_duration_seconds
|
|
46
|
+
|
|
44
47
|
attr_accessor :engagement_rate
|
|
45
48
|
|
|
46
49
|
attr_accessor :last_updated
|
|
@@ -59,6 +62,7 @@ module Zernio
|
|
|
59
62
|
:'follows' => :'follows',
|
|
60
63
|
:'ig_reels_avg_watch_time' => :'igReelsAvgWatchTime',
|
|
61
64
|
:'ig_reels_video_view_total_time' => :'igReelsVideoViewTotalTime',
|
|
65
|
+
:'video_duration_seconds' => :'videoDurationSeconds',
|
|
62
66
|
:'engagement_rate' => :'engagementRate',
|
|
63
67
|
:'last_updated' => :'lastUpdated'
|
|
64
68
|
}
|
|
@@ -88,6 +92,7 @@ module Zernio
|
|
|
88
92
|
:'follows' => :'Integer',
|
|
89
93
|
:'ig_reels_avg_watch_time' => :'Integer',
|
|
90
94
|
:'ig_reels_video_view_total_time' => :'Integer',
|
|
95
|
+
:'video_duration_seconds' => :'Integer',
|
|
91
96
|
:'engagement_rate' => :'Float',
|
|
92
97
|
:'last_updated' => :'Time'
|
|
93
98
|
}
|
|
@@ -96,6 +101,7 @@ module Zernio
|
|
|
96
101
|
# List of attributes with nullable: true
|
|
97
102
|
def self.openapi_nullable
|
|
98
103
|
Set.new([
|
|
104
|
+
:'video_duration_seconds',
|
|
99
105
|
])
|
|
100
106
|
end
|
|
101
107
|
|
|
@@ -159,6 +165,10 @@ module Zernio
|
|
|
159
165
|
self.ig_reels_video_view_total_time = attributes[:'ig_reels_video_view_total_time']
|
|
160
166
|
end
|
|
161
167
|
|
|
168
|
+
if attributes.key?(:'video_duration_seconds')
|
|
169
|
+
self.video_duration_seconds = attributes[:'video_duration_seconds']
|
|
170
|
+
end
|
|
171
|
+
|
|
162
172
|
if attributes.key?(:'engagement_rate')
|
|
163
173
|
self.engagement_rate = attributes[:'engagement_rate']
|
|
164
174
|
end
|
|
@@ -199,6 +209,7 @@ module Zernio
|
|
|
199
209
|
follows == o.follows &&
|
|
200
210
|
ig_reels_avg_watch_time == o.ig_reels_avg_watch_time &&
|
|
201
211
|
ig_reels_video_view_total_time == o.ig_reels_video_view_total_time &&
|
|
212
|
+
video_duration_seconds == o.video_duration_seconds &&
|
|
202
213
|
engagement_rate == o.engagement_rate &&
|
|
203
214
|
last_updated == o.last_updated
|
|
204
215
|
end
|
|
@@ -212,7 +223,7 @@ module Zernio
|
|
|
212
223
|
# Calculates hash code according to all attributes.
|
|
213
224
|
# @return [Integer] Hash code
|
|
214
225
|
def hash
|
|
215
|
-
[impressions, reach, likes, comments, shares, saves, clicks, views, follows, ig_reels_avg_watch_time, ig_reels_video_view_total_time, engagement_rate, last_updated].hash
|
|
226
|
+
[impressions, reach, likes, comments, shares, saves, clicks, views, follows, ig_reels_avg_watch_time, ig_reels_video_view_total_time, video_duration_seconds, engagement_rate, last_updated].hash
|
|
216
227
|
end
|
|
217
228
|
|
|
218
229
|
# Builds the object from hash
|
data/lib/zernio-sdk/version.rb
CHANGED
data/openapi.yaml
CHANGED
|
@@ -504,7 +504,20 @@ components:
|
|
|
504
504
|
in: query
|
|
505
505
|
description: Page number (1-based)
|
|
506
506
|
schema: { type: integer, minimum: 1, default: 1 }
|
|
507
|
+
IdempotencyKeyHeader:
|
|
508
|
+
name: Idempotency-Key
|
|
509
|
+
in: header
|
|
510
|
+
required: false
|
|
511
|
+
schema: { type: string, maxLength: 255 }
|
|
512
|
+
description: >-
|
|
513
|
+
Optional client-generated unique key (e.g. a UUID) that makes retries
|
|
514
|
+
safe. Same key + same body replays the original response; same key +
|
|
515
|
+
different body → 422; key still processing → 409.
|
|
507
516
|
responses:
|
|
517
|
+
IdempotencyKeyInFlight:
|
|
518
|
+
description: Same Idempotency-Key still processing; retry after a short backoff
|
|
519
|
+
IdempotencyKeyReused:
|
|
520
|
+
description: Idempotency-Key reused with a different body
|
|
508
521
|
BadRequest:
|
|
509
522
|
description: Invalid request
|
|
510
523
|
content:
|
|
@@ -6093,6 +6106,7 @@ components:
|
|
|
6093
6106
|
follows: { type: integer, example: 0, description: 'Instagram feed posts and stories only: organic accounts that started following from this post. 0 for reels and other platforms.' }
|
|
6094
6107
|
igReelsAvgWatchTime: { type: integer, example: 0, description: 'Instagram Reels only: average watch time per play, in milliseconds. 0 for non-Reels media and other platforms.' }
|
|
6095
6108
|
igReelsVideoViewTotalTime: { type: integer, example: 0, description: 'Instagram Reels only: total watch time including replays, in milliseconds. 0 for non-Reels media and other platforms.' }
|
|
6109
|
+
videoDurationSeconds: { type: [integer, "null"], example: 30, description: 'Video length in seconds. Currently Instagram Reels only; combine with igReelsAvgWatchTime (ms) to estimate retention. Null when unknown (other platforms, non-video media, or when Instagram does not expose the media URL, e.g. reels with copyrighted audio).' }
|
|
6096
6110
|
engagementRate: { type: number, example: 0 }
|
|
6097
6111
|
lastUpdated: { type: string, format: date-time }
|
|
6098
6112
|
PlatformAnalytics:
|
|
@@ -13959,15 +13973,7 @@ paths:
|
|
|
13959
13973
|
with the same key and body replays the original 201 (same _id)
|
|
13960
13974
|
instead of conflicting.
|
|
13961
13975
|
parameters:
|
|
13962
|
-
-
|
|
13963
|
-
in: header
|
|
13964
|
-
required: false
|
|
13965
|
-
schema: { type: string, maxLength: 255 }
|
|
13966
|
-
description: >-
|
|
13967
|
-
Optional client-generated unique key (e.g. a UUID) that makes
|
|
13968
|
-
create retries safe. Same key + same body replays the original
|
|
13969
|
-
response; same key + different body → 422; key still processing →
|
|
13970
|
-
409.
|
|
13976
|
+
- $ref: '#/components/parameters/IdempotencyKeyHeader'
|
|
13971
13977
|
requestBody:
|
|
13972
13978
|
required: true
|
|
13973
13979
|
content:
|
|
@@ -14005,7 +14011,7 @@ paths:
|
|
|
14005
14011
|
'402': { $ref: '#/components/responses/PaymentRequired' }
|
|
14006
14012
|
'403': { description: Profile limit exceeded }
|
|
14007
14013
|
'409': { description: 'A profile with this name already exists (code: profile_name_conflict); details.existingProfileId carries the id of the existing profile. Also returned while a request with the same Idempotency-Key is still processing.' }
|
|
14008
|
-
'422': {
|
|
14014
|
+
'422': { $ref: '#/components/responses/IdempotencyKeyReused' }
|
|
14009
14015
|
/v1/profiles/{profileId}:
|
|
14010
14016
|
get:
|
|
14011
14017
|
operationId: getProfile
|
|
@@ -23262,6 +23268,13 @@ paths:
|
|
|
23262
23268
|
are available via the `interactive` field. Tap events are delivered through
|
|
23263
23269
|
the `message.received` webhook with WhatsApp-specific `metadata` fields
|
|
23264
23270
|
(`interactiveType`, `interactiveId`, `flowResponseJson`, `flowResponseData`).
|
|
23271
|
+
|
|
23272
|
+
**Idempotency:** send an `Idempotency-Key` header to make retries safe
|
|
23273
|
+
(e.g. after a client-side timeout where delivery is unknown): same key +
|
|
23274
|
+
same body replays the original response (with `Idempotent-Replayed: true`)
|
|
23275
|
+
instead of sending the message a second time; same key + different body
|
|
23276
|
+
returns 422; a key still in flight returns 409. Works for JSON and
|
|
23277
|
+
multipart (file upload) requests alike. Keys are retained for 24 hours.
|
|
23265
23278
|
tags: [Messages]
|
|
23266
23279
|
security: [{ bearerAuth: [] }]
|
|
23267
23280
|
parameters:
|
|
@@ -23270,6 +23283,7 @@ paths:
|
|
|
23270
23283
|
required: true
|
|
23271
23284
|
schema: { type: string }
|
|
23272
23285
|
description: The conversation ID (id field from list conversations endpoint). This is the platform-specific conversation identifier, not an internal database ID.
|
|
23286
|
+
- $ref: '#/components/parameters/IdempotencyKeyHeader'
|
|
23273
23287
|
requestBody:
|
|
23274
23288
|
required: true
|
|
23275
23289
|
content:
|
|
@@ -23755,6 +23769,8 @@ paths:
|
|
|
23755
23769
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
23756
23770
|
'403':
|
|
23757
23771
|
description: Inbox addon required
|
|
23772
|
+
'409': { $ref: '#/components/responses/IdempotencyKeyInFlight' }
|
|
23773
|
+
'422': { $ref: '#/components/responses/IdempotencyKeyReused' }
|
|
23758
23774
|
|
|
23759
23775
|
/v1/whatsapp/media/{mediaId}:
|
|
23760
23776
|
get:
|
|
@@ -26428,15 +26444,7 @@ paths:
|
|
|
26428
26444
|
security:
|
|
26429
26445
|
- bearerAuth: []
|
|
26430
26446
|
parameters:
|
|
26431
|
-
-
|
|
26432
|
-
in: header
|
|
26433
|
-
required: false
|
|
26434
|
-
schema: { type: string, maxLength: 255 }
|
|
26435
|
-
description: >-
|
|
26436
|
-
Optional client-generated unique key (e.g. a UUID) that makes
|
|
26437
|
-
dial retries safe. Same key + same body replays the original
|
|
26438
|
-
response; same key + different body → 422; key still processing →
|
|
26439
|
-
409.
|
|
26447
|
+
- $ref: '#/components/parameters/IdempotencyKeyHeader'
|
|
26440
26448
|
requestBody:
|
|
26441
26449
|
required: true
|
|
26442
26450
|
content:
|
|
@@ -26774,15 +26782,7 @@ paths:
|
|
|
26774
26782
|
security:
|
|
26775
26783
|
- bearerAuth: []
|
|
26776
26784
|
parameters:
|
|
26777
|
-
-
|
|
26778
|
-
in: header
|
|
26779
|
-
required: false
|
|
26780
|
-
schema: { type: string, maxLength: 255 }
|
|
26781
|
-
description: >-
|
|
26782
|
-
Optional client-generated unique key (e.g. a UUID) that makes
|
|
26783
|
-
dial retries safe. Same key + same body replays the original
|
|
26784
|
-
response; same key + different body → 422; key still processing →
|
|
26785
|
-
409.
|
|
26785
|
+
- $ref: '#/components/parameters/IdempotencyKeyHeader'
|
|
26786
26786
|
requestBody:
|
|
26787
26787
|
required: true
|
|
26788
26788
|
content:
|
|
@@ -27116,14 +27116,7 @@ paths:
|
|
|
27116
27116
|
security:
|
|
27117
27117
|
- bearerAuth: []
|
|
27118
27118
|
parameters:
|
|
27119
|
-
-
|
|
27120
|
-
in: header
|
|
27121
|
-
required: false
|
|
27122
|
-
schema: { type: string, maxLength: 255 }
|
|
27123
|
-
description: >-
|
|
27124
|
-
Optional client-generated unique key (e.g. a UUID) that makes send
|
|
27125
|
-
retries safe. Same key + same body replays the original response;
|
|
27126
|
-
same key + different body → 422; key still processing → 409.
|
|
27119
|
+
- $ref: '#/components/parameters/IdempotencyKeyHeader'
|
|
27127
27120
|
requestBody:
|
|
27128
27121
|
required: true
|
|
27129
27122
|
content:
|
|
@@ -27157,8 +27150,8 @@ paths:
|
|
|
27157
27150
|
status: { type: string, enum: [sent] }
|
|
27158
27151
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
27159
27152
|
'404': { description: "No SMS-enabled number matches `from`" }
|
|
27160
|
-
'409': {
|
|
27161
|
-
'422': {
|
|
27153
|
+
'409': { $ref: '#/components/responses/IdempotencyKeyInFlight' }
|
|
27154
|
+
'422': { $ref: '#/components/responses/IdempotencyKeyReused' }
|
|
27162
27155
|
'502': { description: Carrier-side send failed }
|
|
27163
27156
|
|
|
27164
27157
|
/v1/sms/lookup:
|
|
@@ -37799,14 +37792,7 @@ paths:
|
|
|
37799
37792
|
security:
|
|
37800
37793
|
- bearerAuth: []
|
|
37801
37794
|
parameters:
|
|
37802
|
-
-
|
|
37803
|
-
in: header
|
|
37804
|
-
required: false
|
|
37805
|
-
schema: { type: string, maxLength: 255 }
|
|
37806
|
-
description: >-
|
|
37807
|
-
Optional client-generated unique key (e.g. a UUID) that makes create
|
|
37808
|
-
retries safe. Same key + same body replays the original response;
|
|
37809
|
-
same key + different body → 422; key still processing → 409.
|
|
37795
|
+
- $ref: '#/components/parameters/IdempotencyKeyHeader'
|
|
37810
37796
|
requestBody:
|
|
37811
37797
|
required: true
|
|
37812
37798
|
content:
|
|
@@ -74,7 +74,7 @@ describe 'AdCampaignsApi' do
|
|
|
74
74
|
# Creates a paid ad with custom creative across Meta, Google Ads, Pinterest, TikTok, X/Twitter, LinkedIn, and OpenAI Ads (ChatGPT Ads). Supports three mutually-exclusive request shapes selected by the body, a legacy single-creative shape (all platforms, default), a Meta-only multi-creative shape via the creatives array (one ad set with N ads sharing budget and targeting), and an attach shape via adSetId that adds one new ad to an existing ad set, inheriting its budget, targeting, and schedule (Meta, TikTok, and LinkedIn; on LinkedIn adSetId is the existing Campaign id, and the budget, schedule, targeting and bidding fields must be omitted). Per-platform required fields, budget minimums, and video-ad rules are documented on each property below. LinkedIn creates a Single Image or Single Video Ad backed by a Direct Sponsored Content \"dark post\" authored by a Company Page (see `organizationId`); supported goals are engagement, traffic, awareness, and video_views (video ads use the `video` field; video_views requires a video), and traffic ads require `linkUrl`. **Idempotency:** this endpoint is not idempotent at the platform level (a blind retry creates a second campaign/ad set/ad). Send an `Idempotency-Key` header to make retries safe: the first request with a given key creates the ad and we store the response; a retry with the same key replays that exact response (with `Idempotent-Replayed: true`) instead of creating duplicates. Reusing a key with a different body returns 422; a key whose first request is still in flight returns 409 (retry after a short backoff). Keys are scoped to your credential and expire after 24h.
|
|
75
75
|
# @param create_standalone_ad_request
|
|
76
76
|
# @param [Hash] opts the optional parameters
|
|
77
|
-
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes
|
|
77
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
78
78
|
# @return [CreateStandaloneAd200Response]
|
|
79
79
|
describe 'create_standalone_ad test' do
|
|
80
80
|
it 'should work' do
|
|
@@ -180,10 +180,11 @@ describe 'MessagesApi' do
|
|
|
180
180
|
|
|
181
181
|
# unit tests for send_inbox_message
|
|
182
182
|
# Send message
|
|
183
|
-
# Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp template messages: to send an approved template into this conversation (required when the 24-hour customer-service window is closed), use the `template` field with a single element carrying the template reference: `{ \"elements\": [{ \"name\": ..., \"language\": ..., \"components\": [...] }] }`. See the `template` field below for the exact shape. To send a template to a phone number you have no conversation with yet, use the create-conversation endpoint (POST /v1/inbox/conversations) instead. WhatsApp rich interactive messages (list, CTA URL, Flow, location request) are available via the `interactive` field. Tap events are delivered through the `message.received` webhook with WhatsApp-specific `metadata` fields (`interactiveType`, `interactiveId`, `flowResponseJson`, `flowResponseData`).
|
|
183
|
+
# Send a message in a conversation. Supports text, attachments, quick replies, buttons, templates, and message tags. Attachment and interactive message support varies by platform. WhatsApp template messages: to send an approved template into this conversation (required when the 24-hour customer-service window is closed), use the `template` field with a single element carrying the template reference: `{ \"elements\": [{ \"name\": ..., \"language\": ..., \"components\": [...] }] }`. See the `template` field below for the exact shape. To send a template to a phone number you have no conversation with yet, use the create-conversation endpoint (POST /v1/inbox/conversations) instead. WhatsApp rich interactive messages (list, CTA URL, Flow, location request) are available via the `interactive` field. Tap events are delivered through the `message.received` webhook with WhatsApp-specific `metadata` fields (`interactiveType`, `interactiveId`, `flowResponseJson`, `flowResponseData`). **Idempotency:** send an `Idempotency-Key` header to make retries safe (e.g. after a client-side timeout where delivery is unknown): same key + same body replays the original response (with `Idempotent-Replayed: true`) instead of sending the message a second time; same key + different body returns 422; a key still in flight returns 409. Works for JSON and multipart (file upload) requests alike. Keys are retained for 24 hours.
|
|
184
184
|
# @param conversation_id The conversation ID (id field from list conversations endpoint). This is the platform-specific conversation identifier, not an internal database ID.
|
|
185
185
|
# @param send_inbox_message_request
|
|
186
186
|
# @param [Hash] opts the optional parameters
|
|
187
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
187
188
|
# @return [SendInboxMessage200Response]
|
|
188
189
|
describe 'send_inbox_message test' do
|
|
189
190
|
it 'should work' do
|
|
@@ -37,7 +37,7 @@ describe 'ProfilesApi' do
|
|
|
37
37
|
# Creates a new profile with a name, optional description, and color. Names are unique per workspace: a duplicate returns a 409 whose details.existingProfileId carries the id of the existing profile. Send an Idempotency-Key header to make retries safe: a retried create with the same key and body replays the original 201 (same _id) instead of conflicting.
|
|
38
38
|
# @param create_profile_request
|
|
39
39
|
# @param [Hash] opts the optional parameters
|
|
40
|
-
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes
|
|
40
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
41
41
|
# @return [ProfileCreateResponse]
|
|
42
42
|
describe 'create_profile test' do
|
|
43
43
|
it 'should work' do
|
data/spec/api/sms_api_spec.rb
CHANGED
|
@@ -229,7 +229,7 @@ describe 'SMSApi' do
|
|
|
229
229
|
# Sends an SMS (or MMS when `mediaUrls` is set) from one of your SMS-enabled numbers. At least one of `text` / `mediaUrls` is required. Both numbers are normalized to E.164, so `from` matches regardless of formatting and replies thread into the same inbox conversation. US numbers must have an approved carrier registration (`/v1/sms/registrations`) before messages deliver. **Idempotency:** send an `Idempotency-Key` header to make retries safe: same key + same body replays the original response instead of sending a second message; same key + different body returns 422; a key still in flight returns 409.
|
|
230
230
|
# @param send_sms_request
|
|
231
231
|
# @param [Hash] opts the optional parameters
|
|
232
|
-
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes
|
|
232
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
233
233
|
# @return [SendSms200Response]
|
|
234
234
|
describe 'send_sms test' do
|
|
235
235
|
it 'should work' do
|
data/spec/api/voice_api_spec.rb
CHANGED
|
@@ -37,7 +37,7 @@ describe 'VoiceApi' do
|
|
|
37
37
|
# Dials `to` FROM one of your voice-enabled numbers and, on answer, bridges the callee to the number's stored forward destination, or to the per-call `forwardTo` override. Destinations can be your own AI voice agent (Vapi/Retell), a phone, or a SIP endpoint. An optional `greeting` is spoken to the callee before the bridge. The 200 response means the call is dialing; the lifecycle continues asynchronously (track it via `GET /v1/voice/calls/{id}` or the `call.*` webhooks). Outbound calls are capped per rolling hour (429 when hit). **Idempotency:** send an `Idempotency-Key` header to make retries safe; same key + same body replays the original response instead of dialing (and billing) a second call.
|
|
38
38
|
# @param create_voice_call_request
|
|
39
39
|
# @param [Hash] opts the optional parameters
|
|
40
|
-
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes
|
|
40
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
41
41
|
# @return [CreateVoiceCall200Response]
|
|
42
42
|
describe 'create_voice_call test' do
|
|
43
43
|
it 'should work' do
|
|
@@ -167,7 +167,7 @@ describe 'WhatsAppCallingApi' do
|
|
|
167
167
|
# Initiates an outbound Business-Initiated Call. The Telnyx-side SIP leg is originated server-side (Option B: SIP-first). Telnyx INVITEs Meta directly over TLS:5061 with the SIP digest credentials we captured at calling-enablement time). No client-side SDP is required; pass only `accountId` and `to`. To send the consumer the call-consent prompt instead of placing a call, pass `action: \"send_call_permission_request\"` (+ optional `bodyText`). The consumer must tap Allow in WhatsApp before `start_call` is permitted; Meta limits the prompt to 1 per consumer per 24h (2 per 7 days) and requires an open 24h service window. **Idempotency:** send an `Idempotency-Key` header to make retries safe; same key + same body replays the original response instead of dialing (and billing) a second call.
|
|
168
168
|
# @param initiate_whats_app_call_request
|
|
169
169
|
# @param [Hash] opts the optional parameters
|
|
170
|
-
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes
|
|
170
|
+
# @option opts [String] :idempotency_key Optional client-generated unique key (e.g. a UUID) that makes retries safe. Same key + same body replays the original response; same key + different body → 422; key still processing → 409.
|
|
171
171
|
# @return [InitiateWhatsAppCall200Response]
|
|
172
172
|
describe 'initiate_whats_app_call test' do
|
|
173
173
|
it 'should work' do
|
|
@@ -93,6 +93,12 @@ describe Zernio::PostAnalytics do
|
|
|
93
93
|
end
|
|
94
94
|
end
|
|
95
95
|
|
|
96
|
+
describe 'test attribute "video_duration_seconds"' do
|
|
97
|
+
it 'should work' do
|
|
98
|
+
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
|
|
96
102
|
describe 'test attribute "engagement_rate"' do
|
|
97
103
|
it 'should work' do
|
|
98
104
|
# assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
|
|
Binary file
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
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.640
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- OpenAPI-Generator
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-08-
|
|
11
|
+
date: 2026-08-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: typhoeus
|
|
@@ -4919,7 +4919,7 @@ files:
|
|
|
4919
4919
|
- spec/models/you_tube_video_retention_response_retention_curve_inner_spec.rb
|
|
4920
4920
|
- spec/models/you_tube_video_retention_response_spec.rb
|
|
4921
4921
|
- spec/spec_helper.rb
|
|
4922
|
-
- zernio-sdk-0.0.
|
|
4922
|
+
- zernio-sdk-0.0.640.gem
|
|
4923
4923
|
- zernio-sdk.gemspec
|
|
4924
4924
|
homepage: https://openapi-generator.tech
|
|
4925
4925
|
licenses:
|
data/zernio-sdk-0.0.638.gem
DELETED
|
Binary file
|