whatsapp_sdk 0.0.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/example.rb ADDED
@@ -0,0 +1,207 @@
1
+ # frozen_string_literal: true
2
+
3
+ # 1) Copy this code into a file and save it `example.rb`
4
+ # 2) Replace the `ACCESS_TOKEN` constant with a valid `access_token`.
5
+ # 3) Run the file with the command `ruby example.rb`
6
+
7
+ require 'bundler/inline'
8
+
9
+ gemfile(true) do
10
+ source 'https://rubygems.org'
11
+
12
+ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
13
+
14
+ gem "whatsapp_sdk"
15
+ gem "pry"
16
+ gem "pry-nav"
17
+ end
18
+
19
+ require 'whatsapp_sdk'
20
+ require "pry"
21
+ require "pry-nav"
22
+
23
+ ################# UPDATE CONSTANTS #################
24
+
25
+ ACCESS_TOKEN = "<TODO replace>"
26
+ SENDER_ID = "<TODO replace>"
27
+ RECIPIENT_NUMBER = "<TODO replace>"
28
+ BUSINESS_ID = "<TODO replace>"
29
+ IMAGE_LINK = "<TODO replace>"
30
+
31
+ ################# Initialize Client #################
32
+ WhatsappSdk.configure do |config|
33
+ config.access_token = ACCESS_TOKEN
34
+ end
35
+
36
+ ################# HELPERS ########################
37
+ def print_message_sent(message_response)
38
+ if message_response.ok?
39
+ puts "Message sent to: #{message_response.data.contacts.first.input}"
40
+ else
41
+ puts "Error: #{message_response.error&.to_s}"
42
+ end
43
+ end
44
+ ##################################################
45
+
46
+ medias_api = WhatsappSdk::Api::Medias.new
47
+ messages_api = WhatsappSdk::Api::Messages.new
48
+ phone_numbers_api = WhatsappSdk::Api::PhoneNumbers.new
49
+
50
+ ############################## Phone Numbers API ##############################
51
+ phone_numbers_api.registered_number(SENDER_ID)
52
+ phone_numbers_api.registered_numbers(BUSINESS_ID)
53
+ ############################## Media API ##############################
54
+
55
+ # upload a media
56
+ uploaded_media = medias_api.upload(sender_id: SENDER_ID, file_path: "tmp/whatsapp.png", type: "image/png")
57
+ puts "Uploaded media id: #{uploaded_media.data&.id}"
58
+
59
+ # get a media
60
+ media = medias_api.media(media_id: uploaded_media.data&.id).data
61
+ puts "Media info: #{media.raw_data_response}"
62
+
63
+ # download media
64
+ download_image = medias_api.download(url: media&.url, file_path: 'tmp/downloaded_whatsapp.png')
65
+ puts "Downloaded: #{download_image.data.success?}"
66
+
67
+ # delete a media
68
+ deleted_media = medias_api.delete(media_id: media&.id)
69
+ puts "Deleted: #{deleted_media.data.success?}"
70
+
71
+ ############################## Messages API ##############################
72
+
73
+ ######### SEND A TEXT MESSAGE
74
+ message_sent = messages_api.send_text(sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER,
75
+ message: "Hey there! it's Whatsapp Ruby SDK")
76
+ print_message_sent(message_sent)
77
+
78
+ location_sent = messages_api.send_location(
79
+ sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER,
80
+ longitude: -75.6898604, latitude: 45.4192206, name: "Ignacio", address: "My house"
81
+ )
82
+ print_message_sent(location_sent)
83
+
84
+ ######### READ A MESSAGE
85
+ # messages_api.read_message(sender_id: SENDER_ID, message_id: msg_id)
86
+
87
+ ######### SEND AN IMAGE
88
+ # Send an image with a link
89
+ image_sent = messages_api.send_image(
90
+ sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, link: media.url, caption: "Ignacio Chiazzo Profile"
91
+ )
92
+ print_message_sent(image_sent)
93
+
94
+ # Send an image with an id
95
+ messages_api.send_image(
96
+ sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, image_id: media.id, caption: "Ignacio Chiazzo Profile"
97
+ )
98
+
99
+ ######### SEND AUDIOS
100
+ ## with a link
101
+ messages_api.send_audio(sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, link: "audio_link")
102
+
103
+ ## with an audio id
104
+ messages_api.send_audio(sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, audio_id: "1234")
105
+
106
+ ######### SEND DOCUMENTS
107
+ ## with a link
108
+ messages_api.send_document(
109
+ sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, link: "document_link", caption: "Ignacio Chiazzo"
110
+ )
111
+
112
+ ## with a document id
113
+ messages_api.send_document(
114
+ sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, document_id: "1234", caption: "Ignacio Chiazzo"
115
+ )
116
+
117
+ ######### SEND STICKERS
118
+ ## with a link
119
+ messages_api.send_sticker(sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, link: "link")
120
+
121
+ ## with a sticker_id
122
+ messages_api.send_sticker(sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, sticker_id: "1234")
123
+
124
+ ######### SEND A TEMPLATE
125
+ # Note: The template must have been created previously.
126
+
127
+ # Send a template with no component
128
+ response_with_object = messages_api.send_template(sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER,
129
+ name: "hello_world", language: "en_US", components: [])
130
+ puts response_with_object
131
+
132
+ # Send a template with components.Remember to create the template first.
133
+ header_component = WhatsappSdk::Resource::Component.new(
134
+ type: WhatsappSdk::Resource::Component::Type::HEADER
135
+ )
136
+
137
+ image = WhatsappSdk::Resource::Media.new(type: "image", link: "http(s)://URL", caption: "caption")
138
+ document = WhatsappSdk::Resource::Media.new(type: "document", link: "http(s)://URL", filename: "txt.rb")
139
+ video = WhatsappSdk::Resource::Media.new(type: "video", id: 123)
140
+
141
+ parameter_image = WhatsappSdk::Resource::ParameterObject.new(
142
+ type: "image",
143
+ image: image
144
+ )
145
+
146
+ parameter_document = WhatsappSdk::Resource::ParameterObject.new(
147
+ type: "document",
148
+ document: document
149
+ )
150
+
151
+ parameter_video = WhatsappSdk::Resource::ParameterObject.new(
152
+ type: "video",
153
+ video: video
154
+ )
155
+
156
+ parameter_text = WhatsappSdk::Resource::ParameterObject.new(
157
+ type: "text",
158
+ text: "I am a text"
159
+ )
160
+
161
+ header_component.add_parameter(parameter_text)
162
+ header_component.add_parameter(parameter_image)
163
+ header_component.add_parameter(parameter_video)
164
+ header_component.add_parameter(parameter_document)
165
+ header_component.to_json
166
+
167
+ body_component = WhatsappSdk::Resource::Component.new(
168
+ type: WhatsappSdk::Resource::Component::Type::BODY
169
+ )
170
+ body_component.add_parameter(parameter_text)
171
+ body_component.add_parameter(parameter_image)
172
+ body_component.add_parameter(parameter_video)
173
+ body_component.add_parameter(parameter_document)
174
+ body_component.to_json
175
+
176
+ # button_component_1 = WhatsappSdk::Resource::Component.new(
177
+ # type: WhatsappSdk::Resource::Component::Type::BUTTON,
178
+ # index: 0,
179
+ # sub_type: WhatsappSdk::Resource::Component::Subtype::QUICK_REPLY,
180
+ # parameters: [WhatsappSdk::Resource::ButtonParameter.new(type: "payload", payload: "payload")]
181
+ # )
182
+
183
+ # button_component_2 = WhatsappSdk::Resource::Component.new(
184
+ # type: WhatsappSdk::Resource::Component::Type::BUTTON,
185
+ # index: 1,
186
+ # sub_type: WhatsappSdk::Resource::Component::Subtype::QUICK_REPLY,
187
+ # parameters: [WhatsappSdk::Resource::ButtonParameter.new(type: "payload", payload: "payload")]
188
+ # )
189
+
190
+ # Send a template with component_json
191
+ response_with_json = messages_api.send_template(
192
+ sender_id: SENDER_ID, recipient_number: RECIPIENT_NUMBER, name: "hello_world", language: "en_US",
193
+ components_json: [
194
+ {
195
+ "type" => "header",
196
+ "parameters" => [
197
+ {
198
+ "type" => "image",
199
+ "image" => {
200
+ "link" => "https://www.google.com/imgres?imgurl=https%3A%2F%2Fqph.cf2.quoracdn.net%2Fmain-qimg-6d977408fdd90a09a1fee7ba9e2f777c-lq&imgrefurl=https%3A%2F%2Fwww.quora.com%2FHow-can-I-find-my-WhatsApp-ID&tbnid=lDAx1vzXwqCakM&vet=12ahUKEwjKupLviJX4AhVrrHIEHQpGD9MQMygAegUIARC9AQ..i&docid=s-DNQVCrZmhJYM&w=602&h=339&q=example%20whatsapp%20image%20id&ved=2ahUKEwjKupLviJX4AhVrrHIEHQpGD9MQMygAegUIARC9AQ"
201
+ }
202
+ }
203
+ ]
204
+ }
205
+ ]
206
+ )
207
+ puts response_with_json
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module WhatsappSdk
4
- VERSION = "0.0.2"
4
+ VERSION = "0.3.0"
5
5
  end
@@ -6,25 +6,45 @@ require "oj"
6
6
  module WhatsappSdk
7
7
  module Api
8
8
  class Client
9
- API_VERSION = "v13.0"
9
+ API_VERSION = "v14.0"
10
10
  API_CLIENT = "https://graph.facebook.com/#{API_VERSION}/"
11
11
 
12
12
  def initialize(access_token)
13
13
  @access_token = access_token
14
14
  end
15
15
 
16
- def client
17
- @client ||= ::Faraday.new(API_CLIENT) do |client|
16
+ def send_request(endpoint: "", full_url: nil, http_method: "post", params: {})
17
+ url = full_url || API_CLIENT
18
+
19
+ response = faraday(url).public_send(http_method, endpoint, params)
20
+ Oj.load(response.body)
21
+ end
22
+
23
+ def download_file(url, path_to_file_name = nil)
24
+ uri = URI.parse(url)
25
+ request = Net::HTTP::Get.new(uri)
26
+ request["Authorization"] = "Bearer #{@access_token}"
27
+ req_options = { use_ssl: uri.scheme == "https" }
28
+
29
+ response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
30
+ http.request(request)
31
+ end
32
+
33
+ File.write(path_to_file_name, response.body) if response.code == "200" && path_to_file_name
34
+
35
+ response
36
+ end
37
+
38
+ private
39
+
40
+ def faraday(url)
41
+ ::Faraday.new(url) do |client|
42
+ client.request :multipart
18
43
  client.request :url_encoded
19
44
  client.adapter ::Faraday.default_adapter
20
45
  client.headers['Authorization'] = "Bearer #{@access_token}" unless @access_token.nil?
21
46
  end
22
47
  end
23
-
24
- def send_request(endpoint:, http_method: "post", params: {})
25
- response = client.public_send(http_method, endpoint, params)
26
- Oj.load(response.body)
27
- end
28
48
  end
29
49
  end
30
50
  end
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "faraday"
4
+ require "faraday/multipart"
5
+
6
+ require_relative "request"
7
+ require_relative "response"
8
+ require_relative '../../../lib/whatsapp_sdk/api/responses/media_data_response'
9
+ require_relative '../../../lib/whatsapp_sdk/api/responses/success_response'
10
+
11
+ module WhatsappSdk
12
+ module Api
13
+ class Medias < Request
14
+ class FileNotFoundError < StandardError
15
+ attr_reader :file_path
16
+
17
+ def initialize(file_path)
18
+ @file_path = file_path
19
+ super("Couldn't find file_path: #{file_path}")
20
+ end
21
+ end
22
+
23
+ # Get Media by ID.
24
+ #
25
+ # @param media_id [Integer] Media Id.
26
+ # @return [WhatsappSdk::Api::Response] Response object.
27
+ def media(media_id:)
28
+ response = send_request(
29
+ http_method: "get",
30
+ endpoint: "/#{media_id}"
31
+ )
32
+
33
+ WhatsappSdk::Api::Response.new(
34
+ response: response,
35
+ data_class_type: WhatsappSdk::Api::Responses::MediaDataResponse
36
+ )
37
+ end
38
+
39
+ # Download Media by URL.
40
+ #
41
+ # @param media_id [Integer] Media Id.
42
+ # @param file_path [String] The file_path to download the media e.g. "tmp/downloaded_image.png".
43
+ # @return [WhatsappSdk::Api::Response] Response object.
44
+ def download(url:, file_path:)
45
+ response = download_file(url, file_path)
46
+
47
+ response = if response.code.to_i == 200
48
+ { "success" => true }
49
+ else
50
+ { "error" => true, "status" => response.code }
51
+ end
52
+
53
+ WhatsappSdk::Api::Response.new(
54
+ response: response,
55
+ data_class_type: WhatsappSdk::Api::Responses::SuccessResponse,
56
+ error_class_type: WhatsappSdk::Api::Responses::ErrorResponse
57
+ )
58
+ end
59
+
60
+ # Upload a media.
61
+ # @param sender_id [Integer] Sender' phone number.
62
+ # @param file_path [String] Path to the file stored in your local directory. For example: "tmp/whatsapp.png".
63
+ # @param type [String] Media type e.g. text/plain, video/3gp, image/jpeg, image/png. For more information,
64
+ # see the official documentation https://developers.facebook.com/docs/whatsapp/cloud-api/reference/media#supported-media-types.
65
+ #
66
+ # @return [WhatsappSdk::Api::Response] Response object.
67
+ def upload(sender_id:, file_path:, type:)
68
+ raise FileNotFoundError, file_path unless File.file?(file_path)
69
+
70
+ params = {
71
+ messaging_product: "whatsapp",
72
+ file: Faraday::FilePart.new(file_path, type),
73
+ type: type
74
+ }
75
+
76
+ response = send_request(http_method: "post", endpoint: "#{sender_id}/media", params: params)
77
+
78
+ WhatsappSdk::Api::Response.new(
79
+ response: response,
80
+ data_class_type: WhatsappSdk::Api::Responses::MediaDataResponse
81
+ )
82
+ end
83
+
84
+ # Delete a Media by ID.
85
+ #
86
+ # @param media_id [Integer] Media Id.
87
+ # @return [WhatsappSdk::Api::Response] Response object.
88
+ def delete(media_id:)
89
+ response = send_request(
90
+ http_method: "delete",
91
+ endpoint: "/#{media_id}"
92
+ )
93
+
94
+ WhatsappSdk::Api::Response.new(
95
+ response: response,
96
+ data_class_type: WhatsappSdk::Api::Responses::SuccessResponse
97
+ )
98
+ end
99
+ end
100
+ end
101
+ end
@@ -25,9 +25,9 @@ module WhatsappSdk
25
25
  params = {
26
26
  messaging_product: "whatsapp",
27
27
  to: recipient_number,
28
- recepient_type: "individual",
28
+ recipient_type: "individual",
29
29
  type: "text",
30
- "text": { body: message }
30
+ text: { body: message }
31
31
  }
32
32
 
33
33
  response = send_request(
@@ -35,7 +35,10 @@ module WhatsappSdk
35
35
  params: params
36
36
  )
37
37
 
38
- WhatsappSdk::Api::Response.new(response: response, class_type: WhatsappSdk::Api::Responses::MessageDataResponse)
38
+ WhatsappSdk::Api::Response.new(
39
+ response: response,
40
+ data_class_type: WhatsappSdk::Api::Responses::MessageDataResponse
41
+ )
39
42
  end
40
43
 
41
44
  # Send location.
@@ -51,13 +54,13 @@ module WhatsappSdk
51
54
  params = {
52
55
  messaging_product: "whatsapp",
53
56
  to: recipient_number,
54
- recepient_type: "individual",
57
+ recipient_type: "individual",
55
58
  type: "location",
56
- "location": {
57
- "longitude": longitude,
58
- "latitude": latitude,
59
- "name": name,
60
- "address": address
59
+ location: {
60
+ longitude: longitude,
61
+ latitude: latitude,
62
+ name: name,
63
+ address: address
61
64
  }
62
65
  }
63
66
 
@@ -66,7 +69,10 @@ module WhatsappSdk
66
69
  params: params
67
70
  )
68
71
 
69
- WhatsappSdk::Api::Response.new(response: response, class_type: WhatsappSdk::Api::Responses::MessageDataResponse)
72
+ WhatsappSdk::Api::Response.new(
73
+ response: response,
74
+ data_class_type: WhatsappSdk::Api::Responses::MessageDataResponse
75
+ )
70
76
  end
71
77
 
72
78
  # Send an image.
@@ -83,7 +89,7 @@ module WhatsappSdk
83
89
  params = {
84
90
  messaging_product: "whatsapp",
85
91
  to: recipient_number,
86
- recepient_type: "individual",
92
+ recipient_type: "individual",
87
93
  type: "image"
88
94
  }
89
95
  params[:image] = if link
@@ -97,7 +103,10 @@ module WhatsappSdk
97
103
  params: params
98
104
  )
99
105
 
100
- WhatsappSdk::Api::Response.new(response: response, class_type: WhatsappSdk::Api::Responses::MessageDataResponse)
106
+ WhatsappSdk::Api::Response.new(
107
+ response: response,
108
+ data_class_type: WhatsappSdk::Api::Responses::MessageDataResponse
109
+ )
101
110
  end
102
111
 
103
112
  # Send an audio.
@@ -113,7 +122,7 @@ module WhatsappSdk
113
122
  params = {
114
123
  messaging_product: "whatsapp",
115
124
  to: recipient_number,
116
- recepient_type: "individual",
125
+ recipient_type: "individual",
117
126
  type: "audio"
118
127
  }
119
128
  params[:audio] = link ? { link: link } : { id: audio_id }
@@ -123,7 +132,10 @@ module WhatsappSdk
123
132
  params: params
124
133
  )
125
134
 
126
- WhatsappSdk::Api::Response.new(response: response, class_type: WhatsappSdk::Api::Responses::MessageDataResponse)
135
+ WhatsappSdk::Api::Response.new(
136
+ response: response,
137
+ data_class_type: WhatsappSdk::Api::Responses::MessageDataResponse
138
+ )
127
139
  end
128
140
 
129
141
  # Send a video.
@@ -140,7 +152,7 @@ module WhatsappSdk
140
152
  params = {
141
153
  messaging_product: "whatsapp",
142
154
  to: recipient_number,
143
- recepient_type: "individual",
155
+ recipient_type: "individual",
144
156
  type: "video"
145
157
  }
146
158
  params[:video] = if link
@@ -154,7 +166,10 @@ module WhatsappSdk
154
166
  params: params
155
167
  )
156
168
 
157
- WhatsappSdk::Api::Response.new(response: response, class_type: WhatsappSdk::Api::Responses::MessageDataResponse)
169
+ WhatsappSdk::Api::Response.new(
170
+ response: response,
171
+ data_class_type: WhatsappSdk::Api::Responses::MessageDataResponse
172
+ )
158
173
  end
159
174
 
160
175
  # Send a document.
@@ -171,7 +186,7 @@ module WhatsappSdk
171
186
  params = {
172
187
  messaging_product: "whatsapp",
173
188
  to: recipient_number,
174
- recepient_type: "individual",
189
+ recipient_type: "individual",
175
190
  type: "document"
176
191
  }
177
192
  params[:document] = if link
@@ -185,7 +200,10 @@ module WhatsappSdk
185
200
  params: params
186
201
  )
187
202
 
188
- WhatsappSdk::Api::Response.new(response: response, class_type: WhatsappSdk::Api::Responses::MessageDataResponse)
203
+ WhatsappSdk::Api::Response.new(
204
+ response: response,
205
+ data_class_type: WhatsappSdk::Api::Responses::MessageDataResponse
206
+ )
189
207
  end
190
208
 
191
209
  # Send a document.
@@ -200,7 +218,7 @@ module WhatsappSdk
200
218
  params = {
201
219
  messaging_product: "whatsapp",
202
220
  to: recipient_number,
203
- recepient_type: "individual",
221
+ recipient_type: "individual",
204
222
  type: "sticker"
205
223
  }
206
224
  params[:sticker] = link ? { link: link } : { id: sticker_id }
@@ -210,7 +228,10 @@ module WhatsappSdk
210
228
  params: params
211
229
  )
212
230
 
213
- WhatsappSdk::Api::Response.new(response: response, class_type: WhatsappSdk::Api::Responses::MessageDataResponse)
231
+ WhatsappSdk::Api::Response.new(
232
+ response: response,
233
+ data_class_type: WhatsappSdk::Api::Responses::MessageDataResponse
234
+ )
214
235
  end
215
236
 
216
237
  # Send contacts.
@@ -225,7 +246,7 @@ module WhatsappSdk
225
246
  params = {
226
247
  messaging_product: "whatsapp",
227
248
  to: recipient_number,
228
- recepient_type: "individual",
249
+ recipient_type: "individual",
229
250
  type: "contacts"
230
251
  }
231
252
  params[:contacts] = contacts ? contacts.map(&:to_h) : contacts_json
@@ -235,7 +256,10 @@ module WhatsappSdk
235
256
  params: params
236
257
  )
237
258
 
238
- WhatsappSdk::Api::Response.new(response: response, class_type: WhatsappSdk::Api::Responses::MessageDataResponse)
259
+ WhatsappSdk::Api::Response.new(
260
+ response: response,
261
+ data_class_type: WhatsappSdk::Api::Responses::MessageDataResponse
262
+ )
239
263
  end
240
264
 
241
265
  def send_interactive_button
@@ -267,7 +291,50 @@ module WhatsappSdk
267
291
  params: params
268
292
  )
269
293
 
270
- WhatsappSdk::Api::Response.new(response: response, class_type: WhatsappSdk::Api::Responses::MessageDataResponse)
294
+ WhatsappSdk::Api::Response.new(
295
+ response: response,
296
+ data_class_type: WhatsappSdk::Api::Responses::ReadMessageDataResponse
297
+ )
298
+ end
299
+
300
+ # Send template
301
+ #
302
+ # @param sender_id [Integer] Sender' phone number.
303
+ # @param recipient_number [Integer] Recipient' Phone number.
304
+ # @param name [String] the template's name.
305
+ # @param language [String] template language.
306
+ # @param components [Component] Component.
307
+ # @param components_json [Json] The component as a Json. If you pass components_json, you can't pass components.
308
+ # @return [WhatsappSdk::Api::Response] Response object.
309
+ def send_template(sender_id:, recipient_number:, name:, language:, components: nil, components_json: nil)
310
+ raise MissingArgumentError, "components or components_json is required" if !components && !components_json
311
+
312
+ params = {
313
+ messaging_product: "whatsapp",
314
+ recipient_type: "individual",
315
+ to: recipient_number,
316
+ type: "template",
317
+ template: {
318
+ name: name
319
+ }
320
+ }
321
+
322
+ params[:template][:language] = { code: language } if language
323
+ params[:template][:components] = if components.nil?
324
+ components_json
325
+ else
326
+ components.map(&:to_json)
327
+ end
328
+
329
+ response = send_request(
330
+ endpoint: endpoint(sender_id),
331
+ params: params
332
+ )
333
+
334
+ WhatsappSdk::Api::Response.new(
335
+ response: response,
336
+ data_class_type: WhatsappSdk::Api::Responses::MessageDataResponse
337
+ )
271
338
  end
272
339
 
273
340
  private
@@ -16,8 +16,10 @@ module WhatsappSdk
16
16
  endpoint: "#{business_id}/phone_numbers"
17
17
  )
18
18
 
19
- WhatsappSdk::Api::Response.new(response: response,
20
- class_type: WhatsappSdk::Api::Responses::PhoneNumbersDataResponse)
19
+ WhatsappSdk::Api::Response.new(
20
+ response: response,
21
+ data_class_type: WhatsappSdk::Api::Responses::PhoneNumbersDataResponse
22
+ )
21
23
  end
22
24
 
23
25
  # Get the registered number id.
@@ -30,8 +32,10 @@ module WhatsappSdk
30
32
  endpoint: phone_number_id.to_s
31
33
  )
32
34
 
33
- WhatsappSdk::Api::Response.new(response: response,
34
- class_type: WhatsappSdk::Api::Responses::PhoneNumberDataResponse)
35
+ WhatsappSdk::Api::Response.new(
36
+ response: response,
37
+ data_class_type: WhatsappSdk::Api::Responses::PhoneNumberDataResponse
38
+ )
35
39
  end
36
40
  end
37
41
  end
@@ -6,12 +6,18 @@ module WhatsappSdk
6
6
  API_VERSION = "v13.0"
7
7
  API_CLIENT = "https://graph.facebook.com/#{API_VERSION}/"
8
8
 
9
- def initialize(client)
9
+ def initialize(client = WhatsappSdk.configuration.client)
10
10
  @client = client
11
11
  end
12
12
 
13
- def send_request(endpoint:, http_method: "post", params: {})
14
- @client.send_request(http_method: http_method, endpoint: endpoint, params: params)
13
+ def download_file(url, path_to_file_name = nil)
14
+ @client.download_file(url, path_to_file_name)
15
+ end
16
+
17
+ def send_request(endpoint: nil, full_url: nil, http_method: "post", params: {})
18
+ @client.send_request(
19
+ http_method: http_method, full_url: full_url, endpoint: endpoint, params: params
20
+ )
15
21
  end
16
22
  end
17
23
  end
@@ -3,31 +3,25 @@
3
3
  require_relative "responses/message_data_response"
4
4
  require_relative "responses/phone_number_data_response"
5
5
  require_relative "responses/phone_numbers_data_response"
6
- require_relative "responses/error_response"
6
+ require_relative "responses/read_message_data_response"
7
+ require_relative "responses/message_error_response"
7
8
 
8
9
  module WhatsappSdk
9
10
  module Api
10
11
  class Response
11
12
  attr_accessor :error, :data
12
13
 
13
- CLASS_TYPE = {
14
- message_data_response: Responses::MessageDataResponse,
15
- phone_number_data_response: Responses::PhoneNumberDataResponse,
16
- phone_numbers_data_response: Responses::PhoneNumbersDataResponse,
17
- read_message_data_response: ReadMessageDataResponse
18
- }.freeze
19
-
20
- def initialize(response:, class_type:)
21
- @data = class_type.build_from_response(response: response)
22
- @error = Responses::ErrorResponse.build_from_response(response: response)
14
+ def initialize(response:, data_class_type:, error_class_type: Responses::MessageErrorResponse)
15
+ @data = data_class_type.build_from_response(response: response)
16
+ @error = error_class_type.build_from_response(response: response)
23
17
  end
24
18
 
25
- # Whether or not the response is successful.
19
+ # @return [Boolean] Whether or not the response is successful.
26
20
  def ok?
27
21
  @error.nil?
28
22
  end
29
23
 
30
- # Whether or not the response has an error.
24
+ # @return [Boolean] Whether or not the response has an error.
31
25
  def error?
32
26
  !!@error
33
27
  end