prelude-sdk 0.1.0.pre.alpha.3 → 0.1.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.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +45 -0
  3. data/README.md +29 -1
  4. data/lib/prelude_sdk/client.rb +4 -0
  5. data/lib/prelude_sdk/errors.rb +25 -11
  6. data/lib/prelude_sdk/file_part.rb +10 -7
  7. data/lib/prelude_sdk/internal/transport/base_client.rb +18 -8
  8. data/lib/prelude_sdk/internal/transport/pooled_net_requester.rb +40 -33
  9. data/lib/prelude_sdk/internal/type/base_page.rb +1 -1
  10. data/lib/prelude_sdk/internal/type/file_input.rb +7 -4
  11. data/lib/prelude_sdk/internal/util.rb +8 -7
  12. data/lib/prelude_sdk/models/transactional_send_params.rb +37 -1
  13. data/lib/prelude_sdk/models/verification_create_params.rb +45 -5
  14. data/lib/prelude_sdk/models/verification_create_response.rb +26 -0
  15. data/lib/prelude_sdk/models/verification_management_delete_phone_number_params.rb +32 -0
  16. data/lib/prelude_sdk/models/verification_management_delete_phone_number_response.rb +17 -0
  17. data/lib/prelude_sdk/models/verification_management_list_phone_numbers_params.rb +24 -0
  18. data/lib/prelude_sdk/models/verification_management_list_phone_numbers_response.rb +37 -0
  19. data/lib/prelude_sdk/models/verification_management_list_sender_ids_params.rb +14 -0
  20. data/lib/prelude_sdk/models/verification_management_list_sender_ids_response.rb +65 -0
  21. data/lib/prelude_sdk/models/verification_management_set_phone_number_params.rb +32 -0
  22. data/lib/prelude_sdk/models/verification_management_set_phone_number_response.rb +17 -0
  23. data/lib/prelude_sdk/models/verification_management_submit_sender_id_params.rb +22 -0
  24. data/lib/prelude_sdk/models/verification_management_submit_sender_id_response.rb +59 -0
  25. data/lib/prelude_sdk/models/watch_predict_params.rb +11 -1
  26. data/lib/prelude_sdk/models/watch_send_feedbacks_params.rb +11 -1
  27. data/lib/prelude_sdk/models.rb +14 -0
  28. data/lib/prelude_sdk/resources/transactional.rb +7 -2
  29. data/lib/prelude_sdk/resources/verification_management.rb +140 -0
  30. data/lib/prelude_sdk/version.rb +1 -1
  31. data/lib/prelude_sdk.rb +12 -0
  32. data/manifest.yaml +1 -0
  33. data/rbi/prelude_sdk/client.rbi +3 -0
  34. data/rbi/prelude_sdk/errors.rbi +29 -2
  35. data/rbi/prelude_sdk/file_part.rbi +1 -1
  36. data/rbi/prelude_sdk/internal/transport/base_client.rbi +9 -5
  37. data/rbi/prelude_sdk/internal/transport/pooled_net_requester.rbi +6 -2
  38. data/rbi/prelude_sdk/internal/type/base_model.rbi +8 -4
  39. data/rbi/prelude_sdk/internal/type/base_page.rbi +1 -1
  40. data/rbi/prelude_sdk/internal/util.rbi +1 -1
  41. data/rbi/prelude_sdk/models/transactional_send_params.rbi +85 -0
  42. data/rbi/prelude_sdk/models/verification_create_params.rbi +97 -5
  43. data/rbi/prelude_sdk/models/verification_create_response.rbi +39 -0
  44. data/rbi/prelude_sdk/models/verification_management_delete_phone_number_params.rbi +77 -0
  45. data/rbi/prelude_sdk/models/verification_management_delete_phone_number_response.rbi +30 -0
  46. data/rbi/prelude_sdk/models/verification_management_list_phone_numbers_params.rbi +64 -0
  47. data/rbi/prelude_sdk/models/verification_management_list_phone_numbers_response.rbi +87 -0
  48. data/rbi/prelude_sdk/models/verification_management_list_sender_ids_params.rbi +30 -0
  49. data/rbi/prelude_sdk/models/verification_management_list_sender_ids_response.rbi +175 -0
  50. data/rbi/prelude_sdk/models/verification_management_set_phone_number_params.rbi +77 -0
  51. data/rbi/prelude_sdk/models/verification_management_set_phone_number_response.rbi +30 -0
  52. data/rbi/prelude_sdk/models/verification_management_submit_sender_id_params.rbi +43 -0
  53. data/rbi/prelude_sdk/models/verification_management_submit_sender_id_response.rbi +117 -0
  54. data/rbi/prelude_sdk/models/watch_predict_params.rbi +15 -0
  55. data/rbi/prelude_sdk/models/watch_send_feedbacks_params.rbi +15 -0
  56. data/rbi/prelude_sdk/models.rbi +15 -0
  57. data/rbi/prelude_sdk/resources/transactional.rbi +14 -1
  58. data/rbi/prelude_sdk/resources/verification_management.rbi +112 -0
  59. data/sig/prelude_sdk/client.rbs +2 -0
  60. data/sig/prelude_sdk/errors.rbs +7 -0
  61. data/sig/prelude_sdk/file_part.rbs +1 -1
  62. data/sig/prelude_sdk/internal/transport/base_client.rbs +2 -0
  63. data/sig/prelude_sdk/internal/transport/pooled_net_requester.rbs +4 -1
  64. data/sig/prelude_sdk/models/transactional_send_params.rbs +21 -0
  65. data/sig/prelude_sdk/models/verification_create_params.rbs +29 -1
  66. data/sig/prelude_sdk/models/verification_management_delete_phone_number_params.rbs +34 -0
  67. data/sig/prelude_sdk/models/verification_management_delete_phone_number_response.rbs +14 -0
  68. data/sig/prelude_sdk/models/verification_management_list_phone_numbers_params.rbs +26 -0
  69. data/sig/prelude_sdk/models/verification_management_list_phone_numbers_response.rbs +32 -0
  70. data/sig/prelude_sdk/models/verification_management_list_sender_ids_params.rbs +15 -0
  71. data/sig/prelude_sdk/models/verification_management_list_sender_ids_response.rbs +64 -0
  72. data/sig/prelude_sdk/models/verification_management_set_phone_number_params.rbs +34 -0
  73. data/sig/prelude_sdk/models/verification_management_set_phone_number_response.rbs +14 -0
  74. data/sig/prelude_sdk/models/verification_management_submit_sender_id_params.rbs +23 -0
  75. data/sig/prelude_sdk/models/verification_management_submit_sender_id_response.rbs +44 -0
  76. data/sig/prelude_sdk/models/watch_predict_params.rbs +7 -0
  77. data/sig/prelude_sdk/models/watch_send_feedbacks_params.rbs +7 -0
  78. data/sig/prelude_sdk/models.rbs +10 -0
  79. data/sig/prelude_sdk/resources/transactional.rbs +1 -0
  80. data/sig/prelude_sdk/resources/verification_management.rbs +33 -0
  81. metadata +37 -4
@@ -0,0 +1,140 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PreludeSDK
4
+ module Resources
5
+ class VerificationManagement
6
+ # Remove a phone number from the allow or block list.
7
+ #
8
+ # This operation is idempotent - re-deleting the same phone number will not result
9
+ # in errors. If the phone number does not exist in the specified list, the
10
+ # operation will succeed without making any changes.
11
+ #
12
+ # In order to get access to this endpoint, contact our support team.
13
+ #
14
+ # @overload delete_phone_number(action, phone_number:, request_options: {})
15
+ #
16
+ # @param action [Symbol, PreludeSDK::Models::VerificationManagementDeletePhoneNumberParams::Action] The action type - either "allow" or "block"
17
+ #
18
+ # @param phone_number [String] An E.164 formatted phone number to remove from the list.
19
+ #
20
+ # @param request_options [PreludeSDK::RequestOptions, Hash{Symbol=>Object}, nil]
21
+ #
22
+ # @return [PreludeSDK::Models::VerificationManagementDeletePhoneNumberResponse]
23
+ #
24
+ # @see PreludeSDK::Models::VerificationManagementDeletePhoneNumberParams
25
+ def delete_phone_number(action, params)
26
+ parsed, options = PreludeSDK::VerificationManagementDeletePhoneNumberParams.dump_request(params)
27
+ @client.request(
28
+ method: :delete,
29
+ path: ["v2/verification/management/phone-numbers/%1$s", action],
30
+ body: parsed,
31
+ model: PreludeSDK::Models::VerificationManagementDeletePhoneNumberResponse,
32
+ options: options
33
+ )
34
+ end
35
+
36
+ # Retrieve the list of phone numbers in the allow or block list.
37
+ #
38
+ # In order to get access to this endpoint, contact our support team.
39
+ #
40
+ # @overload list_phone_numbers(action, request_options: {})
41
+ #
42
+ # @param action [Symbol, PreludeSDK::Models::VerificationManagementListPhoneNumbersParams::Action] The action type - either "allow" or "block"
43
+ #
44
+ # @param request_options [PreludeSDK::RequestOptions, Hash{Symbol=>Object}, nil]
45
+ #
46
+ # @return [PreludeSDK::Models::VerificationManagementListPhoneNumbersResponse]
47
+ #
48
+ # @see PreludeSDK::Models::VerificationManagementListPhoneNumbersParams
49
+ def list_phone_numbers(action, params = {})
50
+ @client.request(
51
+ method: :get,
52
+ path: ["v2/verification/management/phone-numbers/%1$s", action],
53
+ model: PreludeSDK::Models::VerificationManagementListPhoneNumbersResponse,
54
+ options: params[:request_options]
55
+ )
56
+ end
57
+
58
+ # Retrieve sender IDs list.
59
+ #
60
+ # In order to get access to this endpoint, contact our support team.
61
+ #
62
+ # @overload list_sender_ids(request_options: {})
63
+ #
64
+ # @param request_options [PreludeSDK::RequestOptions, Hash{Symbol=>Object}, nil]
65
+ #
66
+ # @return [PreludeSDK::Models::VerificationManagementListSenderIDsResponse]
67
+ #
68
+ # @see PreludeSDK::Models::VerificationManagementListSenderIDsParams
69
+ def list_sender_ids(params = {})
70
+ @client.request(
71
+ method: :get,
72
+ path: "v2/verification/management/sender-id",
73
+ model: PreludeSDK::Models::VerificationManagementListSenderIDsResponse,
74
+ options: params[:request_options]
75
+ )
76
+ end
77
+
78
+ # Add a phone number to the allow or block list.
79
+ #
80
+ # This operation is idempotent - re-adding the same phone number will not result
81
+ # in duplicate entries or errors. If the phone number already exists in the
82
+ # specified list, the operation will succeed without making any changes.
83
+ #
84
+ # In order to get access to this endpoint, contact our support team.
85
+ #
86
+ # @overload set_phone_number(action, phone_number:, request_options: {})
87
+ #
88
+ # @param action [Symbol, PreludeSDK::Models::VerificationManagementSetPhoneNumberParams::Action] The action type - either "allow" or "block"
89
+ #
90
+ # @param phone_number [String] An E.164 formatted phone number to add to the list.
91
+ #
92
+ # @param request_options [PreludeSDK::RequestOptions, Hash{Symbol=>Object}, nil]
93
+ #
94
+ # @return [PreludeSDK::Models::VerificationManagementSetPhoneNumberResponse]
95
+ #
96
+ # @see PreludeSDK::Models::VerificationManagementSetPhoneNumberParams
97
+ def set_phone_number(action, params)
98
+ parsed, options = PreludeSDK::VerificationManagementSetPhoneNumberParams.dump_request(params)
99
+ @client.request(
100
+ method: :post,
101
+ path: ["v2/verification/management/phone-numbers/%1$s", action],
102
+ body: parsed,
103
+ model: PreludeSDK::Models::VerificationManagementSetPhoneNumberResponse,
104
+ options: options
105
+ )
106
+ end
107
+
108
+ # This endpoint allows you to submit a new sender ID for verification purposes.
109
+ #
110
+ # In order to get access to this endpoint, contact our support team.
111
+ #
112
+ # @overload submit_sender_id(sender_id:, request_options: {})
113
+ #
114
+ # @param sender_id [String] The sender ID to add.
115
+ #
116
+ # @param request_options [PreludeSDK::RequestOptions, Hash{Symbol=>Object}, nil]
117
+ #
118
+ # @return [PreludeSDK::Models::VerificationManagementSubmitSenderIDResponse]
119
+ #
120
+ # @see PreludeSDK::Models::VerificationManagementSubmitSenderIDParams
121
+ def submit_sender_id(params)
122
+ parsed, options = PreludeSDK::VerificationManagementSubmitSenderIDParams.dump_request(params)
123
+ @client.request(
124
+ method: :post,
125
+ path: "v2/verification/management/sender-id",
126
+ body: parsed,
127
+ model: PreludeSDK::Models::VerificationManagementSubmitSenderIDResponse,
128
+ options: options
129
+ )
130
+ end
131
+
132
+ # @api private
133
+ #
134
+ # @param client [PreludeSDK::Client]
135
+ def initialize(client:)
136
+ @client = client
137
+ end
138
+ end
139
+ end
140
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PreludeSDK
4
- VERSION = "0.1.0.pre.alpha.3"
4
+ VERSION = "0.1.0"
5
5
  end
data/lib/prelude_sdk.rb CHANGED
@@ -9,6 +9,7 @@ require "erb"
9
9
  require "etc"
10
10
  require "json"
11
11
  require "net/http"
12
+ require "openssl"
12
13
  require "pathname"
13
14
  require "rbconfig"
14
15
  require "securerandom"
@@ -58,6 +59,16 @@ require_relative "prelude_sdk/models/verification_check_params"
58
59
  require_relative "prelude_sdk/models/verification_check_response"
59
60
  require_relative "prelude_sdk/models/verification_create_params"
60
61
  require_relative "prelude_sdk/models/verification_create_response"
62
+ require_relative "prelude_sdk/models/verification_management_delete_phone_number_params"
63
+ require_relative "prelude_sdk/models/verification_management_delete_phone_number_response"
64
+ require_relative "prelude_sdk/models/verification_management_list_phone_numbers_params"
65
+ require_relative "prelude_sdk/models/verification_management_list_phone_numbers_response"
66
+ require_relative "prelude_sdk/models/verification_management_list_sender_ids_params"
67
+ require_relative "prelude_sdk/models/verification_management_list_sender_ids_response"
68
+ require_relative "prelude_sdk/models/verification_management_set_phone_number_params"
69
+ require_relative "prelude_sdk/models/verification_management_set_phone_number_response"
70
+ require_relative "prelude_sdk/models/verification_management_submit_sender_id_params"
71
+ require_relative "prelude_sdk/models/verification_management_submit_sender_id_response"
61
72
  require_relative "prelude_sdk/models/watch_predict_params"
62
73
  require_relative "prelude_sdk/models/watch_predict_response"
63
74
  require_relative "prelude_sdk/models/watch_send_events_params"
@@ -68,4 +79,5 @@ require_relative "prelude_sdk/models"
68
79
  require_relative "prelude_sdk/resources/lookup"
69
80
  require_relative "prelude_sdk/resources/transactional"
70
81
  require_relative "prelude_sdk/resources/verification"
82
+ require_relative "prelude_sdk/resources/verification_management"
71
83
  require_relative "prelude_sdk/resources/watch"
data/manifest.yaml CHANGED
@@ -6,6 +6,7 @@ dependencies:
6
6
  - etc
7
7
  - json
8
8
  - net/http
9
+ - openssl
9
10
  - pathname
10
11
  - rbconfig
11
12
  - securerandom
@@ -23,6 +23,9 @@ module PreludeSDK
23
23
  sig { returns(PreludeSDK::Resources::Verification) }
24
24
  attr_reader :verification
25
25
 
26
+ sig { returns(PreludeSDK::Resources::VerificationManagement) }
27
+ attr_reader :verification_management
28
+
26
29
  sig { returns(PreludeSDK::Resources::Watch) }
27
30
  attr_reader :watch
28
31
 
@@ -33,6 +33,9 @@ module PreludeSDK
33
33
  sig { returns(T.nilable(Integer)) }
34
34
  attr_accessor :status
35
35
 
36
+ sig { returns(T.nilable(T::Hash[String, String])) }
37
+ attr_accessor :headers
38
+
36
39
  sig { returns(T.nilable(T.anything)) }
37
40
  attr_accessor :body
38
41
 
@@ -41,6 +44,7 @@ module PreludeSDK
41
44
  params(
42
45
  url: URI::Generic,
43
46
  status: T.nilable(Integer),
47
+ headers: T.nilable(T::Hash[String, String]),
44
48
  body: T.nilable(Object),
45
49
  request: NilClass,
46
50
  response: NilClass,
@@ -50,6 +54,7 @@ module PreludeSDK
50
54
  def self.new(
51
55
  url:,
52
56
  status: nil,
57
+ headers: nil,
53
58
  body: nil,
54
59
  request: nil,
55
60
  response: nil,
@@ -70,6 +75,7 @@ module PreludeSDK
70
75
  params(
71
76
  url: URI::Generic,
72
77
  status: NilClass,
78
+ headers: T.nilable(T::Hash[String, String]),
73
79
  body: NilClass,
74
80
  request: NilClass,
75
81
  response: NilClass,
@@ -79,6 +85,7 @@ module PreludeSDK
79
85
  def self.new(
80
86
  url:,
81
87
  status: nil,
88
+ headers: nil,
82
89
  body: nil,
83
90
  request: nil,
84
91
  response: nil,
@@ -93,6 +100,7 @@ module PreludeSDK
93
100
  params(
94
101
  url: URI::Generic,
95
102
  status: NilClass,
103
+ headers: T.nilable(T::Hash[String, String]),
96
104
  body: NilClass,
97
105
  request: NilClass,
98
106
  response: NilClass,
@@ -102,6 +110,7 @@ module PreludeSDK
102
110
  def self.new(
103
111
  url:,
104
112
  status: nil,
113
+ headers: nil,
105
114
  body: nil,
106
115
  request: nil,
107
116
  response: nil,
@@ -116,13 +125,22 @@ module PreludeSDK
116
125
  params(
117
126
  url: URI::Generic,
118
127
  status: Integer,
128
+ headers: T.nilable(T::Hash[String, String]),
119
129
  body: T.nilable(Object),
120
130
  request: NilClass,
121
131
  response: NilClass,
122
132
  message: T.nilable(String)
123
133
  ).returns(T.attached_class)
124
134
  end
125
- def self.for(url:, status:, body:, request:, response:, message: nil)
135
+ def self.for(
136
+ url:,
137
+ status:,
138
+ headers:,
139
+ body:,
140
+ request:,
141
+ response:,
142
+ message: nil
143
+ )
126
144
  end
127
145
 
128
146
  sig { returns(Integer) }
@@ -133,13 +151,22 @@ module PreludeSDK
133
151
  params(
134
152
  url: URI::Generic,
135
153
  status: Integer,
154
+ headers: T.nilable(T::Hash[String, String]),
136
155
  body: T.nilable(Object),
137
156
  request: NilClass,
138
157
  response: NilClass,
139
158
  message: T.nilable(String)
140
159
  ).returns(T.attached_class)
141
160
  end
142
- def self.new(url:, status:, body:, request:, response:, message: nil)
161
+ def self.new(
162
+ url:,
163
+ status:,
164
+ headers:,
165
+ body:,
166
+ request:,
167
+ response:,
168
+ message: nil
169
+ )
143
170
  end
144
171
  end
145
172
 
@@ -27,7 +27,7 @@ module PreludeSDK
27
27
  sig do
28
28
  params(
29
29
  content: T.any(Pathname, StringIO, IO, String),
30
- filename: T.nilable(String),
30
+ filename: T.nilable(T.any(Pathname, String)),
31
31
  content_type: T.nilable(String)
32
32
  ).returns(T.attached_class)
33
33
  end
@@ -85,10 +85,9 @@ module PreludeSDK
85
85
 
86
86
  # @api private
87
87
  sig do
88
- params(
89
- status: Integer,
90
- headers: T.any(T::Hash[String, String], Net::HTTPHeader)
91
- ).returns(T::Boolean)
88
+ params(status: Integer, headers: T::Hash[String, String]).returns(
89
+ T::Boolean
90
+ )
92
91
  end
93
92
  def should_retry?(status, headers:)
94
93
  end
@@ -99,7 +98,7 @@ module PreludeSDK
99
98
  request:
100
99
  PreludeSDK::Internal::Transport::BaseClient::RequestInput,
101
100
  status: Integer,
102
- response_headers: T.any(T::Hash[String, String], Net::HTTPHeader)
101
+ response_headers: T::Hash[String, String]
103
102
  ).returns(PreludeSDK::Internal::Transport::BaseClient::RequestInput)
104
103
  end
105
104
  def follow_redirect(request, status:, response_headers:)
@@ -179,6 +178,11 @@ module PreludeSDK
179
178
  private def auth_headers
180
179
  end
181
180
 
181
+ # @api private
182
+ sig { returns(String) }
183
+ private def user_agent
184
+ end
185
+
182
186
  # @api private
183
187
  sig { returns(String) }
184
188
  private def generate_idempotency_key
@@ -26,8 +26,12 @@ module PreludeSDK
26
26
 
27
27
  class << self
28
28
  # @api private
29
- sig { params(url: URI::Generic).returns(Net::HTTP) }
30
- def connect(url)
29
+ sig do
30
+ params(cert_store: OpenSSL::X509::Store, url: URI::Generic).returns(
31
+ Net::HTTP
32
+ )
33
+ end
34
+ def connect(cert_store:, url:)
31
35
  end
32
36
 
33
37
  # @api private
@@ -31,7 +31,7 @@ module PreludeSDK
31
31
  #
32
32
  # Assumes superclass fields are totally defined before fields are accessed /
33
33
  # defined on subclasses.
34
- sig { params(child: T.self_type).void }
34
+ sig { params(child: PreludeSDK::Internal::Type::BaseModel).void }
35
35
  def inherited(child)
36
36
  end
37
37
 
@@ -276,9 +276,13 @@ module PreludeSDK
276
276
 
277
277
  # Create a new instance of a model.
278
278
  sig do
279
- params(data: T.any(T::Hash[Symbol, T.anything], T.self_type)).returns(
280
- T.attached_class
281
- )
279
+ params(
280
+ data:
281
+ T.any(
282
+ T::Hash[Symbol, T.anything],
283
+ PreludeSDK::Internal::Type::BaseModel
284
+ )
285
+ ).returns(T.attached_class)
282
286
  end
283
287
  def self.new(data = {})
284
288
  end
@@ -30,7 +30,7 @@ module PreludeSDK
30
30
  params(
31
31
  client: PreludeSDK::Internal::Transport::BaseClient,
32
32
  req: PreludeSDK::Internal::Transport::BaseClient::RequestComponents,
33
- headers: T.any(T::Hash[String, String], Net::HTTPHeader),
33
+ headers: T::Hash[String, String],
34
34
  page_data: T.anything
35
35
  ).void
36
36
  end
@@ -361,7 +361,7 @@ module PreludeSDK
361
361
  # Assumes each chunk in stream has `Encoding::BINARY`.
362
362
  sig do
363
363
  params(
364
- headers: T.any(T::Hash[String, String], Net::HTTPHeader),
364
+ headers: T::Hash[String, String],
365
365
  stream: T::Enumerable[String],
366
366
  suppress_error: T::Boolean
367
367
  ).returns(T.anything)
@@ -62,6 +62,32 @@ module PreludeSDK
62
62
  sig { params(locale: String).void }
63
63
  attr_writer :locale
64
64
 
65
+ # The preferred delivery channel for the message. When specified, the system will
66
+ # prioritize sending via the requested channel if the template is configured for
67
+ # it.
68
+ #
69
+ # If not specified and the template is configured for WhatsApp, the message will
70
+ # be sent via WhatsApp first, with automatic fallback to SMS if WhatsApp delivery
71
+ # is unavailable.
72
+ #
73
+ # Supported channels: `sms`, `rcs`, `whatsapp`.
74
+ sig do
75
+ returns(
76
+ T.nilable(
77
+ PreludeSDK::TransactionalSendParams::PreferredChannel::OrSymbol
78
+ )
79
+ )
80
+ end
81
+ attr_reader :preferred_channel
82
+
83
+ sig do
84
+ params(
85
+ preferred_channel:
86
+ PreludeSDK::TransactionalSendParams::PreferredChannel::OrSymbol
87
+ ).void
88
+ end
89
+ attr_writer :preferred_channel
90
+
65
91
  # The variables to be replaced in the template.
66
92
  sig { returns(T.nilable(T::Hash[Symbol, String])) }
67
93
  attr_reader :variables
@@ -78,6 +104,8 @@ module PreludeSDK
78
104
  expires_at: String,
79
105
  from: String,
80
106
  locale: String,
107
+ preferred_channel:
108
+ PreludeSDK::TransactionalSendParams::PreferredChannel::OrSymbol,
81
109
  variables: T::Hash[Symbol, String],
82
110
  request_options: PreludeSDK::RequestOptions::OrHash
83
111
  ).returns(T.attached_class)
@@ -102,6 +130,16 @@ module PreludeSDK
102
130
  # code of the phone number. If the language specified doesn't exist, the default
103
131
  # set on the template will be used.
104
132
  locale: nil,
133
+ # The preferred delivery channel for the message. When specified, the system will
134
+ # prioritize sending via the requested channel if the template is configured for
135
+ # it.
136
+ #
137
+ # If not specified and the template is configured for WhatsApp, the message will
138
+ # be sent via WhatsApp first, with automatic fallback to SMS if WhatsApp delivery
139
+ # is unavailable.
140
+ #
141
+ # Supported channels: `sms`, `rcs`, `whatsapp`.
142
+ preferred_channel: nil,
105
143
  # The variables to be replaced in the template.
106
144
  variables: nil,
107
145
  request_options: {}
@@ -118,6 +156,8 @@ module PreludeSDK
118
156
  expires_at: String,
119
157
  from: String,
120
158
  locale: String,
159
+ preferred_channel:
160
+ PreludeSDK::TransactionalSendParams::PreferredChannel::OrSymbol,
121
161
  variables: T::Hash[Symbol, String],
122
162
  request_options: PreludeSDK::RequestOptions
123
163
  }
@@ -125,6 +165,51 @@ module PreludeSDK
125
165
  end
126
166
  def to_hash
127
167
  end
168
+
169
+ # The preferred delivery channel for the message. When specified, the system will
170
+ # prioritize sending via the requested channel if the template is configured for
171
+ # it.
172
+ #
173
+ # If not specified and the template is configured for WhatsApp, the message will
174
+ # be sent via WhatsApp first, with automatic fallback to SMS if WhatsApp delivery
175
+ # is unavailable.
176
+ #
177
+ # Supported channels: `sms`, `rcs`, `whatsapp`.
178
+ module PreferredChannel
179
+ extend PreludeSDK::Internal::Type::Enum
180
+
181
+ TaggedSymbol =
182
+ T.type_alias do
183
+ T.all(Symbol, PreludeSDK::TransactionalSendParams::PreferredChannel)
184
+ end
185
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
186
+
187
+ SMS =
188
+ T.let(
189
+ :sms,
190
+ PreludeSDK::TransactionalSendParams::PreferredChannel::TaggedSymbol
191
+ )
192
+ RCS =
193
+ T.let(
194
+ :rcs,
195
+ PreludeSDK::TransactionalSendParams::PreferredChannel::TaggedSymbol
196
+ )
197
+ WHATSAPP =
198
+ T.let(
199
+ :whatsapp,
200
+ PreludeSDK::TransactionalSendParams::PreferredChannel::TaggedSymbol
201
+ )
202
+
203
+ sig do
204
+ override.returns(
205
+ T::Array[
206
+ PreludeSDK::TransactionalSendParams::PreferredChannel::TaggedSymbol
207
+ ]
208
+ )
209
+ end
210
+ def self.values
211
+ end
212
+ end
128
213
  end
129
214
  end
130
215
  end