late-sdk 0.0.814 → 0.0.816
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/GetInboxConversationMessages200ResponseMessagesInner.md +2 -2
- data/docs/SendInboxMessageRequest.md +1 -1
- data/docs/WebhookEventsApi.md +1 -1
- data/docs/WebhookPayloadMessageMetadata.md +1 -1
- data/docs/WebhookPayloadMessageSentMetadata.md +1 -1
- data/docs/WebhooksApi.md +1 -1
- data/lib/zernio-sdk/api/webhook_events_api.rb +2 -2
- data/lib/zernio-sdk/api/webhooks_api.rb +2 -2
- data/lib/zernio-sdk/models/get_inbox_conversation_messages200_response_messages_inner.rb +2 -1
- data/lib/zernio-sdk/models/send_inbox_message_request.rb +1 -1
- data/lib/zernio-sdk/models/update_ad_request_creative.rb +1 -1
- data/lib/zernio-sdk/models/webhook_payload_message_metadata.rb +1 -1
- data/lib/zernio-sdk/models/webhook_payload_message_sent_metadata.rb +1 -1
- data/lib/zernio-sdk/version.rb +1 -1
- data/openapi.yaml +53 -23
- data/spec/api/webhooks_api_spec.rb +1 -1
- data/zernio-sdk-0.0.816.gem +0 -0
- metadata +2 -2
- data/zernio-sdk-0.0.814.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: 3525f01a2062dc2131d0647fdcc7562a2774796b17c10d53066211d8b552a953
|
|
4
|
+
data.tar.gz: 3e9107679f37470121ddbd7b81ae7daf90a200f608ac0f33d0e662908db87a54
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e99fdffbd77b99c0a73bbb49050510b21195597e76137daad38700e7b1fb29056ee1849c21dab534a845cff16af5c7826dce3c1ea04a19bbefe7043c6c2f64c9
|
|
7
|
+
data.tar.gz: 6f38e29b952c553f6f6272bcc53424591a32599d8ff7566cafd10e6c18d4f106183143b4dc7a30dfbdd0a15b064d169521b628afca0d4141bf4b702f69b69dc2
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
| Name | Type | Description | Notes |
|
|
6
6
|
| ---- | ---- | ----------- | ----- |
|
|
7
|
-
| **id** | **String** | | [optional] |
|
|
7
|
+
| **id** | **String** | The platform's own message id: the `wamid` on WhatsApp, the `mid` on Instagram and Facebook Messenger. This is what `metadata.quotedMessageId` points at, the value to pass as `replyTo` on the platforms that support quote-replies, and the `{messageId}` segment of the attachment-resolve URL. Webhooks deliver the same value as `message.platformMessageId`; this response has no field by that name. | [optional] |
|
|
8
8
|
| **conversation_id** | **String** | | [optional] |
|
|
9
9
|
| **account_id** | **String** | | [optional] |
|
|
10
10
|
| **platform** | **String** | | [optional] |
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
| **sent_at** | **Time** | Original send time for outgoing messages (used for Messenger watermark queries). | [optional] |
|
|
31
31
|
| **delivery_error** | [**GetInboxConversationMessages200ResponseMessagesInnerDeliveryError**](GetInboxConversationMessages200ResponseMessagesInnerDeliveryError.md) | | [optional] |
|
|
32
32
|
| **reactions** | [**Array<GetInboxConversationMessages200ResponseMessagesInnerReactionsInner>**](GetInboxConversationMessages200ResponseMessagesInnerReactionsInner.md) | Emoji reactions on this message (WhatsApp / Telegram). At most one per party in a 1:1 thread. | [optional] |
|
|
33
|
-
| **metadata** | **Hash<String, Object>** | Platform-specific extras. Free-form, but commonly includes: `quotedMessageId` (
|
|
33
|
+
| **metadata** | **Hash<String, Object>** | Platform-specific extras. Free-form, but commonly includes: `quotedMessageId` (the `id` of the message this one replies to, delivered as `message.platformMessageId` on webhooks), `waInteractive` (a compact descriptor of WhatsApp interactive content sent: buttons / list / cta_url / flow / location_request), and for inbound interactive taps `interactiveType` / `interactiveId`. It can also carry `source` (`whatsapp_business_app` / `coexistence_history` on a WhatsApp Coexistence number, `bulk-api` on a POST /v1/whatsapp/bulk send), which is where the message reached us from rather than who produced it: read `sentVia` for that. | [optional] |
|
|
34
34
|
| **sent_via** | **String** | Which Zernio surface produced this outgoing message: `human` (an operator in the Zernio inbox), `api` (a call to this API), `broadcast`, `sequence`, `workflow`, `comment_automation`, or `bulk-api` (POST /v1/whatsapp/bulk). Same vocabulary as the `source` filter on the inbox analytics endpoints. Always present, and `null` whenever the lineage is unknown: every incoming message, any outgoing message sent from the platform's own app, and every message stored before this field shipped (2026-08). Existing messages are NOT backfilled, so treat `null` as \"unknown\", never as \"sent by a human\". | [optional] |
|
|
35
35
|
|
|
36
36
|
## Example
|
|
@@ -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 (
|
|
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. Silently ignored on platforms without send-side reply support, including Instagram and Facebook Messenger (Meta's Send API rejects reply_to on Instagram and does not expose it on Messenger). | [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
|
|
data/docs/WebhookEventsApi.md
CHANGED
|
@@ -1219,7 +1219,7 @@ nil (empty response body)
|
|
|
1219
1219
|
|
|
1220
1220
|
Message sent event
|
|
1221
1221
|
|
|
1222
|
-
Fired when a message is sent via the API, or from the WhatsApp Business app on Coexistence numbers. Sends that carry platform-specific context deliver it under `metadata`, so a quote-reply arrives with `metadata.quotedMessageId` and mirroring CRMs can thread it without a lookup.
|
|
1222
|
+
Fired when a message is sent via the API, or from the WhatsApp Business app on Coexistence numbers. Sends that carry platform-specific context deliver it under `metadata`, so a quote-reply sent through the API arrives with `metadata.quotedMessageId` and mirroring CRMs can thread it without a lookup. Which surfaces actually carry that reference is documented on `WebhookPayloadMessageSent.metadata.quotedMessageId`; a quote-reply sent from the WhatsApp Business or Instagram app is not one of them.
|
|
1223
1223
|
|
|
1224
1224
|
### Examples
|
|
1225
1225
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
| Name | Type | Description | Notes |
|
|
6
6
|
| ---- | ---- | ----------- | ----- |
|
|
7
|
-
| **quoted_message_id** | **String** | platformMessageId of the message this one is a quote-reply to. WhatsApp (`context.id`), Instagram and Facebook Messenger (`reply_to.mid`).
|
|
7
|
+
| **quoted_message_id** | **String** | platformMessageId of the message this one is a quote-reply to. WhatsApp (`context.id`), Instagram and Facebook Messenger (`reply_to.mid`). On outgoing messages the same field appears on `message.sent`, but only on some surfaces: see WebhookPayloadMessageSent.metadata.quotedMessageId. | [optional] |
|
|
8
8
|
| **quick_reply_payload** | **String** | Payload from a quick reply tap (Facebook/Instagram Messenger). | [optional] |
|
|
9
9
|
| **postback_payload** | **String** | Payload from a postback button tap (Facebook/Instagram Messenger). | [optional] |
|
|
10
10
|
| **postback_title** | **String** | Title of the tapped postback button (Facebook/Instagram Messenger). | [optional] |
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
| Name | Type | Description | Notes |
|
|
6
6
|
| ---- | ---- | ----------- | ----- |
|
|
7
|
-
| **quoted_message_id** | **String** | platformMessageId of the message this send is a quote-reply to.
|
|
7
|
+
| **quoted_message_id** | **String** | `platformMessageId` of the message this send is a quote-reply to. Present when the reply was sent through Zernio with `replyTo` on the inbox send API (WhatsApp and Telegram). A WhatsApp API send fires its `message.sent` off the delivery status, and the quote reference is forwarded from the stored send there, so it arrives on the same `message.sent` as any other WhatsApp send. Not delivered on Instagram echoes. Zernio forwards `reply_to.mid` whenever Meta puts it on an echo, but on Instagram Meta does not send it, so a reply the operator quoted in the Instagram app arrives with no `quotedMessageId`. Facebook Messenger rides a separate subscription (`message_echoes`) and has not been measured, so treat it as unverified rather than supported. Absent on WhatsApp Coexistence echoes. Meta omits the quote context from `smb_message_echoes`, so a reply the operator sent from the WhatsApp Business app arrives with no `quotedMessageId` even though WhatsApp shows it as a quote-reply. Do not read the absence of this field as \"not a reply\". | [optional] |
|
|
8
8
|
| **thread_ts** | **String** | Slack only. Parent thread ts of the sent message. Pass it back as `replyTo` on the inbox send API to keep replying inside the thread. | [optional] |
|
|
9
9
|
|
|
10
10
|
## Example
|
data/docs/WebhooksApi.md
CHANGED
|
@@ -304,7 +304,7 @@ This endpoint does not need any parameter.
|
|
|
304
304
|
|
|
305
305
|
Redeliver a webhook event
|
|
306
306
|
|
|
307
|
-
Replay a past delivery: the original payload is re-sent, byte for byte, to the subscription's current URL. The original event ID is preserved so your endpoint can dedupe, and the replay is recorded as a fresh attempt, so it shows up in `GET /v1/webhooks/logs` next to the delivery it replays. Both `webhookId` and `eventId` come from a row of `GET /v1/webhooks/logs`. Because the stored payload is replayed as-is, a redelivery reflects the event as it was emitted, not the current state of the resource. Only deliveries inside the 30-day log retention window can be replayed; past that the payload is gone and the request fails with a
|
|
307
|
+
Replay a past delivery: the original payload is re-sent, byte for byte, to the subscription's current URL. The original event ID is preserved so your endpoint can dedupe, and the replay is recorded as a fresh attempt, so it shows up in `GET /v1/webhooks/logs` next to the delivery it replays. Both `webhookId` and `eventId` come from a row of `GET /v1/webhooks/logs`. Because the stored payload is replayed as-is, a redelivery reflects the event as it was emitted, not the current state of the resource. Only deliveries inside the 30-day log retention window can be replayed; past that the payload is gone and the request fails with a 422. Replays run the same resource-group checks as live delivery, against both the key's groups and the subscription's `disabledResourceGroups`.
|
|
308
308
|
|
|
309
309
|
### Examples
|
|
310
310
|
|
|
@@ -1142,7 +1142,7 @@ module Zernio
|
|
|
1142
1142
|
end
|
|
1143
1143
|
|
|
1144
1144
|
# Message sent event
|
|
1145
|
-
# Fired when a message is sent via the API, or from the WhatsApp Business app on Coexistence numbers. Sends that carry platform-specific context deliver it under `metadata`, so a quote-reply arrives with `metadata.quotedMessageId` and mirroring CRMs can thread it without a lookup.
|
|
1145
|
+
# Fired when a message is sent via the API, or from the WhatsApp Business app on Coexistence numbers. Sends that carry platform-specific context deliver it under `metadata`, so a quote-reply sent through the API arrives with `metadata.quotedMessageId` and mirroring CRMs can thread it without a lookup. Which surfaces actually carry that reference is documented on `WebhookPayloadMessageSent.metadata.quotedMessageId`; a quote-reply sent from the WhatsApp Business or Instagram app is not one of them.
|
|
1146
1146
|
# @param webhook_payload_message_sent [WebhookPayloadMessageSent]
|
|
1147
1147
|
# @param [Hash] opts the optional parameters
|
|
1148
1148
|
# @return [nil]
|
|
@@ -1152,7 +1152,7 @@ module Zernio
|
|
|
1152
1152
|
end
|
|
1153
1153
|
|
|
1154
1154
|
# Message sent event
|
|
1155
|
-
# Fired when a message is sent via the API, or from the WhatsApp Business app on Coexistence numbers. Sends that carry platform-specific context deliver it under `metadata`, so a quote-reply arrives with `metadata.quotedMessageId` and mirroring CRMs can thread it without a lookup.
|
|
1155
|
+
# Fired when a message is sent via the API, or from the WhatsApp Business app on Coexistence numbers. Sends that carry platform-specific context deliver it under `metadata`, so a quote-reply sent through the API arrives with `metadata.quotedMessageId` and mirroring CRMs can thread it without a lookup. Which surfaces actually carry that reference is documented on `WebhookPayloadMessageSent.metadata.quotedMessageId`; a quote-reply sent from the WhatsApp Business or Instagram app is not one of them.
|
|
1156
1156
|
# @param webhook_payload_message_sent [WebhookPayloadMessageSent]
|
|
1157
1157
|
# @param [Hash] opts the optional parameters
|
|
1158
1158
|
# @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
|
|
@@ -333,7 +333,7 @@ module Zernio
|
|
|
333
333
|
end
|
|
334
334
|
|
|
335
335
|
# Redeliver a webhook event
|
|
336
|
-
# Replay a past delivery: the original payload is re-sent, byte for byte, to the subscription's current URL. The original event ID is preserved so your endpoint can dedupe, and the replay is recorded as a fresh attempt, so it shows up in `GET /v1/webhooks/logs` next to the delivery it replays. Both `webhookId` and `eventId` come from a row of `GET /v1/webhooks/logs`. Because the stored payload is replayed as-is, a redelivery reflects the event as it was emitted, not the current state of the resource. Only deliveries inside the 30-day log retention window can be replayed; past that the payload is gone and the request fails with a
|
|
336
|
+
# Replay a past delivery: the original payload is re-sent, byte for byte, to the subscription's current URL. The original event ID is preserved so your endpoint can dedupe, and the replay is recorded as a fresh attempt, so it shows up in `GET /v1/webhooks/logs` next to the delivery it replays. Both `webhookId` and `eventId` come from a row of `GET /v1/webhooks/logs`. Because the stored payload is replayed as-is, a redelivery reflects the event as it was emitted, not the current state of the resource. Only deliveries inside the 30-day log retention window can be replayed; past that the payload is gone and the request fails with a 422. Replays run the same resource-group checks as live delivery, against both the key's groups and the subscription's `disabledResourceGroups`.
|
|
337
337
|
# @param redeliver_webhook_event_request [RedeliverWebhookEventRequest]
|
|
338
338
|
# @param [Hash] opts the optional parameters
|
|
339
339
|
# @return [UnpublishPost200Response]
|
|
@@ -343,7 +343,7 @@ module Zernio
|
|
|
343
343
|
end
|
|
344
344
|
|
|
345
345
|
# Redeliver a webhook event
|
|
346
|
-
# Replay a past delivery: the original payload is re-sent, byte for byte, to the subscription's current URL. The original event ID is preserved so your endpoint can dedupe, and the replay is recorded as a fresh attempt, so it shows up in `GET /v1/webhooks/logs` next to the delivery it replays. Both `webhookId` and `eventId` come from a row of `GET /v1/webhooks/logs`. Because the stored payload is replayed as-is, a redelivery reflects the event as it was emitted, not the current state of the resource. Only deliveries inside the 30-day log retention window can be replayed; past that the payload is gone and the request fails with a
|
|
346
|
+
# Replay a past delivery: the original payload is re-sent, byte for byte, to the subscription's current URL. The original event ID is preserved so your endpoint can dedupe, and the replay is recorded as a fresh attempt, so it shows up in `GET /v1/webhooks/logs` next to the delivery it replays. Both `webhookId` and `eventId` come from a row of `GET /v1/webhooks/logs`. Because the stored payload is replayed as-is, a redelivery reflects the event as it was emitted, not the current state of the resource. Only deliveries inside the 30-day log retention window can be replayed; past that the payload is gone and the request fails with a 422. Replays run the same resource-group checks as live delivery, against both the key's groups and the subscription's `disabledResourceGroups`.
|
|
347
347
|
# @param redeliver_webhook_event_request [RedeliverWebhookEventRequest]
|
|
348
348
|
# @param [Hash] opts the optional parameters
|
|
349
349
|
# @return [Array<(UnpublishPost200Response, Integer, Hash)>] UnpublishPost200Response data, response status code and response headers
|
|
@@ -15,6 +15,7 @@ require 'time'
|
|
|
15
15
|
|
|
16
16
|
module Zernio
|
|
17
17
|
class GetInboxConversationMessages200ResponseMessagesInner < ApiModelBase
|
|
18
|
+
# The platform's own message id: the `wamid` on WhatsApp, the `mid` on Instagram and Facebook Messenger. This is what `metadata.quotedMessageId` points at, the value to pass as `replyTo` on the platforms that support quote-replies, and the `{messageId}` segment of the attachment-resolve URL. Webhooks deliver the same value as `message.platformMessageId`; this response has no field by that name.
|
|
18
19
|
attr_accessor :id
|
|
19
20
|
|
|
20
21
|
attr_accessor :conversation_id
|
|
@@ -79,7 +80,7 @@ module Zernio
|
|
|
79
80
|
# Emoji reactions on this message (WhatsApp / Telegram). At most one per party in a 1:1 thread.
|
|
80
81
|
attr_accessor :reactions
|
|
81
82
|
|
|
82
|
-
# Platform-specific extras. Free-form, but commonly includes: `quotedMessageId` (
|
|
83
|
+
# Platform-specific extras. Free-form, but commonly includes: `quotedMessageId` (the `id` of the message this one replies to, delivered as `message.platformMessageId` on webhooks), `waInteractive` (a compact descriptor of WhatsApp interactive content sent: buttons / list / cta_url / flow / location_request), and for inbound interactive taps `interactiveType` / `interactiveId`. It can also carry `source` (`whatsapp_business_app` / `coexistence_history` on a WhatsApp Coexistence number, `bulk-api` on a POST /v1/whatsapp/bulk send), which is where the message reached us from rather than who produced it: read `sentVia` for that.
|
|
83
84
|
attr_accessor :metadata
|
|
84
85
|
|
|
85
86
|
# Which Zernio surface produced this outgoing message: `human` (an operator in the Zernio inbox), `api` (a call to this API), `broadcast`, `sequence`, `workflow`, `comment_automation`, or `bulk-api` (POST /v1/whatsapp/bulk). Same vocabulary as the `source` filter on the inbox analytics endpoints. Always present, and `null` whenever the lineage is unknown: every incoming message, any outgoing message sent from the platform's own app, and every message stored before this field shipped (2026-08). Existing messages are NOT backfilled, so treat `null` as \"unknown\", never as \"sent by a human\".
|
|
@@ -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 (
|
|
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. Silently ignored on platforms without send-side reply support, including Instagram and Facebook Messenger (Meta's Send API rejects reply_to on Instagram and does not expose it on Messenger).
|
|
61
61
|
attr_accessor :reply_to
|
|
62
62
|
|
|
63
63
|
attr_accessor :location
|
|
@@ -14,7 +14,7 @@ require 'date'
|
|
|
14
14
|
require 'time'
|
|
15
15
|
|
|
16
16
|
module Zernio
|
|
17
|
-
# Replace or patch the ad's creative. Meta, TikTok, and LinkedIn. - **Meta**: patch-style. Pass any subset — fields you omit are preserved from the live creative, including media (`image_hash`/`video_id` are reused, no re-upload) and `url_tags`. Sending the full set (`headline`, `body`, `callToAction`, `linkUrl`, `imageUrl`) rebuilds the creative from scratch instead. Partial patching reads the live `object_story_spec`, which Meta strips on SHARE / page-post / dark / asset_feed creatives — those return 422 asking for the full set. A `videoUrl`/`videoId` on an image creative is a type change and also needs the full set. `existingCreativeId` repoints the ad at a creative from GET /v1/ads/creatives and ignores every other field. Meta creatives are immutable, so any change creates a new creative and repoints the ad; the old creative is retained on the ad account for historical reporting. - **TikTok**: patch-style. Pass any subset; `headline` is ignored (TikTok creatives have no headline slot). `body` becomes the in-feed `ad_text`; `linkUrl` becomes `landing_page_url`; `videoUrl` triggers a fresh upload. `description`, `videoId` and `existingCreativeId` are Meta-only and return 400. - **LinkedIn**:
|
|
17
|
+
# Replace or patch the ad's creative. Meta, TikTok, and LinkedIn. - **Meta**: patch-style. Pass any subset — fields you omit are preserved from the live creative, including media (`image_hash`/`video_id` are reused, no re-upload) and `url_tags`. Sending the full set (`headline`, `body`, `callToAction`, `linkUrl`, `imageUrl`) rebuilds the creative from scratch instead. Partial patching reads the live `object_story_spec`, which Meta strips on SHARE / page-post / dark / asset_feed creatives — those return 422 asking for the full set. A `videoUrl`/`videoId` on an image creative is a type change and also needs the full set. `existingCreativeId` repoints the ad at a creative from GET /v1/ads/creatives and ignores every other field. Meta creatives are immutable, so any change creates a new creative and repoints the ad; the old creative is retained on the ad account for historical reporting. - **TikTok**: patch-style. Pass any subset; `headline` is ignored (TikTok creatives have no headline slot). `body` becomes the in-feed `ad_text`; `linkUrl` becomes `landing_page_url`; `videoUrl` triggers a fresh upload. `description`, `videoId` and `existingCreativeId` are Meta-only and return 400. - **LinkedIn**: requires new media (image via `imageUrl` or video via `videoUrl`); a text-only creative update returns 400. Uploads the media, creates a new inline media creative on the same campaign, and pauses the old creative (best-effort). The old creative is retained for historical reporting. `videoId` and `existingCreativeId` are Meta-only and return 400.
|
|
18
18
|
class UpdateAdRequestCreative < ApiModelBase
|
|
19
19
|
# Meta and LinkedIn (TikTok has no headline slot)
|
|
20
20
|
attr_accessor :headline
|
|
@@ -16,7 +16,7 @@ require 'time'
|
|
|
16
16
|
module Zernio
|
|
17
17
|
# Platform-specific message context (present when the message is a quick reply tap, postback button tap, inline keyboard callback, or a quote-reply to an earlier message)
|
|
18
18
|
class WebhookPayloadMessageMetadata < ApiModelBase
|
|
19
|
-
# platformMessageId of the message this one is a quote-reply to. WhatsApp (`context.id`), Instagram and Facebook Messenger (`reply_to.mid`).
|
|
19
|
+
# platformMessageId of the message this one is a quote-reply to. WhatsApp (`context.id`), Instagram and Facebook Messenger (`reply_to.mid`). On outgoing messages the same field appears on `message.sent`, but only on some surfaces: see WebhookPayloadMessageSent.metadata.quotedMessageId.
|
|
20
20
|
attr_accessor :quoted_message_id
|
|
21
21
|
|
|
22
22
|
# Payload from a quick reply tap (Facebook/Instagram Messenger).
|
|
@@ -16,7 +16,7 @@ require 'time'
|
|
|
16
16
|
module Zernio
|
|
17
17
|
# Platform-specific context for the sent message. The key is present only when the send carried some context, and absent otherwise: it is never null and never an empty object.
|
|
18
18
|
class WebhookPayloadMessageSentMetadata < ApiModelBase
|
|
19
|
-
# platformMessageId of the message this send is a quote-reply to.
|
|
19
|
+
# `platformMessageId` of the message this send is a quote-reply to. Present when the reply was sent through Zernio with `replyTo` on the inbox send API (WhatsApp and Telegram). A WhatsApp API send fires its `message.sent` off the delivery status, and the quote reference is forwarded from the stored send there, so it arrives on the same `message.sent` as any other WhatsApp send. Not delivered on Instagram echoes. Zernio forwards `reply_to.mid` whenever Meta puts it on an echo, but on Instagram Meta does not send it, so a reply the operator quoted in the Instagram app arrives with no `quotedMessageId`. Facebook Messenger rides a separate subscription (`message_echoes`) and has not been measured, so treat it as unverified rather than supported. Absent on WhatsApp Coexistence echoes. Meta omits the quote context from `smb_message_echoes`, so a reply the operator sent from the WhatsApp Business app arrives with no `quotedMessageId` even though WhatsApp shows it as a quote-reply. Do not read the absence of this field as \"not a reply\".
|
|
20
20
|
attr_accessor :quoted_message_id
|
|
21
21
|
|
|
22
22
|
# Slack only. Parent thread ts of the sent message. Pass it back as `replyTo` on the inbox send API to keep replying inside the thread.
|
data/lib/zernio-sdk/version.rb
CHANGED
data/openapi.yaml
CHANGED
|
@@ -3749,8 +3749,9 @@ components:
|
|
|
3749
3749
|
description: |
|
|
3750
3750
|
platformMessageId of the message this one is a quote-reply to.
|
|
3751
3751
|
WhatsApp (`context.id`), Instagram and Facebook Messenger
|
|
3752
|
-
(`reply_to.mid`).
|
|
3753
|
-
`message.sent
|
|
3752
|
+
(`reply_to.mid`). On outgoing messages the same field appears on
|
|
3753
|
+
`message.sent`, but only on some surfaces: see
|
|
3754
|
+
WebhookPayloadMessageSent.metadata.quotedMessageId.
|
|
3754
3755
|
quickReplyPayload:
|
|
3755
3756
|
type: string
|
|
3756
3757
|
description: Payload from a quick reply tap (Facebook/Instagram Messenger).
|
|
@@ -4142,13 +4143,27 @@ components:
|
|
|
4142
4143
|
quotedMessageId:
|
|
4143
4144
|
type: string
|
|
4144
4145
|
description: |
|
|
4145
|
-
platformMessageId of the message this send is a quote-reply to.
|
|
4146
|
-
|
|
4147
|
-
|
|
4148
|
-
|
|
4149
|
-
|
|
4150
|
-
|
|
4151
|
-
other WhatsApp send.
|
|
4146
|
+
`platformMessageId` of the message this send is a quote-reply to.
|
|
4147
|
+
|
|
4148
|
+
Present when the reply was sent through Zernio with `replyTo` on
|
|
4149
|
+
the inbox send API (WhatsApp and Telegram). A WhatsApp API send
|
|
4150
|
+
fires its `message.sent` off the delivery status, and the quote
|
|
4151
|
+
reference is forwarded from the stored send there, so it arrives
|
|
4152
|
+
on the same `message.sent` as any other WhatsApp send.
|
|
4153
|
+
|
|
4154
|
+
Not delivered on Instagram echoes. Zernio forwards
|
|
4155
|
+
`reply_to.mid` whenever Meta puts it on an echo, but on
|
|
4156
|
+
Instagram Meta does not send it, so a reply the operator quoted
|
|
4157
|
+
in the Instagram app arrives with no `quotedMessageId`.
|
|
4158
|
+
Facebook Messenger rides a separate subscription
|
|
4159
|
+
(`message_echoes`) and has not been measured, so treat it as
|
|
4160
|
+
unverified rather than supported.
|
|
4161
|
+
|
|
4162
|
+
Absent on WhatsApp Coexistence echoes. Meta omits the quote
|
|
4163
|
+
context from `smb_message_echoes`, so a reply the operator sent
|
|
4164
|
+
from the WhatsApp Business app arrives with no `quotedMessageId`
|
|
4165
|
+
even though WhatsApp shows it as a quote-reply. Do not read the
|
|
4166
|
+
absence of this field as "not a reply".
|
|
4152
4167
|
threadTs:
|
|
4153
4168
|
type: string
|
|
4154
4169
|
description: |
|
|
@@ -9523,8 +9538,11 @@ webhooks:
|
|
|
9523
9538
|
description: |
|
|
9524
9539
|
Fired when a message is sent via the API, or from the WhatsApp Business app on
|
|
9525
9540
|
Coexistence numbers. Sends that carry platform-specific context deliver it under
|
|
9526
|
-
`metadata`, so a quote-reply
|
|
9527
|
-
CRMs can thread it without a lookup.
|
|
9541
|
+
`metadata`, so a quote-reply sent through the API arrives with
|
|
9542
|
+
`metadata.quotedMessageId` and mirroring CRMs can thread it without a lookup.
|
|
9543
|
+
Which surfaces actually carry that reference is documented on
|
|
9544
|
+
`WebhookPayloadMessageSent.metadata.quotedMessageId`; a quote-reply sent from
|
|
9545
|
+
the WhatsApp Business or Instagram app is not one of them.
|
|
9528
9546
|
tags: [Webhook Events]
|
|
9529
9547
|
requestBody:
|
|
9530
9548
|
required: true
|
|
@@ -25679,7 +25697,7 @@ paths:
|
|
|
25679
25697
|
emitted, not the current state of the resource.
|
|
25680
25698
|
|
|
25681
25699
|
Only deliveries inside the 30-day log retention window can be replayed; past that
|
|
25682
|
-
the payload is gone and the request fails with a
|
|
25700
|
+
the payload is gone and the request fails with a 422. Replays run the same
|
|
25683
25701
|
resource-group checks as live delivery, against both the key's groups and the
|
|
25684
25702
|
subscription's `disabledResourceGroups`.
|
|
25685
25703
|
security:
|
|
@@ -25718,10 +25736,11 @@ paths:
|
|
|
25718
25736
|
example:
|
|
25719
25737
|
success: true
|
|
25720
25738
|
message: "Webhook re-delivered"
|
|
25721
|
-
'400': { description: 'webhookId or eventId missing or empty' }
|
|
25739
|
+
'400': { description: 'webhookId or eventId missing or empty, or the subscription has no URL configured' }
|
|
25722
25740
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
25723
25741
|
'403': { $ref: '#/components/responses/ResourceGroupForbidden' }
|
|
25724
|
-
'
|
|
25742
|
+
'404': { description: 'Webhook subscription not found' }
|
|
25743
|
+
'422': { description: 'Original payload not replayable: no delivery matches this event inside the 30-day retention window, or the stored payload is truncated or not valid JSON' }
|
|
25725
25744
|
'502':
|
|
25726
25745
|
description: |
|
|
25727
25746
|
Re-delivery was attempted but your endpoint errored again. The attempt is still
|
|
@@ -26873,7 +26892,16 @@ paths:
|
|
|
26873
26892
|
items:
|
|
26874
26893
|
type: object
|
|
26875
26894
|
properties:
|
|
26876
|
-
id:
|
|
26895
|
+
id:
|
|
26896
|
+
type: string
|
|
26897
|
+
description: |
|
|
26898
|
+
The platform's own message id: the `wamid` on WhatsApp, the
|
|
26899
|
+
`mid` on Instagram and Facebook Messenger. This is what
|
|
26900
|
+
`metadata.quotedMessageId` points at, the value to pass as
|
|
26901
|
+
`replyTo` on the platforms that support quote-replies, and the
|
|
26902
|
+
`{messageId}` segment of the attachment-resolve URL. Webhooks
|
|
26903
|
+
deliver the same value as `message.platformMessageId`; this
|
|
26904
|
+
response has no field by that name.
|
|
26877
26905
|
conversationId: { type: string }
|
|
26878
26906
|
accountId: { type: string }
|
|
26879
26907
|
platform: { type: string }
|
|
@@ -26968,7 +26996,8 @@ paths:
|
|
|
26968
26996
|
type: object
|
|
26969
26997
|
description: |
|
|
26970
26998
|
Platform-specific extras. Free-form, but commonly includes:
|
|
26971
|
-
`quotedMessageId` (
|
|
26999
|
+
`quotedMessageId` (the `id` of the message this one replies to,
|
|
27000
|
+
delivered as `message.platformMessageId` on webhooks),
|
|
26972
27001
|
`waInteractive` (a compact descriptor of WhatsApp interactive
|
|
26973
27002
|
content sent: buttons / list / cta_url / flow / location_request),
|
|
26974
27003
|
and for inbound interactive taps `interactiveType` / `interactiveId`.
|
|
@@ -27505,7 +27534,7 @@ paths:
|
|
|
27505
27534
|
description: Facebook message tag for messaging outside 24h window. Requires messagingType MESSAGE_TAG. Instagram only supports HUMAN_AGENT.
|
|
27506
27535
|
replyTo:
|
|
27507
27536
|
type: string
|
|
27508
|
-
description: 'Platform message ID to quote-reply to. For WhatsApp, pass the wamid; for Telegram, the Telegram message ID (
|
|
27537
|
+
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. Silently ignored on platforms without send-side reply support, including Instagram and Facebook Messenger (Meta''s Send API rejects reply_to on Instagram and does not expose it on Messenger).'
|
|
27509
27538
|
location:
|
|
27510
27539
|
type: object
|
|
27511
27540
|
description: WhatsApp-only. Send a location pin.
|
|
@@ -27595,7 +27624,7 @@ paths:
|
|
|
27595
27624
|
description: Message tag (requires messagingType MESSAGE_TAG)
|
|
27596
27625
|
replyTo:
|
|
27597
27626
|
type: string
|
|
27598
|
-
description: 'Platform message ID to quote-reply to. For WhatsApp, pass the wamid; for Telegram, the Telegram message ID (
|
|
27627
|
+
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. Silently ignored on platforms without send-side reply support, including Instagram and Facebook Messenger (Meta''s Send API rejects reply_to on Instagram and does not expose it on Messenger).'
|
|
27599
27628
|
voiceNote:
|
|
27600
27629
|
type: string
|
|
27601
27630
|
enum: ['true']
|
|
@@ -41634,10 +41663,11 @@ paths:
|
|
|
41634
41663
|
have no headline slot). `body` becomes the in-feed `ad_text`; `linkUrl` becomes
|
|
41635
41664
|
`landing_page_url`; `videoUrl` triggers a fresh upload. `description`, `videoId`
|
|
41636
41665
|
and `existingCreativeId` are Meta-only and return 400.
|
|
41637
|
-
- **LinkedIn**:
|
|
41638
|
-
|
|
41639
|
-
creative
|
|
41640
|
-
|
|
41666
|
+
- **LinkedIn**: requires new media (image via `imageUrl` or video via `videoUrl`);
|
|
41667
|
+
a text-only creative update returns 400. Uploads the media, creates a new inline
|
|
41668
|
+
media creative on the same campaign, and pauses the old creative (best-effort).
|
|
41669
|
+
The old creative is retained for historical reporting. `videoId` and
|
|
41670
|
+
`existingCreativeId` are Meta-only and return 400.
|
|
41641
41671
|
properties:
|
|
41642
41672
|
headline: { type: string, description: "Meta and LinkedIn (TikTok has no headline slot)" }
|
|
41643
41673
|
body: { type: string }
|
|
@@ -41660,7 +41690,7 @@ paths:
|
|
|
41660
41690
|
ad: { $ref: '#/components/schemas/Ad' }
|
|
41661
41691
|
message: { type: string }
|
|
41662
41692
|
'400':
|
|
41663
|
-
description: Invalid status transition
|
|
41693
|
+
description: 'Invalid status transition, budget below minimum, or a LinkedIn creative update without imageUrl or videoUrl'
|
|
41664
41694
|
'401': { $ref: '#/components/responses/Unauthorized' }
|
|
41665
41695
|
'404': { $ref: '#/components/responses/NotFound' }
|
|
41666
41696
|
'501': { description: "targeting or creative not supported on the platform (supported on Meta, TikTok, and LinkedIn)" }
|
|
@@ -86,7 +86,7 @@ describe 'WebhooksApi' do
|
|
|
86
86
|
|
|
87
87
|
# unit tests for redeliver_webhook_event
|
|
88
88
|
# Redeliver a webhook event
|
|
89
|
-
# Replay a past delivery: the original payload is re-sent, byte for byte, to the subscription's current URL. The original event ID is preserved so your endpoint can dedupe, and the replay is recorded as a fresh attempt, so it shows up in `GET /v1/webhooks/logs` next to the delivery it replays. Both `webhookId` and `eventId` come from a row of `GET /v1/webhooks/logs`. Because the stored payload is replayed as-is, a redelivery reflects the event as it was emitted, not the current state of the resource. Only deliveries inside the 30-day log retention window can be replayed; past that the payload is gone and the request fails with a
|
|
89
|
+
# Replay a past delivery: the original payload is re-sent, byte for byte, to the subscription's current URL. The original event ID is preserved so your endpoint can dedupe, and the replay is recorded as a fresh attempt, so it shows up in `GET /v1/webhooks/logs` next to the delivery it replays. Both `webhookId` and `eventId` come from a row of `GET /v1/webhooks/logs`. Because the stored payload is replayed as-is, a redelivery reflects the event as it was emitted, not the current state of the resource. Only deliveries inside the 30-day log retention window can be replayed; past that the payload is gone and the request fails with a 422. Replays run the same resource-group checks as live delivery, against both the key's groups and the subscription's `disabledResourceGroups`.
|
|
90
90
|
# @param redeliver_webhook_event_request
|
|
91
91
|
# @param [Hash] opts the optional parameters
|
|
92
92
|
# @return [UnpublishPost200Response]
|
|
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.816
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- OpenAPI-Generator
|
|
@@ -5557,7 +5557,7 @@ files:
|
|
|
5557
5557
|
- spec/models/you_tube_video_retention_response_retention_curve_inner_spec.rb
|
|
5558
5558
|
- spec/models/you_tube_video_retention_response_spec.rb
|
|
5559
5559
|
- spec/spec_helper.rb
|
|
5560
|
-
- zernio-sdk-0.0.
|
|
5560
|
+
- zernio-sdk-0.0.816.gem
|
|
5561
5561
|
- zernio-sdk.gemspec
|
|
5562
5562
|
homepage: https://openapi-generator.tech
|
|
5563
5563
|
licenses:
|
data/zernio-sdk-0.0.814.gem
DELETED
|
Binary file
|