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
@@ -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
|