whatsapp_sdk 0.9.2 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -1
- data/Gemfile +0 -6
- data/Gemfile.lock +16 -16
- data/README.md +19 -0
- data/example.rb +67 -1
- data/lib/whatsapp_sdk/api/api_configuration.rb +1 -1
- data/lib/whatsapp_sdk/api/business_profile.rb +8 -8
- data/lib/whatsapp_sdk/api/medias.rb +18 -18
- data/lib/whatsapp_sdk/api/messages.rb +67 -71
- data/lib/whatsapp_sdk/api/phone_numbers.rb +16 -16
- data/lib/whatsapp_sdk/api/response.rb +4 -4
- data/lib/whatsapp_sdk/api/responses/generic_error_response.rb +49 -0
- data/lib/whatsapp_sdk/api/responses/message_data_response.rb +8 -8
- data/lib/whatsapp_sdk/api/responses/message_error_response.rb +2 -38
- data/lib/whatsapp_sdk/api/responses/message_template_namespace_data_response.rb +37 -0
- data/lib/whatsapp_sdk/api/responses/template_data_response.rb +51 -0
- data/lib/whatsapp_sdk/api/responses/templates_data_response.rb +39 -0
- data/lib/whatsapp_sdk/api/templates.rb +201 -0
- data/lib/whatsapp_sdk/configuration.rb +2 -2
- data/lib/whatsapp_sdk/resource/component.rb +2 -2
- data/lib/whatsapp_sdk/resource/errors.rb +68 -0
- data/lib/whatsapp_sdk/resource/interactive_action.rb +5 -5
- data/lib/whatsapp_sdk/resource/interactive_action_reply_button.rb +2 -2
- data/lib/whatsapp_sdk/resource/interactive_action_section.rb +2 -2
- data/lib/whatsapp_sdk/resource/interactive_action_section_row.rb +5 -5
- data/lib/whatsapp_sdk/resource/interactive_body.rb +1 -1
- data/lib/whatsapp_sdk/resource/interactive_footer.rb +1 -1
- data/lib/whatsapp_sdk/resource/interactive_header.rb +1 -1
- data/lib/whatsapp_sdk/resource/languages.rb +86 -0
- data/lib/whatsapp_sdk/resource/parameter_object.rb +2 -2
- data/lib/whatsapp_sdk/resource/template.rb +64 -0
- data/lib/whatsapp_sdk/version.rb +1 -1
- data/whatsapp_sdk.gemspec +8 -8
- metadata +22 -15
- data/lib/whatsapp_sdk/resource/error.rb +0 -39
@@ -11,31 +11,18 @@ module WhatsappSdk
|
|
11
11
|
|
12
12
|
DEFAULT_HEADERS = T.let({ 'Content-Type' => 'application/json' }.freeze, Hash)
|
13
13
|
|
14
|
-
class MissingArgumentError < StandardError
|
15
|
-
extend T::Sig
|
16
|
-
|
17
|
-
sig { returns(String) }
|
18
|
-
attr_reader :message
|
19
|
-
|
20
|
-
sig { params(message: String).void }
|
21
|
-
def initialize(message)
|
22
|
-
@message = message
|
23
|
-
super(message)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
14
|
# Send a text message.
|
28
15
|
#
|
29
16
|
# @param sender_id [Integer] Sender' phone number.
|
30
17
|
# @param recipient_number [Integer] Recipient' Phone number.
|
31
18
|
# @param message [String] Text to send.
|
32
19
|
# @param message_id [String] The id of the message to reply to.
|
33
|
-
# @return [
|
20
|
+
# @return [Api::Response] Response object.
|
34
21
|
sig do
|
35
22
|
params(
|
36
23
|
sender_id: Integer, recipient_number: Integer, message: String,
|
37
24
|
message_id: T.nilable(String)
|
38
|
-
).returns(
|
25
|
+
).returns(Api::Response)
|
39
26
|
end
|
40
27
|
def send_text(sender_id:, recipient_number:, message:, message_id: nil)
|
41
28
|
params = {
|
@@ -53,9 +40,9 @@ module WhatsappSdk
|
|
53
40
|
headers: DEFAULT_HEADERS
|
54
41
|
)
|
55
42
|
|
56
|
-
|
43
|
+
Api::Response.new(
|
57
44
|
response: response,
|
58
|
-
data_class_type:
|
45
|
+
data_class_type: Api::Responses::MessageDataResponse
|
59
46
|
)
|
60
47
|
end
|
61
48
|
|
@@ -68,13 +55,13 @@ module WhatsappSdk
|
|
68
55
|
# @param name [String] Location name.
|
69
56
|
# @param address [String] Location address.
|
70
57
|
# @param message_id [String] The id of the message to reply to.
|
71
|
-
# @return [
|
58
|
+
# @return [Api::Response] Response object.
|
72
59
|
sig do
|
73
60
|
params(
|
74
61
|
sender_id: Integer, recipient_number: Integer,
|
75
62
|
longitude: Float, latitude: Float, name: String, address: String,
|
76
63
|
message_id: T.nilable(String)
|
77
|
-
).returns(
|
64
|
+
).returns(Api::Response)
|
78
65
|
end
|
79
66
|
def send_location(
|
80
67
|
sender_id:, recipient_number:, longitude:, latitude:, name:, address:, message_id: nil
|
@@ -99,9 +86,9 @@ module WhatsappSdk
|
|
99
86
|
headers: DEFAULT_HEADERS
|
100
87
|
)
|
101
88
|
|
102
|
-
|
89
|
+
Api::Response.new(
|
103
90
|
response: response,
|
104
|
-
data_class_type:
|
91
|
+
data_class_type: Api::Responses::MessageDataResponse
|
105
92
|
)
|
106
93
|
end
|
107
94
|
|
@@ -113,18 +100,18 @@ module WhatsappSdk
|
|
113
100
|
# @param link [String] Image link.
|
114
101
|
# @param caption [String] Image caption.
|
115
102
|
# @param message_id [String] The id of the message to reply to.
|
116
|
-
# @return [
|
103
|
+
# @return [Api::Response] Response object.
|
117
104
|
sig do
|
118
105
|
params(
|
119
106
|
sender_id: Integer, recipient_number: Integer, image_id: T.nilable(String),
|
120
107
|
link: T.nilable(String), caption: T.nilable(String),
|
121
108
|
message_id: T.nilable(String)
|
122
|
-
).returns(
|
109
|
+
).returns(Api::Response)
|
123
110
|
end
|
124
111
|
def send_image(
|
125
112
|
sender_id:, recipient_number:, image_id: nil, link: nil, caption: "", message_id: nil
|
126
113
|
)
|
127
|
-
raise MissingArgumentError, "image_id or link is required" if !image_id && !link
|
114
|
+
raise Resource::Errors::MissingArgumentError, "image_id or link is required" if !image_id && !link
|
128
115
|
|
129
116
|
params = {
|
130
117
|
messaging_product: "whatsapp",
|
@@ -145,9 +132,9 @@ module WhatsappSdk
|
|
145
132
|
headers: DEFAULT_HEADERS
|
146
133
|
)
|
147
134
|
|
148
|
-
|
135
|
+
Api::Response.new(
|
149
136
|
response: response,
|
150
|
-
data_class_type:
|
137
|
+
data_class_type: Api::Responses::MessageDataResponse
|
151
138
|
)
|
152
139
|
end
|
153
140
|
|
@@ -158,15 +145,15 @@ module WhatsappSdk
|
|
158
145
|
# @param audio_id [String] Audio ID.
|
159
146
|
# @param link [String] Audio link.
|
160
147
|
# @param message_id [String] The id of the message to reply to.
|
161
|
-
# @return [
|
148
|
+
# @return [Api::Response] Response object.
|
162
149
|
sig do
|
163
150
|
params(
|
164
151
|
sender_id: Integer, recipient_number: Integer, audio_id: T.nilable(String),
|
165
152
|
link: T.nilable(String), message_id: T.nilable(String)
|
166
|
-
).returns(
|
153
|
+
).returns(Api::Response)
|
167
154
|
end
|
168
155
|
def send_audio(sender_id:, recipient_number:, audio_id: nil, link: nil, message_id: nil)
|
169
|
-
raise MissingArgumentError, "audio_id or link is required" if !audio_id && !link
|
156
|
+
raise Resource::Errors::MissingArgumentError, "audio_id or link is required" if !audio_id && !link
|
170
157
|
|
171
158
|
params = {
|
172
159
|
messaging_product: "whatsapp",
|
@@ -183,9 +170,9 @@ module WhatsappSdk
|
|
183
170
|
headers: DEFAULT_HEADERS
|
184
171
|
)
|
185
172
|
|
186
|
-
|
173
|
+
Api::Response.new(
|
187
174
|
response: response,
|
188
|
-
data_class_type:
|
175
|
+
data_class_type: Api::Responses::MessageDataResponse
|
189
176
|
)
|
190
177
|
end
|
191
178
|
|
@@ -197,18 +184,18 @@ module WhatsappSdk
|
|
197
184
|
# @param link [String] Image link.
|
198
185
|
# @param caption [String] Image caption.
|
199
186
|
# @param message_id [String] The id of the message to reply to.
|
200
|
-
# @return [
|
187
|
+
# @return [Api::Response] Response object.
|
201
188
|
sig do
|
202
189
|
params(
|
203
190
|
sender_id: Integer, recipient_number: Integer,
|
204
191
|
video_id: T.nilable(String), link: T.nilable(String), caption: String,
|
205
192
|
message_id: T.nilable(String)
|
206
|
-
).returns(
|
193
|
+
).returns(Api::Response)
|
207
194
|
end
|
208
195
|
def send_video(
|
209
196
|
sender_id:, recipient_number:, video_id: nil, link: nil, caption: "", message_id: nil
|
210
197
|
)
|
211
|
-
raise MissingArgumentError, "video_id or link is required" if !video_id && !link
|
198
|
+
raise Resource::Errors::MissingArgumentError, "video_id or link is required" if !video_id && !link
|
212
199
|
|
213
200
|
params = {
|
214
201
|
messaging_product: "whatsapp",
|
@@ -229,9 +216,9 @@ module WhatsappSdk
|
|
229
216
|
headers: DEFAULT_HEADERS
|
230
217
|
)
|
231
218
|
|
232
|
-
|
219
|
+
Api::Response.new(
|
233
220
|
response: response,
|
234
|
-
data_class_type:
|
221
|
+
data_class_type: Api::Responses::MessageDataResponse
|
235
222
|
)
|
236
223
|
end
|
237
224
|
|
@@ -243,18 +230,21 @@ module WhatsappSdk
|
|
243
230
|
# @param link [String] Image link.
|
244
231
|
# @param caption [String] Image caption.
|
245
232
|
# @param message_id [String] The id of the message to reply to.
|
246
|
-
# @return [
|
233
|
+
# @return [Api::Response] Response object.
|
247
234
|
sig do
|
248
235
|
params(
|
249
236
|
sender_id: Integer, recipient_number: Integer,
|
250
237
|
document_id: T.nilable(String), link: T.nilable(String), caption: String,
|
251
238
|
message_id: T.nilable(String)
|
252
|
-
).returns(
|
239
|
+
).returns(Api::Response)
|
253
240
|
end
|
254
241
|
def send_document(
|
255
242
|
sender_id:, recipient_number:, document_id: nil, link: nil, caption: "", message_id: nil
|
256
243
|
)
|
257
|
-
|
244
|
+
if !document_id && !link
|
245
|
+
raise Resource::Errors::MissingArgumentError,
|
246
|
+
"document or link is required"
|
247
|
+
end
|
258
248
|
|
259
249
|
params = {
|
260
250
|
messaging_product: "whatsapp",
|
@@ -275,9 +265,9 @@ module WhatsappSdk
|
|
275
265
|
headers: DEFAULT_HEADERS
|
276
266
|
)
|
277
267
|
|
278
|
-
|
268
|
+
Api::Response.new(
|
279
269
|
response: response,
|
280
|
-
data_class_type:
|
270
|
+
data_class_type: Api::Responses::MessageDataResponse
|
281
271
|
)
|
282
272
|
end
|
283
273
|
|
@@ -288,15 +278,15 @@ module WhatsappSdk
|
|
288
278
|
# @param sticker_id [String] The sticker ID.
|
289
279
|
# @param link [String] Image link.
|
290
280
|
# @param message_id [String] The id of the message to reply to.
|
291
|
-
# @return [
|
281
|
+
# @return [Api::Response] Response object.
|
292
282
|
sig do
|
293
283
|
params(
|
294
284
|
sender_id: Integer, recipient_number: Integer, sticker_id: T.nilable(String),
|
295
285
|
link: T.nilable(String), message_id: T.nilable(String)
|
296
|
-
).returns(
|
286
|
+
).returns(Api::Response)
|
297
287
|
end
|
298
288
|
def send_sticker(sender_id:, recipient_number:, sticker_id: nil, link: nil, message_id: nil)
|
299
|
-
raise MissingArgumentError, "sticker or link is required" if !sticker_id && !link
|
289
|
+
raise Resource::Errors::MissingArgumentError, "sticker or link is required" if !sticker_id && !link
|
300
290
|
|
301
291
|
params = {
|
302
292
|
messaging_product: "whatsapp",
|
@@ -313,9 +303,9 @@ module WhatsappSdk
|
|
313
303
|
headers: DEFAULT_HEADERS
|
314
304
|
)
|
315
305
|
|
316
|
-
|
306
|
+
Api::Response.new(
|
317
307
|
response: response,
|
318
|
-
data_class_type:
|
308
|
+
data_class_type: Api::Responses::MessageDataResponse
|
319
309
|
)
|
320
310
|
end
|
321
311
|
|
@@ -327,13 +317,13 @@ module WhatsappSdk
|
|
327
317
|
# @param contacts [Array<Contact>] Contacts.
|
328
318
|
# @param contacts_json [Json] Contacts.
|
329
319
|
# @param message_id [String] The id of the message to reply to.
|
330
|
-
# @return [
|
320
|
+
# @return [Api::Response] Response object.
|
331
321
|
sig do
|
332
322
|
params(
|
333
323
|
sender_id: Integer, recipient_number: Integer,
|
334
|
-
contacts: T.nilable(T::Array[
|
324
|
+
contacts: T.nilable(T::Array[Resource::Contact]),
|
335
325
|
contacts_json: T::Hash[T.untyped, T.untyped], message_id: T.nilable(String)
|
336
|
-
).returns(
|
326
|
+
).returns(Api::Response)
|
337
327
|
end
|
338
328
|
def send_contacts(
|
339
329
|
sender_id:, recipient_number:, contacts: nil, contacts_json: {}, message_id: nil
|
@@ -353,9 +343,9 @@ module WhatsappSdk
|
|
353
343
|
headers: DEFAULT_HEADERS
|
354
344
|
)
|
355
345
|
|
356
|
-
|
346
|
+
Api::Response.new(
|
357
347
|
response: response,
|
358
|
-
data_class_type:
|
348
|
+
data_class_type: Api::Responses::MessageDataResponse
|
359
349
|
)
|
360
350
|
end
|
361
351
|
|
@@ -373,18 +363,21 @@ module WhatsappSdk
|
|
373
363
|
# @param interactive_json [Json] The interactive object as a Json.
|
374
364
|
# If you pass interactive_json, you can't pass interactive.
|
375
365
|
# @param message_id [String] The id of the message to reply to.
|
376
|
-
# @return [
|
366
|
+
# @return [Api::Response] Response object.
|
377
367
|
sig do
|
378
368
|
params(
|
379
369
|
sender_id: Integer, recipient_number: Integer,
|
380
|
-
interactive: T.nilable(
|
370
|
+
interactive: T.nilable(Resource::Interactive),
|
381
371
|
interactive_json: T.nilable(T::Hash[T.untyped, T.untyped]), message_id: T.nilable(String)
|
382
|
-
).returns(
|
372
|
+
).returns(Api::Response)
|
383
373
|
end
|
384
374
|
def send_interactive_message(
|
385
375
|
sender_id:, recipient_number:, interactive: nil, interactive_json: nil, message_id: nil
|
386
376
|
)
|
387
|
-
|
377
|
+
if !interactive && !interactive_json
|
378
|
+
raise Resource::Errors::MissingArgumentError,
|
379
|
+
"interactive or interactive_json is required"
|
380
|
+
end
|
388
381
|
|
389
382
|
params = {
|
390
383
|
messaging_product: "whatsapp",
|
@@ -406,9 +399,9 @@ module WhatsappSdk
|
|
406
399
|
headers: DEFAULT_HEADERS
|
407
400
|
)
|
408
401
|
|
409
|
-
|
402
|
+
Api::Response.new(
|
410
403
|
response: response,
|
411
|
-
data_class_type:
|
404
|
+
data_class_type: Api::Responses::MessageDataResponse
|
412
405
|
)
|
413
406
|
end
|
414
407
|
|
@@ -419,8 +412,8 @@ module WhatsappSdk
|
|
419
412
|
#
|
420
413
|
# @param sender_id [Integer] Sender' phone number.
|
421
414
|
# @param message_id [Integer] Message ID.
|
422
|
-
# @return [
|
423
|
-
sig { params(sender_id: Integer, message_id: String).returns(
|
415
|
+
# @return [Api::Response] Response object.
|
416
|
+
sig { params(sender_id: Integer, message_id: String).returns(Api::Response) }
|
424
417
|
def read_message(sender_id:, message_id:)
|
425
418
|
params = {
|
426
419
|
messaging_product: "whatsapp",
|
@@ -434,9 +427,9 @@ module WhatsappSdk
|
|
434
427
|
headers: DEFAULT_HEADERS
|
435
428
|
)
|
436
429
|
|
437
|
-
|
430
|
+
Api::Response.new(
|
438
431
|
response: response,
|
439
|
-
data_class_type:
|
432
|
+
data_class_type: Api::Responses::ReadMessageDataResponse
|
440
433
|
)
|
441
434
|
end
|
442
435
|
|
@@ -448,18 +441,21 @@ module WhatsappSdk
|
|
448
441
|
# @param language [String] template language.
|
449
442
|
# @param components [Component] Component.
|
450
443
|
# @param components_json [Json] The component as a Json. If you pass components_json, you can't pass components.
|
451
|
-
# @return [
|
444
|
+
# @return [Api::Response] Response object.
|
452
445
|
sig do
|
453
446
|
params(
|
454
447
|
sender_id: Integer, recipient_number: Integer, name: String, language: String,
|
455
|
-
components: T.nilable(T::Array[
|
448
|
+
components: T.nilable(T::Array[Resource::Component]),
|
456
449
|
components_json: T.nilable(T::Array[T::Hash[T.untyped, T.untyped]])
|
457
|
-
).returns(
|
450
|
+
).returns(Api::Response)
|
458
451
|
end
|
459
452
|
def send_template(
|
460
453
|
sender_id:, recipient_number:, name:, language:, components: nil, components_json: nil
|
461
454
|
)
|
462
|
-
|
455
|
+
if !components && !components_json
|
456
|
+
raise Resource::Errors::MissingArgumentError,
|
457
|
+
"components or components_json is required"
|
458
|
+
end
|
463
459
|
|
464
460
|
params = {
|
465
461
|
messaging_product: "whatsapp",
|
@@ -484,9 +480,9 @@ module WhatsappSdk
|
|
484
480
|
headers: DEFAULT_HEADERS
|
485
481
|
)
|
486
482
|
|
487
|
-
|
483
|
+
Api::Response.new(
|
488
484
|
response: response,
|
489
|
-
data_class_type:
|
485
|
+
data_class_type: Api::Responses::MessageDataResponse
|
490
486
|
)
|
491
487
|
end
|
492
488
|
|
@@ -496,12 +492,12 @@ module WhatsappSdk
|
|
496
492
|
# @param recipient_number [Integer] Recipient' Phone number.
|
497
493
|
# @param message_id [String] the id of the message to reaction.
|
498
494
|
# @param emoji [String] unicode of the emoji to send.
|
499
|
-
# @return [
|
495
|
+
# @return [Api::Response] Response object.
|
500
496
|
sig do
|
501
497
|
params(
|
502
498
|
sender_id: Integer, recipient_number: Integer, message_id: String,
|
503
499
|
emoji: T.any(String, Integer)
|
504
|
-
).returns(
|
500
|
+
).returns(Api::Response)
|
505
501
|
end
|
506
502
|
def send_reaction(sender_id:, recipient_number:, message_id:, emoji:)
|
507
503
|
params = {
|
@@ -521,9 +517,9 @@ module WhatsappSdk
|
|
521
517
|
headers: DEFAULT_HEADERS
|
522
518
|
)
|
523
519
|
|
524
|
-
|
520
|
+
Api::Response.new(
|
525
521
|
response: response,
|
526
|
-
data_class_type:
|
522
|
+
data_class_type: Api::Responses::MessageDataResponse
|
527
523
|
)
|
528
524
|
end
|
529
525
|
|
@@ -16,34 +16,34 @@ module WhatsappSdk
|
|
16
16
|
# Get list of registered numbers.
|
17
17
|
#
|
18
18
|
# @param business_id [Integer] Business Id.
|
19
|
-
# @return [
|
20
|
-
sig { params(business_id: Integer).returns(
|
19
|
+
# @return [Api::Response] Response object.
|
20
|
+
sig { params(business_id: Integer).returns(Api::Response) }
|
21
21
|
def registered_numbers(business_id)
|
22
22
|
response = send_request(
|
23
23
|
http_method: "get",
|
24
24
|
endpoint: "#{business_id}/phone_numbers?fields=#{DEFAULT_FIELDS}"
|
25
25
|
)
|
26
26
|
|
27
|
-
|
27
|
+
Api::Response.new(
|
28
28
|
response: response,
|
29
|
-
data_class_type:
|
29
|
+
data_class_type: Api::Responses::PhoneNumbersDataResponse
|
30
30
|
)
|
31
31
|
end
|
32
32
|
|
33
33
|
# Get the registered number id.
|
34
34
|
#
|
35
35
|
# @param phone_number_id [Integer] The registered number we want to retrieve.
|
36
|
-
# @return [
|
37
|
-
sig { params(phone_number_id: Integer).returns(
|
36
|
+
# @return [Api::Response] Response object.
|
37
|
+
sig { params(phone_number_id: Integer).returns(Api::Response) }
|
38
38
|
def registered_number(phone_number_id)
|
39
39
|
response = send_request(
|
40
40
|
http_method: "get",
|
41
41
|
endpoint: "#{phone_number_id}?fields=#{DEFAULT_FIELDS}"
|
42
42
|
)
|
43
43
|
|
44
|
-
|
44
|
+
Api::Response.new(
|
45
45
|
response: response,
|
46
|
-
data_class_type:
|
46
|
+
data_class_type: Api::Responses::PhoneNumberDataResponse
|
47
47
|
)
|
48
48
|
end
|
49
49
|
|
@@ -51,12 +51,12 @@ module WhatsappSdk
|
|
51
51
|
#
|
52
52
|
# @param phone_number_id [Integer] The registered number we want to retrieve.
|
53
53
|
# @param pin [Integer] Pin of 6 digits.
|
54
|
-
# @return [
|
54
|
+
# @return [Api::Response] Response object.
|
55
55
|
sig do
|
56
56
|
params(
|
57
57
|
phone_number_id: Integer,
|
58
58
|
pin: Integer
|
59
|
-
).returns(
|
59
|
+
).returns(Api::Response)
|
60
60
|
end
|
61
61
|
def register_number(phone_number_id, pin)
|
62
62
|
response = send_request(
|
@@ -65,20 +65,20 @@ module WhatsappSdk
|
|
65
65
|
params: { messaging_product: 'whatsapp', pin: pin }
|
66
66
|
)
|
67
67
|
|
68
|
-
|
68
|
+
Api::Response.new(
|
69
69
|
response: response,
|
70
|
-
data_class_type:
|
70
|
+
data_class_type: Api::Responses::PhoneNumberDataResponse
|
71
71
|
)
|
72
72
|
end
|
73
73
|
|
74
74
|
# Deregister a phone number.
|
75
75
|
#
|
76
76
|
# @param phone_number_id [Integer] The registered number we want to retrieve.
|
77
|
-
# @return [
|
77
|
+
# @return [Api::Response] Response object.
|
78
78
|
sig do
|
79
79
|
params(
|
80
80
|
phone_number_id: Integer
|
81
|
-
).returns(
|
81
|
+
).returns(Api::Response)
|
82
82
|
end
|
83
83
|
def deregister_number(phone_number_id)
|
84
84
|
response = send_request(
|
@@ -87,9 +87,9 @@ module WhatsappSdk
|
|
87
87
|
params: {}
|
88
88
|
)
|
89
89
|
|
90
|
-
|
90
|
+
Api::Response.new(
|
91
91
|
response: response,
|
92
|
-
data_class_type:
|
92
|
+
data_class_type: Api::Responses::PhoneNumberDataResponse
|
93
93
|
)
|
94
94
|
end
|
95
95
|
end
|
@@ -13,10 +13,10 @@ module WhatsappSdk
|
|
13
13
|
class Response
|
14
14
|
extend T::Sig
|
15
15
|
|
16
|
-
sig { returns(T.nilable(
|
16
|
+
sig { returns(T.nilable(Api::Responses::ErrorResponse)) }
|
17
17
|
attr_accessor :error
|
18
18
|
|
19
|
-
sig { returns(T.nilable(
|
19
|
+
sig { returns(T.nilable(Api::Responses::DataResponse)) }
|
20
20
|
attr_accessor :data
|
21
21
|
|
22
22
|
sig { returns(T::Hash[T.untyped, T.untyped]) }
|
@@ -25,8 +25,8 @@ module WhatsappSdk
|
|
25
25
|
sig do
|
26
26
|
params(
|
27
27
|
response: T::Hash[T.untyped, T.untyped],
|
28
|
-
data_class_type: T.class_of(
|
29
|
-
error_class_type: T.class_of(
|
28
|
+
data_class_type: T.class_of(Api::Responses::DataResponse),
|
29
|
+
error_class_type: T.class_of(Api::Responses::ErrorResponse)
|
30
30
|
).void
|
31
31
|
end
|
32
32
|
def initialize(response:, data_class_type:, error_class_type: Responses::MessageErrorResponse)
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require_relative "error_response"
|
5
|
+
|
6
|
+
module WhatsappSdk
|
7
|
+
module Api
|
8
|
+
module Responses
|
9
|
+
class GenericErrorResponse < ErrorResponse
|
10
|
+
sig { returns(Integer) }
|
11
|
+
attr_reader :code
|
12
|
+
|
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
|
+
def initialize(response:)
|
30
|
+
@code = T.let(response["code"], Integer)
|
31
|
+
@subcode = T.let(response["error_subcode"], T.nilable(Integer))
|
32
|
+
@message = T.let(response["message"], T.nilable(String))
|
33
|
+
@type = T.let(response["type"], T.nilable(String))
|
34
|
+
@data = T.let(response["data"], T.nilable(String))
|
35
|
+
@fbtrace_id = T.let(response["fbtrace_id"], T.nilable(String))
|
36
|
+
super(response: response)
|
37
|
+
end
|
38
|
+
|
39
|
+
sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(GenericErrorResponse)) }
|
40
|
+
def self.build_from_response(response:)
|
41
|
+
error_response = response["error"]
|
42
|
+
return unless error_response
|
43
|
+
|
44
|
+
new(response: error_response)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -12,21 +12,21 @@ module WhatsappSdk
|
|
12
12
|
class MessageDataResponse < DataResponse
|
13
13
|
extend T::Sig
|
14
14
|
|
15
|
-
sig { returns(T::Array[
|
15
|
+
sig { returns(T::Array[Resource::ContactResponse]) }
|
16
16
|
attr_reader :contacts
|
17
17
|
|
18
|
-
sig { returns(T::Array[
|
18
|
+
sig { returns(T::Array[Resource::Message]) }
|
19
19
|
attr_reader :messages
|
20
20
|
|
21
21
|
sig { params(response: T::Hash[T.untyped, T.untyped]).void }
|
22
22
|
def initialize(response:)
|
23
23
|
@contacts = T.let(
|
24
24
|
response["contacts"]&.map { |contact_json| parse_contact(contact_json) },
|
25
|
-
T::Array[
|
25
|
+
T::Array[Resource::ContactResponse]
|
26
26
|
)
|
27
27
|
@messages = T.let(
|
28
28
|
response["messages"]&.map { |contact_json| parse_message(contact_json) },
|
29
|
-
T::Array[
|
29
|
+
T::Array[Resource::Message]
|
30
30
|
)
|
31
31
|
super(response)
|
32
32
|
end
|
@@ -40,14 +40,14 @@ module WhatsappSdk
|
|
40
40
|
|
41
41
|
private
|
42
42
|
|
43
|
-
sig { params(message_json: T::Hash[T.untyped, T.untyped]).returns(
|
43
|
+
sig { params(message_json: T::Hash[T.untyped, T.untyped]).returns(Resource::Message) }
|
44
44
|
def parse_message(message_json)
|
45
|
-
|
45
|
+
Resource::Message.new(id: message_json["id"])
|
46
46
|
end
|
47
47
|
|
48
|
-
sig { params(contact_json: T::Hash[T.untyped, T.untyped]).returns(
|
48
|
+
sig { params(contact_json: T::Hash[T.untyped, T.untyped]).returns(Resource::ContactResponse) }
|
49
49
|
def parse_contact(contact_json)
|
50
|
-
|
50
|
+
Resource::ContactResponse.new(input: contact_json["input"], wa_id: contact_json["wa_id"])
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
@@ -1,48 +1,12 @@
|
|
1
1
|
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require_relative "
|
4
|
+
require_relative "generic_error_response"
|
5
5
|
|
6
6
|
module WhatsappSdk
|
7
7
|
module Api
|
8
8
|
module Responses
|
9
|
-
class MessageErrorResponse <
|
10
|
-
sig { returns(Integer) }
|
11
|
-
attr_reader :code
|
12
|
-
|
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
|
-
def initialize(response:)
|
30
|
-
@code = T.let(response["code"], Integer)
|
31
|
-
@subcode = T.let(response["error_subcode"], T.nilable(Integer))
|
32
|
-
@message = T.let(response["message"], T.nilable(String))
|
33
|
-
@type = T.let(response["type"], T.nilable(String))
|
34
|
-
@data = T.let(response["data"], T.nilable(String))
|
35
|
-
@fbtrace_id = T.let(response["fbtrace_id"], T.nilable(String))
|
36
|
-
super(response: response)
|
37
|
-
end
|
38
|
-
|
39
|
-
sig { override.params(response: T::Hash[T.untyped, T.untyped]).returns(T.nilable(MessageErrorResponse)) }
|
40
|
-
def self.build_from_response(response:)
|
41
|
-
error_response = response["error"]
|
42
|
-
return unless error_response
|
43
|
-
|
44
|
-
new(response: error_response)
|
45
|
-
end
|
9
|
+
class MessageErrorResponse < GenericErrorResponse
|
46
10
|
end
|
47
11
|
end
|
48
12
|
end
|