cloud-waba-ruby-client 0.0.1
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 +7 -0
- data/.env.example +9 -0
- data/.gitignore +2 -0
- data/.rspec +2 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +70 -0
- data/README.md +176 -0
- data/bin/console +30 -0
- data/cloud-waba-ruby-client.gemspec +24 -0
- data/lib/api/messages/service.rb +217 -0
- data/lib/api/templates/service.rb +108 -0
- data/lib/cloud_waba/client.rb +62 -0
- data/lib/cloud_waba/http_client.rb +53 -0
- data/lib/cloud_waba/models/config.rb +16 -0
- data/lib/cloud_waba/models/contact.rb +10 -0
- data/lib/cloud_waba/models/enums/contact_phone_type.rb +17 -0
- data/lib/cloud_waba/models/enums/messaging_product.rb +13 -0
- data/lib/cloud_waba/models/enums/templates/button_type.rb +19 -0
- data/lib/cloud_waba/models/enums/templates/category.rb +19 -0
- data/lib/cloud_waba/models/enums/templates/component_type.rb +20 -0
- data/lib/cloud_waba/models/enums/templates/format.rb +19 -0
- data/lib/cloud_waba/models/messages/contact.rb +76 -0
- data/lib/cloud_waba/models/messages/contact_name.rb +29 -0
- data/lib/cloud_waba/models/messages/contact_phone.rb +28 -0
- data/lib/cloud_waba/models/messages/response.rb +40 -0
- data/lib/cloud_waba/models/templates/body_component.rb +22 -0
- data/lib/cloud_waba/models/templates/button.rb +18 -0
- data/lib/cloud_waba/models/templates/buttons/copy_code.rb +15 -0
- data/lib/cloud_waba/models/templates/buttons/otp.rb +19 -0
- data/lib/cloud_waba/models/templates/buttons/phone_number.rb +16 -0
- data/lib/cloud_waba/models/templates/buttons/quick_reply.rb +15 -0
- data/lib/cloud_waba/models/templates/buttons/url.rb +17 -0
- data/lib/cloud_waba/models/templates/buttons_component.rb +13 -0
- data/lib/cloud_waba/models/templates/component.rb +19 -0
- data/lib/cloud_waba/models/templates/example.rb +12 -0
- data/lib/cloud_waba/models/templates/footer_component.rb +20 -0
- data/lib/cloud_waba/models/templates/header_location_component.rb +19 -0
- data/lib/cloud_waba/models/templates/header_media_component.rb +22 -0
- data/lib/cloud_waba/models/templates/header_text_component.rb +23 -0
- data/lib/cloud_waba/models/templates/list.rb +16 -0
- data/lib/cloud_waba/models/templates/message_template.rb +14 -0
- data/lib/cloud_waba/models/templates/response.rb +34 -0
- data/lib/cloud_waba/utils.rb +42 -0
- data/spec/cloud_waba_spec.rb +4 -0
- data/spec/spec_helper.rb +10 -0
- metadata +190 -0
@@ -0,0 +1,62 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "sorbet-runtime"
|
5
|
+
|
6
|
+
# Enums
|
7
|
+
require_relative "models/enums/messaging_product"
|
8
|
+
require_relative "models/enums/templates/category"
|
9
|
+
require_relative "models/enums/templates/component_type"
|
10
|
+
require_relative "models/enums/templates/button_type"
|
11
|
+
require_relative "models/enums/templates/format"
|
12
|
+
require_relative "models/enums/contact_phone_type"
|
13
|
+
# Models
|
14
|
+
require_relative "models/config"
|
15
|
+
require_relative "models/contact"
|
16
|
+
require_relative "models/messages/response"
|
17
|
+
require_relative "models/messages/contact_name"
|
18
|
+
require_relative "models/messages/contact_phone"
|
19
|
+
require_relative "models/messages/contact"
|
20
|
+
|
21
|
+
require_relative "models/templates/example"
|
22
|
+
require_relative "models/templates/component"
|
23
|
+
require_relative "models/templates/header_text_component"
|
24
|
+
require_relative "models/templates/header_media_component"
|
25
|
+
require_relative "models/templates/header_location_component"
|
26
|
+
require_relative "models/templates/body_component"
|
27
|
+
require_relative "models/templates/footer_component"
|
28
|
+
require_relative "models/templates/button"
|
29
|
+
require_relative "models/templates/buttons/copy_code"
|
30
|
+
require_relative "models/templates/buttons/otp"
|
31
|
+
require_relative "models/templates/buttons/phone_number"
|
32
|
+
require_relative "models/templates/buttons/quick_reply"
|
33
|
+
require_relative "models/templates/buttons/url"
|
34
|
+
require_relative "models/templates/buttons_component"
|
35
|
+
require_relative "models/templates/message_template"
|
36
|
+
require_relative "models/templates/response"
|
37
|
+
require_relative "models/templates/list"
|
38
|
+
# Helpers
|
39
|
+
require_relative "utils"
|
40
|
+
require_relative "http_client"
|
41
|
+
# Services
|
42
|
+
require_relative "../api/messages/service"
|
43
|
+
require_relative "../api/templates/service"
|
44
|
+
|
45
|
+
module CloudWaba
|
46
|
+
class Client
|
47
|
+
extend ::T::Sig
|
48
|
+
extend ::T::Helpers
|
49
|
+
|
50
|
+
def initialize
|
51
|
+
@config = ::CloudWaba::Utils.import_config
|
52
|
+
end
|
53
|
+
|
54
|
+
def messages
|
55
|
+
::API::Messages::Service.new(config: @config)
|
56
|
+
end
|
57
|
+
|
58
|
+
def templates
|
59
|
+
::API::Templates::Service.new(config: @config)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "http"
|
5
|
+
|
6
|
+
module CloudWaba
|
7
|
+
class HttpClient
|
8
|
+
attr_accessor :base_url
|
9
|
+
attr_accessor :auth_token
|
10
|
+
|
11
|
+
def initialize(base_url:, auth_token:)
|
12
|
+
@base_url = base_url
|
13
|
+
@auth_token = auth_token
|
14
|
+
end
|
15
|
+
|
16
|
+
def get(headers: {}, params: {})
|
17
|
+
client = http_client.headers(headers)
|
18
|
+
client = client.auth("Bearer #{@auth_token}") unless @auth_token.nil?
|
19
|
+
response = client.get(@base_url, ssl_context: ssl_ctx, params: params)
|
20
|
+
end
|
21
|
+
|
22
|
+
def post(headers: {}, body:)
|
23
|
+
client = http_client.headers(headers)
|
24
|
+
client = client.auth("Bearer #{@auth_token}") unless @auth_token.nil?
|
25
|
+
response = client.post(@base_url, ssl_context: ssl_ctx, json: body)
|
26
|
+
end
|
27
|
+
|
28
|
+
def put(headers: {}, body:)
|
29
|
+
client = http_client.headers(headers)
|
30
|
+
client = client.auth("Bearer #{@auth_token}") unless @auth_token.nil?
|
31
|
+
response = client.put(@base_url, ssl_context: ssl_ctx, json: body.to_json)
|
32
|
+
end
|
33
|
+
|
34
|
+
def delete(headers:{}, params:{})
|
35
|
+
client = http_client.headers(headers)
|
36
|
+
client = client.auth("Bearer #{@auth_token}") unless @auth_token.nil?
|
37
|
+
response = client.delete(@base_url, ssl_context: ssl_ctx, params: params)
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def http_client
|
43
|
+
HTTP.follow(max_hops: 3)
|
44
|
+
end
|
45
|
+
|
46
|
+
def ssl_ctx
|
47
|
+
ctx = OpenSSL::SSL::SSLContext.new
|
48
|
+
ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
49
|
+
|
50
|
+
ctx
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
class Config < T::Struct
|
7
|
+
prop :base_url, ::String
|
8
|
+
prop :app_id, ::String
|
9
|
+
prop :app_secret, ::String
|
10
|
+
prop :phone_number_id, ::String
|
11
|
+
prop :business_account_id, ::String
|
12
|
+
prop :access_token, ::String
|
13
|
+
prop :api_version, ::String
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
module CloudWaba
|
4
|
+
module Models
|
5
|
+
module Enums
|
6
|
+
class ContactPhoneType < T::Enum
|
7
|
+
enums do
|
8
|
+
Main = new("MAIN")
|
9
|
+
Cell = new("CELL")
|
10
|
+
Iphone = new("IPHONE")
|
11
|
+
Home = new("HOME")
|
12
|
+
Work = new("WORK")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
module CloudWaba
|
4
|
+
module Models
|
5
|
+
module Enums
|
6
|
+
module Templates
|
7
|
+
class ButtonType < T::Enum
|
8
|
+
enums do
|
9
|
+
CopyCode = new("COPY_CODE")
|
10
|
+
Otp = new("OTP")
|
11
|
+
PhoneNumber = new("PHONE_NUMBER")
|
12
|
+
QuickReply = new("QUICK_REPLY")
|
13
|
+
Url = new("URL")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Enums
|
7
|
+
module Templates
|
8
|
+
class Category < T::Enum
|
9
|
+
enums do
|
10
|
+
Authentication = new("AUTHENTICATION")
|
11
|
+
Marketing = new("MARKETING")
|
12
|
+
Utility = new("UTILITY")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
module CloudWaba
|
4
|
+
module Models
|
5
|
+
module Enums
|
6
|
+
module Templates
|
7
|
+
class ComponentType < T::Enum
|
8
|
+
enums do
|
9
|
+
Header = new("HEADER")
|
10
|
+
Body = new("BODY")
|
11
|
+
Footer = new("FOOTER")
|
12
|
+
Buttons = new("BUTTONS")
|
13
|
+
Carousel = new("CAROUSEL")
|
14
|
+
LimitedTimeOffer = new("LIMITED_TIME_OFFER")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Enums
|
7
|
+
module Templates
|
8
|
+
class Format < T::Enum
|
9
|
+
enums do
|
10
|
+
Image = new("IMAGE")
|
11
|
+
Video = new("VIDEO")
|
12
|
+
Document = new("DOCUMENT")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Messages
|
7
|
+
class Contact < T::Struct
|
8
|
+
extend ::T::Sig
|
9
|
+
extend ::T::Helpers
|
10
|
+
|
11
|
+
# {
|
12
|
+
# "addresses": [{
|
13
|
+
# "street": "STREET",
|
14
|
+
# "city": "CITY",
|
15
|
+
# "state": "STATE",
|
16
|
+
# "zip": "ZIP",
|
17
|
+
# "country": "COUNTRY",
|
18
|
+
# "country_code": "COUNTRY_CODE",
|
19
|
+
# "type": "HOME"
|
20
|
+
# },
|
21
|
+
# {
|
22
|
+
# "street": "STREET",
|
23
|
+
# "city": "CITY",
|
24
|
+
# "state": "STATE",
|
25
|
+
# "zip": "ZIP",
|
26
|
+
# "country": "COUNTRY",
|
27
|
+
# "country_code": "COUNTRY_CODE",
|
28
|
+
# "type": "WORK"
|
29
|
+
# }],
|
30
|
+
# "birthday": "YEAR_MONTH_DAY",
|
31
|
+
# "emails": [{
|
32
|
+
# "email": "EMAIL",
|
33
|
+
# "type": "WORK"
|
34
|
+
# },
|
35
|
+
# {
|
36
|
+
# "email": "EMAIL",
|
37
|
+
# "type": "HOME"
|
38
|
+
# }],
|
39
|
+
# "name": {
|
40
|
+
# "formatted_name": "NAME",
|
41
|
+
# "first_name": "FIRST_NAME",
|
42
|
+
# "last_name": "LAST_NAME",
|
43
|
+
# "middle_name": "MIDDLE_NAME",
|
44
|
+
# "suffix": "SUFFIX",
|
45
|
+
# "prefix": "PREFIX"
|
46
|
+
# },
|
47
|
+
# "org": {
|
48
|
+
# "company": "COMPANY",
|
49
|
+
# "department": "DEPARTMENT",
|
50
|
+
# "title": "TITLE"
|
51
|
+
# },
|
52
|
+
# "phones": [{
|
53
|
+
# "phone": "PHONE_NUMBER",
|
54
|
+
# "type": "HOME"
|
55
|
+
# },
|
56
|
+
# {
|
57
|
+
# "phone": "PHONE_NUMBER",
|
58
|
+
# "type": "WORK",
|
59
|
+
# "wa_id": "PHONE_OR_WA_ID"
|
60
|
+
# }],
|
61
|
+
# "urls": [{
|
62
|
+
# "url": "URL",
|
63
|
+
# "type": "WORK"
|
64
|
+
# },
|
65
|
+
# {
|
66
|
+
# "url": "URL",
|
67
|
+
# "type": "HOME"
|
68
|
+
# }]
|
69
|
+
# }
|
70
|
+
|
71
|
+
prop :name, ::CloudWaba::Models::Messages::ContactName
|
72
|
+
prop :phones, ::T.nilable(::T::Array[::CloudWaba::Models::Messages::ContactPhone])
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Messages
|
7
|
+
class ContactName < T::Struct
|
8
|
+
extend ::T::Sig
|
9
|
+
extend ::T::Helpers
|
10
|
+
|
11
|
+
# "name": {
|
12
|
+
# "formatted_name": "NAME",
|
13
|
+
# "first_name": "FIRST_NAME",
|
14
|
+
# "last_name": "LAST_NAME",
|
15
|
+
# "middle_name": "MIDDLE_NAME",
|
16
|
+
# "suffix": "SUFFIX",
|
17
|
+
# "prefix": "PREFIX"
|
18
|
+
# }
|
19
|
+
|
20
|
+
prop :formatted_name, ::String
|
21
|
+
prop :first_name, ::T.nilable(::String)
|
22
|
+
prop :last_name, ::T.nilable(::String)
|
23
|
+
prop :middle_name, ::T.nilable(::String)
|
24
|
+
prop :suffix, ::T.nilable(::String)
|
25
|
+
prop :prefix, ::T.nilable(::String)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Messages
|
7
|
+
class ContactPhone < T::Struct
|
8
|
+
extend ::T::Sig
|
9
|
+
extend ::T::Helpers
|
10
|
+
|
11
|
+
# {
|
12
|
+
# "phone": "PHONE_NUMBER",
|
13
|
+
# "type": "HOME"
|
14
|
+
# }
|
15
|
+
#
|
16
|
+
# {
|
17
|
+
# "phone": "PHONE_NUMBER",
|
18
|
+
# "type": "WORK",
|
19
|
+
# "wa_id": "PHONE_OR_WA_ID"
|
20
|
+
# }
|
21
|
+
|
22
|
+
prop :phone, ::String
|
23
|
+
prop :type, ::CloudWaba::Models::Enums::ContactPhoneType
|
24
|
+
prop :wa_id, ::T.nilable(::String)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
# require 'pry'
|
5
|
+
|
6
|
+
module CloudWaba
|
7
|
+
module Models
|
8
|
+
module Messages
|
9
|
+
class Response < T::Struct
|
10
|
+
extend ::T::Sig
|
11
|
+
extend ::T::Helpers
|
12
|
+
##
|
13
|
+
# {
|
14
|
+
# "messaging_product"=>"whatsapp",
|
15
|
+
# "contacts"=>[
|
16
|
+
# {"input"=>"+201111111111", "wa_id"=>"202222222222"}
|
17
|
+
# ],
|
18
|
+
# "messages"=>[
|
19
|
+
# {"id"=>"wamid.HBgMMjUIzSNRIREAMOjAFQzxRjygADgAMAD1FQExzzIQMMjzM2UMxZ=="}
|
20
|
+
# ]
|
21
|
+
# }
|
22
|
+
prop :messaging_product, ::CloudWaba::Models::Enums::MessagingProduct
|
23
|
+
prop :contacts, ::T::Array[::CloudWaba::Models::Contact]
|
24
|
+
prop :message_id, ::String
|
25
|
+
|
26
|
+
sig { params(hash: ::T::Hash[::T.untyped, ::T.untyped]).returns(::CloudWaba::Models::Messages::Response) }
|
27
|
+
def self.parse(hash:)
|
28
|
+
contact_wa_id = hash["contacts"][0]["wa_id"]
|
29
|
+
message_id = hash["messages"][0]["id"]
|
30
|
+
|
31
|
+
self.new(
|
32
|
+
messaging_product: ::CloudWaba::Models::Enums::MessagingProduct::WhatsApp,
|
33
|
+
contacts: [::CloudWaba::Models::Contact.new(wa_id: contact_wa_id)],
|
34
|
+
message_id: message_id
|
35
|
+
)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Templates
|
7
|
+
class BodyComponent < T::Struct
|
8
|
+
prop :type, ::CloudWaba::Models::Enums::Templates::ComponentType, default: ::CloudWaba::Models::Enums::Templates::ComponentType::Body
|
9
|
+
prop :text, ::String
|
10
|
+
prop :example, ::T.nilable(::CloudWaba::Models::Templates::Example)
|
11
|
+
|
12
|
+
def serialize
|
13
|
+
{
|
14
|
+
type: type.serialize,
|
15
|
+
text: text,
|
16
|
+
example: { body_text: [ example.values ] }
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Templates
|
7
|
+
Button = T.type_alias do
|
8
|
+
T.any(
|
9
|
+
::CloudWaba::Models::Templates::Buttons::CopyCode,
|
10
|
+
::CloudWaba::Models::Templates::Buttons::Otp,
|
11
|
+
::CloudWaba::Models::Templates::Buttons::PhoneNumber,
|
12
|
+
::CloudWaba::Models::Templates::Buttons::QuickReply,
|
13
|
+
::CloudWaba::Models::Templates::Buttons::Url,
|
14
|
+
)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Templates
|
7
|
+
module Buttons
|
8
|
+
class CopyCode < T::Struct
|
9
|
+
prop :type, ::CloudWaba::Models::Enums::Templates::ButtonType, default: ::CloudWaba::Models::Enums::Templates::ButtonType::CopyCode
|
10
|
+
prop :example, ::String
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Templates
|
7
|
+
module Buttons
|
8
|
+
class Otp < T::Struct
|
9
|
+
prop :type, ::CloudWaba::Models::Enums::Templates::ButtonType, default: ::CloudWaba::Models::Enums::Templates::ButtonType::Otp
|
10
|
+
prop :otp_type, ::String
|
11
|
+
prop :text, ::String
|
12
|
+
prop :autofill_text, ::String
|
13
|
+
prop :package_name, ::String
|
14
|
+
prop :signature_hash, ::String
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Templates
|
7
|
+
module Buttons
|
8
|
+
class PhoneNumber < T::Struct
|
9
|
+
prop :type, ::CloudWaba::Models::Enums::Templates::ButtonType, default: ::CloudWaba::Models::Enums::Templates::ButtonType::PhoneNumber
|
10
|
+
prop :text, ::String
|
11
|
+
prop :phone_number, ::String
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Templates
|
7
|
+
module Buttons
|
8
|
+
class QuickReply < T::Struct
|
9
|
+
prop :type, ::CloudWaba::Models::Enums::Templates::ButtonType, default: ::CloudWaba::Models::Enums::Templates::ButtonType::QuickReply
|
10
|
+
prop :text, ::String
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Templates
|
7
|
+
module Buttons
|
8
|
+
class Url < T::Struct
|
9
|
+
prop :type, ::CloudWaba::Models::Enums::Templates::ButtonType, default: ::CloudWaba::Models::Enums::Templates::ButtonType::Url
|
10
|
+
prop :text, ::String
|
11
|
+
prop :url, ::String
|
12
|
+
prop :example, ::T.nilable(::T::Array[::String])
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Templates
|
7
|
+
class ButtonsComponent < T::Struct
|
8
|
+
prop :type, ::CloudWaba::Models::Enums::Templates::ComponentType, default: ::CloudWaba::Models::Enums::Templates::ComponentType::Buttons
|
9
|
+
prop :buttons, ::T::Array[::CloudWaba::Models::Templates::Button]
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Templates
|
7
|
+
Component = T.type_alias do
|
8
|
+
T.any(
|
9
|
+
::CloudWaba::Models::Templates::HeaderTextComponent,
|
10
|
+
::CloudWaba::Models::Templates::HeaderMediaComponent,
|
11
|
+
::CloudWaba::Models::Templates::HeaderLocationComponent,
|
12
|
+
::CloudWaba::Models::Templates::BodyComponent,
|
13
|
+
::CloudWaba::Models::Templates::FooterComponent,
|
14
|
+
::CloudWaba::Models::Templates::ButtonsComponent,
|
15
|
+
)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Templates
|
7
|
+
class FooterComponent < T::Struct
|
8
|
+
prop :type, ::CloudWaba::Models::Enums::Templates::ComponentType, default: ::CloudWaba::Models::Enums::Templates::ComponentType::Footer
|
9
|
+
prop :text, ::String
|
10
|
+
|
11
|
+
def serialize
|
12
|
+
{
|
13
|
+
type: type.serialize,
|
14
|
+
text: text
|
15
|
+
}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Templates
|
7
|
+
class HeaderLocationComponent < T::Struct
|
8
|
+
prop :type, ::CloudWaba::Models::Enums::Templates::ComponentType, default: ::CloudWaba::Models::Enums::Templates::ComponentType::Header
|
9
|
+
|
10
|
+
def serialize
|
11
|
+
{
|
12
|
+
type: type.serialize,
|
13
|
+
format: "LOCATION"
|
14
|
+
}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module CloudWaba
|
5
|
+
module Models
|
6
|
+
module Templates
|
7
|
+
class HeaderMediaComponent < T::Struct
|
8
|
+
prop :type, ::CloudWaba::Models::Enums::Templates::ComponentType, default: ::CloudWaba::Models::Enums::Templates::ComponentType::Header
|
9
|
+
prop :format, ::CloudWaba::Models::Enums::Templates::Format
|
10
|
+
prop :example, ::CloudWaba::Models::Templates::Example
|
11
|
+
|
12
|
+
def serialize
|
13
|
+
{
|
14
|
+
type: type.serialize,
|
15
|
+
format: format.serialize,
|
16
|
+
example: { header_handle: [ example.values ] }
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|