late-sdk 0.0.744 → 0.0.746

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.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -0
  3. data/docs/SendInboxMessageRequestInteractiveAction.md +2 -0
  4. data/docs/SendInboxMessageRequestInteractiveActionOneOf10.md +20 -0
  5. data/docs/SendInboxMessageRequestInteractiveActionOneOf10Parameters.md +24 -0
  6. data/docs/WebhookEventsApi.md +69 -0
  7. data/docs/WebhookPayloadMessageMetadata.md +4 -2
  8. data/docs/WebhookPayloadWhatsAppAccountNameStatusUpdated.md +26 -0
  9. data/docs/WebhookPayloadWhatsAppAccountNameStatusUpdatedName.md +24 -0
  10. data/lib/zernio-sdk/api/webhook_events_api.rb +66 -0
  11. data/lib/zernio-sdk/models/send_inbox_message_request_interactive.rb +3 -3
  12. data/lib/zernio-sdk/models/send_inbox_message_request_interactive_action.rb +1 -0
  13. data/lib/zernio-sdk/models/send_inbox_message_request_interactive_action_one_of10.rb +215 -0
  14. data/lib/zernio-sdk/models/send_inbox_message_request_interactive_action_one_of10_parameters.rb +201 -0
  15. data/lib/zernio-sdk/models/webhook_payload_message_metadata.rb +13 -3
  16. data/lib/zernio-sdk/models/webhook_payload_whats_app_account_name_status_updated.rb +295 -0
  17. data/lib/zernio-sdk/models/webhook_payload_whats_app_account_name_status_updated_name.rb +228 -0
  18. data/lib/zernio-sdk/version.rb +1 -1
  19. data/lib/zernio-sdk.rb +4 -0
  20. data/openapi.yaml +124 -10
  21. data/spec/models/create_webhook_settings_request_spec.rb +1 -1
  22. data/spec/models/send_inbox_message_request_interactive_action_one_of10_parameters_spec.rb +54 -0
  23. data/spec/models/send_inbox_message_request_interactive_action_one_of10_spec.rb +46 -0
  24. data/spec/models/send_inbox_message_request_interactive_spec.rb +1 -1
  25. data/spec/models/update_webhook_settings_request_spec.rb +1 -1
  26. data/spec/models/webhook_payload_message_metadata_spec.rb +6 -0
  27. data/spec/models/webhook_payload_whats_app_account_name_status_updated_name_spec.rb +58 -0
  28. data/spec/models/webhook_payload_whats_app_account_name_status_updated_spec.rb +64 -0
  29. data/spec/models/webhook_spec.rb +1 -1
  30. data/zernio-sdk-0.0.746.gem +0 -0
  31. metadata +18 -2
  32. data/zernio-sdk-0.0.744.gem +0 -0
@@ -0,0 +1,228 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
5
+
6
+ The version of the OpenAPI document: 1.0.4
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'date'
14
+ require 'time'
15
+
16
+ module Zernio
17
+ class WebhookPayloadWhatsAppAccountNameStatusUpdatedName < ApiModelBase
18
+ # Normalized from Meta's `decision` (REJECTED -> DECLINED, DEFERRED -> PENDING_REVIEW; the review is still open on DEFERRED, not a rejection).
19
+ attr_accessor :status
20
+
21
+ # The display name Meta reviewed. Null if Meta did not send one.
22
+ attr_accessor :requested_name
23
+
24
+ # Meta's free-form decline reason. Null on approval, or when Meta sends the literal string \"NONE\".
25
+ attr_accessor :rejection_reason
26
+
27
+ # The phone number this review is for, as Meta reported it.
28
+ attr_accessor :display_phone_number
29
+
30
+ class EnumAttributeValidator
31
+ attr_reader :datatype
32
+ attr_reader :allowable_values
33
+
34
+ def initialize(datatype, allowable_values)
35
+ @allowable_values = allowable_values.map do |value|
36
+ case datatype.to_s
37
+ when /Integer/i
38
+ value.to_i
39
+ when /Float/i
40
+ value.to_f
41
+ else
42
+ value
43
+ end
44
+ end
45
+ end
46
+
47
+ def valid?(value)
48
+ !value || allowable_values.include?(value)
49
+ end
50
+ end
51
+
52
+ # Attribute mapping from ruby-style variable name to JSON key.
53
+ def self.attribute_map
54
+ {
55
+ :'status' => :'status',
56
+ :'requested_name' => :'requestedName',
57
+ :'rejection_reason' => :'rejectionReason',
58
+ :'display_phone_number' => :'displayPhoneNumber'
59
+ }
60
+ end
61
+
62
+ # Returns attribute mapping this model knows about
63
+ def self.acceptable_attribute_map
64
+ attribute_map
65
+ end
66
+
67
+ # Returns all the JSON keys this model knows about
68
+ def self.acceptable_attributes
69
+ acceptable_attribute_map.values
70
+ end
71
+
72
+ # Attribute type mapping.
73
+ def self.openapi_types
74
+ {
75
+ :'status' => :'String',
76
+ :'requested_name' => :'String',
77
+ :'rejection_reason' => :'String',
78
+ :'display_phone_number' => :'String'
79
+ }
80
+ end
81
+
82
+ # List of attributes with nullable: true
83
+ def self.openapi_nullable
84
+ Set.new([
85
+ :'requested_name',
86
+ :'rejection_reason',
87
+ :'display_phone_number'
88
+ ])
89
+ end
90
+
91
+ # Initializes the object
92
+ # @param [Hash] attributes Model attributes in the form of hash
93
+ def initialize(attributes = {})
94
+ if (!attributes.is_a?(Hash))
95
+ fail ArgumentError, "The input argument (attributes) must be a hash in `Zernio::WebhookPayloadWhatsAppAccountNameStatusUpdatedName` initialize method"
96
+ end
97
+
98
+ # check to see if the attribute exists and convert string to symbol for hash key
99
+ acceptable_attribute_map = self.class.acceptable_attribute_map
100
+ attributes = attributes.each_with_object({}) { |(k, v), h|
101
+ if (!acceptable_attribute_map.key?(k.to_sym))
102
+ fail ArgumentError, "`#{k}` is not a valid attribute in `Zernio::WebhookPayloadWhatsAppAccountNameStatusUpdatedName`. Please check the name to make sure it's valid. List of attributes: " + acceptable_attribute_map.keys.inspect
103
+ end
104
+ h[k.to_sym] = v
105
+ }
106
+
107
+ if attributes.key?(:'status')
108
+ self.status = attributes[:'status']
109
+ else
110
+ self.status = nil
111
+ end
112
+
113
+ if attributes.key?(:'requested_name')
114
+ self.requested_name = attributes[:'requested_name']
115
+ else
116
+ self.requested_name = nil
117
+ end
118
+
119
+ if attributes.key?(:'rejection_reason')
120
+ self.rejection_reason = attributes[:'rejection_reason']
121
+ else
122
+ self.rejection_reason = nil
123
+ end
124
+
125
+ if attributes.key?(:'display_phone_number')
126
+ self.display_phone_number = attributes[:'display_phone_number']
127
+ else
128
+ self.display_phone_number = nil
129
+ end
130
+ end
131
+
132
+ # Show invalid properties with the reasons. Usually used together with valid?
133
+ # @return Array for valid properties with the reasons
134
+ def list_invalid_properties
135
+ warn '[DEPRECATED] the `list_invalid_properties` method is obsolete'
136
+ invalid_properties = Array.new
137
+ if @status.nil?
138
+ invalid_properties.push('invalid value for "status", status cannot be nil.')
139
+ end
140
+
141
+ invalid_properties
142
+ end
143
+
144
+ # Check to see if the all the properties in the model are valid
145
+ # @return true if the model is valid
146
+ def valid?
147
+ warn '[DEPRECATED] the `valid?` method is obsolete'
148
+ return false if @status.nil?
149
+ status_validator = EnumAttributeValidator.new('String', ["APPROVED", "DECLINED", "PENDING_REVIEW"])
150
+ return false unless status_validator.valid?(@status)
151
+ true
152
+ end
153
+
154
+ # Custom attribute writer method checking allowed values (enum).
155
+ # @param [Object] status Object to be assigned
156
+ def status=(status)
157
+ validator = EnumAttributeValidator.new('String', ["APPROVED", "DECLINED", "PENDING_REVIEW"])
158
+ unless validator.valid?(status)
159
+ fail ArgumentError, "invalid value for \"status\", must be one of #{validator.allowable_values}."
160
+ end
161
+ @status = status
162
+ end
163
+
164
+ # Checks equality by comparing each attribute.
165
+ # @param [Object] Object to be compared
166
+ def ==(o)
167
+ return true if self.equal?(o)
168
+ self.class == o.class &&
169
+ status == o.status &&
170
+ requested_name == o.requested_name &&
171
+ rejection_reason == o.rejection_reason &&
172
+ display_phone_number == o.display_phone_number
173
+ end
174
+
175
+ # @see the `==` method
176
+ # @param [Object] Object to be compared
177
+ def eql?(o)
178
+ self == o
179
+ end
180
+
181
+ # Calculates hash code according to all attributes.
182
+ # @return [Integer] Hash code
183
+ def hash
184
+ [status, requested_name, rejection_reason, display_phone_number].hash
185
+ end
186
+
187
+ # Builds the object from hash
188
+ # @param [Hash] attributes Model attributes in the form of hash
189
+ # @return [Object] Returns the model itself
190
+ def self.build_from_hash(attributes)
191
+ return nil unless attributes.is_a?(Hash)
192
+ attributes = attributes.transform_keys(&:to_sym)
193
+ transformed_hash = {}
194
+ openapi_types.each_pair do |key, type|
195
+ if attributes.key?(attribute_map[key]) && attributes[attribute_map[key]].nil?
196
+ transformed_hash["#{key}"] = nil
197
+ elsif type =~ /\AArray<(.*)>/i
198
+ # check to ensure the input is an array given that the attribute
199
+ # is documented as an array but the input is not
200
+ if attributes[attribute_map[key]].is_a?(Array)
201
+ transformed_hash["#{key}"] = attributes[attribute_map[key]].map { |v| _deserialize($1, v) }
202
+ end
203
+ elsif !attributes[attribute_map[key]].nil?
204
+ transformed_hash["#{key}"] = _deserialize(type, attributes[attribute_map[key]])
205
+ end
206
+ end
207
+ new(transformed_hash)
208
+ end
209
+
210
+ # Returns the object in the form of hash
211
+ # @return [Hash] Returns the object in the form of hash
212
+ def to_hash
213
+ hash = {}
214
+ self.class.attribute_map.each_pair do |attr, param|
215
+ value = self.send(attr)
216
+ if value.nil?
217
+ is_nullable = self.class.openapi_nullable.include?(attr)
218
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
219
+ end
220
+
221
+ hash[param] = _to_hash(value)
222
+ end
223
+ hash
224
+ end
225
+
226
+ end
227
+
228
+ end
@@ -11,5 +11,5 @@ Generator version: 7.19.0
11
11
  =end
12
12
 
13
13
  module Zernio
14
- VERSION = '0.0.744'
14
+ VERSION = '0.0.746'
15
15
  end
data/lib/zernio-sdk.rb CHANGED
@@ -1269,6 +1269,8 @@ require 'zernio-sdk/models/send_inbox_message_request_interactive'
1269
1269
  require 'zernio-sdk/models/send_inbox_message_request_interactive_action'
1270
1270
  require 'zernio-sdk/models/send_inbox_message_request_interactive_action_one_of'
1271
1271
  require 'zernio-sdk/models/send_inbox_message_request_interactive_action_one_of1'
1272
+ require 'zernio-sdk/models/send_inbox_message_request_interactive_action_one_of10'
1273
+ require 'zernio-sdk/models/send_inbox_message_request_interactive_action_one_of10_parameters'
1272
1274
  require 'zernio-sdk/models/send_inbox_message_request_interactive_action_one_of1_parameters'
1273
1275
  require 'zernio-sdk/models/send_inbox_message_request_interactive_action_one_of2'
1274
1276
  require 'zernio-sdk/models/send_inbox_message_request_interactive_action_one_of2_parameters'
@@ -1663,6 +1665,8 @@ require 'zernio-sdk/models/webhook_payload_review_new'
1663
1665
  require 'zernio-sdk/models/webhook_payload_review_new_account'
1664
1666
  require 'zernio-sdk/models/webhook_payload_review_updated'
1665
1667
  require 'zernio-sdk/models/webhook_payload_test'
1668
+ require 'zernio-sdk/models/webhook_payload_whats_app_account_name_status_updated'
1669
+ require 'zernio-sdk/models/webhook_payload_whats_app_account_name_status_updated_name'
1666
1670
  require 'zernio-sdk/models/webhook_payload_whats_app_template_category_updated'
1667
1671
  require 'zernio-sdk/models/webhook_payload_whats_app_template_category_updated_template'
1668
1672
  require 'zernio-sdk/models/webhook_payload_whats_app_template_status_updated'
data/openapi.yaml CHANGED
@@ -176,6 +176,7 @@ x-documentation:
176
176
  - `ad.status_changed` - Ad, ad set, or campaign changed status on the ad platform (Meta: `in_process_ad_objects` entry/exit and `with_issues_ad_objects` violations)
177
177
  - `whatsapp.template.status_updated` - WhatsApp Business template completed (re)review by Meta. `template.status` carries the new state (APPROVED, REJECTED, PENDING, PAUSED, DISABLED, IN_APPEAL, PENDING_DELETION); `template.reason` is Meta's free-form reason or "NONE".
178
178
  - `whatsapp.template.category_updated` - Meta reclassified a WhatsApp Business template's category (drives tariff and marketing opt-out applicability). `template.changeType` is `scheduled` (24h advance notice) or `applied`; `template.category` is always the category right now.
179
+ - `whatsapp.account.name_status_updated` - Meta finished reviewing a WhatsApp display-name change. `name.status` carries the outcome (APPROVED, DECLINED, PENDING_REVIEW). Fires only on a review outcome; a name applied without review (`name_status: AVAILABLE_WITHOUT_REVIEW`) produces no event.
179
180
  - `call.received` - An inbound call (phone/PSTN or WhatsApp) reached one of your numbers and was routed to its destination
180
181
  - `call.ended` - A call ended; carries duration, end reason, cost breakdown, and the recording when enabled
181
182
  - `call.failed` - A call failed with a hard error before or during bridging
@@ -429,10 +430,10 @@ tags:
429
430
  - name: Webhooks
430
431
  description: |
431
432
  Configure webhooks for real-time notifications. Webhooks can be created from the dashboard (Settings → Webhooks) or via this API.
432
- Events: post.scheduled, post.published, post.failed, post.partial, post.cancelled, post.recycled, post.platform.published, post.platform.failed, post.platform.deleted, post.tiktok.url_resolved, post.external.created, post.external.updated, post.external.deleted, account.connected, account.disconnected, account.ads.initial_sync_completed, message.received, conversation.started, call.received, call.ended, call.failed, call.permission_request, message.sent, message.edited, message.deleted, message.delivered, message.read, message.failed, reaction.received, referral.received, comment.received, review.new, review.updated, lead.received, ad.status_changed, whatsapp.template.status_updated, whatsapp.template.category_updated, whatsapp.automatic_event, whatsapp.number.activated, whatsapp.number.declined, whatsapp.number.action_required, whatsapp.number.verification_required, whatsapp.number.suspended, whatsapp.number.reactivated, whatsapp.number.released, whatsapp.number.kyc_submitted, verification.approved, verification.failed, webhook.test.
433
+ Events: post.scheduled, post.published, post.failed, post.partial, post.cancelled, post.recycled, post.platform.published, post.platform.failed, post.platform.deleted, post.tiktok.url_resolved, post.external.created, post.external.updated, post.external.deleted, account.connected, account.disconnected, account.ads.initial_sync_completed, message.received, conversation.started, call.received, call.ended, call.failed, call.permission_request, message.sent, message.edited, message.deleted, message.delivered, message.read, message.failed, reaction.received, referral.received, comment.received, review.new, review.updated, lead.received, ad.status_changed, whatsapp.template.status_updated, whatsapp.template.category_updated, whatsapp.account.name_status_updated, whatsapp.automatic_event, whatsapp.number.activated, whatsapp.number.declined, whatsapp.number.action_required, whatsapp.number.verification_required, whatsapp.number.suspended, whatsapp.number.reactivated, whatsapp.number.released, whatsapp.number.kyc_submitted, verification.approved, verification.failed, webhook.test.
433
434
  Security: optional HMAC-SHA256 signature in X-Zernio-Signature header. Configure a secret key to enable verification. Custom headers supported.
434
435
 
435
- Resource groups. Every event belongs to one group: post.* to publishing, message.*, reaction.*, conversation.*, call.* and whatsapp.automatic_event to messages, comment.* and review.* to engagement, lead.* to contacts, ad.* to ads, account.* and whatsapp.template.* to accounts, whatsapp.number.* and verification.* to telephony, webhook.test to webhooks. Two independent controls use that mapping. (1) A restricted (zrk_) API key can only subscribe to, test-fire, redeliver, or read delivery logs for events in the groups it holds, so it can never create a subscription broader than itself. (2) Each subscription carries its own `disabledResourceGroups` denylist: events in a disabled group are dropped before delivery to that endpoint, on live delivery and on every replay path, no matter which key or session created the subscription. Changing that denylist applies to every event emitted after the change; events already queued when it landed can still be delivered for up to five minutes after they were enqueued, because the delivery worker trusts a five-minute enqueue-time snapshot before re-checking. Absent or empty on a subscription means it receives everything it subscribes to, which is the behavior of every subscription created before the field existed.
436
+ Resource groups. Every event belongs to one group: post.* to publishing, message.*, reaction.*, conversation.*, call.* and whatsapp.automatic_event to messages, comment.* and review.* to engagement, lead.* to contacts, ad.* to ads, account.*, whatsapp.template.* and whatsapp.account.* to accounts, whatsapp.number.* and verification.* to telephony, webhook.test to webhooks. Two independent controls use that mapping. (1) A restricted (zrk_) API key can only subscribe to, test-fire, redeliver, or read delivery logs for events in the groups it holds, so it can never create a subscription broader than itself. (2) Each subscription carries its own `disabledResourceGroups` denylist: events in a disabled group are dropped before delivery to that endpoint, on live delivery and on every replay path, no matter which key or session created the subscription. Changing that denylist applies to every event emitted after the change; events already queued when it landed can still be delivered for up to five minutes after they were enqueued, because the delivery worker trusts a five-minute enqueue-time snapshot before re-checking. Absent or empty on a subscription means it receives everything it subscribes to, which is the behavior of every subscription created before the field existed.
436
437
  - name: Webhook Events
437
438
  description: |
438
439
  Incoming webhook deliveries sent by Zernio to your configured endpoint URL.
@@ -2399,7 +2400,7 @@ components:
2399
2400
  type: array
2400
2401
  items:
2401
2402
  type: string
2402
- enum: [post.scheduled, post.published, post.failed, post.partial, post.cancelled, post.recycled, post.platform.published, post.platform.failed, post.platform.deleted, post.tiktok.url_resolved, post.external.created, post.external.updated, post.external.deleted, account.connected, account.disconnected, account.ads.initial_sync_completed, message.received, conversation.started, call.received, call.ended, call.failed, call.permission_request, message.sent, message.edited, message.deleted, message.delivered, message.read, message.failed, reaction.received, referral.received, comment.received, review.new, review.updated, lead.received, ad.status_changed, whatsapp.template.status_updated, whatsapp.template.category_updated, whatsapp.automatic_event, whatsapp.number.activated, whatsapp.number.declined, whatsapp.number.action_required, whatsapp.number.verification_required, whatsapp.number.suspended, whatsapp.number.reactivated, whatsapp.number.released, whatsapp.number.kyc_submitted, verification.approved, verification.failed]
2403
+ enum: [post.scheduled, post.published, post.failed, post.partial, post.cancelled, post.recycled, post.platform.published, post.platform.failed, post.platform.deleted, post.tiktok.url_resolved, post.external.created, post.external.updated, post.external.deleted, account.connected, account.disconnected, account.ads.initial_sync_completed, message.received, conversation.started, call.received, call.ended, call.failed, call.permission_request, message.sent, message.edited, message.deleted, message.delivered, message.read, message.failed, reaction.received, referral.received, comment.received, review.new, review.updated, lead.received, ad.status_changed, whatsapp.template.status_updated, whatsapp.template.category_updated, whatsapp.account.name_status_updated, whatsapp.automatic_event, whatsapp.number.activated, whatsapp.number.declined, whatsapp.number.action_required, whatsapp.number.verification_required, whatsapp.number.suspended, whatsapp.number.reactivated, whatsapp.number.released, whatsapp.number.kyc_submitted, verification.approved, verification.failed]
2403
2404
  description: Events subscribed to
2404
2405
  isActive:
2405
2406
  type: boolean
@@ -3665,7 +3666,8 @@ components:
3665
3666
  description: |
3666
3667
  WhatsApp only. Which kind of interactive reply the user sent:
3667
3668
  `button_reply` (tap on an interactive button), `list_reply` (tap on a
3668
- list row), or `nfm_reply` (a WhatsApp Flow submission).
3669
+ list row), or `nfm_reply` (a WhatsApp Flow submission or an
3670
+ `address_message` submission, see `nfmReplyName`).
3669
3671
  interactiveId:
3670
3672
  type: string
3671
3673
  description: |
@@ -3689,7 +3691,17 @@ components:
3689
3691
  description: |
3690
3692
  WhatsApp only. Parsed Flow response JSON. Populated when
3691
3693
  `flowResponseJson` is valid JSON; otherwise omitted. Keys and
3692
- value types depend on the specific Flow that was submitted.
3694
+ value types depend on the specific Flow that was submitted. An
3695
+ `address_message` submission (`nfmReplyName: address_message`) carries
3696
+ the address fields (`name`, `address`, `city`, `state`, `in_pin_code`,
3697
+ ...), either at the top level or nested under `values`; read both.
3698
+ nfmReplyName:
3699
+ type: string
3700
+ description: |
3701
+ WhatsApp only. `nfm_reply.name` as Meta sent it, e.g. `flow` or
3702
+ `address_message`. Address submissions share the `nfm_reply`
3703
+ envelope with Flow submissions and are otherwise indistinguishable
3704
+ in `flowResponseData`; use this field to tell them apart.
3693
3705
  order:
3694
3706
  type: object
3695
3707
  description: |
@@ -4590,6 +4602,54 @@ components:
4590
4602
  type: string
4591
4603
  format: date-time
4592
4604
  description: 'UTC time at which Zernio generated this event (set once when the event payload is built, before delivery is queued). Retries and redeliveries keep the original value, so it reflects the event, not the delivery attempt.'
4605
+ WebhookPayloadWhatsAppAccountNameStatusUpdated:
4606
+ type: object
4607
+ description: |
4608
+ Webhook payload for the `whatsapp.account.name_status_updated` event.
4609
+ Fired when Meta finishes reviewing a WhatsApp display-name change on a
4610
+ connected number. Maps Meta's `phone_number_name_update` WABA webhook
4611
+ field onto our event envelope. Fires only for a review outcome
4612
+ (APPROVED, DECLINED, PENDING_REVIEW); a name applied without review
4613
+ reports `name_status: AVAILABLE_WITHOUT_REVIEW` on the phone node
4614
+ instead, and Meta never sends this webhook field for that case.
4615
+ required: [id, event, account, name, timestamp]
4616
+ properties:
4617
+ id:
4618
+ type: string
4619
+ description: Stable webhook event ID
4620
+ event:
4621
+ type: string
4622
+ enum: [whatsapp.account.name_status_updated]
4623
+ account:
4624
+ type: object
4625
+ required: [accountId, profileId, platform, username]
4626
+ properties:
4627
+ accountId: { type: string }
4628
+ profileId: { type: string }
4629
+ platform: { type: string, enum: [whatsapp] }
4630
+ username: { type: string }
4631
+ displayName: { type: string }
4632
+ name:
4633
+ type: object
4634
+ required: [status, requestedName, rejectionReason, displayPhoneNumber]
4635
+ properties:
4636
+ status:
4637
+ type: string
4638
+ enum: [APPROVED, DECLINED, PENDING_REVIEW]
4639
+ description: 'Normalized from Meta''s `decision` (REJECTED -> DECLINED, DEFERRED -> PENDING_REVIEW; the review is still open on DEFERRED, not a rejection).'
4640
+ requestedName:
4641
+ type: [string, "null"]
4642
+ description: The display name Meta reviewed. Null if Meta did not send one.
4643
+ rejectionReason:
4644
+ type: [string, "null"]
4645
+ description: 'Meta''s free-form decline reason. Null on approval, or when Meta sends the literal string "NONE".'
4646
+ displayPhoneNumber:
4647
+ type: [string, "null"]
4648
+ description: 'The phone number this review is for, as Meta reported it.'
4649
+ timestamp:
4650
+ type: string
4651
+ format: date-time
4652
+ description: 'UTC time at which Zernio generated this event (set once when the event payload is built, before delivery is queued). Retries and redeliveries keep the original value, so it reflects the event, not the delivery attempt.'
4593
4653
  WebhookPayloadTest:
4594
4654
  type: object
4595
4655
  description: Webhook payload for test deliveries
@@ -9578,6 +9638,31 @@ webhooks:
9578
9638
  responses:
9579
9639
  '200':
9580
9640
  description: Webhook received successfully
9641
+ whatsapp.account.name_status_updated:
9642
+ post:
9643
+ operationId: onWhatsAppAccountNameStatusUpdated
9644
+ summary: WhatsApp display-name review outcome event
9645
+ description: |
9646
+ Fired when Meta finishes reviewing a WhatsApp Business display-name
9647
+ change. Forwarded from Meta's `phone_number_name_update` webhook
9648
+ field on the WhatsApp Business Account. Fires only on a review
9649
+ outcome (`name.status` APPROVED, DECLINED, or PENDING_REVIEW); a name
9650
+ applied without review reports `name_status:
9651
+ AVAILABLE_WITHOUT_REVIEW` on the phone node instead and produces no
9652
+ event here. `decision` REJECTED maps to DECLINED and DEFERRED maps to
9653
+ PENDING_REVIEW, matching the `name_status` vocabulary returned by
9654
+ `GET /v1/whatsapp/number-info`. Delivery is at-least-once; dedupe on
9655
+ `(account.accountId, name.status, name.requestedName)`.
9656
+ tags: [Webhook Events]
9657
+ requestBody:
9658
+ required: true
9659
+ content:
9660
+ application/json:
9661
+ schema:
9662
+ $ref: '#/components/schemas/WebhookPayloadWhatsAppAccountNameStatusUpdated'
9663
+ responses:
9664
+ '200':
9665
+ description: Webhook received successfully
9581
9666
  whatsapp.automatic_event:
9582
9667
  post:
9583
9668
  operationId: onWhatsAppAutomaticEvent
@@ -24474,7 +24559,7 @@ paths:
24474
24559
  minItems: 1
24475
24560
  items:
24476
24561
  type: string
24477
- enum: [post.scheduled, post.published, post.failed, post.partial, post.cancelled, post.recycled, post.platform.published, post.platform.failed, post.platform.deleted, post.tiktok.url_resolved, post.external.created, post.external.updated, post.external.deleted, account.connected, account.disconnected, account.ads.initial_sync_completed, message.received, conversation.started, call.received, call.ended, call.failed, call.permission_request, message.sent, message.edited, message.deleted, message.delivered, message.read, message.failed, reaction.received, referral.received, comment.received, review.new, review.updated, lead.received, ad.status_changed, whatsapp.template.status_updated, whatsapp.template.category_updated, whatsapp.automatic_event, whatsapp.number.activated, whatsapp.number.declined, whatsapp.number.action_required, whatsapp.number.verification_required, whatsapp.number.suspended, whatsapp.number.reactivated, whatsapp.number.released, whatsapp.number.kyc_submitted, verification.approved, verification.failed]
24562
+ enum: [post.scheduled, post.published, post.failed, post.partial, post.cancelled, post.recycled, post.platform.published, post.platform.failed, post.platform.deleted, post.tiktok.url_resolved, post.external.created, post.external.updated, post.external.deleted, account.connected, account.disconnected, account.ads.initial_sync_completed, message.received, conversation.started, call.received, call.ended, call.failed, call.permission_request, message.sent, message.edited, message.deleted, message.delivered, message.read, message.failed, reaction.received, referral.received, comment.received, review.new, review.updated, lead.received, ad.status_changed, whatsapp.template.status_updated, whatsapp.template.category_updated, whatsapp.account.name_status_updated, whatsapp.automatic_event, whatsapp.number.activated, whatsapp.number.declined, whatsapp.number.action_required, whatsapp.number.verification_required, whatsapp.number.suspended, whatsapp.number.reactivated, whatsapp.number.released, whatsapp.number.kyc_submitted, verification.approved, verification.failed]
24478
24563
  description: Events to subscribe to (at least one required)
24479
24564
  isActive:
24480
24565
  type: boolean
@@ -24593,7 +24678,7 @@ paths:
24593
24678
  minItems: 1
24594
24679
  items:
24595
24680
  type: string
24596
- enum: [post.scheduled, post.published, post.failed, post.partial, post.cancelled, post.recycled, post.platform.published, post.platform.failed, post.platform.deleted, post.tiktok.url_resolved, post.external.created, post.external.updated, post.external.deleted, account.connected, account.disconnected, account.ads.initial_sync_completed, message.received, conversation.started, call.received, call.ended, call.failed, call.permission_request, message.sent, message.edited, message.deleted, message.delivered, message.read, message.failed, reaction.received, referral.received, comment.received, review.new, review.updated, lead.received, ad.status_changed, whatsapp.template.status_updated, whatsapp.template.category_updated, whatsapp.automatic_event, whatsapp.number.activated, whatsapp.number.declined, whatsapp.number.action_required, whatsapp.number.verification_required, whatsapp.number.suspended, whatsapp.number.reactivated, whatsapp.number.released, whatsapp.number.kyc_submitted, verification.approved, verification.failed]
24681
+ enum: [post.scheduled, post.published, post.failed, post.partial, post.cancelled, post.recycled, post.platform.published, post.platform.failed, post.platform.deleted, post.tiktok.url_resolved, post.external.created, post.external.updated, post.external.deleted, account.connected, account.disconnected, account.ads.initial_sync_completed, message.received, conversation.started, call.received, call.ended, call.failed, call.permission_request, message.sent, message.edited, message.deleted, message.delivered, message.read, message.failed, reaction.received, referral.received, comment.received, review.new, review.updated, lead.received, ad.status_changed, whatsapp.template.status_updated, whatsapp.template.category_updated, whatsapp.account.name_status_updated, whatsapp.automatic_event, whatsapp.number.activated, whatsapp.number.declined, whatsapp.number.action_required, whatsapp.number.verification_required, whatsapp.number.suspended, whatsapp.number.reactivated, whatsapp.number.released, whatsapp.number.kyc_submitted, verification.approved, verification.failed]
24597
24682
  description: Events to subscribe to. Must contain at least one event if provided.
24598
24683
  isActive:
24599
24684
  type: boolean
@@ -26148,8 +26233,7 @@ paths:
26148
26233
  commerce messages (single product, product list, catalog, and
26149
26234
  carousel). When set, takes priority over `buttons` and
26150
26235
  `quickReplies`. The shape mirrors Meta's Cloud API `interactive`
26151
- object verbatim, so any payload that works against Meta directly
26152
- will also work here.
26236
+ object for the types in the enum below.
26153
26237
 
26154
26238
  Use `buttons` / `quickReplies` for simple button replies
26155
26239
  (WhatsApp's `interactive.type: "button"`): the abstraction caps at
@@ -26195,6 +26279,18 @@ paths:
26195
26279
  For `catalog_message`, `action` may also be omitted (we default it
26196
26280
  to `{ "name": "catalog_message" }`).
26197
26281
 
26282
+ For `address_message`, `parameters.country` is required (Meta
26283
+ rejects the whole send without it); everything else in
26284
+ `parameters` (`values`, `saved_addresses`, `validation_errors`)
26285
+ is forwarded to Meta as-is. This is Meta's native structured
26286
+ shipping-address capture, generally available in India as of
26287
+ 2026-08; check Meta's documentation for current country
26288
+ availability before relying on it elsewhere. The submitted
26289
+ address arrives as an `nfm_reply` on the `message.received`
26290
+ webhook, same as a Flow submission, but with
26291
+ `metadata.nfmReplyName` set to `address_message` so you can
26292
+ tell the two apart.
26293
+
26198
26294
  Tap events come back via the `message.received` webhook with
26199
26295
  `metadata.interactiveType` set to `list_reply` or `nfm_reply`.
26200
26296
  Carts submitted from commerce messages arrive as `metadata.order`;
@@ -26203,7 +26299,7 @@ paths:
26203
26299
  properties:
26204
26300
  type:
26205
26301
  type: string
26206
- enum: [list, cta_url, flow, location_request_message, request_contact_info, voice_call, product, product_list, catalog_message, carousel]
26302
+ enum: [list, cta_url, flow, location_request_message, request_contact_info, voice_call, product, product_list, catalog_message, carousel, address_message]
26207
26303
  description: Which interactive layout to render.
26208
26304
  header:
26209
26305
  type: object
@@ -26387,6 +26483,24 @@ paths:
26387
26483
  header: { type: object, description: "Media cards only, required. Carries the card's image or video." }
26388
26484
  body: { type: object, description: Optional card body text. }
26389
26485
  action: { type: object, description: "Product cards: `{ catalog_id, product_retailer_id }` (required). Media cards: the card's button action (e.g. `cta_url` with `parameters.display_text` and `parameters.url`)." }
26486
+ - type: object
26487
+ description: |
26488
+ Address-request action. `type` on the parent must be
26489
+ `address_message`. Renders Meta's native structured
26490
+ address form in-chat (generally available in India as
26491
+ of 2026-08; check Meta's documentation for current
26492
+ country availability).
26493
+ required: [name, parameters]
26494
+ properties:
26495
+ name: { type: string, enum: [address_message] }
26496
+ parameters:
26497
+ type: object
26498
+ required: [country]
26499
+ properties:
26500
+ country: { type: string, description: 'ISO 3166-1 alpha-2 country code Meta should localize the address form for (e.g. IN). Required: Meta rejects the send without it.' }
26501
+ values: { type: object, additionalProperties: true, description: Optional pre-filled address field values. }
26502
+ saved_addresses: { type: array, items: { type: object, additionalProperties: true }, description: Optional list of the recipient's previously saved addresses to offer as quick picks. }
26503
+ validation_errors: { type: object, additionalProperties: { type: string }, description: Optional per-field error messages to show when re-prompting after a failed validation. }
26390
26504
  replyMarkup:
26391
26505
  type: object
26392
26506
  description: Telegram-native keyboard markup. Ignored on other platforms.
@@ -48,7 +48,7 @@ describe Zernio::CreateWebhookSettingsRequest do
48
48
  describe 'test attribute "events"' do
49
49
  it 'should work' do
50
50
  # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
51
- # validator = Petstore::EnumTest::EnumAttributeValidator.new('Array<String>', ["post.scheduled", "post.published", "post.failed", "post.partial", "post.cancelled", "post.recycled", "post.platform.published", "post.platform.failed", "post.platform.deleted", "post.tiktok.url_resolved", "post.external.created", "post.external.updated", "post.external.deleted", "account.connected", "account.disconnected", "account.ads.initial_sync_completed", "message.received", "conversation.started", "call.received", "call.ended", "call.failed", "call.permission_request", "message.sent", "message.edited", "message.deleted", "message.delivered", "message.read", "message.failed", "reaction.received", "referral.received", "comment.received", "review.new", "review.updated", "lead.received", "ad.status_changed", "whatsapp.template.status_updated", "whatsapp.template.category_updated", "whatsapp.automatic_event", "whatsapp.number.activated", "whatsapp.number.declined", "whatsapp.number.action_required", "whatsapp.number.verification_required", "whatsapp.number.suspended", "whatsapp.number.reactivated", "whatsapp.number.released", "whatsapp.number.kyc_submitted", "verification.approved", "verification.failed"])
51
+ # validator = Petstore::EnumTest::EnumAttributeValidator.new('Array<String>', ["post.scheduled", "post.published", "post.failed", "post.partial", "post.cancelled", "post.recycled", "post.platform.published", "post.platform.failed", "post.platform.deleted", "post.tiktok.url_resolved", "post.external.created", "post.external.updated", "post.external.deleted", "account.connected", "account.disconnected", "account.ads.initial_sync_completed", "message.received", "conversation.started", "call.received", "call.ended", "call.failed", "call.permission_request", "message.sent", "message.edited", "message.deleted", "message.delivered", "message.read", "message.failed", "reaction.received", "referral.received", "comment.received", "review.new", "review.updated", "lead.received", "ad.status_changed", "whatsapp.template.status_updated", "whatsapp.template.category_updated", "whatsapp.account.name_status_updated", "whatsapp.automatic_event", "whatsapp.number.activated", "whatsapp.number.declined", "whatsapp.number.action_required", "whatsapp.number.verification_required", "whatsapp.number.suspended", "whatsapp.number.reactivated", "whatsapp.number.released", "whatsapp.number.kyc_submitted", "verification.approved", "verification.failed"])
52
52
  # validator.allowable_values.each do |value|
53
53
  # expect { instance.events = value }.not_to raise_error
54
54
  # end
@@ -0,0 +1,54 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
5
+
6
+ The version of the OpenAPI document: 1.0.4
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for Zernio::SendInboxMessageRequestInteractiveActionOneOf10Parameters
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe Zernio::SendInboxMessageRequestInteractiveActionOneOf10Parameters do
21
+ #let(:instance) { Zernio::SendInboxMessageRequestInteractiveActionOneOf10Parameters.new }
22
+
23
+ describe 'test an instance of SendInboxMessageRequestInteractiveActionOneOf10Parameters' do
24
+ it 'should create an instance of SendInboxMessageRequestInteractiveActionOneOf10Parameters' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(Zernio::SendInboxMessageRequestInteractiveActionOneOf10Parameters)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "country"' do
31
+ it 'should work' do
32
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
+ end
34
+ end
35
+
36
+ describe 'test attribute "values"' do
37
+ it 'should work' do
38
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
39
+ end
40
+ end
41
+
42
+ describe 'test attribute "saved_addresses"' do
43
+ it 'should work' do
44
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
45
+ end
46
+ end
47
+
48
+ describe 'test attribute "validation_errors"' do
49
+ it 'should work' do
50
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
51
+ end
52
+ end
53
+
54
+ end
@@ -0,0 +1,46 @@
1
+ =begin
2
+ #Zernio API
3
+
4
+ #API reference for Zernio. Authenticate with a Bearer API key. Base URL: https://zernio.com/api Versioning and deprecation: all endpoints are versioned in the URL path (current version: /v1). Breaking changes only ship in a new path version; existing versions keep working. Deprecated operations are marked 'deprecated: true' in this spec and announced in the changelog (https://zernio.com/changelog) before removal. Errors: every 4xx/5xx response is application/json with a machine-readable 'code' and a human-readable 'error' message (see the ErrorResponse schema).
5
+
6
+ The version of the OpenAPI document: 1.0.4
7
+ Contact: support@zernio.com
8
+ Generated by: https://openapi-generator.tech
9
+ Generator version: 7.19.0
10
+
11
+ =end
12
+
13
+ require 'spec_helper'
14
+ require 'json'
15
+ require 'date'
16
+
17
+ # Unit tests for Zernio::SendInboxMessageRequestInteractiveActionOneOf10
18
+ # Automatically generated by openapi-generator (https://openapi-generator.tech)
19
+ # Please update as you see appropriate
20
+ describe Zernio::SendInboxMessageRequestInteractiveActionOneOf10 do
21
+ #let(:instance) { Zernio::SendInboxMessageRequestInteractiveActionOneOf10.new }
22
+
23
+ describe 'test an instance of SendInboxMessageRequestInteractiveActionOneOf10' do
24
+ it 'should create an instance of SendInboxMessageRequestInteractiveActionOneOf10' do
25
+ # uncomment below to test the instance creation
26
+ #expect(instance).to be_instance_of(Zernio::SendInboxMessageRequestInteractiveActionOneOf10)
27
+ end
28
+ end
29
+
30
+ describe 'test attribute "name"' do
31
+ it 'should work' do
32
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
+ # validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["address_message"])
34
+ # validator.allowable_values.each do |value|
35
+ # expect { instance.name = value }.not_to raise_error
36
+ # end
37
+ end
38
+ end
39
+
40
+ describe 'test attribute "parameters"' do
41
+ it 'should work' do
42
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
43
+ end
44
+ end
45
+
46
+ end
@@ -30,7 +30,7 @@ describe Zernio::SendInboxMessageRequestInteractive do
30
30
  describe 'test attribute "type"' do
31
31
  it 'should work' do
32
32
  # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
33
- # validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["list", "cta_url", "flow", "location_request_message", "request_contact_info", "voice_call", "product", "product_list", "catalog_message", "carousel"])
33
+ # validator = Petstore::EnumTest::EnumAttributeValidator.new('String', ["list", "cta_url", "flow", "location_request_message", "request_contact_info", "voice_call", "product", "product_list", "catalog_message", "carousel", "address_message"])
34
34
  # validator.allowable_values.each do |value|
35
35
  # expect { instance.type = value }.not_to raise_error
36
36
  # end
@@ -54,7 +54,7 @@ describe Zernio::UpdateWebhookSettingsRequest do
54
54
  describe 'test attribute "events"' do
55
55
  it 'should work' do
56
56
  # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
57
- # validator = Petstore::EnumTest::EnumAttributeValidator.new('Array<String>', ["post.scheduled", "post.published", "post.failed", "post.partial", "post.cancelled", "post.recycled", "post.platform.published", "post.platform.failed", "post.platform.deleted", "post.tiktok.url_resolved", "post.external.created", "post.external.updated", "post.external.deleted", "account.connected", "account.disconnected", "account.ads.initial_sync_completed", "message.received", "conversation.started", "call.received", "call.ended", "call.failed", "call.permission_request", "message.sent", "message.edited", "message.deleted", "message.delivered", "message.read", "message.failed", "reaction.received", "referral.received", "comment.received", "review.new", "review.updated", "lead.received", "ad.status_changed", "whatsapp.template.status_updated", "whatsapp.template.category_updated", "whatsapp.automatic_event", "whatsapp.number.activated", "whatsapp.number.declined", "whatsapp.number.action_required", "whatsapp.number.verification_required", "whatsapp.number.suspended", "whatsapp.number.reactivated", "whatsapp.number.released", "whatsapp.number.kyc_submitted", "verification.approved", "verification.failed"])
57
+ # validator = Petstore::EnumTest::EnumAttributeValidator.new('Array<String>', ["post.scheduled", "post.published", "post.failed", "post.partial", "post.cancelled", "post.recycled", "post.platform.published", "post.platform.failed", "post.platform.deleted", "post.tiktok.url_resolved", "post.external.created", "post.external.updated", "post.external.deleted", "account.connected", "account.disconnected", "account.ads.initial_sync_completed", "message.received", "conversation.started", "call.received", "call.ended", "call.failed", "call.permission_request", "message.sent", "message.edited", "message.deleted", "message.delivered", "message.read", "message.failed", "reaction.received", "referral.received", "comment.received", "review.new", "review.updated", "lead.received", "ad.status_changed", "whatsapp.template.status_updated", "whatsapp.template.category_updated", "whatsapp.account.name_status_updated", "whatsapp.automatic_event", "whatsapp.number.activated", "whatsapp.number.declined", "whatsapp.number.action_required", "whatsapp.number.verification_required", "whatsapp.number.suspended", "whatsapp.number.reactivated", "whatsapp.number.released", "whatsapp.number.kyc_submitted", "verification.approved", "verification.failed"])
58
58
  # validator.allowable_values.each do |value|
59
59
  # expect { instance.events = value }.not_to raise_error
60
60
  # end
@@ -91,6 +91,12 @@ describe Zernio::WebhookPayloadMessageMetadata do
91
91
  end
92
92
  end
93
93
 
94
+ describe 'test attribute "nfm_reply_name"' do
95
+ it 'should work' do
96
+ # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/
97
+ end
98
+ end
99
+
94
100
  describe 'test attribute "order"' do
95
101
  it 'should work' do
96
102
  # assertion here. ref: https://rspec.info/features/3-12/rspec-expectations/built-in-matchers/