whatsapp_sdk 0.13.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.cursorrules +53 -0
- data/CHANGELOG.md +10 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +9 -4
- data/README.md +115 -170
- data/example.rb +197 -113
- data/lib/whatsapp_sdk/api/business_profile.rb +12 -14
- data/lib/whatsapp_sdk/api/client.rb +26 -2
- data/lib/whatsapp_sdk/api/medias.rb +23 -31
- data/lib/whatsapp_sdk/api/messages.rb +24 -61
- data/lib/whatsapp_sdk/api/phone_numbers.rb +32 -22
- data/lib/whatsapp_sdk/api/request.rb +2 -0
- data/lib/whatsapp_sdk/api/responses/generic_error_response.rb +4 -4
- data/lib/whatsapp_sdk/api/responses/http_response_error.rb +18 -0
- data/lib/whatsapp_sdk/api/responses/{message_error_response.rb → id_response.rb} +6 -3
- data/lib/whatsapp_sdk/api/responses/message_data_response.rb +17 -20
- data/lib/whatsapp_sdk/api/responses/pagination_records.rb +17 -0
- data/lib/whatsapp_sdk/api/responses/success_response.rb +3 -16
- data/lib/whatsapp_sdk/api/templates.rb +27 -36
- data/lib/whatsapp_sdk/resource/business_profile.rb +28 -0
- data/lib/whatsapp_sdk/resource/errors.rb +2 -0
- data/lib/whatsapp_sdk/resource/media.rb +18 -68
- data/lib/whatsapp_sdk/resource/media_component.rb +89 -0
- data/lib/whatsapp_sdk/resource/message_template_namespace.rb +17 -0
- data/lib/whatsapp_sdk/resource/phone_number.rb +41 -11
- data/lib/whatsapp_sdk/resource/phone_number_component.rb +25 -0
- data/lib/whatsapp_sdk/resource/template.rb +20 -0
- data/lib/whatsapp_sdk/version.rb +1 -1
- data/whatsapp_sdk.gemspec +1 -1
- metadata +10 -15
- data/lib/whatsapp_sdk/api/response.rb +0 -32
- data/lib/whatsapp_sdk/api/responses/business_profile_data_response.rb +0 -33
- data/lib/whatsapp_sdk/api/responses/data_response.rb +0 -17
- data/lib/whatsapp_sdk/api/responses/error_response.rb +0 -25
- data/lib/whatsapp_sdk/api/responses/media_data_response.rb +0 -30
- data/lib/whatsapp_sdk/api/responses/message_template_namespace_data_response.rb +0 -27
- data/lib/whatsapp_sdk/api/responses/phone_number_data_response.rb +0 -42
- data/lib/whatsapp_sdk/api/responses/phone_numbers_data_response.rb +0 -32
- data/lib/whatsapp_sdk/api/responses/read_message_data_response.rb +0 -29
- data/lib/whatsapp_sdk/api/responses/template_data_response.rb +0 -46
- data/lib/whatsapp_sdk/api/responses/templates_data_response.rb +0 -32
@@ -4,9 +4,6 @@ require "faraday"
|
|
4
4
|
require "faraday/multipart"
|
5
5
|
|
6
6
|
require_relative "request"
|
7
|
-
require_relative "response"
|
8
|
-
require_relative 'responses/media_data_response'
|
9
|
-
require_relative 'responses/success_response'
|
10
7
|
require_relative '../resource/media_types'
|
11
8
|
|
12
9
|
module WhatsappSdk
|
@@ -37,17 +34,19 @@ module WhatsappSdk
|
|
37
34
|
# Get Media by ID.
|
38
35
|
#
|
39
36
|
# @param media_id [String] Media Id.
|
40
|
-
# @return [
|
41
|
-
def
|
37
|
+
# @return [Resource::Media] Media object.
|
38
|
+
def get(media_id:)
|
42
39
|
response = send_request(
|
43
40
|
http_method: "get",
|
44
41
|
endpoint: "/#{media_id}"
|
45
42
|
)
|
46
43
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
44
|
+
Resource::Media.from_hash(response)
|
45
|
+
end
|
46
|
+
|
47
|
+
def media(media_id:)
|
48
|
+
warn "[DEPRECATION] `media` is deprecated. Please use `get` instead."
|
49
|
+
get(media_id: media_id)
|
51
50
|
end
|
52
51
|
|
53
52
|
# Download Media by URL.
|
@@ -57,7 +56,7 @@ module WhatsappSdk
|
|
57
56
|
# @param media_type [String] The media type e.g. "audio/mp4". See possible types in the official
|
58
57
|
# documentation https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media#supported-media-types,
|
59
58
|
# but note that the API may allow more depending on the client.
|
60
|
-
# @return [
|
59
|
+
# @return [Boolean] Whether the media was downloaded successfully.
|
61
60
|
def download(url:, file_path:, media_type:)
|
62
61
|
# Allow download of unsupported media types, since Cloud API may decide to let it through.
|
63
62
|
# https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk/discussions/127
|
@@ -66,17 +65,16 @@ module WhatsappSdk
|
|
66
65
|
content_type_header = map_media_type_to_content_type_header(media_type)
|
67
66
|
|
68
67
|
response = download_file(url: url, file_path: file_path, content_type_header: content_type_header)
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
)
|
68
|
+
|
69
|
+
return true if response.code.to_i == 200
|
70
|
+
|
71
|
+
begin
|
72
|
+
body = JSON.parse(response.body)
|
73
|
+
rescue JSON::ParserError
|
74
|
+
body = { "message" => response.body }
|
75
|
+
end
|
76
|
+
|
77
|
+
raise Api::Responses::HttpResponseError.new(http_status: response.code, body: body)
|
80
78
|
end
|
81
79
|
|
82
80
|
# Upload a media.
|
@@ -85,7 +83,7 @@ module WhatsappSdk
|
|
85
83
|
# @param type [String] Media type e.g. text/plain, video/3gp, image/jpeg, image/png. For more information,
|
86
84
|
# see the official documentation https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media#supported-media-types.
|
87
85
|
#
|
88
|
-
# @return [Api::
|
86
|
+
# @return [Api::Responses::IdResponse] IdResponse object.
|
89
87
|
def upload(sender_id:, file_path:, type:, headers: {})
|
90
88
|
raise FileNotFoundError.new(file_path: file_path) unless File.file?(file_path)
|
91
89
|
|
@@ -103,26 +101,20 @@ module WhatsappSdk
|
|
103
101
|
multipart: true
|
104
102
|
)
|
105
103
|
|
106
|
-
Api::
|
107
|
-
response: response,
|
108
|
-
data_class_type: Api::Responses::MediaDataResponse
|
109
|
-
)
|
104
|
+
Api::Responses::IdResponse.new(response["id"])
|
110
105
|
end
|
111
106
|
|
112
107
|
# Delete a Media by ID.
|
113
108
|
#
|
114
109
|
# @param media_id [String] Media Id.
|
115
|
-
# @return [
|
110
|
+
# @return [Boolean] Whether the media was deleted successfully.
|
116
111
|
def delete(media_id:)
|
117
112
|
response = send_request(
|
118
113
|
http_method: "delete",
|
119
114
|
endpoint: "/#{media_id}"
|
120
115
|
)
|
121
116
|
|
122
|
-
Api::
|
123
|
-
response: response,
|
124
|
-
data_class_type: Api::Responses::SuccessResponse
|
125
|
-
)
|
117
|
+
Api::Responses::SuccessResponse.success_response?(response: response)
|
126
118
|
end
|
127
119
|
|
128
120
|
private
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "request"
|
4
|
-
require_relative "response"
|
5
4
|
|
6
5
|
module WhatsappSdk
|
7
6
|
module Api
|
@@ -14,7 +13,7 @@ module WhatsappSdk
|
|
14
13
|
# @param recipient_number [Integer] Recipient' Phone number.
|
15
14
|
# @param message [String] Text to send.
|
16
15
|
# @param message_id [String] The id of the message to reply to.
|
17
|
-
# @return [
|
16
|
+
# @return [MessageDataResponse] Response object.
|
18
17
|
def send_text(sender_id:, recipient_number:, message:, message_id: nil)
|
19
18
|
params = {
|
20
19
|
messaging_product: "whatsapp",
|
@@ -31,10 +30,7 @@ module WhatsappSdk
|
|
31
30
|
headers: DEFAULT_HEADERS
|
32
31
|
)
|
33
32
|
|
34
|
-
Api::
|
35
|
-
response: response,
|
36
|
-
data_class_type: Api::Responses::MessageDataResponse
|
37
|
-
)
|
33
|
+
Api::Responses::MessageDataResponse.build_from_response(response: response)
|
38
34
|
end
|
39
35
|
|
40
36
|
# Send location.
|
@@ -46,7 +42,7 @@ module WhatsappSdk
|
|
46
42
|
# @param name [String] Location name.
|
47
43
|
# @param address [String] Location address.
|
48
44
|
# @param message_id [String] The id of the message to reply to.
|
49
|
-
# @return [
|
45
|
+
# @return [MessageDataResponse] Response object.
|
50
46
|
def send_location(
|
51
47
|
sender_id:, recipient_number:, longitude:, latitude:, name:, address:, message_id: nil
|
52
48
|
)
|
@@ -70,10 +66,7 @@ module WhatsappSdk
|
|
70
66
|
headers: DEFAULT_HEADERS
|
71
67
|
)
|
72
68
|
|
73
|
-
Api::
|
74
|
-
response: response,
|
75
|
-
data_class_type: Api::Responses::MessageDataResponse
|
76
|
-
)
|
69
|
+
Api::Responses::MessageDataResponse.build_from_response(response: response)
|
77
70
|
end
|
78
71
|
|
79
72
|
# Send an image.
|
@@ -84,7 +77,7 @@ module WhatsappSdk
|
|
84
77
|
# @param link [String] Image link.
|
85
78
|
# @param caption [String] Image caption.
|
86
79
|
# @param message_id [String] The id of the message to reply to.
|
87
|
-
# @return [
|
80
|
+
# @return [MessageDataResponse] Response object.
|
88
81
|
def send_image(
|
89
82
|
sender_id:, recipient_number:, image_id: nil, link: nil, caption: "", message_id: nil
|
90
83
|
)
|
@@ -109,10 +102,7 @@ module WhatsappSdk
|
|
109
102
|
headers: DEFAULT_HEADERS
|
110
103
|
)
|
111
104
|
|
112
|
-
Api::
|
113
|
-
response: response,
|
114
|
-
data_class_type: Api::Responses::MessageDataResponse
|
115
|
-
)
|
105
|
+
Api::Responses::MessageDataResponse.build_from_response(response: response)
|
116
106
|
end
|
117
107
|
|
118
108
|
# Send an audio.
|
@@ -122,7 +112,7 @@ module WhatsappSdk
|
|
122
112
|
# @param audio_id [String] Audio ID.
|
123
113
|
# @param link [String] Audio link.
|
124
114
|
# @param message_id [String] The id of the message to reply to.
|
125
|
-
# @return [
|
115
|
+
# @return [MessageDataResponse] Response object.
|
126
116
|
def send_audio(sender_id:, recipient_number:, audio_id: nil, link: nil, message_id: nil)
|
127
117
|
raise Resource::Errors::MissingArgumentError, "audio_id or link is required" if !audio_id && !link
|
128
118
|
|
@@ -142,10 +132,7 @@ module WhatsappSdk
|
|
142
132
|
multipart: true
|
143
133
|
)
|
144
134
|
|
145
|
-
Api::
|
146
|
-
response: response,
|
147
|
-
data_class_type: Api::Responses::MessageDataResponse
|
148
|
-
)
|
135
|
+
Api::Responses::MessageDataResponse.build_from_response(response: response)
|
149
136
|
end
|
150
137
|
|
151
138
|
# Send a video.
|
@@ -156,7 +143,7 @@ module WhatsappSdk
|
|
156
143
|
# @param link [String] Image link.
|
157
144
|
# @param caption [String] Image caption.
|
158
145
|
# @param message_id [String] The id of the message to reply to.
|
159
|
-
# @return [
|
146
|
+
# @return [MessageDataResponse] Response object.
|
160
147
|
def send_video(
|
161
148
|
sender_id:, recipient_number:, video_id: nil, link: nil, caption: "", message_id: nil
|
162
149
|
)
|
@@ -181,10 +168,7 @@ module WhatsappSdk
|
|
181
168
|
headers: DEFAULT_HEADERS
|
182
169
|
)
|
183
170
|
|
184
|
-
Api::
|
185
|
-
response: response,
|
186
|
-
data_class_type: Api::Responses::MessageDataResponse
|
187
|
-
)
|
171
|
+
Api::Responses::MessageDataResponse.build_from_response(response: response)
|
188
172
|
end
|
189
173
|
|
190
174
|
# Send a document.
|
@@ -195,7 +179,7 @@ module WhatsappSdk
|
|
195
179
|
# @param link [String] Image link.
|
196
180
|
# @param caption [String] Image caption.
|
197
181
|
# @param message_id [String] The id of the message to reply to.
|
198
|
-
# @return [
|
182
|
+
# @return [MessageDataResponse] Response object.
|
199
183
|
def send_document(
|
200
184
|
sender_id:, recipient_number:, document_id: nil, link: nil, caption: "", message_id: nil, filename: nil
|
201
185
|
)
|
@@ -224,10 +208,7 @@ module WhatsappSdk
|
|
224
208
|
headers: DEFAULT_HEADERS
|
225
209
|
)
|
226
210
|
|
227
|
-
Api::
|
228
|
-
response: response,
|
229
|
-
data_class_type: Api::Responses::MessageDataResponse
|
230
|
-
)
|
211
|
+
Api::Responses::MessageDataResponse.build_from_response(response: response)
|
231
212
|
end
|
232
213
|
|
233
214
|
# Send a document.
|
@@ -237,7 +218,7 @@ module WhatsappSdk
|
|
237
218
|
# @param sticker_id [String] The sticker ID.
|
238
219
|
# @param link [String] Image link.
|
239
220
|
# @param message_id [String] The id of the message to reply to.
|
240
|
-
# @return [
|
221
|
+
# @return [MessageDataResponse] Response object.
|
241
222
|
def send_sticker(sender_id:, recipient_number:, sticker_id: nil, link: nil, message_id: nil)
|
242
223
|
raise Resource::Errors::MissingArgumentError, "sticker or link is required" if !sticker_id && !link
|
243
224
|
|
@@ -256,10 +237,7 @@ module WhatsappSdk
|
|
256
237
|
headers: DEFAULT_HEADERS
|
257
238
|
)
|
258
239
|
|
259
|
-
Api::
|
260
|
-
response: response,
|
261
|
-
data_class_type: Api::Responses::MessageDataResponse
|
262
|
-
)
|
240
|
+
Api::Responses::MessageDataResponse.build_from_response(response: response)
|
263
241
|
end
|
264
242
|
|
265
243
|
# Send contacts.
|
@@ -270,7 +248,7 @@ module WhatsappSdk
|
|
270
248
|
# @param contacts [Array<Contact>] Contacts.
|
271
249
|
# @param contacts_json [Json] Contacts.
|
272
250
|
# @param message_id [String] The id of the message to reply to.
|
273
|
-
# @return [
|
251
|
+
# @return [MessageDataResponse] Response object.
|
274
252
|
def send_contacts(
|
275
253
|
sender_id:, recipient_number:, contacts: nil, contacts_json: {}, message_id: nil
|
276
254
|
)
|
@@ -289,10 +267,7 @@ module WhatsappSdk
|
|
289
267
|
headers: DEFAULT_HEADERS
|
290
268
|
)
|
291
269
|
|
292
|
-
Api::
|
293
|
-
response: response,
|
294
|
-
data_class_type: Api::Responses::MessageDataResponse
|
295
|
-
)
|
270
|
+
Api::Responses::MessageDataResponse.build_from_response(response: response)
|
296
271
|
end
|
297
272
|
|
298
273
|
# def send_interactive_button
|
@@ -309,7 +284,7 @@ module WhatsappSdk
|
|
309
284
|
# @param interactive_json [Json] The interactive object as a Json.
|
310
285
|
# If you pass interactive_json, you can't pass interactive.
|
311
286
|
# @param message_id [String] The id of the message to reply to.
|
312
|
-
# @return [
|
287
|
+
# @return [MessageDataResponse] Response object.
|
313
288
|
def send_interactive_message(
|
314
289
|
sender_id:, recipient_number:, interactive: nil, interactive_json: nil, message_id: nil
|
315
290
|
)
|
@@ -338,10 +313,7 @@ module WhatsappSdk
|
|
338
313
|
headers: DEFAULT_HEADERS
|
339
314
|
)
|
340
315
|
|
341
|
-
Api::
|
342
|
-
response: response,
|
343
|
-
data_class_type: Api::Responses::MessageDataResponse
|
344
|
-
)
|
316
|
+
Api::Responses::MessageDataResponse.build_from_response(response: response)
|
345
317
|
end
|
346
318
|
|
347
319
|
alias send_interactive_reply_buttons send_interactive_message
|
@@ -351,7 +323,7 @@ module WhatsappSdk
|
|
351
323
|
#
|
352
324
|
# @param sender_id [Integer] Sender' phone number.
|
353
325
|
# @param message_id [Integer] Message ID.
|
354
|
-
# @return [
|
326
|
+
# @return [Boolean] Whether the message was marked as read.
|
355
327
|
def read_message(sender_id:, message_id:)
|
356
328
|
params = {
|
357
329
|
messaging_product: "whatsapp",
|
@@ -365,10 +337,7 @@ module WhatsappSdk
|
|
365
337
|
headers: DEFAULT_HEADERS
|
366
338
|
)
|
367
339
|
|
368
|
-
Api::
|
369
|
-
response: response,
|
370
|
-
data_class_type: Api::Responses::ReadMessageDataResponse
|
371
|
-
)
|
340
|
+
Api::Responses::SuccessResponse.success_response?(response: response)
|
372
341
|
end
|
373
342
|
|
374
343
|
# Send template
|
@@ -379,7 +348,7 @@ module WhatsappSdk
|
|
379
348
|
# @param language [String] template language.
|
380
349
|
# @param components [Component] Component.
|
381
350
|
# @param components_json [Json] The component as a Json. If you pass components_json, you can't pass components.
|
382
|
-
# @return [
|
351
|
+
# @return [MessageDataResponse] Response object.
|
383
352
|
def send_template(
|
384
353
|
sender_id:, recipient_number:, name:, language:, components: nil, components_json: nil
|
385
354
|
)
|
@@ -411,10 +380,7 @@ module WhatsappSdk
|
|
411
380
|
headers: DEFAULT_HEADERS
|
412
381
|
)
|
413
382
|
|
414
|
-
Api::
|
415
|
-
response: response,
|
416
|
-
data_class_type: Api::Responses::MessageDataResponse
|
417
|
-
)
|
383
|
+
Api::Responses::MessageDataResponse.build_from_response(response: response)
|
418
384
|
end
|
419
385
|
|
420
386
|
# Send reaction
|
@@ -423,7 +389,7 @@ module WhatsappSdk
|
|
423
389
|
# @param recipient_number [Integer] Recipient' Phone number.
|
424
390
|
# @param message_id [String] the id of the message to reaction.
|
425
391
|
# @param emoji [String] unicode of the emoji to send.
|
426
|
-
# @return [
|
392
|
+
# @return [MessageDataResponse] Response object.
|
427
393
|
def send_reaction(sender_id:, recipient_number:, message_id:, emoji:)
|
428
394
|
params = {
|
429
395
|
messaging_product: "whatsapp",
|
@@ -442,10 +408,7 @@ module WhatsappSdk
|
|
442
408
|
headers: DEFAULT_HEADERS
|
443
409
|
)
|
444
410
|
|
445
|
-
Api::
|
446
|
-
response: response,
|
447
|
-
data_class_type: Api::Responses::MessageDataResponse
|
448
|
-
)
|
411
|
+
Api::Responses::MessageDataResponse.build_from_response(response: response)
|
449
412
|
end
|
450
413
|
|
451
414
|
private
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "request"
|
4
|
-
require_relative "response"
|
5
4
|
|
6
5
|
module WhatsappSdk
|
7
6
|
module Api
|
@@ -16,39 +15,37 @@ module WhatsappSdk
|
|
16
15
|
#
|
17
16
|
# @param business_id [Integer] Business Id.
|
18
17
|
# @return [Api::Response] Response object.
|
19
|
-
def
|
18
|
+
def list(business_id)
|
20
19
|
response = send_request(
|
21
20
|
http_method: "get",
|
22
21
|
endpoint: "#{business_id}/phone_numbers?fields=#{DEFAULT_FIELDS}"
|
23
22
|
)
|
24
23
|
|
25
|
-
Api::
|
26
|
-
|
27
|
-
|
24
|
+
Api::Responses::PaginationRecords.new(
|
25
|
+
records: parse_phone_numbers(response['data']),
|
26
|
+
before: response['paging']['cursors']['before'],
|
27
|
+
after: response['paging']['cursors']['after']
|
28
28
|
)
|
29
29
|
end
|
30
30
|
|
31
|
-
# Get the registered number
|
31
|
+
# Get the registered number.
|
32
32
|
#
|
33
33
|
# @param phone_number_id [Integer] The registered number we want to retrieve.
|
34
|
-
# @return [
|
35
|
-
def
|
34
|
+
# @return [Resource::PhoneNumber] A PhoneNumber object.
|
35
|
+
def get(phone_number_id)
|
36
36
|
response = send_request(
|
37
37
|
http_method: "get",
|
38
38
|
endpoint: "#{phone_number_id}?fields=#{DEFAULT_FIELDS}"
|
39
39
|
)
|
40
40
|
|
41
|
-
|
42
|
-
response: response,
|
43
|
-
data_class_type: Api::Responses::PhoneNumberDataResponse
|
44
|
-
)
|
41
|
+
Resource::PhoneNumber.from_hash(response)
|
45
42
|
end
|
46
43
|
|
47
44
|
# Register a phone number.
|
48
45
|
#
|
49
46
|
# @param phone_number_id [Integer] The registered number we want to retrieve.
|
50
47
|
# @param pin [Integer] Pin of 6 digits.
|
51
|
-
# @return [
|
48
|
+
# @return [Boolean] Whether the registration was successful.
|
52
49
|
def register_number(phone_number_id, pin)
|
53
50
|
response = send_request(
|
54
51
|
http_method: "post",
|
@@ -56,16 +53,13 @@ module WhatsappSdk
|
|
56
53
|
params: { messaging_product: 'whatsapp', pin: pin }
|
57
54
|
)
|
58
55
|
|
59
|
-
Api::
|
60
|
-
response: response,
|
61
|
-
data_class_type: Api::Responses::PhoneNumberDataResponse
|
62
|
-
)
|
56
|
+
Api::Responses::SuccessResponse.success_response?(response: response)
|
63
57
|
end
|
64
58
|
|
65
59
|
# Deregister a phone number.
|
66
60
|
#
|
67
61
|
# @param phone_number_id [Integer] The registered number we want to retrieve.
|
68
|
-
# @return [
|
62
|
+
# @return [Boolean] Whether the deregistration was successful.
|
69
63
|
def deregister_number(phone_number_id)
|
70
64
|
response = send_request(
|
71
65
|
http_method: "post",
|
@@ -73,10 +67,26 @@ module WhatsappSdk
|
|
73
67
|
params: {}
|
74
68
|
)
|
75
69
|
|
76
|
-
Api::
|
77
|
-
|
78
|
-
|
79
|
-
|
70
|
+
Api::Responses::SuccessResponse.success_response?(response: response)
|
71
|
+
end
|
72
|
+
|
73
|
+
# deprecated methods
|
74
|
+
def registered_numbers(business_id)
|
75
|
+
warn "[DEPRECATION] `registered_numbers` is deprecated. Please use `list` instead."
|
76
|
+
list(business_id)
|
77
|
+
end
|
78
|
+
|
79
|
+
def registered_number(phone_number_id)
|
80
|
+
warn "[DEPRECATION] `registered_number` is deprecated. Please use `get` instead."
|
81
|
+
get(phone_number_id)
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
def parse_phone_numbers(phone_numbers_data)
|
87
|
+
phone_numbers_data.map do |phone_number|
|
88
|
+
Resource::PhoneNumber.from_hash(phone_number)
|
89
|
+
end
|
80
90
|
end
|
81
91
|
end
|
82
92
|
end
|
@@ -1,11 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "error_response"
|
4
|
-
|
5
3
|
module WhatsappSdk
|
6
4
|
module Api
|
7
5
|
module Responses
|
8
|
-
class GenericErrorResponse
|
6
|
+
class GenericErrorResponse
|
9
7
|
attr_reader :code, :subcode, :message, :type, :data, :fbtrace_id
|
10
8
|
|
11
9
|
def initialize(response:)
|
@@ -15,8 +13,10 @@ module WhatsappSdk
|
|
15
13
|
@type = response["type"]
|
16
14
|
@data = response["data"]
|
17
15
|
@fbtrace_id = response["fbtrace_id"]
|
16
|
+
end
|
18
17
|
|
19
|
-
|
18
|
+
def self.response_error?(response:)
|
19
|
+
response["error"]
|
20
20
|
end
|
21
21
|
|
22
22
|
def self.build_from_response(response:)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module WhatsappSdk
|
4
|
+
module Api
|
5
|
+
module Responses
|
6
|
+
class HttpResponseError < StandardError
|
7
|
+
attr_reader :http_status, :body, :error_info
|
8
|
+
|
9
|
+
def initialize(http_status:, body:)
|
10
|
+
super
|
11
|
+
@http_status = http_status
|
12
|
+
@body = body
|
13
|
+
@error_info = GenericErrorResponse.build_from_response(response: body)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,11 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "generic_error_response"
|
4
|
-
|
5
3
|
module WhatsappSdk
|
6
4
|
module Api
|
7
5
|
module Responses
|
8
|
-
class
|
6
|
+
class IdResponse
|
7
|
+
attr_accessor :id
|
8
|
+
|
9
|
+
def initialize(id)
|
10
|
+
@id = id
|
11
|
+
end
|
9
12
|
end
|
10
13
|
end
|
11
14
|
end
|
@@ -1,37 +1,34 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "../request"
|
4
|
-
require_relative "data_response"
|
5
3
|
require_relative "../../resource/message"
|
6
4
|
require_relative "../../resource/contact_response"
|
7
5
|
|
8
6
|
module WhatsappSdk
|
9
7
|
module Api
|
10
8
|
module Responses
|
11
|
-
class MessageDataResponse
|
12
|
-
|
9
|
+
class MessageDataResponse
|
10
|
+
attr_accessor :contacts, :messages
|
13
11
|
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
class << self
|
13
|
+
def build_from_response(response:)
|
14
|
+
return unless response["messages"]
|
17
15
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
def self.build_from_response(response:)
|
22
|
-
return unless response["messages"]
|
16
|
+
data_response = new
|
17
|
+
data_response.contacts = response["contacts"]&.map { |contact_json| parse_contact(contact_json) }
|
18
|
+
data_response.messages = response["messages"]&.map { |contact_json| parse_message(contact_json) }
|
23
19
|
|
24
|
-
|
25
|
-
|
20
|
+
data_response
|
21
|
+
end
|
26
22
|
|
27
|
-
|
23
|
+
private
|
28
24
|
|
29
|
-
|
30
|
-
|
31
|
-
|
25
|
+
def parse_message(message_json)
|
26
|
+
Resource::Message.new(id: message_json["id"])
|
27
|
+
end
|
32
28
|
|
33
|
-
|
34
|
-
|
29
|
+
def parse_contact(contact_json)
|
30
|
+
Resource::ContactResponse.new(input: contact_json["input"], wa_id: contact_json["wa_id"])
|
31
|
+
end
|
35
32
|
end
|
36
33
|
end
|
37
34
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module WhatsappSdk
|
4
|
+
module Api
|
5
|
+
module Responses
|
6
|
+
class PaginationRecords
|
7
|
+
attr_reader :records, :before, :after
|
8
|
+
|
9
|
+
def initialize(records:, before:, after:)
|
10
|
+
@records = records
|
11
|
+
@before = before
|
12
|
+
@after = after
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,24 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative "data_response"
|
4
|
-
|
5
3
|
module WhatsappSdk
|
6
4
|
module Api
|
7
5
|
module Responses
|
8
|
-
class SuccessResponse
|
9
|
-
def
|
10
|
-
|
11
|
-
super(response)
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.build_from_response(response:)
|
15
|
-
return unless response["success"]
|
16
|
-
|
17
|
-
new(response: response)
|
18
|
-
end
|
19
|
-
|
20
|
-
def success?
|
21
|
-
@success
|
6
|
+
class SuccessResponse
|
7
|
+
def self.success_response?(response:)
|
8
|
+
response["success"] == true
|
22
9
|
end
|
23
10
|
end
|
24
11
|
end
|