whatsapp_sdk 0.13.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
@@ -1,12 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative "request"
|
4
|
-
require_relative "response"
|
5
|
-
require_relative 'responses/success_response'
|
6
|
-
require_relative 'responses/message_template_namespace_data_response'
|
7
|
-
require_relative 'responses/generic_error_response'
|
8
|
-
require_relative 'responses/template_data_response'
|
9
|
-
require_relative 'responses/templates_data_response'
|
10
4
|
require_relative "../resource/languages"
|
11
5
|
|
12
6
|
module WhatsappSdk
|
@@ -36,7 +30,7 @@ module WhatsappSdk
|
|
36
30
|
# @param allow_category_change [Boolean] Optional Allow category change.
|
37
31
|
# Set to true to allow us to assign a category based on the template guidelines and the template's contents.
|
38
32
|
# This can prevent your template from being rejected for miscategorization.
|
39
|
-
# @return [
|
33
|
+
# @return [Template] Template object.
|
40
34
|
def create(
|
41
35
|
business_id:, name:, category:, language:, components_json: nil, allow_category_change: nil
|
42
36
|
)
|
@@ -63,19 +57,15 @@ module WhatsappSdk
|
|
63
57
|
headers: DEFAULT_HEADERS
|
64
58
|
)
|
65
59
|
|
66
|
-
|
67
|
-
response: response,
|
68
|
-
data_class_type: Responses::TemplateDataResponse,
|
69
|
-
error_class_type: Responses::GenericErrorResponse
|
70
|
-
)
|
60
|
+
Resource::Template.from_hash(response)
|
71
61
|
end
|
72
62
|
|
73
63
|
# Get templates
|
74
64
|
#
|
75
65
|
# @param business_id [Integer] The business ID.
|
76
66
|
# @param limit [Integer] Optional. Number of templates to return in a single page.
|
77
|
-
# @return [
|
78
|
-
def
|
67
|
+
# @return [Template] Pagination Record containing an array of Template objects.
|
68
|
+
def list(business_id:, limit: 100)
|
79
69
|
params = {}
|
80
70
|
params["limit"] = limit if limit
|
81
71
|
|
@@ -85,18 +75,23 @@ module WhatsappSdk
|
|
85
75
|
params: params
|
86
76
|
)
|
87
77
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
78
|
+
Api::Responses::PaginationRecords.new(
|
79
|
+
records: parse_templates(response['data']),
|
80
|
+
before: response['paging']['cursors']['before'],
|
81
|
+
after: response['paging']['cursors']['after']
|
92
82
|
)
|
93
83
|
end
|
94
84
|
|
85
|
+
def templates(business_id:)
|
86
|
+
warn "[DEPRECATION] `templates` is deprecated. Please use `list` instead."
|
87
|
+
list(business_id: business_id)
|
88
|
+
end
|
89
|
+
|
95
90
|
# Get Message Template Namespace
|
96
91
|
# The message template namespace is required to send messages using the message templates.
|
97
92
|
#
|
98
93
|
# @param business_id [Integer] The business ID.
|
99
|
-
# @return [
|
94
|
+
# @return [MessageTemplateNamespace] MessageTemplateNamespace object.
|
100
95
|
def get_message_template_namespace(business_id:)
|
101
96
|
response = send_request(
|
102
97
|
endpoint: business_id.to_s,
|
@@ -104,11 +99,7 @@ module WhatsappSdk
|
|
104
99
|
params: { "fields" => "message_template_namespace" }
|
105
100
|
)
|
106
101
|
|
107
|
-
|
108
|
-
response: response,
|
109
|
-
data_class_type: Responses::MessageTemplateNamespaceDataResponse,
|
110
|
-
error_class_type: Responses::GenericErrorResponse
|
111
|
-
)
|
102
|
+
WhatsappSdk::Resource::MessageTemplateNamespace.from_hash(response)
|
112
103
|
end
|
113
104
|
|
114
105
|
# Edit Template
|
@@ -120,7 +111,7 @@ module WhatsappSdk
|
|
120
111
|
#
|
121
112
|
# @param id [String] Required. The message_template-id.
|
122
113
|
# @param components_json [Json] Components that make up the template..
|
123
|
-
# return [
|
114
|
+
# @return [Boolean] Whether the update was successful.
|
124
115
|
def update(template_id:, category: nil, components_json: nil)
|
125
116
|
if category && !WhatsappSdk::Resource::Template::Category.valid?(category)
|
126
117
|
raise InvalidCategoryError.new(category: category)
|
@@ -137,11 +128,7 @@ module WhatsappSdk
|
|
137
128
|
headers: { "Content-Type" => "application/json" }
|
138
129
|
)
|
139
130
|
|
140
|
-
|
141
|
-
response: response,
|
142
|
-
data_class_type: Responses::SuccessResponse,
|
143
|
-
error_class_type: Responses::GenericErrorResponse
|
144
|
-
)
|
131
|
+
Api::Responses::SuccessResponse.success_response?(response: response)
|
145
132
|
end
|
146
133
|
|
147
134
|
# Delete Template
|
@@ -155,7 +142,7 @@ module WhatsappSdk
|
|
155
142
|
# @param name [String] Required. The template's name.
|
156
143
|
# @param hsm_id [String] Optional. The template's id.
|
157
144
|
#
|
158
|
-
# @return [
|
145
|
+
# @return [Boolean] Whether the deletion was successful.
|
159
146
|
def delete(business_id:, name:, hsm_id: nil)
|
160
147
|
params = { name: name }
|
161
148
|
params[:hsm_id] = hsm_id if hsm_id
|
@@ -166,11 +153,15 @@ module WhatsappSdk
|
|
166
153
|
params: params
|
167
154
|
)
|
168
155
|
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
156
|
+
Api::Responses::SuccessResponse.success_response?(response: response)
|
157
|
+
end
|
158
|
+
|
159
|
+
private
|
160
|
+
|
161
|
+
def parse_templates(templates_data)
|
162
|
+
templates_data.map do |template|
|
163
|
+
Resource::Template.from_hash(template)
|
164
|
+
end
|
174
165
|
end
|
175
166
|
end
|
176
167
|
end
|
@@ -7,6 +7,34 @@ module WhatsappSdk
|
|
7
7
|
UNDEFINED OTHER AUTO BEAUTY APPAREL EDU ENTERTAIN EVENT_PLAN FINANCE GROCERY
|
8
8
|
GOVT HOTEL HEALTH NONPROFIT PROF_SERVICES RETAIL TRAVEL RESTAURANT NOT_A_BIZ
|
9
9
|
].freeze
|
10
|
+
|
11
|
+
attr_accessor :about, :address, :description, :email, :messaging_product,
|
12
|
+
:profile_picture_url, :vertical, :websites
|
13
|
+
|
14
|
+
def self.from_hash(hash)
|
15
|
+
business_profile = BusinessProfile.new
|
16
|
+
business_profile.about = hash["about"]
|
17
|
+
business_profile.address = hash["address"]
|
18
|
+
business_profile.description = hash["description"]
|
19
|
+
business_profile.email = hash["email"]
|
20
|
+
business_profile.messaging_product = hash["messaging_product"]
|
21
|
+
business_profile.profile_picture_url = hash["profile_picture_url"]
|
22
|
+
business_profile.vertical = hash["vertical"]
|
23
|
+
business_profile.websites = hash["websites"]
|
24
|
+
|
25
|
+
business_profile
|
26
|
+
end
|
27
|
+
|
28
|
+
def ==(other)
|
29
|
+
about == other.about &&
|
30
|
+
address == other.address &&
|
31
|
+
description == other.description &&
|
32
|
+
email == other.email &&
|
33
|
+
messaging_product == other.messaging_product &&
|
34
|
+
profile_picture_url == other.profile_picture_url &&
|
35
|
+
vertical == other.vertical &&
|
36
|
+
websites == other.websites
|
37
|
+
end
|
10
38
|
end
|
11
39
|
end
|
12
40
|
end
|
@@ -3,21 +3,6 @@
|
|
3
3
|
module WhatsappSdk
|
4
4
|
module Resource
|
5
5
|
class Media
|
6
|
-
class InvalidMedia < StandardError
|
7
|
-
attr_reader :field, :message
|
8
|
-
|
9
|
-
def initialize(field, message)
|
10
|
-
@field = field
|
11
|
-
@message = message
|
12
|
-
super(message)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
# Returns media id.
|
17
|
-
#
|
18
|
-
# @returns id [String].
|
19
|
-
attr_accessor :id
|
20
|
-
|
21
6
|
module Type
|
22
7
|
AUDIO = 'audio'
|
23
8
|
DOCUMENT = 'document'
|
@@ -26,61 +11,26 @@ module WhatsappSdk
|
|
26
11
|
STICKER = 'sticker'
|
27
12
|
end
|
28
13
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
# @returns caption [String].
|
41
|
-
attr_accessor :caption
|
42
|
-
|
43
|
-
# Describes the filename for the specific document. Use only with document media.
|
44
|
-
#
|
45
|
-
# @returns filename [String].
|
46
|
-
attr_accessor :filename
|
47
|
-
|
48
|
-
def initialize(type:, id: nil, link: nil, caption: nil, filename: nil)
|
49
|
-
@type = type
|
50
|
-
@id = id
|
51
|
-
@link = link
|
52
|
-
@caption = caption
|
53
|
-
@filename = filename
|
54
|
-
validate_media
|
55
|
-
end
|
56
|
-
|
57
|
-
def to_json
|
58
|
-
json = {}
|
59
|
-
json[:id] = id unless id.nil?
|
60
|
-
json[:link] = link unless link.nil?
|
61
|
-
json[:caption] = caption unless caption.nil?
|
62
|
-
json[:filename] = filename unless filename.nil?
|
63
|
-
json
|
64
|
-
end
|
65
|
-
|
66
|
-
private
|
67
|
-
|
68
|
-
def validate_media
|
69
|
-
raise InvalidMedia.new(:filename, "filename can only be used with document") if filename && !supports_filename?
|
70
|
-
|
71
|
-
if caption && !supports_caption?
|
72
|
-
raise InvalidMedia.new(:caption, "caption can only be used with document or image")
|
73
|
-
end
|
74
|
-
|
75
|
-
true
|
76
|
-
end
|
77
|
-
|
78
|
-
def supports_filename?
|
79
|
-
type == Type::DOCUMENT
|
14
|
+
attr_accessor :file_size, :id, :messaging_product, :mime_type, :sha256, :url
|
15
|
+
|
16
|
+
def self.from_hash(hash)
|
17
|
+
media = new
|
18
|
+
media.id = hash["id"]
|
19
|
+
media.file_size = hash["file_size"]
|
20
|
+
media.messaging_product = hash["messaging_product"]
|
21
|
+
media.mime_type = hash["mime_type"]
|
22
|
+
media.sha256 = hash["sha256"]
|
23
|
+
media.url = hash["url"]
|
24
|
+
media
|
80
25
|
end
|
81
26
|
|
82
|
-
def
|
83
|
-
|
27
|
+
def ==(other)
|
28
|
+
id == other.id &&
|
29
|
+
file_size == other.file_size &&
|
30
|
+
messaging_product == other.messaging_product &&
|
31
|
+
mime_type == other.mime_type &&
|
32
|
+
sha256 == other.sha256 &&
|
33
|
+
url == other.url
|
84
34
|
end
|
85
35
|
end
|
86
36
|
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# The media used by a component (button, header, body, footer) etc.
|
4
|
+
|
5
|
+
module WhatsappSdk
|
6
|
+
module Resource
|
7
|
+
class MediaComponent
|
8
|
+
class InvalidMedia < StandardError
|
9
|
+
attr_reader :field, :message
|
10
|
+
|
11
|
+
def initialize(field, message)
|
12
|
+
@field = field
|
13
|
+
@message = message
|
14
|
+
super(message)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Returns media id.
|
19
|
+
#
|
20
|
+
# @returns id [String].
|
21
|
+
attr_accessor :id
|
22
|
+
|
23
|
+
module Type
|
24
|
+
AUDIO = 'audio'
|
25
|
+
DOCUMENT = 'document'
|
26
|
+
IMAGE = 'image'
|
27
|
+
VIDEO = 'video'
|
28
|
+
STICKER = 'sticker'
|
29
|
+
end
|
30
|
+
|
31
|
+
# @returns type [String]. Valid options ar audio, document, image, video and sticker.
|
32
|
+
attr_accessor :type
|
33
|
+
|
34
|
+
# The protocol and URL of the media to be sent. Use only with HTTP/HTTPS URLs.
|
35
|
+
# Do not use this field when the message type is set to text.
|
36
|
+
#
|
37
|
+
# @returns link [String].
|
38
|
+
attr_accessor :link
|
39
|
+
|
40
|
+
# Describes the specified document or image media.
|
41
|
+
#
|
42
|
+
# @returns caption [String].
|
43
|
+
attr_accessor :caption
|
44
|
+
|
45
|
+
# Describes the filename for the specific document. Use only with document media.
|
46
|
+
#
|
47
|
+
# @returns filename [String].
|
48
|
+
attr_accessor :filename
|
49
|
+
|
50
|
+
def initialize(type:, id: nil, link: nil, caption: nil, filename: nil)
|
51
|
+
@type = type
|
52
|
+
@id = id
|
53
|
+
@link = link
|
54
|
+
@caption = caption
|
55
|
+
@filename = filename
|
56
|
+
validate_media
|
57
|
+
end
|
58
|
+
|
59
|
+
def to_json
|
60
|
+
json = {}
|
61
|
+
json[:id] = id unless id.nil?
|
62
|
+
json[:link] = link unless link.nil?
|
63
|
+
json[:caption] = caption unless caption.nil?
|
64
|
+
json[:filename] = filename unless filename.nil?
|
65
|
+
json
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def validate_media
|
71
|
+
raise InvalidMedia.new(:filename, "filename can only be used with document") if filename && !supports_filename?
|
72
|
+
|
73
|
+
if caption && !supports_caption?
|
74
|
+
raise InvalidMedia.new(:caption, "caption can only be used with document or image")
|
75
|
+
end
|
76
|
+
|
77
|
+
true
|
78
|
+
end
|
79
|
+
|
80
|
+
def supports_filename?
|
81
|
+
type == Type::DOCUMENT
|
82
|
+
end
|
83
|
+
|
84
|
+
def supports_caption?
|
85
|
+
type == Type::DOCUMENT || type == Type::IMAGE
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module WhatsappSdk
|
4
|
+
module Resource
|
5
|
+
class MessageTemplateNamespace
|
6
|
+
attr_accessor :id, :message_template_namespace
|
7
|
+
|
8
|
+
def self.from_hash(hash)
|
9
|
+
message_template_namespace = new
|
10
|
+
message_template_namespace.id = hash["id"]
|
11
|
+
message_template_namespace.message_template_namespace = hash["message_template_namespace"]
|
12
|
+
|
13
|
+
message_template_namespace
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -3,21 +3,51 @@
|
|
3
3
|
module WhatsappSdk
|
4
4
|
module Resource
|
5
5
|
class PhoneNumber
|
6
|
-
attr_accessor :
|
6
|
+
attr_accessor :id, :verified_name, :display_phone_number, :quality_rating, :is_pin_enabled,
|
7
|
+
:is_official_business_account, :account_mode, :certificate, :code_verification_status,
|
8
|
+
:eligibility_for_api_business_global_search, :name_status, :new_name_status, :status,
|
9
|
+
:search_visibility, :messaging_limit_tier # , :phone, :wa_id, :type
|
7
10
|
|
8
|
-
def
|
9
|
-
|
10
|
-
|
11
|
-
|
11
|
+
def self.from_hash(hash)
|
12
|
+
phone_number = PhoneNumber.new
|
13
|
+
phone_number.id = hash["id"]
|
14
|
+
phone_number.verified_name = hash["verified_name"]
|
15
|
+
phone_number.display_phone_number = hash["display_phone_number"]
|
16
|
+
phone_number.quality_rating = hash["quality_rating"]
|
17
|
+
phone_number.is_pin_enabled = hash["is_pin_enabled"]
|
18
|
+
phone_number.is_official_business_account = hash["is_official_business_account"]
|
19
|
+
phone_number.account_mode = hash["account_mode"]
|
20
|
+
phone_number.certificate = hash["certificate"]
|
21
|
+
phone_number.code_verification_status = hash["code_verification_status"]
|
22
|
+
phone_number.eligibility_for_api_business_global_search = hash["eligibility_for_api_business_global_search"]
|
23
|
+
phone_number.name_status = hash["name_status"]
|
24
|
+
phone_number.new_name_status = hash["new_name_status"]
|
25
|
+
phone_number.status = hash["status"]
|
26
|
+
phone_number.search_visibility = hash["search_visibility"]
|
27
|
+
phone_number.messaging_limit_tier = hash["messaging_limit_tier"]
|
28
|
+
|
29
|
+
phone_number
|
12
30
|
end
|
13
31
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
32
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
33
|
+
def ==(other)
|
34
|
+
id == other.id &&
|
35
|
+
verified_name == other.verified_name &&
|
36
|
+
display_phone_number == other.display_phone_number &&
|
37
|
+
quality_rating == other.quality_rating &&
|
38
|
+
is_pin_enabled == other.is_pin_enabled &&
|
39
|
+
is_official_business_account == other.is_official_business_account &&
|
40
|
+
account_mode == other.account_mode &&
|
41
|
+
certificate == other.certificate &&
|
42
|
+
code_verification_status == other.code_verification_status &&
|
43
|
+
eligibility_for_api_business_global_search == other.eligibility_for_api_business_global_search &&
|
44
|
+
name_status == other.name_status &&
|
45
|
+
new_name_status == other.new_name_status &&
|
46
|
+
status == other.status &&
|
47
|
+
search_visibility == other.search_visibility &&
|
48
|
+
messaging_limit_tier == other.messaging_limit_tier
|
20
49
|
end
|
50
|
+
# rubocop:enable Metrics/PerceivedComplexity
|
21
51
|
end
|
22
52
|
end
|
23
53
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# The media used by a component (button, header, body, footer) etc.
|
4
|
+
|
5
|
+
module WhatsappSdk
|
6
|
+
module Resource
|
7
|
+
class PhoneNumberComponent
|
8
|
+
attr_accessor :phone, :wa_id, :type
|
9
|
+
|
10
|
+
def initialize(phone:, type:, wa_id:)
|
11
|
+
@phone = phone
|
12
|
+
@type = type
|
13
|
+
@wa_id = wa_id
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_h
|
17
|
+
{
|
18
|
+
phone: @phone,
|
19
|
+
type: @type,
|
20
|
+
wa_id: @wa_id
|
21
|
+
}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -46,6 +46,26 @@ module WhatsappSdk
|
|
46
46
|
@name = name
|
47
47
|
@components_json = components_json
|
48
48
|
end
|
49
|
+
|
50
|
+
def self.from_hash(hash)
|
51
|
+
new(
|
52
|
+
id: hash["id"],
|
53
|
+
status: hash["status"],
|
54
|
+
category: hash["category"],
|
55
|
+
language: hash["language"],
|
56
|
+
name: hash["name"],
|
57
|
+
components_json: hash["components"]
|
58
|
+
)
|
59
|
+
end
|
60
|
+
|
61
|
+
def ==(other)
|
62
|
+
id == other.id &&
|
63
|
+
status == other.status &&
|
64
|
+
category == other.category &&
|
65
|
+
language == other.language &&
|
66
|
+
name == other.name &&
|
67
|
+
components_json == other.components_json
|
68
|
+
end
|
49
69
|
end
|
50
70
|
end
|
51
71
|
end
|
data/lib/whatsapp_sdk/version.rb
CHANGED
data/whatsapp_sdk.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
DESCRIPTION
|
19
19
|
spec.homepage = "https://github.com/ignacio-chiazzo/ruby_whatsapp_sdk"
|
20
20
|
spec.license = "MIT"
|
21
|
-
spec.required_ruby_version = '>=
|
21
|
+
spec.required_ruby_version = '>= 2.7.0'
|
22
22
|
|
23
23
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
24
24
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: whatsapp_sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ignacio-chiazzo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-10-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -104,6 +104,7 @@ extensions: []
|
|
104
104
|
extra_rdoc_files: []
|
105
105
|
files:
|
106
106
|
- ".circleci/config.yml"
|
107
|
+
- ".cursorrules"
|
107
108
|
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
108
109
|
- ".github/ISSUE_TEMPLATE/feature_request.md"
|
109
110
|
- ".github/workflows/codeql-analysis.yml"
|
@@ -133,21 +134,12 @@ files:
|
|
133
134
|
- lib/whatsapp_sdk/api/messages.rb
|
134
135
|
- lib/whatsapp_sdk/api/phone_numbers.rb
|
135
136
|
- lib/whatsapp_sdk/api/request.rb
|
136
|
-
- lib/whatsapp_sdk/api/response.rb
|
137
|
-
- lib/whatsapp_sdk/api/responses/business_profile_data_response.rb
|
138
|
-
- lib/whatsapp_sdk/api/responses/data_response.rb
|
139
|
-
- lib/whatsapp_sdk/api/responses/error_response.rb
|
140
137
|
- lib/whatsapp_sdk/api/responses/generic_error_response.rb
|
141
|
-
- lib/whatsapp_sdk/api/responses/
|
138
|
+
- lib/whatsapp_sdk/api/responses/http_response_error.rb
|
139
|
+
- lib/whatsapp_sdk/api/responses/id_response.rb
|
142
140
|
- lib/whatsapp_sdk/api/responses/message_data_response.rb
|
143
|
-
- lib/whatsapp_sdk/api/responses/
|
144
|
-
- lib/whatsapp_sdk/api/responses/message_template_namespace_data_response.rb
|
145
|
-
- lib/whatsapp_sdk/api/responses/phone_number_data_response.rb
|
146
|
-
- lib/whatsapp_sdk/api/responses/phone_numbers_data_response.rb
|
147
|
-
- lib/whatsapp_sdk/api/responses/read_message_data_response.rb
|
141
|
+
- lib/whatsapp_sdk/api/responses/pagination_records.rb
|
148
142
|
- lib/whatsapp_sdk/api/responses/success_response.rb
|
149
|
-
- lib/whatsapp_sdk/api/responses/template_data_response.rb
|
150
|
-
- lib/whatsapp_sdk/api/responses/templates_data_response.rb
|
151
143
|
- lib/whatsapp_sdk/api/templates.rb
|
152
144
|
- lib/whatsapp_sdk/configuration.rb
|
153
145
|
- lib/whatsapp_sdk/error.rb
|
@@ -173,12 +165,15 @@ files:
|
|
173
165
|
- lib/whatsapp_sdk/resource/languages.rb
|
174
166
|
- lib/whatsapp_sdk/resource/location.rb
|
175
167
|
- lib/whatsapp_sdk/resource/media.rb
|
168
|
+
- lib/whatsapp_sdk/resource/media_component.rb
|
176
169
|
- lib/whatsapp_sdk/resource/media_types.rb
|
177
170
|
- lib/whatsapp_sdk/resource/message.rb
|
171
|
+
- lib/whatsapp_sdk/resource/message_template_namespace.rb
|
178
172
|
- lib/whatsapp_sdk/resource/name.rb
|
179
173
|
- lib/whatsapp_sdk/resource/org.rb
|
180
174
|
- lib/whatsapp_sdk/resource/parameter_object.rb
|
181
175
|
- lib/whatsapp_sdk/resource/phone_number.rb
|
176
|
+
- lib/whatsapp_sdk/resource/phone_number_component.rb
|
182
177
|
- lib/whatsapp_sdk/resource/template.rb
|
183
178
|
- lib/whatsapp_sdk/resource/url.rb
|
184
179
|
- lib/whatsapp_sdk/version.rb
|
@@ -200,7 +195,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
200
195
|
requirements:
|
201
196
|
- - ">="
|
202
197
|
- !ruby/object:Gem::Version
|
203
|
-
version:
|
198
|
+
version: 2.7.0
|
204
199
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
205
200
|
requirements:
|
206
201
|
- - ">="
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "responses/message_data_response"
|
4
|
-
require_relative "responses/phone_number_data_response"
|
5
|
-
require_relative "responses/phone_numbers_data_response"
|
6
|
-
require_relative "responses/read_message_data_response"
|
7
|
-
require_relative "responses/message_error_response"
|
8
|
-
require_relative "responses/business_profile_data_response"
|
9
|
-
|
10
|
-
module WhatsappSdk
|
11
|
-
module Api
|
12
|
-
class Response
|
13
|
-
attr_accessor :error, :data, :raw_response
|
14
|
-
|
15
|
-
def initialize(response:, data_class_type:, error_class_type: Responses::MessageErrorResponse)
|
16
|
-
@raw_response = response
|
17
|
-
@data = data_class_type.build_from_response(response: response)
|
18
|
-
@error = error_class_type.build_from_response(response: response)
|
19
|
-
end
|
20
|
-
|
21
|
-
# @return [Boolean] Whether or not the response is successful.
|
22
|
-
def ok?
|
23
|
-
@error.nil?
|
24
|
-
end
|
25
|
-
|
26
|
-
# @return [Boolean] Whether or not the response has an error.
|
27
|
-
def error?
|
28
|
-
!!@error
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative "data_response"
|
4
|
-
|
5
|
-
module WhatsappSdk
|
6
|
-
module Api
|
7
|
-
module Responses
|
8
|
-
class BusinessProfileDataResponse < DataResponse
|
9
|
-
attr_accessor :about, :address, :description, :email, :messaging_product,
|
10
|
-
:profile_picture_url, :vertical, :websites
|
11
|
-
|
12
|
-
def initialize(response)
|
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
|
-
|
22
|
-
super(response)
|
23
|
-
end
|
24
|
-
|
25
|
-
def self.build_from_response(response:)
|
26
|
-
return nil if response['error']
|
27
|
-
|
28
|
-
new(response)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|