whatsapp_sdk 0.12.1 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/codeql-analysis.yml +8 -6
- data/.gitignore +1 -0
- data/.rubocop.yml +0 -3
- data/CHANGELOG.md +9 -7
- data/Gemfile +0 -4
- data/Gemfile.lock +1 -20
- data/README.md +35 -55
- data/SECURITY.md +21 -0
- data/example.rb +23 -15
- data/lib/whatsapp_sdk/api/api_configuration.rb +2 -5
- data/lib/whatsapp_sdk/api/business_profile.rb +0 -12
- data/lib/whatsapp_sdk/api/client.rb +7 -43
- data/lib/whatsapp_sdk/api/medias.rb +8 -15
- data/lib/whatsapp_sdk/api/messages.rb +4 -81
- data/lib/whatsapp_sdk/api/phone_numbers.rb +0 -14
- data/lib/whatsapp_sdk/api/request.rb +0 -2
- data/lib/whatsapp_sdk/api/response.rb +1 -20
- data/lib/whatsapp_sdk/api/responses/business_profile_data_response.rb +11 -34
- data/lib/whatsapp_sdk/api/responses/data_response.rb +0 -9
- data/lib/whatsapp_sdk/api/responses/error_response.rb +1 -8
- data/lib/whatsapp_sdk/api/responses/generic_error_response.rb +8 -26
- data/lib/whatsapp_sdk/api/responses/media_data_response.rb +8 -26
- data/lib/whatsapp_sdk/api/responses/message_data_response.rb +4 -20
- data/lib/whatsapp_sdk/api/responses/message_error_response.rb +0 -1
- data/lib/whatsapp_sdk/api/responses/message_template_namespace_data_response.rb +3 -13
- data/lib/whatsapp_sdk/api/responses/phone_number_data_response.rb +19 -37
- data/lib/whatsapp_sdk/api/responses/phone_numbers_data_response.rb +2 -9
- data/lib/whatsapp_sdk/api/responses/read_message_data_response.rb +1 -6
- data/lib/whatsapp_sdk/api/responses/success_response.rb +1 -5
- data/lib/whatsapp_sdk/api/responses/template_data_response.rb +2 -7
- data/lib/whatsapp_sdk/api/responses/templates_data_response.rb +2 -9
- data/lib/whatsapp_sdk/api/templates.rb +3 -27
- data/lib/whatsapp_sdk/configuration.rb +2 -24
- data/lib/whatsapp_sdk/error.rb +0 -1
- data/lib/whatsapp_sdk/resource/address.rb +1 -30
- data/lib/whatsapp_sdk/resource/address_type.rb +3 -8
- data/lib/whatsapp_sdk/resource/business_profile.rb +0 -3
- data/lib/whatsapp_sdk/resource/button_parameter.rb +4 -20
- data/lib/whatsapp_sdk/resource/component.rb +12 -43
- data/lib/whatsapp_sdk/resource/contact.rb +1 -30
- data/lib/whatsapp_sdk/resource/contact_response.rb +1 -9
- data/lib/whatsapp_sdk/resource/currency.rb +0 -8
- data/lib/whatsapp_sdk/resource/date_time.rb +0 -6
- data/lib/whatsapp_sdk/resource/email.rb +1 -10
- data/lib/whatsapp_sdk/resource/errors.rb +1 -17
- data/lib/whatsapp_sdk/resource/interactive.rb +6 -27
- data/lib/whatsapp_sdk/resource/interactive_action.rb +10 -24
- data/lib/whatsapp_sdk/resource/interactive_action_reply_button.rb +5 -19
- data/lib/whatsapp_sdk/resource/interactive_action_section.rb +1 -11
- data/lib/whatsapp_sdk/resource/interactive_action_section_row.rb +0 -11
- data/lib/whatsapp_sdk/resource/interactive_body.rb +0 -10
- data/lib/whatsapp_sdk/resource/interactive_footer.rb +0 -10
- data/lib/whatsapp_sdk/resource/interactive_header.rb +25 -53
- data/lib/whatsapp_sdk/resource/location.rb +44 -0
- data/lib/whatsapp_sdk/resource/media.rb +10 -46
- data/lib/whatsapp_sdk/resource/media_types.rb +0 -3
- data/lib/whatsapp_sdk/resource/message.rb +0 -5
- data/lib/whatsapp_sdk/resource/name.rb +1 -28
- data/lib/whatsapp_sdk/resource/org.rb +1 -13
- data/lib/whatsapp_sdk/resource/parameter_object.rb +71 -74
- data/lib/whatsapp_sdk/resource/phone_number.rb +1 -13
- data/lib/whatsapp_sdk/resource/template.rb +23 -36
- data/lib/whatsapp_sdk/resource/url.rb +1 -10
- data/lib/whatsapp_sdk/version.rb +1 -2
- data/lib/whatsapp_sdk.rb +0 -4
- data/whatsapp_sdk.gemspec +0 -3
- metadata +5 -49
- data/sorbet/config +0 -6
- data/sorbet/rbi/annotations/faraday.rbi +0 -17
- data/sorbet/rbi/annotations/mocha.rbi +0 -34
- data/sorbet/rbi/annotations/rainbow.rbi +0 -269
- data/sorbet/rbi/gems/faraday-multipart@1.0.4.rbi +0 -270
- data/sorbet/rbi/gems/faraday-net_http@2.0.3.rbi +0 -182
- data/sorbet/rbi/gems/faraday@2.3.0.rbi +0 -2494
- data/sorbet/rbi/gems/method_source@1.0.0.rbi +0 -272
- data/sorbet/rbi/gems/minitest@5.16.1.rbi +0 -1459
- data/sorbet/rbi/gems/mocha@1.14.0.rbi +0 -60
- data/sorbet/rbi/gems/multipart-post@2.2.3.rbi +0 -239
- data/sorbet/rbi/gems/netrc@0.11.0.rbi +0 -150
- data/sorbet/rbi/gems/oj@3.13.14.rbi +0 -589
- data/sorbet/rbi/gems/zeitwerk@2.6.0.rbi +0 -867
- data/sorbet/rbi/todo.rbi +0 -8
- data/sorbet/shims/request.rbi +0 -10
- data/sorbet/tapioca/config.yml +0 -13
- data/sorbet/tapioca/require.rb +0 -4
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require "faraday"
|
@@ -14,12 +13,8 @@ module WhatsappSdk
|
|
14
13
|
module Api
|
15
14
|
class Medias < Request
|
16
15
|
class FileNotFoundError < StandardError
|
17
|
-
extend T::Sig
|
18
|
-
|
19
|
-
sig { returns(String) }
|
20
16
|
attr_reader :file_path
|
21
17
|
|
22
|
-
sig { params(file_path: String).void }
|
23
18
|
def initialize(file_path:)
|
24
19
|
@file_path = file_path
|
25
20
|
|
@@ -29,12 +24,8 @@ module WhatsappSdk
|
|
29
24
|
end
|
30
25
|
|
31
26
|
class InvalidMediaTypeError < StandardError
|
32
|
-
extend T::Sig
|
33
|
-
|
34
|
-
sig { returns(String) }
|
35
27
|
attr_reader :media_type
|
36
28
|
|
37
|
-
sig { params(media_type: String).void }
|
38
29
|
def initialize(media_type:)
|
39
30
|
@media_type = media_type
|
40
31
|
message = "Invalid Media Type #{media_type}. See the supported types in the official documentation " \
|
@@ -47,7 +38,6 @@ module WhatsappSdk
|
|
47
38
|
#
|
48
39
|
# @param media_id [String] Media Id.
|
49
40
|
# @return [Api::Response] Response object.
|
50
|
-
sig { params(media_id: String).returns(Api::Response) }
|
51
41
|
def media(media_id:)
|
52
42
|
response = send_request(
|
53
43
|
http_method: "get",
|
@@ -68,7 +58,6 @@ module WhatsappSdk
|
|
68
58
|
# documentation https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media#supported-media-types,
|
69
59
|
# but note that the API may allow more depending on the client.
|
70
60
|
# @return [Api::Response] Response object.
|
71
|
-
sig { params(url: String, file_path: String, media_type: String).returns(Api::Response) }
|
72
61
|
def download(url:, file_path:, media_type:)
|
73
62
|
# Allow download of unsupported media types, since Cloud API may decide to let it through.
|
74
63
|
# https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk/discussions/127
|
@@ -97,8 +86,7 @@ module WhatsappSdk
|
|
97
86
|
# see the official documentation https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media#supported-media-types.
|
98
87
|
#
|
99
88
|
# @return [Api::Response] Response object.
|
100
|
-
|
101
|
-
def upload(sender_id:, file_path:, type:)
|
89
|
+
def upload(sender_id:, file_path:, type:, headers: {})
|
102
90
|
raise FileNotFoundError.new(file_path: file_path) unless File.file?(file_path)
|
103
91
|
|
104
92
|
params = {
|
@@ -107,7 +95,13 @@ module WhatsappSdk
|
|
107
95
|
type: type
|
108
96
|
}
|
109
97
|
|
110
|
-
response = send_request(
|
98
|
+
response = send_request(
|
99
|
+
http_method: "post",
|
100
|
+
endpoint: "#{sender_id}/media",
|
101
|
+
params: params,
|
102
|
+
headers: headers,
|
103
|
+
multipart: true
|
104
|
+
)
|
111
105
|
|
112
106
|
Api::Response.new(
|
113
107
|
response: response,
|
@@ -119,7 +113,6 @@ module WhatsappSdk
|
|
119
113
|
#
|
120
114
|
# @param media_id [String] Media Id.
|
121
115
|
# @return [Api::Response] Response object.
|
122
|
-
sig { params(media_id: String).returns(Api::Response) }
|
123
116
|
def delete(media_id:)
|
124
117
|
response = send_request(
|
125
118
|
http_method: "delete",
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require_relative "request"
|
@@ -7,9 +6,7 @@ require_relative "response"
|
|
7
6
|
module WhatsappSdk
|
8
7
|
module Api
|
9
8
|
class Messages < Request
|
10
|
-
|
11
|
-
|
12
|
-
DEFAULT_HEADERS = T.let({ 'Content-Type' => 'application/json' }.freeze, Hash)
|
9
|
+
DEFAULT_HEADERS = { 'Content-Type' => 'application/json' }.freeze
|
13
10
|
|
14
11
|
# Send a text message.
|
15
12
|
#
|
@@ -18,12 +15,6 @@ module WhatsappSdk
|
|
18
15
|
# @param message [String] Text to send.
|
19
16
|
# @param message_id [String] The id of the message to reply to.
|
20
17
|
# @return [Api::Response] Response object.
|
21
|
-
sig do
|
22
|
-
params(
|
23
|
-
sender_id: Integer, recipient_number: Integer, message: String,
|
24
|
-
message_id: T.nilable(String)
|
25
|
-
).returns(Api::Response)
|
26
|
-
end
|
27
18
|
def send_text(sender_id:, recipient_number:, message:, message_id: nil)
|
28
19
|
params = {
|
29
20
|
messaging_product: "whatsapp",
|
@@ -56,13 +47,6 @@ module WhatsappSdk
|
|
56
47
|
# @param address [String] Location address.
|
57
48
|
# @param message_id [String] The id of the message to reply to.
|
58
49
|
# @return [Api::Response] Response object.
|
59
|
-
sig do
|
60
|
-
params(
|
61
|
-
sender_id: Integer, recipient_number: Integer,
|
62
|
-
longitude: Float, latitude: Float, name: String, address: String,
|
63
|
-
message_id: T.nilable(String)
|
64
|
-
).returns(Api::Response)
|
65
|
-
end
|
66
50
|
def send_location(
|
67
51
|
sender_id:, recipient_number:, longitude:, latitude:, name:, address:, message_id: nil
|
68
52
|
)
|
@@ -101,13 +85,6 @@ module WhatsappSdk
|
|
101
85
|
# @param caption [String] Image caption.
|
102
86
|
# @param message_id [String] The id of the message to reply to.
|
103
87
|
# @return [Api::Response] Response object.
|
104
|
-
sig do
|
105
|
-
params(
|
106
|
-
sender_id: Integer, recipient_number: Integer, image_id: T.nilable(String),
|
107
|
-
link: T.nilable(String), caption: T.nilable(String),
|
108
|
-
message_id: T.nilable(String)
|
109
|
-
).returns(Api::Response)
|
110
|
-
end
|
111
88
|
def send_image(
|
112
89
|
sender_id:, recipient_number:, image_id: nil, link: nil, caption: "", message_id: nil
|
113
90
|
)
|
@@ -146,12 +123,6 @@ module WhatsappSdk
|
|
146
123
|
# @param link [String] Audio link.
|
147
124
|
# @param message_id [String] The id of the message to reply to.
|
148
125
|
# @return [Api::Response] Response object.
|
149
|
-
sig do
|
150
|
-
params(
|
151
|
-
sender_id: Integer, recipient_number: Integer, audio_id: T.nilable(String),
|
152
|
-
link: T.nilable(String), message_id: T.nilable(String)
|
153
|
-
).returns(Api::Response)
|
154
|
-
end
|
155
126
|
def send_audio(sender_id:, recipient_number:, audio_id: nil, link: nil, message_id: nil)
|
156
127
|
raise Resource::Errors::MissingArgumentError, "audio_id or link is required" if !audio_id && !link
|
157
128
|
|
@@ -186,13 +157,6 @@ module WhatsappSdk
|
|
186
157
|
# @param caption [String] Image caption.
|
187
158
|
# @param message_id [String] The id of the message to reply to.
|
188
159
|
# @return [Api::Response] Response object.
|
189
|
-
sig do
|
190
|
-
params(
|
191
|
-
sender_id: Integer, recipient_number: Integer,
|
192
|
-
video_id: T.nilable(String), link: T.nilable(String), caption: String,
|
193
|
-
message_id: T.nilable(String)
|
194
|
-
).returns(Api::Response)
|
195
|
-
end
|
196
160
|
def send_video(
|
197
161
|
sender_id:, recipient_number:, video_id: nil, link: nil, caption: "", message_id: nil
|
198
162
|
)
|
@@ -232,15 +196,8 @@ module WhatsappSdk
|
|
232
196
|
# @param caption [String] Image caption.
|
233
197
|
# @param message_id [String] The id of the message to reply to.
|
234
198
|
# @return [Api::Response] Response object.
|
235
|
-
sig do
|
236
|
-
params(
|
237
|
-
sender_id: Integer, recipient_number: Integer,
|
238
|
-
document_id: T.nilable(String), link: T.nilable(String), caption: String,
|
239
|
-
message_id: T.nilable(String)
|
240
|
-
).returns(Api::Response)
|
241
|
-
end
|
242
199
|
def send_document(
|
243
|
-
sender_id:, recipient_number:, document_id: nil, link: nil, caption: "", message_id: nil
|
200
|
+
sender_id:, recipient_number:, document_id: nil, link: nil, caption: "", message_id: nil, filename: nil
|
244
201
|
)
|
245
202
|
if !document_id && !link
|
246
203
|
raise Resource::Errors::MissingArgumentError,
|
@@ -258,6 +215,7 @@ module WhatsappSdk
|
|
258
215
|
else
|
259
216
|
{ id: document_id, caption: caption }
|
260
217
|
end
|
218
|
+
params[:document] = params[:document].merge({ filename: filename }) if filename
|
261
219
|
params[:context] = { message_id: message_id } if message_id
|
262
220
|
|
263
221
|
response = send_request(
|
@@ -280,12 +238,6 @@ module WhatsappSdk
|
|
280
238
|
# @param link [String] Image link.
|
281
239
|
# @param message_id [String] The id of the message to reply to.
|
282
240
|
# @return [Api::Response] Response object.
|
283
|
-
sig do
|
284
|
-
params(
|
285
|
-
sender_id: Integer, recipient_number: Integer, sticker_id: T.nilable(String),
|
286
|
-
link: T.nilable(String), message_id: T.nilable(String)
|
287
|
-
).returns(Api::Response)
|
288
|
-
end
|
289
241
|
def send_sticker(sender_id:, recipient_number:, sticker_id: nil, link: nil, message_id: nil)
|
290
242
|
raise Resource::Errors::MissingArgumentError, "sticker or link is required" if !sticker_id && !link
|
291
243
|
|
@@ -293,7 +245,7 @@ module WhatsappSdk
|
|
293
245
|
messaging_product: "whatsapp",
|
294
246
|
to: recipient_number,
|
295
247
|
recipient_type: "individual",
|
296
|
-
type: Resource::Media::Type::
|
248
|
+
type: Resource::Media::Type::STICKER
|
297
249
|
}
|
298
250
|
params[:sticker] = link ? { link: link } : { id: sticker_id }
|
299
251
|
params[:context] = { message_id: message_id } if message_id
|
@@ -319,13 +271,6 @@ module WhatsappSdk
|
|
319
271
|
# @param contacts_json [Json] Contacts.
|
320
272
|
# @param message_id [String] The id of the message to reply to.
|
321
273
|
# @return [Api::Response] Response object.
|
322
|
-
sig do
|
323
|
-
params(
|
324
|
-
sender_id: Integer, recipient_number: Integer,
|
325
|
-
contacts: T.nilable(T::Array[Resource::Contact]),
|
326
|
-
contacts_json: T::Hash[T.untyped, T.untyped], message_id: T.nilable(String)
|
327
|
-
).returns(Api::Response)
|
328
|
-
end
|
329
274
|
def send_contacts(
|
330
275
|
sender_id:, recipient_number:, contacts: nil, contacts_json: {}, message_id: nil
|
331
276
|
)
|
@@ -365,13 +310,6 @@ module WhatsappSdk
|
|
365
310
|
# If you pass interactive_json, you can't pass interactive.
|
366
311
|
# @param message_id [String] The id of the message to reply to.
|
367
312
|
# @return [Api::Response] Response object.
|
368
|
-
sig do
|
369
|
-
params(
|
370
|
-
sender_id: Integer, recipient_number: Integer,
|
371
|
-
interactive: T.nilable(Resource::Interactive),
|
372
|
-
interactive_json: T.nilable(T::Hash[T.untyped, T.untyped]), message_id: T.nilable(String)
|
373
|
-
).returns(Api::Response)
|
374
|
-
end
|
375
313
|
def send_interactive_message(
|
376
314
|
sender_id:, recipient_number:, interactive: nil, interactive_json: nil, message_id: nil
|
377
315
|
)
|
@@ -414,7 +352,6 @@ module WhatsappSdk
|
|
414
352
|
# @param sender_id [Integer] Sender' phone number.
|
415
353
|
# @param message_id [Integer] Message ID.
|
416
354
|
# @return [Api::Response] Response object.
|
417
|
-
sig { params(sender_id: Integer, message_id: String).returns(Api::Response) }
|
418
355
|
def read_message(sender_id:, message_id:)
|
419
356
|
params = {
|
420
357
|
messaging_product: "whatsapp",
|
@@ -443,13 +380,6 @@ module WhatsappSdk
|
|
443
380
|
# @param components [Component] Component.
|
444
381
|
# @param components_json [Json] The component as a Json. If you pass components_json, you can't pass components.
|
445
382
|
# @return [Api::Response] Response object.
|
446
|
-
sig do
|
447
|
-
params(
|
448
|
-
sender_id: Integer, recipient_number: Integer, name: String, language: String,
|
449
|
-
components: T.nilable(T::Array[Resource::Component]),
|
450
|
-
components_json: T.nilable(T::Array[T::Hash[T.untyped, T.untyped]])
|
451
|
-
).returns(Api::Response)
|
452
|
-
end
|
453
383
|
def send_template(
|
454
384
|
sender_id:, recipient_number:, name:, language:, components: nil, components_json: nil
|
455
385
|
)
|
@@ -494,12 +424,6 @@ module WhatsappSdk
|
|
494
424
|
# @param message_id [String] the id of the message to reaction.
|
495
425
|
# @param emoji [String] unicode of the emoji to send.
|
496
426
|
# @return [Api::Response] Response object.
|
497
|
-
sig do
|
498
|
-
params(
|
499
|
-
sender_id: Integer, recipient_number: Integer, message_id: String,
|
500
|
-
emoji: T.any(String, Integer)
|
501
|
-
).returns(Api::Response)
|
502
|
-
end
|
503
427
|
def send_reaction(sender_id:, recipient_number:, message_id:, emoji:)
|
504
428
|
params = {
|
505
429
|
messaging_product: "whatsapp",
|
@@ -526,7 +450,6 @@ module WhatsappSdk
|
|
526
450
|
|
527
451
|
private
|
528
452
|
|
529
|
-
sig { params(sender_id: Integer).returns(String) }
|
530
453
|
def endpoint(sender_id)
|
531
454
|
"#{sender_id}/messages"
|
532
455
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require_relative "request"
|
@@ -17,7 +16,6 @@ module WhatsappSdk
|
|
17
16
|
#
|
18
17
|
# @param business_id [Integer] Business Id.
|
19
18
|
# @return [Api::Response] Response object.
|
20
|
-
sig { params(business_id: Integer).returns(Api::Response) }
|
21
19
|
def registered_numbers(business_id)
|
22
20
|
response = send_request(
|
23
21
|
http_method: "get",
|
@@ -34,7 +32,6 @@ module WhatsappSdk
|
|
34
32
|
#
|
35
33
|
# @param phone_number_id [Integer] The registered number we want to retrieve.
|
36
34
|
# @return [Api::Response] Response object.
|
37
|
-
sig { params(phone_number_id: Integer).returns(Api::Response) }
|
38
35
|
def registered_number(phone_number_id)
|
39
36
|
response = send_request(
|
40
37
|
http_method: "get",
|
@@ -52,12 +49,6 @@ module WhatsappSdk
|
|
52
49
|
# @param phone_number_id [Integer] The registered number we want to retrieve.
|
53
50
|
# @param pin [Integer] Pin of 6 digits.
|
54
51
|
# @return [Api::Response] Response object.
|
55
|
-
sig do
|
56
|
-
params(
|
57
|
-
phone_number_id: Integer,
|
58
|
-
pin: Integer
|
59
|
-
).returns(Api::Response)
|
60
|
-
end
|
61
52
|
def register_number(phone_number_id, pin)
|
62
53
|
response = send_request(
|
63
54
|
http_method: "post",
|
@@ -75,11 +66,6 @@ module WhatsappSdk
|
|
75
66
|
#
|
76
67
|
# @param phone_number_id [Integer] The registered number we want to retrieve.
|
77
68
|
# @return [Api::Response] Response object.
|
78
|
-
sig do
|
79
|
-
params(
|
80
|
-
phone_number_id: Integer
|
81
|
-
).returns(Api::Response)
|
82
|
-
end
|
83
69
|
def deregister_number(phone_number_id)
|
84
70
|
response = send_request(
|
85
71
|
http_method: "post",
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require_relative "responses/message_data_response"
|
@@ -11,24 +10,8 @@ require_relative "responses/business_profile_data_response"
|
|
11
10
|
module WhatsappSdk
|
12
11
|
module Api
|
13
12
|
class Response
|
14
|
-
|
13
|
+
attr_accessor :error, :data, :raw_response
|
15
14
|
|
16
|
-
sig { returns(T.nilable(Api::Responses::ErrorResponse)) }
|
17
|
-
attr_accessor :error
|
18
|
-
|
19
|
-
sig { returns(T.nilable(Api::Responses::DataResponse)) }
|
20
|
-
attr_accessor :data
|
21
|
-
|
22
|
-
sig { returns(T::Hash[T.untyped, T.untyped]) }
|
23
|
-
attr_accessor :raw_response
|
24
|
-
|
25
|
-
sig do
|
26
|
-
params(
|
27
|
-
response: T::Hash[T.untyped, T.untyped],
|
28
|
-
data_class_type: T.class_of(Api::Responses::DataResponse),
|
29
|
-
error_class_type: T.class_of(Api::Responses::ErrorResponse)
|
30
|
-
).void
|
31
|
-
end
|
32
15
|
def initialize(response:, data_class_type:, error_class_type: Responses::MessageErrorResponse)
|
33
16
|
@raw_response = response
|
34
17
|
@data = data_class_type.build_from_response(response: response)
|
@@ -36,13 +19,11 @@ module WhatsappSdk
|
|
36
19
|
end
|
37
20
|
|
38
21
|
# @return [Boolean] Whether or not the response is successful.
|
39
|
-
sig { returns(T::Boolean) }
|
40
22
|
def ok?
|
41
23
|
@error.nil?
|
42
24
|
end
|
43
25
|
|
44
26
|
# @return [Boolean] Whether or not the response has an error.
|
45
|
-
sig { returns(T::Boolean) }
|
46
27
|
def error?
|
47
28
|
!!@error
|
48
29
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require_relative "data_response"
|
@@ -7,44 +6,22 @@ module WhatsappSdk
|
|
7
6
|
module Api
|
8
7
|
module Responses
|
9
8
|
class BusinessProfileDataResponse < DataResponse
|
10
|
-
|
11
|
-
|
9
|
+
attr_accessor :about, :address, :description, :email, :messaging_product,
|
10
|
+
:profile_picture_url, :vertical, :websites
|
12
11
|
|
13
|
-
sig { returns(T.nilable(String)) }
|
14
|
-
attr_accessor :address
|
15
|
-
|
16
|
-
sig { returns(T.nilable(String)) }
|
17
|
-
attr_accessor :description
|
18
|
-
|
19
|
-
sig { returns(T.nilable(String)) }
|
20
|
-
attr_accessor :email
|
21
|
-
|
22
|
-
sig { returns(T.nilable(String)) }
|
23
|
-
attr_accessor :messaging_product
|
24
|
-
|
25
|
-
sig { returns(T.nilable(String)) }
|
26
|
-
attr_accessor :profile_picture_url
|
27
|
-
|
28
|
-
sig { returns(T.nilable(String)) }
|
29
|
-
attr_accessor :vertical
|
30
|
-
|
31
|
-
sig { returns(T::Array[String]) }
|
32
|
-
attr_accessor :websites
|
33
|
-
|
34
|
-
sig { params(response: T::Hash[T.untyped, T.untyped]).void }
|
35
12
|
def initialize(response)
|
36
|
-
@about =
|
37
|
-
@address =
|
38
|
-
@description =
|
39
|
-
@email =
|
40
|
-
@messaging_product =
|
41
|
-
@profile_picture_url =
|
42
|
-
@vertical =
|
43
|
-
@websites =
|
13
|
+
@about = response["data"][0]["about"]
|
14
|
+
@address = response["data"][0]["address"]
|
15
|
+
@description = response["data"][0]["description"]
|
16
|
+
@email = response["data"][0]["email"]
|
17
|
+
@messaging_product = response["data"][0]["messaging_product"]
|
18
|
+
@profile_picture_url = response["data"][0]["profile_picture_url"]
|
19
|
+
@vertical = response["data"][0]["vertical"]
|
20
|
+
@websites = response["data"][0]["websites"]
|
21
|
+
|
44
22
|
super(response)
|
45
23
|
end
|
46
24
|
|
47
|
-
sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(BusinessProfileDataResponse)) }
|
48
25
|
def self.build_from_response(response:)
|
49
26
|
return nil if response['error']
|
50
27
|
|
@@ -1,24 +1,15 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
module WhatsappSdk
|
5
4
|
module Api
|
6
5
|
module Responses
|
7
6
|
class DataResponse
|
8
|
-
extend ::T::Sig
|
9
|
-
extend ::T::Helpers
|
10
|
-
|
11
|
-
abstract!
|
12
|
-
|
13
|
-
sig { returns(T::Hash[T.untyped, T.untyped]) }
|
14
7
|
attr_reader :raw_data_response
|
15
8
|
|
16
|
-
sig { params(response: T::Hash[T.untyped, T.untyped]).void }
|
17
9
|
def initialize(response)
|
18
10
|
@raw_data_response = response
|
19
11
|
end
|
20
12
|
|
21
|
-
sig { abstract.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(DataResponse)) }
|
22
13
|
def self.build_from_response(response:); end
|
23
14
|
end
|
24
15
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require_relative "data_response"
|
@@ -7,20 +6,14 @@ module WhatsappSdk
|
|
7
6
|
module Api
|
8
7
|
module Responses
|
9
8
|
class ErrorResponse < DataResponse
|
10
|
-
|
11
|
-
attr_accessor :error
|
9
|
+
attr_accessor :error, :status
|
12
10
|
|
13
|
-
sig { returns(T.nilable(Integer)) }
|
14
|
-
attr_accessor :status
|
15
|
-
|
16
|
-
sig { params(response: T::Hash[T.untyped, T.untyped]).void }
|
17
11
|
def initialize(response:)
|
18
12
|
@error = response["error"]
|
19
13
|
@status = response["status"]
|
20
14
|
super(response)
|
21
15
|
end
|
22
16
|
|
23
|
-
sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(ErrorResponse)) }
|
24
17
|
def self.build_from_response(response:)
|
25
18
|
return unless response["error"]
|
26
19
|
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require_relative "error_response"
|
@@ -7,36 +6,19 @@ module WhatsappSdk
|
|
7
6
|
module Api
|
8
7
|
module Responses
|
9
8
|
class GenericErrorResponse < ErrorResponse
|
10
|
-
|
11
|
-
attr_reader :code
|
9
|
+
attr_reader :code, :subcode, :message, :type, :data, :fbtrace_id
|
12
10
|
|
13
|
-
sig { returns(T.nilable(Integer)) }
|
14
|
-
attr_reader :subcode
|
15
|
-
|
16
|
-
sig { returns(T.nilable(String)) }
|
17
|
-
attr_reader :message
|
18
|
-
|
19
|
-
sig { returns(T.nilable(String)) }
|
20
|
-
attr_reader :type
|
21
|
-
|
22
|
-
sig { returns(T.nilable(String)) }
|
23
|
-
attr_reader :data
|
24
|
-
|
25
|
-
sig { returns(T.nilable(String)) }
|
26
|
-
attr_reader :fbtrace_id
|
27
|
-
|
28
|
-
sig { params(response: T::Hash[T.untyped, T.untyped]).void }
|
29
11
|
def initialize(response:)
|
30
|
-
@code =
|
31
|
-
@subcode =
|
32
|
-
@message =
|
33
|
-
@type =
|
34
|
-
@data =
|
35
|
-
@fbtrace_id =
|
12
|
+
@code = response["code"]
|
13
|
+
@subcode = response["error_subcode"]
|
14
|
+
@message = response["message"]
|
15
|
+
@type = response["type"]
|
16
|
+
@data = response["data"]
|
17
|
+
@fbtrace_id = response["fbtrace_id"]
|
18
|
+
|
36
19
|
super(response: response)
|
37
20
|
end
|
38
21
|
|
39
|
-
sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(GenericErrorResponse)) }
|
40
22
|
def self.build_from_response(response:)
|
41
23
|
error_response = response["error"]
|
42
24
|
return unless error_response
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require_relative "data_response"
|
@@ -7,36 +6,19 @@ module WhatsappSdk
|
|
7
6
|
module Api
|
8
7
|
module Responses
|
9
8
|
class MediaDataResponse < DataResponse
|
10
|
-
|
11
|
-
attr_accessor :id
|
9
|
+
attr_accessor :id, :url, :mime_type, :sha256, :file_size, :messaging_product
|
12
10
|
|
13
|
-
sig { returns(T.nilable(String)) }
|
14
|
-
attr_accessor :url
|
15
|
-
|
16
|
-
sig { returns(T.nilable(String)) }
|
17
|
-
attr_accessor :mime_type
|
18
|
-
|
19
|
-
sig { returns(T.nilable(String)) }
|
20
|
-
attr_accessor :sha256
|
21
|
-
|
22
|
-
sig { returns(T.nilable(Integer)) }
|
23
|
-
attr_accessor :file_size
|
24
|
-
|
25
|
-
sig { returns(T.nilable(String)) }
|
26
|
-
attr_accessor :messaging_product
|
27
|
-
|
28
|
-
sig { params(response: T::Hash[T.untyped, T.untyped]).void }
|
29
11
|
def initialize(response)
|
30
|
-
@id =
|
31
|
-
@messaging_product =
|
32
|
-
@url =
|
33
|
-
@mime_type =
|
34
|
-
@sha256 =
|
35
|
-
@file_size =
|
12
|
+
@id = response["id"]
|
13
|
+
@messaging_product = response["messaging_product"]
|
14
|
+
@url = response["url"]
|
15
|
+
@mime_type = response["mime_type"]
|
16
|
+
@sha256 = response["sha256"]
|
17
|
+
@file_size = response["file_size"]
|
18
|
+
|
36
19
|
super(response)
|
37
20
|
end
|
38
21
|
|
39
|
-
sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(MediaDataResponse)) }
|
40
22
|
def self.build_from_response(response:)
|
41
23
|
return unless response["id"]
|
42
24
|
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require_relative "../request"
|
@@ -10,28 +9,15 @@ module WhatsappSdk
|
|
10
9
|
module Api
|
11
10
|
module Responses
|
12
11
|
class MessageDataResponse < DataResponse
|
13
|
-
|
12
|
+
attr_reader :contacts, :messages
|
14
13
|
|
15
|
-
sig { returns(T::Array[Resource::ContactResponse]) }
|
16
|
-
attr_reader :contacts
|
17
|
-
|
18
|
-
sig { returns(T::Array[Resource::Message]) }
|
19
|
-
attr_reader :messages
|
20
|
-
|
21
|
-
sig { params(response: T::Hash[T.untyped, T.untyped]).void }
|
22
14
|
def initialize(response:)
|
23
|
-
@contacts =
|
24
|
-
|
25
|
-
|
26
|
-
)
|
27
|
-
@messages = T.let(
|
28
|
-
response["messages"]&.map { |contact_json| parse_message(contact_json) },
|
29
|
-
T::Array[Resource::Message]
|
30
|
-
)
|
15
|
+
@contacts = response["contacts"]&.map { |contact_json| parse_contact(contact_json) }
|
16
|
+
@messages = response["messages"]&.map { |contact_json| parse_message(contact_json) }
|
17
|
+
|
31
18
|
super(response)
|
32
19
|
end
|
33
20
|
|
34
|
-
sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(MessageDataResponse)) }
|
35
21
|
def self.build_from_response(response:)
|
36
22
|
return unless response["messages"]
|
37
23
|
|
@@ -40,12 +26,10 @@ module WhatsappSdk
|
|
40
26
|
|
41
27
|
private
|
42
28
|
|
43
|
-
sig { params(message_json: T::Hash[T.untyped, T.untyped]).returns(Resource::Message) }
|
44
29
|
def parse_message(message_json)
|
45
30
|
Resource::Message.new(id: message_json["id"])
|
46
31
|
end
|
47
32
|
|
48
|
-
sig { params(contact_json: T::Hash[T.untyped, T.untyped]).returns(Resource::ContactResponse) }
|
49
33
|
def parse_contact(contact_json)
|
50
34
|
Resource::ContactResponse.new(input: contact_json["input"], wa_id: contact_json["wa_id"])
|
51
35
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# typed: strict
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
3
|
require_relative "data_response"
|
@@ -8,24 +7,15 @@ module WhatsappSdk
|
|
8
7
|
module Api
|
9
8
|
module Responses
|
10
9
|
class MessageTemplateNamespaceDataResponse < DataResponse
|
11
|
-
|
12
|
-
attr_accessor :message_template_namespace
|
10
|
+
attr_accessor :message_template_namespace, :id
|
13
11
|
|
14
|
-
sig { returns(String) }
|
15
|
-
attr_accessor :id
|
16
|
-
|
17
|
-
sig { params(response: T::Hash[T.untyped, T.untyped]).void }
|
18
12
|
def initialize(response)
|
19
|
-
@id =
|
20
|
-
@message_template_namespace =
|
13
|
+
@id = response["id"]
|
14
|
+
@message_template_namespace = response["message_template_namespace"]
|
21
15
|
|
22
16
|
super(response)
|
23
17
|
end
|
24
18
|
|
25
|
-
sig do
|
26
|
-
override.params(response: T::Hash[T.untyped, T.untyped])
|
27
|
-
.returns(T.nilable(MessageTemplateNamespaceDataResponse))
|
28
|
-
end
|
29
19
|
def self.build_from_response(response:)
|
30
20
|
return unless response["id"]
|
31
21
|
|