ruby-whatsapp 0.4.2 → 0.6.2

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 (93) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +158 -0
  3. data/README.md +70 -7
  4. data/docs/README.md +4 -1
  5. data/docs/business_phone_number/README.md +12 -1
  6. data/docs/business_phone_number/contact_book.md +90 -0
  7. data/docs/business_phone_number/username.md +157 -0
  8. data/docs/configuration.md +6 -1
  9. data/docs/errors.md +12 -1
  10. data/docs/message_templates/README.md +1 -1
  11. data/docs/message_templates/components.md +37 -1
  12. data/docs/messages/README.md +86 -9
  13. data/docs/messages/address.md +1 -1
  14. data/docs/messages/audio.md +1 -1
  15. data/docs/messages/contacts.md +1 -1
  16. data/docs/messages/document.md +1 -1
  17. data/docs/messages/image.md +1 -1
  18. data/docs/messages/interactive.md +84 -4
  19. data/docs/messages/location.md +1 -1
  20. data/docs/messages/location_request.md +1 -1
  21. data/docs/messages/reaction.md +1 -1
  22. data/docs/messages/sticker.md +1 -1
  23. data/docs/messages/template.md +28 -1
  24. data/docs/messages/text.md +1 -1
  25. data/docs/messages/video.md +1 -1
  26. data/docs/schedule/README.md +183 -0
  27. data/docs/webhooks/README.md +20 -12
  28. data/docs/webhooks/business_username_updates.md +55 -0
  29. data/docs/webhooks/history.md +78 -15
  30. data/docs/webhooks/messages.md +141 -6
  31. data/docs/webhooks/smb_app_state_sync.md +50 -12
  32. data/docs/webhooks/smb_message_echoes.md +58 -21
  33. data/docs/webhooks/user_id_update.md +84 -0
  34. data/docs/webhooks/user_preferences.md +55 -16
  35. data/lib/ruby/whatsapp/business_phone_number/contact_book/delete.rb +87 -0
  36. data/lib/ruby/whatsapp/business_phone_number/contact_book/deletion.rb +50 -0
  37. data/lib/ruby/whatsapp/business_phone_number/contact_book.rb +25 -0
  38. data/lib/ruby/whatsapp/business_phone_number/transport.rb +6 -5
  39. data/lib/ruby/whatsapp/business_phone_number/username/claim.rb +180 -0
  40. data/lib/ruby/whatsapp/business_phone_number/username/delete.rb +36 -0
  41. data/lib/ruby/whatsapp/business_phone_number/username/details.rb +66 -0
  42. data/lib/ruby/whatsapp/business_phone_number/username/get.rb +33 -0
  43. data/lib/ruby/whatsapp/business_phone_number/username/suggest.rb +37 -0
  44. data/lib/ruby/whatsapp/business_phone_number/username/suggestions.rb +50 -0
  45. data/lib/ruby/whatsapp/business_phone_number/username.rb +27 -0
  46. data/lib/ruby/whatsapp/business_phone_number.rb +9 -0
  47. data/lib/ruby/whatsapp/message_templates/button/request_contact_info.rb +66 -0
  48. data/lib/ruby/whatsapp/message_templates/button.rb +5 -2
  49. data/lib/ruby/whatsapp/message_templates/component_set.rb +28 -0
  50. data/lib/ruby/whatsapp/message_templates/response/paging.rb +2 -1
  51. data/lib/ruby/whatsapp/messages/base.rb +47 -5
  52. data/lib/ruby/whatsapp/messages/interactive/list_buttons/section.rb +11 -6
  53. data/lib/ruby/whatsapp/messages/interactive/list_buttons.rb +12 -0
  54. data/lib/ruby/whatsapp/messages/interactive/request_contact_info.rb +59 -0
  55. data/lib/ruby/whatsapp/messages/interactive.rb +22 -4
  56. data/lib/ruby/whatsapp/messages/response/contacts.rb +22 -5
  57. data/lib/ruby/whatsapp/schedule/create.rb +101 -0
  58. data/lib/ruby/whatsapp/schedule/list.rb +50 -0
  59. data/lib/ruby/whatsapp/schedule/response/collection.rb +61 -0
  60. data/lib/ruby/whatsapp/schedule/response/created.rb +30 -0
  61. data/lib/ruby/whatsapp/schedule/response/node.rb +85 -0
  62. data/lib/ruby/whatsapp/schedule/response.rb +18 -0
  63. data/lib/ruby/whatsapp/schedule/statuses.rb +19 -0
  64. data/lib/ruby/whatsapp/schedule/transport.rb +24 -0
  65. data/lib/ruby/whatsapp/schedule.rb +15 -0
  66. data/lib/ruby/whatsapp/version.rb +1 -1
  67. data/lib/ruby/whatsapp/webhook/business_username_updates.rb +51 -0
  68. data/lib/ruby/whatsapp/webhook/change.rb +3 -1
  69. data/lib/ruby/whatsapp/webhook/contact.rb +26 -3
  70. data/lib/ruby/whatsapp/webhook/history/chunk.rb +50 -0
  71. data/lib/ruby/whatsapp/webhook/history/thread.rb +64 -0
  72. data/lib/ruby/whatsapp/webhook/history.rb +73 -34
  73. data/lib/ruby/whatsapp/webhook/message/base.rb +27 -2
  74. data/lib/ruby/whatsapp/webhook/message/contacts/contact.rb +15 -2
  75. data/lib/ruby/whatsapp/webhook/message/context.rb +23 -2
  76. data/lib/ruby/whatsapp/webhook/message/edit.rb +50 -0
  77. data/lib/ruby/whatsapp/webhook/message/revoke.rb +36 -0
  78. data/lib/ruby/whatsapp/webhook/message/system.rb +19 -2
  79. data/lib/ruby/whatsapp/webhook/message/unknown.rb +2 -2
  80. data/lib/ruby/whatsapp/webhook/message.rb +3 -0
  81. data/lib/ruby/whatsapp/webhook/messages.rb +4 -3
  82. data/lib/ruby/whatsapp/webhook/smb_app_state_sync/contact.rb +76 -0
  83. data/lib/ruby/whatsapp/webhook/smb_app_state_sync/state_sync.rb +18 -4
  84. data/lib/ruby/whatsapp/webhook/smb_app_state_sync.rb +33 -9
  85. data/lib/ruby/whatsapp/webhook/smb_message_echoes/echo.rb +60 -0
  86. data/lib/ruby/whatsapp/webhook/smb_message_echoes.rb +26 -11
  87. data/lib/ruby/whatsapp/webhook/status.rb +23 -2
  88. data/lib/ruby/whatsapp/webhook/user_id_update/entry.rb +56 -0
  89. data/lib/ruby/whatsapp/webhook/user_id_update/id_change.rb +35 -0
  90. data/lib/ruby/whatsapp/webhook/user_id_update.rb +61 -0
  91. data/lib/ruby/whatsapp/webhook/user_preferences/entry.rb +76 -0
  92. data/lib/ruby/whatsapp/webhook/user_preferences.rb +44 -23
  93. metadata +38 -1
@@ -3,43 +3,64 @@
3
3
  module Whatsapp
4
4
  module Webhook
5
5
  # User marketing message preference changes (e.g. a customer opting out of
6
- # marketing messages).
6
+ # marketing messages) — one of the fields with a confirmed, JSON-example-backed
7
+ # schema, alongside {Messages}, {UserIdUpdate}, and {BusinessUsernameUpdates}.
7
8
  #
8
- # Best-effort schema: Meta's public docs describe this field in one line with
9
- # no published JSON example. Validate against a real payload (App Dashboard
10
- # "send test payload") before relying on these attribute names in production.
11
- # Source: https://developers.facebook.com/documentation/business-messaging/whatsapp/webhooks/overview
9
+ # Structurally identical to {UserIdUpdate}: the value carries the notification's
10
+ # own identity (`messaging_product`, `metadata`, `contacts`) plus an array of
11
+ # entries nested under a repeat of the field's own name.
12
+ # Source: https://developers.facebook.com/documentation/business-messaging/whatsapp/business-scoped-user-ids
12
13
  class UserPreferences
13
- # @!attribute [rw] wa_id
14
+ # @!attribute [rw] messaging_product
14
15
  # @return [String, nil]
15
- attr_accessor :wa_id
16
+ attr_accessor :messaging_product
16
17
 
17
- # @!attribute [rw] detail
18
- # @return [String, nil]
19
- attr_accessor :detail
18
+ # @!attribute [rw] metadata
19
+ # @return [Metadata, nil]
20
+ attr_accessor :metadata
20
21
 
21
- # @!attribute [rw] value
22
- # @return [String, nil] e.g. `"stop"`, `"resume"`.
23
- attr_accessor :value
22
+ # @!attribute [rw] contacts
23
+ # @return [Array<Contact>] The users whose preferences changed, carrying the same
24
+ # BSUID identifiers as every other `contacts[]` entry — which is how a
25
+ # username-adopted user is identifiable here at all once their phone number
26
+ # stops being shared.
27
+ attr_accessor :contacts
24
28
 
25
- # @!attribute [rw] timestamp
26
- # @return [String, nil]
27
- attr_accessor :timestamp
29
+ # @!attribute [rw] preferences
30
+ # @return [Array<Entry>]
31
+ attr_accessor :preferences
32
+
33
+ # @!attribute [r] raw
34
+ # @return [Hash] The untouched `value` hash. A diagnostic escape hatch, not part
35
+ # of the supported API: {#preferences} reads `value["user_preferences"]` —
36
+ # entries nested under a repeat of the field's own name, which is what Meta's
37
+ # published example shows — so a key that drifts would otherwise leave
38
+ # `preferences` empty with no other trace. Reach for it when a typed accessor is
39
+ # unexpectedly `nil`, log what you find, and treat it as read-only: it is the
40
+ # object `JSON.parse` returned, not a copy.
41
+ attr_reader :raw
28
42
 
29
- def initialize(wa_id:, detail:, value:, timestamp:)
30
- @wa_id = wa_id
31
- @detail = detail
32
- @value = value
33
- @timestamp = timestamp
43
+ def initialize(messaging_product:, metadata:, contacts:, preferences:, raw: {})
44
+ @messaging_product = messaging_product
45
+ @metadata = metadata
46
+ @contacts = contacts
47
+ @preferences = preferences
48
+ @raw = raw
34
49
  end
35
50
 
36
51
  class << self
37
- # @param data [Hash] The raw `value` hash.
52
+ # @param data [Hash] The raw `user_preferences` field's `value` hash.
38
53
  # @return [UserPreferences]
39
54
  def deserialize(data)
40
55
  data ||= {}
41
56
 
42
- new(wa_id: data["wa_id"], detail: data["detail"], value: data["value"], timestamp: data["timestamp"])
57
+ new(
58
+ messaging_product: data["messaging_product"],
59
+ metadata: data["metadata"] ? Metadata.deserialize(data["metadata"]) : nil,
60
+ contacts: Array(data["contacts"]).map { |contact_data| Contact.deserialize(contact_data) },
61
+ preferences: Array(data["user_preferences"]).map { |entry_data| Entry.deserialize(entry_data) },
62
+ raw: data
63
+ )
43
64
  end
44
65
  end
45
66
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-whatsapp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Raniery
@@ -85,7 +85,9 @@ files:
85
85
  - docs/README.md
86
86
  - docs/business_phone_number/README.md
87
87
  - docs/business_phone_number/account.md
88
+ - docs/business_phone_number/contact_book.md
88
89
  - docs/business_phone_number/profile.md
90
+ - docs/business_phone_number/username.md
89
91
  - docs/configuration.md
90
92
  - docs/errors.md
91
93
  - docs/media/README.md
@@ -112,6 +114,7 @@ files:
112
114
  - docs/messages/template.md
113
115
  - docs/messages/text.md
114
116
  - docs/messages/video.md
117
+ - docs/schedule/README.md
115
118
  - docs/subscribed_app/README.md
116
119
  - docs/webhooks/README.md
117
120
  - docs/webhooks/account_alerts.md
@@ -119,6 +122,7 @@ files:
119
122
  - docs/webhooks/account_update.md
120
123
  - docs/webhooks/automatic_events.md
121
124
  - docs/webhooks/business_capability_update.md
125
+ - docs/webhooks/business_username_updates.md
122
126
  - docs/webhooks/history.md
123
127
  - docs/webhooks/message_template_components_update.md
124
128
  - docs/webhooks/message_template_quality_update.md
@@ -132,6 +136,7 @@ files:
132
136
  - docs/webhooks/smb_app_state_sync.md
133
137
  - docs/webhooks/smb_message_echoes.md
134
138
  - docs/webhooks/template_category_update.md
139
+ - docs/webhooks/user_id_update.md
135
140
  - docs/webhooks/user_preferences.md
136
141
  - lib/ruby/whatsapp.rb
137
142
  - lib/ruby/whatsapp/business_phone_number.rb
@@ -140,6 +145,9 @@ files:
140
145
  - lib/ruby/whatsapp/business_phone_number/account/get.rb
141
146
  - lib/ruby/whatsapp/business_phone_number/account/transport.rb
142
147
  - lib/ruby/whatsapp/business_phone_number/account/update.rb
148
+ - lib/ruby/whatsapp/business_phone_number/contact_book.rb
149
+ - lib/ruby/whatsapp/business_phone_number/contact_book/delete.rb
150
+ - lib/ruby/whatsapp/business_phone_number/contact_book/deletion.rb
143
151
  - lib/ruby/whatsapp/business_phone_number/deregister.rb
144
152
  - lib/ruby/whatsapp/business_phone_number/profile.rb
145
153
  - lib/ruby/whatsapp/business_phone_number/profile/details.rb
@@ -150,6 +158,13 @@ files:
150
158
  - lib/ruby/whatsapp/business_phone_number/request_code.rb
151
159
  - lib/ruby/whatsapp/business_phone_number/response.rb
152
160
  - lib/ruby/whatsapp/business_phone_number/transport.rb
161
+ - lib/ruby/whatsapp/business_phone_number/username.rb
162
+ - lib/ruby/whatsapp/business_phone_number/username/claim.rb
163
+ - lib/ruby/whatsapp/business_phone_number/username/delete.rb
164
+ - lib/ruby/whatsapp/business_phone_number/username/details.rb
165
+ - lib/ruby/whatsapp/business_phone_number/username/get.rb
166
+ - lib/ruby/whatsapp/business_phone_number/username/suggest.rb
167
+ - lib/ruby/whatsapp/business_phone_number/username/suggestions.rb
153
168
  - lib/ruby/whatsapp/business_phone_number/verify_code.rb
154
169
  - lib/ruby/whatsapp/client.rb
155
170
  - lib/ruby/whatsapp/configuration.rb
@@ -163,6 +178,7 @@ files:
163
178
  - lib/ruby/whatsapp/message_templates/button/otp/supported_app.rb
164
179
  - lib/ruby/whatsapp/message_templates/button/phone_number.rb
165
180
  - lib/ruby/whatsapp/message_templates/button/quick_reply.rb
181
+ - lib/ruby/whatsapp/message_templates/button/request_contact_info.rb
166
182
  - lib/ruby/whatsapp/message_templates/button/url.rb
167
183
  - lib/ruby/whatsapp/message_templates/categories.rb
168
184
  - lib/ruby/whatsapp/message_templates/component.rb
@@ -221,6 +237,7 @@ files:
221
237
  - lib/ruby/whatsapp/messages/interactive/product_carousel/card.rb
222
238
  - lib/ruby/whatsapp/messages/interactive/reply_buttons.rb
223
239
  - lib/ruby/whatsapp/messages/interactive/reply_buttons/button.rb
240
+ - lib/ruby/whatsapp/messages/interactive/request_contact_info.rb
224
241
  - lib/ruby/whatsapp/messages/interactive/url_button.rb
225
242
  - lib/ruby/whatsapp/messages/location.rb
226
243
  - lib/ruby/whatsapp/messages/location_request.rb
@@ -240,6 +257,15 @@ files:
240
257
  - lib/ruby/whatsapp/railtie.rb
241
258
  - lib/ruby/whatsapp/request_error.rb
242
259
  - lib/ruby/whatsapp/response_handling.rb
260
+ - lib/ruby/whatsapp/schedule.rb
261
+ - lib/ruby/whatsapp/schedule/create.rb
262
+ - lib/ruby/whatsapp/schedule/list.rb
263
+ - lib/ruby/whatsapp/schedule/response.rb
264
+ - lib/ruby/whatsapp/schedule/response/collection.rb
265
+ - lib/ruby/whatsapp/schedule/response/created.rb
266
+ - lib/ruby/whatsapp/schedule/response/node.rb
267
+ - lib/ruby/whatsapp/schedule/statuses.rb
268
+ - lib/ruby/whatsapp/schedule/transport.rb
243
269
  - lib/ruby/whatsapp/subscribed_app.rb
244
270
  - lib/ruby/whatsapp/subscribed_app/list.rb
245
271
  - lib/ruby/whatsapp/subscribed_app/response.rb
@@ -259,11 +285,14 @@ files:
259
285
  - lib/ruby/whatsapp/webhook/account_update/ban_info.rb
260
286
  - lib/ruby/whatsapp/webhook/automatic_events.rb
261
287
  - lib/ruby/whatsapp/webhook/business_capability_update.rb
288
+ - lib/ruby/whatsapp/webhook/business_username_updates.rb
262
289
  - lib/ruby/whatsapp/webhook/change.rb
263
290
  - lib/ruby/whatsapp/webhook/contact.rb
264
291
  - lib/ruby/whatsapp/webhook/entry.rb
265
292
  - lib/ruby/whatsapp/webhook/error.rb
266
293
  - lib/ruby/whatsapp/webhook/history.rb
294
+ - lib/ruby/whatsapp/webhook/history/chunk.rb
295
+ - lib/ruby/whatsapp/webhook/history/thread.rb
267
296
  - lib/ruby/whatsapp/webhook/installer.rb
268
297
  - lib/ruby/whatsapp/webhook/message.rb
269
298
  - lib/ruby/whatsapp/webhook/message/audio.rb
@@ -279,6 +308,7 @@ files:
279
308
  - lib/ruby/whatsapp/webhook/message/contacts/url.rb
280
309
  - lib/ruby/whatsapp/webhook/message/context.rb
281
310
  - lib/ruby/whatsapp/webhook/message/document.rb
311
+ - lib/ruby/whatsapp/webhook/message/edit.rb
282
312
  - lib/ruby/whatsapp/webhook/message/image.rb
283
313
  - lib/ruby/whatsapp/webhook/message/interactive.rb
284
314
  - lib/ruby/whatsapp/webhook/message/location.rb
@@ -287,6 +317,7 @@ files:
287
317
  - lib/ruby/whatsapp/webhook/message/order/product_item.rb
288
318
  - lib/ruby/whatsapp/webhook/message/reaction.rb
289
319
  - lib/ruby/whatsapp/webhook/message/referral.rb
320
+ - lib/ruby/whatsapp/webhook/message/revoke.rb
290
321
  - lib/ruby/whatsapp/webhook/message/sticker.rb
291
322
  - lib/ruby/whatsapp/webhook/message/system.rb
292
323
  - lib/ruby/whatsapp/webhook/message/text.rb
@@ -305,15 +336,21 @@ files:
305
336
  - lib/ruby/whatsapp/webhook/security.rb
306
337
  - lib/ruby/whatsapp/webhook/signature.rb
307
338
  - lib/ruby/whatsapp/webhook/smb_app_state_sync.rb
339
+ - lib/ruby/whatsapp/webhook/smb_app_state_sync/contact.rb
308
340
  - lib/ruby/whatsapp/webhook/smb_app_state_sync/state_sync.rb
309
341
  - lib/ruby/whatsapp/webhook/smb_message_echoes.rb
342
+ - lib/ruby/whatsapp/webhook/smb_message_echoes/echo.rb
310
343
  - lib/ruby/whatsapp/webhook/status.rb
311
344
  - lib/ruby/whatsapp/webhook/status/conversation.rb
312
345
  - lib/ruby/whatsapp/webhook/status/pricing.rb
313
346
  - lib/ruby/whatsapp/webhook/template_category_update.rb
314
347
  - lib/ruby/whatsapp/webhook/templates/webhooks_controller.rb.tt
315
348
  - lib/ruby/whatsapp/webhook/unknown_field.rb
349
+ - lib/ruby/whatsapp/webhook/user_id_update.rb
350
+ - lib/ruby/whatsapp/webhook/user_id_update/entry.rb
351
+ - lib/ruby/whatsapp/webhook/user_id_update/id_change.rb
316
352
  - lib/ruby/whatsapp/webhook/user_preferences.rb
353
+ - lib/ruby/whatsapp/webhook/user_preferences/entry.rb
317
354
  - lib/ruby/whatsapp/webhook/verification.rb
318
355
  - lib/tasks/whatsapp.rake
319
356
  - sig/ruby/whatsapp.rbs