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
|