sentdm 0.22.1 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4eab5df76871dc617f3ba41d5519272f10393759e11a2637362ad804ba5f5271
4
- data.tar.gz: '09078ce1068b34071431f9fe2d7e57b49c456b5acbe50ee4856462c768c8a152'
3
+ metadata.gz: 8884fa0a9f6d71c778113cb80657e43caa4727e91ae57b854e1d717ffefa0462
4
+ data.tar.gz: 812c1f43243e1245b0974d67457a4351f23a932ded8ef983ab641e1669204ed0
5
5
  SHA512:
6
- metadata.gz: 4eb75d1a4089128fce5c1887614b85f286af54782f5d78936db3b3f804485647fb93de648b762a7bba16898a76d0d7d3a617e27dbc9f59af9ce82d012526c057
7
- data.tar.gz: 4f18a363e20595555d067190de99cc12b04f19197e6ae9473ed6d1d8034b771e80359ff130e9aeb1285dc28e213a4d672c4323b623cd2ef1d38747e019ff4684
6
+ metadata.gz: bcc73e1cabe61550d77d82b27475395c44c3f353da9e65ab393ef7e93b98789c93fe54e01753e1b07e3d1142fd2da686141fb06e78ed1a58745f54b9be2e7d24
7
+ data.tar.gz: ff608802ccd9179c8266345353c006ee7f1797ff1e79cc6a6172b63ddac0e644d73fb9dc0af0ba5531620ea541f31fbecfa976d4007081fa92cd375aef18b536
data/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.24.0 (2026-07-02)
4
+
5
+ Full Changelog: [v0.23.0...v0.24.0](https://github.com/sentdm/sent-dm-ruby/compare/v0.23.0...v0.24.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([d00bd3a](https://github.com/sentdm/sent-dm-ruby/commit/d00bd3a7ab4b86431bde9f69cd95b66cf549316f))
10
+
11
+ ## 0.23.0 (2026-06-30)
12
+
13
+ Full Changelog: [v0.22.1...v0.23.0](https://github.com/sentdm/sent-dm-ruby/compare/v0.22.1...v0.23.0)
14
+
15
+ ### Features
16
+
17
+ * **api:** api update ([441c4bd](https://github.com/sentdm/sent-dm-ruby/commit/441c4bdaabc474360f4ad3efd5a1805948e95686))
18
+ * **api:** api update ([702b196](https://github.com/sentdm/sent-dm-ruby/commit/702b196e3037740b8980f60bc4c67719d582d261))
19
+
20
+
21
+ ### Chores
22
+
23
+ * **internal:** bound formatter parallelism to CPU count ([65b5f68](https://github.com/sentdm/sent-dm-ruby/commit/65b5f68b53b42df10db46a2ed2b5f1a26cc0949b))
24
+
3
25
  ## 0.22.1 (2026-06-18)
4
26
 
5
27
  Full Changelog: [v0.22.0...v0.22.1](https://github.com/sentdm/sent-dm-ruby/compare/v0.22.0...v0.22.1)
data/README.md CHANGED
@@ -17,7 +17,7 @@ To use this gem, install via Bundler by adding the following to your application
17
17
  <!-- x-release-please-start-version -->
18
18
 
19
19
  ```ruby
20
- gem "sentdm", "~> 0.22.1"
20
+ gem "sentdm", "~> 0.24.0"
21
21
  ```
22
22
 
23
23
  <!-- x-release-please-end -->
@@ -10,8 +10,8 @@ module Sentdm
10
10
  # @!attribute phone_number
11
11
  # Phone number of the contact to create
12
12
  #
13
- # @return [String, nil]
14
- optional :phone_number, String
13
+ # @return [String]
14
+ required :phone_number, String
15
15
 
16
16
  # @!attribute sandbox
17
17
  # Sandbox flag - when true, the operation is simulated without side effects Useful
@@ -30,7 +30,7 @@ module Sentdm
30
30
  # @return [String, nil]
31
31
  optional :x_profile_id, String
32
32
 
33
- # @!method initialize(phone_number: nil, sandbox: nil, idempotency_key: nil, x_profile_id: nil, request_options: {})
33
+ # @!method initialize(phone_number:, sandbox: nil, idempotency_key: nil, x_profile_id: nil, request_options: {})
34
34
  # Some parameter documentations has been truncated, see
35
35
  # {Sentdm::Models::ContactCreateParams} for more details.
36
36
  #
@@ -173,27 +173,27 @@ module Sentdm
173
173
  # @param template_name [String, nil]
174
174
 
175
175
  class Event < Sentdm::Internal::Type::BaseModel
176
- # @!attribute description
177
- #
178
- # @return [String, nil]
179
- optional :description, String, nil?: true
180
-
181
176
  # @!attribute status
182
177
  #
183
- # @return [String, nil]
184
- optional :status, String
178
+ # @return [String]
179
+ required :status, String
185
180
 
186
181
  # @!attribute timestamp
187
182
  #
188
- # @return [Time, nil]
189
- optional :timestamp, Time
183
+ # @return [Time]
184
+ required :timestamp, Time
190
185
 
191
- # @!method initialize(description: nil, status: nil, timestamp: nil)
186
+ # @!attribute description
187
+ #
188
+ # @return [String, nil]
189
+ optional :description, String, nil?: true
190
+
191
+ # @!method initialize(status:, timestamp:, description: nil)
192
192
  # Represents a status change event in a message's lifecycle (v3)
193
193
  #
194
- # @param description [String, nil]
195
194
  # @param status [String]
196
195
  # @param timestamp [Time]
196
+ # @param description [String, nil]
197
197
  end
198
198
 
199
199
  # @see Sentdm::Models::MessageRetrieveStatusResponse::Data#message_body
@@ -27,7 +27,13 @@ module Sentdm
27
27
  # parameters.
28
28
  #
29
29
  # @return [Sentdm::Models::MessageSendParams::Template, nil]
30
- optional :template, -> { Sentdm::MessageSendParams::Template }
30
+ optional :template, -> { Sentdm::MessageSendParams::Template }, nil?: true
31
+
32
+ # @!attribute text
33
+ # Plain-text (free-form) message body. Provide either Template or this.
34
+ #
35
+ # @return [String, nil]
36
+ optional :text, String, nil?: true
31
37
 
32
38
  # @!attribute to
33
39
  # List of recipient phone numbers in E.164 format (multi-recipient fan-out)
@@ -45,7 +51,7 @@ module Sentdm
45
51
  # @return [String, nil]
46
52
  optional :x_profile_id, String
47
53
 
48
- # @!method initialize(channel: nil, sandbox: nil, template: nil, to: nil, idempotency_key: nil, x_profile_id: nil, request_options: {})
54
+ # @!method initialize(channel: nil, sandbox: nil, template: nil, text: nil, to: nil, idempotency_key: nil, x_profile_id: nil, request_options: {})
49
55
  # Some parameter documentations has been truncated, see
50
56
  # {Sentdm::Models::MessageSendParams} for more details.
51
57
  #
@@ -53,7 +59,9 @@ module Sentdm
53
59
  #
54
60
  # @param sandbox [Boolean] Sandbox flag - when true, the operation is simulated without side effects
55
61
  #
56
- # @param template [Sentdm::Models::MessageSendParams::Template] SDK-style template reference: resolve by ID or by name, with optional parameters
62
+ # @param template [Sentdm::Models::MessageSendParams::Template, nil] SDK-style template reference: resolve by ID or by name, with optional parameters
63
+ #
64
+ # @param text [String, nil] Plain-text (free-form) message body. Provide either Template or this.
57
65
  #
58
66
  # @param to [Array<String>] List of recipient phone numbers in E.164 format (multi-recipient fan-out)
59
67
  #
@@ -4,6 +4,21 @@ module Sentdm
4
4
  module Models
5
5
  module Profiles
6
6
  class TcrCampaignWithUseCases < Sentdm::Models::Profiles::BaseDto
7
+ # @!attribute description
8
+ #
9
+ # @return [String]
10
+ required :description, String
11
+
12
+ # @!attribute name
13
+ #
14
+ # @return [String]
15
+ required :name, String
16
+
17
+ # @!attribute type
18
+ #
19
+ # @return [String]
20
+ required :type, String
21
+
7
22
  # @!attribute billed_date
8
23
  #
9
24
  # @return [Time, nil]
@@ -42,10 +57,15 @@ module Sentdm
42
57
  # @return [Time, nil]
43
58
  optional :dca_elections_completed_at, Time, api_name: :dcaElectionsCompletedAt, nil?: true
44
59
 
45
- # @!attribute description
60
+ # @!attribute has_submission_transaction
61
+ # True when this campaign already has a billing transaction of reference type
62
+ # TCR_CAMPAIGN_SUBMISSION (the one-time submission fee was charged). Populated
63
+ # only by the campaigns-list path; defaults false on other responses.
46
64
  #
47
- # @return [String, nil]
48
- optional :description, String
65
+ # @return [Boolean, nil]
66
+ optional :has_submission_transaction,
67
+ Sentdm::Internal::Type::Boolean,
68
+ api_name: :hasSubmissionTransaction
49
69
 
50
70
  # @!attribute help_keywords
51
71
  #
@@ -67,11 +87,6 @@ module Sentdm
67
87
  # @return [String, nil]
68
88
  optional :message_flow, String, api_name: :messageFlow, nil?: true
69
89
 
70
- # @!attribute name
71
- #
72
- # @return [String, nil]
73
- optional :name, String
74
-
75
90
  # @!attribute optin_keywords
76
91
  #
77
92
  # @return [String, nil]
@@ -145,11 +160,6 @@ module Sentdm
145
160
  # @return [String, nil]
146
161
  optional :terms_and_conditions_link, String, api_name: :termsAndConditionsLink, nil?: true
147
162
 
148
- # @!attribute type
149
- #
150
- # @return [String, nil]
151
- optional :type, String
152
-
153
163
  # @!attribute upstream_cnp_id
154
164
  #
155
165
  # @return [String, nil]
@@ -162,36 +172,70 @@ module Sentdm
162
172
  -> { Sentdm::Internal::Type::ArrayOf[Sentdm::Profiles::TcrCampaignWithUseCases::UseCase] },
163
173
  api_name: :useCases
164
174
 
165
- # @!method initialize(billed_date: nil, brand_id: nil, cost: nil, csp_id: nil, customer_id: nil, dca_elections_complete: nil, dca_elections_completed_at: nil, description: nil, help_keywords: nil, help_message: nil, kyc_submission_form_id: nil, message_flow: nil, name: nil, optin_keywords: nil, optin_message: nil, optout_keywords: nil, optout_message: nil, privacy_policy_link: nil, reseller_id: nil, sharing_status: nil, status: nil, submitted_at: nil, submitted_to_tcr: nil, tcr_campaign_id: nil, tcr_sync_error: nil, telnyx_campaign_id: nil, terms_and_conditions_link: nil, type: nil, upstream_cnp_id: nil, use_cases: nil)
175
+ # @!method initialize(description:, name:, type:, billed_date: nil, brand_id: nil, cost: nil, csp_id: nil, customer_id: nil, dca_elections_complete: nil, dca_elections_completed_at: nil, has_submission_transaction: nil, help_keywords: nil, help_message: nil, kyc_submission_form_id: nil, message_flow: nil, optin_keywords: nil, optin_message: nil, optout_keywords: nil, optout_message: nil, privacy_policy_link: nil, reseller_id: nil, sharing_status: nil, status: nil, submitted_at: nil, submitted_to_tcr: nil, tcr_campaign_id: nil, tcr_sync_error: nil, telnyx_campaign_id: nil, terms_and_conditions_link: nil, upstream_cnp_id: nil, use_cases: nil)
176
+ # Some parameter documentations has been truncated, see
177
+ # {Sentdm::Models::Profiles::TcrCampaignWithUseCases} for more details.
178
+ #
179
+ # @param description [String]
180
+ #
181
+ # @param name [String]
182
+ #
183
+ # @param type [String]
184
+ #
166
185
  # @param billed_date [Time, nil]
186
+ #
167
187
  # @param brand_id [String, nil]
188
+ #
168
189
  # @param cost [Float, nil]
190
+ #
169
191
  # @param csp_id [String, nil]
192
+ #
170
193
  # @param customer_id [String]
194
+ #
171
195
  # @param dca_elections_complete [Boolean, nil]
196
+ #
172
197
  # @param dca_elections_completed_at [Time, nil]
173
- # @param description [String]
198
+ #
199
+ # @param has_submission_transaction [Boolean] True when this campaign already has a billing transaction of reference type
200
+ #
174
201
  # @param help_keywords [String, nil]
202
+ #
175
203
  # @param help_message [String, nil]
204
+ #
176
205
  # @param kyc_submission_form_id [String, nil]
206
+ #
177
207
  # @param message_flow [String, nil]
178
- # @param name [String]
208
+ #
179
209
  # @param optin_keywords [String, nil]
210
+ #
180
211
  # @param optin_message [String, nil]
212
+ #
181
213
  # @param optout_keywords [String, nil]
214
+ #
182
215
  # @param optout_message [String, nil]
216
+ #
183
217
  # @param privacy_policy_link [String, nil]
218
+ #
184
219
  # @param reseller_id [String, nil]
220
+ #
185
221
  # @param sharing_status [Symbol, Sentdm::Models::Profiles::TcrCampaignWithUseCases::SharingStatus, nil]
222
+ #
186
223
  # @param status [Symbol, Sentdm::Models::Profiles::TcrCampaignWithUseCases::Status, nil]
224
+ #
187
225
  # @param submitted_at [Time, nil]
226
+ #
188
227
  # @param submitted_to_tcr [Boolean]
228
+ #
189
229
  # @param tcr_campaign_id [String, nil]
230
+ #
190
231
  # @param tcr_sync_error [String, nil]
232
+ #
191
233
  # @param telnyx_campaign_id [String, nil]
234
+ #
192
235
  # @param terms_and_conditions_link [String, nil]
193
- # @param type [String]
236
+ #
194
237
  # @param upstream_cnp_id [String, nil]
238
+ #
195
239
  # @param use_cases [Array<Sentdm::Models::Profiles::TcrCampaignWithUseCases::UseCase>]
196
240
 
197
241
  module SharingStatus
@@ -217,6 +261,11 @@ module Sentdm
217
261
  end
218
262
 
219
263
  class UseCase < Sentdm::Models::Profiles::BaseDto
264
+ # @!attribute sample_messages
265
+ #
266
+ # @return [Array<String>]
267
+ required :sample_messages, Sentdm::Internal::Type::ArrayOf[String], api_name: :sampleMessages
268
+
220
269
  # @!attribute campaign_id
221
270
  #
222
271
  # @return [String, nil]
@@ -234,16 +283,11 @@ module Sentdm
234
283
  enum: -> { Sentdm::Profiles::MessagingUseCaseUs },
235
284
  api_name: :messagingUseCaseUs
236
285
 
237
- # @!attribute sample_messages
238
- #
239
- # @return [Array<String>, nil]
240
- optional :sample_messages, Sentdm::Internal::Type::ArrayOf[String], api_name: :sampleMessages
241
-
242
- # @!method initialize(campaign_id: nil, customer_id: nil, messaging_use_case_us: nil, sample_messages: nil)
286
+ # @!method initialize(sample_messages:, campaign_id: nil, customer_id: nil, messaging_use_case_us: nil)
287
+ # @param sample_messages [Array<String>]
243
288
  # @param campaign_id [String]
244
289
  # @param customer_id [String]
245
290
  # @param messaging_use_case_us [Symbol, Sentdm::Models::Profiles::MessagingUseCaseUs]
246
- # @param sample_messages [Array<String>]
247
291
  end
248
292
  end
249
293
  end
@@ -10,7 +10,7 @@ module Sentdm
10
10
  # Creates a new contact by phone number and associates it with the authenticated
11
11
  # customer.
12
12
  #
13
- # @overload create(phone_number: nil, sandbox: nil, idempotency_key: nil, x_profile_id: nil, request_options: {})
13
+ # @overload create(phone_number:, sandbox: nil, idempotency_key: nil, x_profile_id: nil, request_options: {})
14
14
  #
15
15
  # @param phone_number [String] Body param: Phone number of the contact to create
16
16
  #
@@ -25,7 +25,7 @@ module Sentdm
25
25
  # @return [Sentdm::Models::APIResponseOfContact]
26
26
  #
27
27
  # @see Sentdm::Models::ContactCreateParams
28
- def create(params = {})
28
+ def create(params)
29
29
  parsed, options = Sentdm::ContactCreateParams.dump_request(params)
30
30
  header_params = {idempotency_key: "idempotency-key", x_profile_id: "x-profile-id"}
31
31
  @client.request(
@@ -69,13 +69,15 @@ module Sentdm
69
69
  # Returns immediately with per-recipient message IDs for async tracking via
70
70
  # webhooks or the GET /messages/{id} endpoint.
71
71
  #
72
- # @overload send_(channel: nil, sandbox: nil, template: nil, to: nil, idempotency_key: nil, x_profile_id: nil, request_options: {})
72
+ # @overload send_(channel: nil, sandbox: nil, template: nil, text: nil, to: nil, idempotency_key: nil, x_profile_id: nil, request_options: {})
73
73
  #
74
74
  # @param channel [Array<String>, nil] Body param: Channels to broadcast on, e.g. ["whatsapp", "sms"].
75
75
  #
76
76
  # @param sandbox [Boolean] Body param: Sandbox flag - when true, the operation is simulated without side ef
77
77
  #
78
- # @param template [Sentdm::Models::MessageSendParams::Template] Body param: SDK-style template reference: resolve by ID or by name, with optiona
78
+ # @param template [Sentdm::Models::MessageSendParams::Template, nil] Body param: SDK-style template reference: resolve by ID or by name, with optiona
79
+ #
80
+ # @param text [String, nil] Body param: Plain-text (free-form) message body. Provide either Template or this
79
81
  #
80
82
  # @param to [Array<String>] Body param: List of recipient phone numbers in E.164 format (multi-recipient fan
81
83
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sentdm
4
- VERSION = "0.22.1"
4
+ VERSION = "0.24.0"
5
5
  end
@@ -12,11 +12,8 @@ module Sentdm
12
12
  end
13
13
 
14
14
  # Phone number of the contact to create
15
- sig { returns(T.nilable(String)) }
16
- attr_reader :phone_number
17
-
18
- sig { params(phone_number: String).void }
19
- attr_writer :phone_number
15
+ sig { returns(String) }
16
+ attr_accessor :phone_number
20
17
 
21
18
  # Sandbox flag - when true, the operation is simulated without side effects Useful
22
19
  # for testing integrations without actual execution
@@ -49,7 +46,7 @@ module Sentdm
49
46
  end
50
47
  def self.new(
51
48
  # Phone number of the contact to create
52
- phone_number: nil,
49
+ phone_number:,
53
50
  # Sandbox flag - when true, the operation is simulated without side effects Useful
54
51
  # for testing integrations without actual execution
55
52
  sandbox: nil,
@@ -298,38 +298,32 @@ module Sentdm
298
298
  )
299
299
  end
300
300
 
301
- sig { returns(T.nilable(String)) }
302
- attr_accessor :description
303
-
304
- sig { returns(T.nilable(String)) }
305
- attr_reader :status
301
+ sig { returns(String) }
302
+ attr_accessor :status
306
303
 
307
- sig { params(status: String).void }
308
- attr_writer :status
304
+ sig { returns(Time) }
305
+ attr_accessor :timestamp
309
306
 
310
- sig { returns(T.nilable(Time)) }
311
- attr_reader :timestamp
312
-
313
- sig { params(timestamp: Time).void }
314
- attr_writer :timestamp
307
+ sig { returns(T.nilable(String)) }
308
+ attr_accessor :description
315
309
 
316
310
  # Represents a status change event in a message's lifecycle (v3)
317
311
  sig do
318
312
  params(
319
- description: T.nilable(String),
320
313
  status: String,
321
- timestamp: Time
314
+ timestamp: Time,
315
+ description: T.nilable(String)
322
316
  ).returns(T.attached_class)
323
317
  end
324
- def self.new(description: nil, status: nil, timestamp: nil)
318
+ def self.new(status:, timestamp:, description: nil)
325
319
  end
326
320
 
327
321
  sig do
328
322
  override.returns(
329
323
  {
330
- description: T.nilable(String),
331
324
  status: String,
332
- timestamp: Time
325
+ timestamp: Time,
326
+ description: T.nilable(String)
333
327
  }
334
328
  )
335
329
  end
@@ -30,9 +30,17 @@ module Sentdm
30
30
  sig { returns(T.nilable(Sentdm::MessageSendParams::Template)) }
31
31
  attr_reader :template
32
32
 
33
- sig { params(template: Sentdm::MessageSendParams::Template::OrHash).void }
33
+ sig do
34
+ params(
35
+ template: T.nilable(Sentdm::MessageSendParams::Template::OrHash)
36
+ ).void
37
+ end
34
38
  attr_writer :template
35
39
 
40
+ # Plain-text (free-form) message body. Provide either Template or this.
41
+ sig { returns(T.nilable(String)) }
42
+ attr_accessor :text
43
+
36
44
  # List of recipient phone numbers in E.164 format (multi-recipient fan-out)
37
45
  sig { returns(T.nilable(T::Array[String])) }
38
46
  attr_reader :to
@@ -56,7 +64,8 @@ module Sentdm
56
64
  params(
57
65
  channel: T.nilable(T::Array[String]),
58
66
  sandbox: T::Boolean,
59
- template: Sentdm::MessageSendParams::Template::OrHash,
67
+ template: T.nilable(Sentdm::MessageSendParams::Template::OrHash),
68
+ text: T.nilable(String),
60
69
  to: T::Array[String],
61
70
  idempotency_key: String,
62
71
  x_profile_id: String,
@@ -74,6 +83,8 @@ module Sentdm
74
83
  # SDK-style template reference: resolve by ID or by name, with optional
75
84
  # parameters.
76
85
  template: nil,
86
+ # Plain-text (free-form) message body. Provide either Template or this.
87
+ text: nil,
77
88
  # List of recipient phone numbers in E.164 format (multi-recipient fan-out)
78
89
  to: nil,
79
90
  idempotency_key: nil,
@@ -87,7 +98,8 @@ module Sentdm
87
98
  {
88
99
  channel: T.nilable(T::Array[String]),
89
100
  sandbox: T::Boolean,
90
- template: Sentdm::MessageSendParams::Template,
101
+ template: T.nilable(Sentdm::MessageSendParams::Template),
102
+ text: T.nilable(String),
91
103
  to: T::Array[String],
92
104
  idempotency_key: String,
93
105
  x_profile_id: String,
@@ -12,6 +12,15 @@ module Sentdm
12
12
  )
13
13
  end
14
14
 
15
+ sig { returns(String) }
16
+ attr_accessor :description
17
+
18
+ sig { returns(String) }
19
+ attr_accessor :name
20
+
21
+ sig { returns(String) }
22
+ attr_accessor :type
23
+
15
24
  sig { returns(T.nilable(Time)) }
16
25
  attr_accessor :billed_date
17
26
 
@@ -36,11 +45,14 @@ module Sentdm
36
45
  sig { returns(T.nilable(Time)) }
37
46
  attr_accessor :dca_elections_completed_at
38
47
 
39
- sig { returns(T.nilable(String)) }
40
- attr_reader :description
48
+ # True when this campaign already has a billing transaction of reference type
49
+ # TCR_CAMPAIGN_SUBMISSION (the one-time submission fee was charged). Populated
50
+ # only by the campaigns-list path; defaults false on other responses.
51
+ sig { returns(T.nilable(T::Boolean)) }
52
+ attr_reader :has_submission_transaction
41
53
 
42
- sig { params(description: String).void }
43
- attr_writer :description
54
+ sig { params(has_submission_transaction: T::Boolean).void }
55
+ attr_writer :has_submission_transaction
44
56
 
45
57
  sig { returns(T.nilable(String)) }
46
58
  attr_accessor :help_keywords
@@ -54,12 +66,6 @@ module Sentdm
54
66
  sig { returns(T.nilable(String)) }
55
67
  attr_accessor :message_flow
56
68
 
57
- sig { returns(T.nilable(String)) }
58
- attr_reader :name
59
-
60
- sig { params(name: String).void }
61
- attr_writer :name
62
-
63
69
  sig { returns(T.nilable(String)) }
64
70
  attr_accessor :optin_keywords
65
71
 
@@ -117,12 +123,6 @@ module Sentdm
117
123
  sig { returns(T.nilable(String)) }
118
124
  attr_accessor :terms_and_conditions_link
119
125
 
120
- sig { returns(T.nilable(String)) }
121
- attr_reader :type
122
-
123
- sig { params(type: String).void }
124
- attr_writer :type
125
-
126
126
  sig { returns(T.nilable(String)) }
127
127
  attr_accessor :upstream_cnp_id
128
128
 
@@ -147,6 +147,9 @@ module Sentdm
147
147
 
148
148
  sig do
149
149
  params(
150
+ description: String,
151
+ name: String,
152
+ type: String,
150
153
  billed_date: T.nilable(Time),
151
154
  brand_id: T.nilable(String),
152
155
  cost: T.nilable(Float),
@@ -154,12 +157,11 @@ module Sentdm
154
157
  customer_id: String,
155
158
  dca_elections_complete: T.nilable(T::Boolean),
156
159
  dca_elections_completed_at: T.nilable(Time),
157
- description: String,
160
+ has_submission_transaction: T::Boolean,
158
161
  help_keywords: T.nilable(String),
159
162
  help_message: T.nilable(String),
160
163
  kyc_submission_form_id: T.nilable(String),
161
164
  message_flow: T.nilable(String),
162
- name: String,
163
165
  optin_keywords: T.nilable(String),
164
166
  optin_message: T.nilable(String),
165
167
  optout_keywords: T.nilable(String),
@@ -180,7 +182,6 @@ module Sentdm
180
182
  tcr_sync_error: T.nilable(String),
181
183
  telnyx_campaign_id: T.nilable(String),
182
184
  terms_and_conditions_link: T.nilable(String),
183
- type: String,
184
185
  upstream_cnp_id: T.nilable(String),
185
186
  use_cases:
186
187
  T::Array[
@@ -189,6 +190,9 @@ module Sentdm
189
190
  ).returns(T.attached_class)
190
191
  end
191
192
  def self.new(
193
+ description:,
194
+ name:,
195
+ type:,
192
196
  billed_date: nil,
193
197
  brand_id: nil,
194
198
  cost: nil,
@@ -196,12 +200,14 @@ module Sentdm
196
200
  customer_id: nil,
197
201
  dca_elections_complete: nil,
198
202
  dca_elections_completed_at: nil,
199
- description: nil,
203
+ # True when this campaign already has a billing transaction of reference type
204
+ # TCR_CAMPAIGN_SUBMISSION (the one-time submission fee was charged). Populated
205
+ # only by the campaigns-list path; defaults false on other responses.
206
+ has_submission_transaction: nil,
200
207
  help_keywords: nil,
201
208
  help_message: nil,
202
209
  kyc_submission_form_id: nil,
203
210
  message_flow: nil,
204
- name: nil,
205
211
  optin_keywords: nil,
206
212
  optin_message: nil,
207
213
  optout_keywords: nil,
@@ -216,7 +222,6 @@ module Sentdm
216
222
  tcr_sync_error: nil,
217
223
  telnyx_campaign_id: nil,
218
224
  terms_and_conditions_link: nil,
219
- type: nil,
220
225
  upstream_cnp_id: nil,
221
226
  use_cases: nil
222
227
  )
@@ -225,6 +230,9 @@ module Sentdm
225
230
  sig do
226
231
  override.returns(
227
232
  {
233
+ description: String,
234
+ name: String,
235
+ type: String,
228
236
  billed_date: T.nilable(Time),
229
237
  brand_id: T.nilable(String),
230
238
  cost: T.nilable(Float),
@@ -232,12 +240,11 @@ module Sentdm
232
240
  customer_id: String,
233
241
  dca_elections_complete: T.nilable(T::Boolean),
234
242
  dca_elections_completed_at: T.nilable(Time),
235
- description: String,
243
+ has_submission_transaction: T::Boolean,
236
244
  help_keywords: T.nilable(String),
237
245
  help_message: T.nilable(String),
238
246
  kyc_submission_form_id: T.nilable(String),
239
247
  message_flow: T.nilable(String),
240
- name: String,
241
248
  optin_keywords: T.nilable(String),
242
249
  optin_message: T.nilable(String),
243
250
  optout_keywords: T.nilable(String),
@@ -258,7 +265,6 @@ module Sentdm
258
265
  tcr_sync_error: T.nilable(String),
259
266
  telnyx_campaign_id: T.nilable(String),
260
267
  terms_and_conditions_link: T.nilable(String),
261
- type: String,
262
268
  upstream_cnp_id: T.nilable(String),
263
269
  use_cases:
264
270
  T::Array[Sentdm::Profiles::TcrCampaignWithUseCases::UseCase]
@@ -352,6 +358,9 @@ module Sentdm
352
358
  )
353
359
  end
354
360
 
361
+ sig { returns(T::Array[String]) }
362
+ attr_accessor :sample_messages
363
+
355
364
  sig { returns(T.nilable(String)) }
356
365
  attr_reader :campaign_id
357
366
 
@@ -379,37 +388,31 @@ module Sentdm
379
388
  end
380
389
  attr_writer :messaging_use_case_us
381
390
 
382
- sig { returns(T.nilable(T::Array[String])) }
383
- attr_reader :sample_messages
384
-
385
- sig { params(sample_messages: T::Array[String]).void }
386
- attr_writer :sample_messages
387
-
388
391
  sig do
389
392
  params(
393
+ sample_messages: T::Array[String],
390
394
  campaign_id: String,
391
395
  customer_id: String,
392
396
  messaging_use_case_us:
393
- Sentdm::Profiles::MessagingUseCaseUs::OrSymbol,
394
- sample_messages: T::Array[String]
397
+ Sentdm::Profiles::MessagingUseCaseUs::OrSymbol
395
398
  ).returns(T.attached_class)
396
399
  end
397
400
  def self.new(
401
+ sample_messages:,
398
402
  campaign_id: nil,
399
403
  customer_id: nil,
400
- messaging_use_case_us: nil,
401
- sample_messages: nil
404
+ messaging_use_case_us: nil
402
405
  )
403
406
  end
404
407
 
405
408
  sig do
406
409
  override.returns(
407
410
  {
411
+ sample_messages: T::Array[String],
408
412
  campaign_id: String,
409
413
  customer_id: String,
410
414
  messaging_use_case_us:
411
- Sentdm::Profiles::MessagingUseCaseUs::TaggedSymbol,
412
- sample_messages: T::Array[String]
415
+ Sentdm::Profiles::MessagingUseCaseUs::TaggedSymbol
413
416
  }
414
417
  )
415
418
  end
@@ -17,7 +17,7 @@ module Sentdm
17
17
  end
18
18
  def create(
19
19
  # Body param: Phone number of the contact to create
20
- phone_number: nil,
20
+ phone_number:,
21
21
  # Body param: Sandbox flag - when true, the operation is simulated without side
22
22
  # effects Useful for testing integrations without actual execution
23
23
  sandbox: nil,
@@ -51,7 +51,8 @@ module Sentdm
51
51
  params(
52
52
  channel: T.nilable(T::Array[String]),
53
53
  sandbox: T::Boolean,
54
- template: Sentdm::MessageSendParams::Template::OrHash,
54
+ template: T.nilable(Sentdm::MessageSendParams::Template::OrHash),
55
+ text: T.nilable(String),
55
56
  to: T::Array[String],
56
57
  idempotency_key: String,
57
58
  x_profile_id: String,
@@ -69,6 +70,9 @@ module Sentdm
69
70
  # Body param: SDK-style template reference: resolve by ID or by name, with
70
71
  # optional parameters.
71
72
  template: nil,
73
+ # Body param: Plain-text (free-form) message body. Provide either Template or
74
+ # this.
75
+ text: nil,
72
76
  # Body param: List of recipient phone numbers in E.164 format (multi-recipient
73
77
  # fan-out)
74
78
  to: nil,
@@ -13,9 +13,7 @@ module Sentdm
13
13
  extend Sentdm::Internal::Type::RequestParameters::Converter
14
14
  include Sentdm::Internal::Type::RequestParameters
15
15
 
16
- attr_reader phone_number: String?
17
-
18
- def phone_number=: (String) -> String
16
+ attr_accessor phone_number: String
19
17
 
20
18
  attr_reader sandbox: bool?
21
19
 
@@ -30,7 +28,7 @@ module Sentdm
30
28
  def x_profile_id=: (String) -> String
31
29
 
32
30
  def initialize: (
33
- ?phone_number: String,
31
+ phone_number: String,
34
32
  ?sandbox: bool,
35
33
  ?idempotency_key: String,
36
34
  ?x_profile_id: String,
@@ -151,29 +151,25 @@ module Sentdm
151
151
  template_name: String?
152
152
  }
153
153
 
154
- type event = { description: String?, status: String, timestamp: Time }
154
+ type event = { status: String, timestamp: Time, description: String? }
155
155
 
156
156
  class Event < Sentdm::Internal::Type::BaseModel
157
- attr_accessor description: String?
158
-
159
- attr_reader status: String?
160
-
161
- def status=: (String) -> String
157
+ attr_accessor status: String
162
158
 
163
- attr_reader timestamp: Time?
159
+ attr_accessor timestamp: Time
164
160
 
165
- def timestamp=: (Time) -> Time
161
+ attr_accessor description: String?
166
162
 
167
163
  def initialize: (
168
- ?description: String?,
169
- ?status: String,
170
- ?timestamp: Time
164
+ status: String,
165
+ timestamp: Time,
166
+ ?description: String?
171
167
  ) -> void
172
168
 
173
169
  def to_hash: -> {
174
- description: String?,
175
170
  status: String,
176
- timestamp: Time
171
+ timestamp: Time,
172
+ description: String?
177
173
  }
178
174
  end
179
175
 
@@ -4,7 +4,8 @@ module Sentdm
4
4
  {
5
5
  channel: ::Array[String]?,
6
6
  sandbox: bool,
7
- template: Sentdm::MessageSendParams::Template,
7
+ template: Sentdm::MessageSendParams::Template?,
8
+ text: String?,
8
9
  to: ::Array[String],
9
10
  idempotency_key: String,
10
11
  x_profile_id: String
@@ -21,11 +22,9 @@ module Sentdm
21
22
 
22
23
  def sandbox=: (bool) -> bool
23
24
 
24
- attr_reader template: Sentdm::MessageSendParams::Template?
25
+ attr_accessor template: Sentdm::MessageSendParams::Template?
25
26
 
26
- def template=: (
27
- Sentdm::MessageSendParams::Template
28
- ) -> Sentdm::MessageSendParams::Template
27
+ attr_accessor text: String?
29
28
 
30
29
  attr_reader to: ::Array[String]?
31
30
 
@@ -42,7 +41,8 @@ module Sentdm
42
41
  def initialize: (
43
42
  ?channel: ::Array[String]?,
44
43
  ?sandbox: bool,
45
- ?template: Sentdm::MessageSendParams::Template,
44
+ ?template: Sentdm::MessageSendParams::Template?,
45
+ ?text: String?,
46
46
  ?to: ::Array[String],
47
47
  ?idempotency_key: String,
48
48
  ?x_profile_id: String,
@@ -52,7 +52,8 @@ module Sentdm
52
52
  def to_hash: -> {
53
53
  channel: ::Array[String]?,
54
54
  sandbox: bool,
55
- template: Sentdm::MessageSendParams::Template,
55
+ template: Sentdm::MessageSendParams::Template?,
56
+ text: String?,
56
57
  to: ::Array[String],
57
58
  idempotency_key: String,
58
59
  x_profile_id: String,
@@ -3,6 +3,9 @@ module Sentdm
3
3
  module Profiles
4
4
  type tcr_campaign_with_use_cases =
5
5
  {
6
+ description: String,
7
+ name: String,
8
+ type: String,
6
9
  billed_date: Time?,
7
10
  brand_id: String?,
8
11
  cost: Float?,
@@ -10,12 +13,11 @@ module Sentdm
10
13
  customer_id: String,
11
14
  dca_elections_complete: bool?,
12
15
  dca_elections_completed_at: Time?,
13
- description: String,
16
+ has_submission_transaction: bool,
14
17
  help_keywords: String?,
15
18
  help_message: String?,
16
19
  kyc_submission_form_id: String?,
17
20
  message_flow: String?,
18
- name: String,
19
21
  optin_keywords: String?,
20
22
  optin_message: String?,
21
23
  optout_keywords: String?,
@@ -30,12 +32,23 @@ module Sentdm
30
32
  tcr_sync_error: String?,
31
33
  telnyx_campaign_id: String?,
32
34
  terms_and_conditions_link: String?,
33
- type: String,
34
35
  upstream_cnp_id: String?,
35
36
  use_cases: ::Array[Sentdm::Profiles::TcrCampaignWithUseCases::UseCase]
36
37
  }
37
38
 
38
39
  class TcrCampaignWithUseCases < Sentdm::Models::Profiles::BaseDto
40
+ def description: -> String
41
+
42
+ def description=: (String _) -> String
43
+
44
+ def name: -> String
45
+
46
+ def name=: (String _) -> String
47
+
48
+ def `type`: -> String
49
+
50
+ def type=: (String _) -> String
51
+
39
52
  def billed_date: -> Time?
40
53
 
41
54
  def billed_date=: (Time? _) -> Time?
@@ -64,9 +77,9 @@ module Sentdm
64
77
 
65
78
  def dca_elections_completed_at=: (Time? _) -> Time?
66
79
 
67
- def description: -> String?
80
+ def has_submission_transaction: -> bool?
68
81
 
69
- def description=: (String _) -> String
82
+ def has_submission_transaction=: (bool _) -> bool
70
83
 
71
84
  def help_keywords: -> String?
72
85
 
@@ -84,10 +97,6 @@ module Sentdm
84
97
 
85
98
  def message_flow=: (String? _) -> String?
86
99
 
87
- def name: -> String?
88
-
89
- def name=: (String _) -> String
90
-
91
100
  def optin_keywords: -> String?
92
101
 
93
102
  def optin_keywords=: (String? _) -> String?
@@ -148,10 +157,6 @@ module Sentdm
148
157
 
149
158
  def terms_and_conditions_link=: (String? _) -> String?
150
159
 
151
- def `type`: -> String?
152
-
153
- def type=: (String _) -> String
154
-
155
160
  def upstream_cnp_id: -> String?
156
161
 
157
162
  def upstream_cnp_id=: (String? _) -> String?
@@ -163,6 +168,9 @@ module Sentdm
163
168
  ) -> ::Array[Sentdm::Profiles::TcrCampaignWithUseCases::UseCase]
164
169
 
165
170
  def initialize: (
171
+ description: String,
172
+ name: String,
173
+ type: String,
166
174
  ?billed_date: Time?,
167
175
  ?brand_id: String?,
168
176
  ?cost: Float?,
@@ -170,12 +178,11 @@ module Sentdm
170
178
  ?customer_id: String,
171
179
  ?dca_elections_complete: bool?,
172
180
  ?dca_elections_completed_at: Time?,
173
- ?description: String,
181
+ ?has_submission_transaction: bool,
174
182
  ?help_keywords: String?,
175
183
  ?help_message: String?,
176
184
  ?kyc_submission_form_id: String?,
177
185
  ?message_flow: String?,
178
- ?name: String,
179
186
  ?optin_keywords: String?,
180
187
  ?optin_message: String?,
181
188
  ?optout_keywords: String?,
@@ -190,12 +197,14 @@ module Sentdm
190
197
  ?tcr_sync_error: String?,
191
198
  ?telnyx_campaign_id: String?,
192
199
  ?terms_and_conditions_link: String?,
193
- ?type: String,
194
200
  ?upstream_cnp_id: String?,
195
201
  ?use_cases: ::Array[Sentdm::Profiles::TcrCampaignWithUseCases::UseCase]
196
202
  ) -> void
197
203
 
198
204
  def to_hash: -> {
205
+ description: String,
206
+ name: String,
207
+ type: String,
199
208
  billed_date: Time?,
200
209
  brand_id: String?,
201
210
  cost: Float?,
@@ -203,12 +212,11 @@ module Sentdm
203
212
  customer_id: String,
204
213
  dca_elections_complete: bool?,
205
214
  dca_elections_completed_at: Time?,
206
- description: String,
215
+ has_submission_transaction: bool,
207
216
  help_keywords: String?,
208
217
  help_message: String?,
209
218
  kyc_submission_form_id: String?,
210
219
  message_flow: String?,
211
- name: String,
212
220
  optin_keywords: String?,
213
221
  optin_message: String?,
214
222
  optout_keywords: String?,
@@ -223,7 +231,6 @@ module Sentdm
223
231
  tcr_sync_error: String?,
224
232
  telnyx_campaign_id: String?,
225
233
  terms_and_conditions_link: String?,
226
- type: String,
227
234
  upstream_cnp_id: String?,
228
235
  use_cases: ::Array[Sentdm::Profiles::TcrCampaignWithUseCases::UseCase]
229
236
  }
@@ -254,13 +261,17 @@ module Sentdm
254
261
 
255
262
  type use_case =
256
263
  {
264
+ sample_messages: ::Array[String],
257
265
  campaign_id: String,
258
266
  customer_id: String,
259
- messaging_use_case_us: Sentdm::Models::Profiles::messaging_use_case_us,
260
- sample_messages: ::Array[String]
267
+ messaging_use_case_us: Sentdm::Models::Profiles::messaging_use_case_us
261
268
  }
262
269
 
263
270
  class UseCase < Sentdm::Models::Profiles::BaseDto
271
+ def sample_messages: -> ::Array[String]
272
+
273
+ def sample_messages=: (::Array[String] _) -> ::Array[String]
274
+
264
275
  def campaign_id: -> String?
265
276
 
266
277
  def campaign_id=: (String _) -> String
@@ -275,22 +286,18 @@ module Sentdm
275
286
  Sentdm::Models::Profiles::messaging_use_case_us _
276
287
  ) -> Sentdm::Models::Profiles::messaging_use_case_us
277
288
 
278
- def sample_messages: -> ::Array[String]?
279
-
280
- def sample_messages=: (::Array[String] _) -> ::Array[String]
281
-
282
289
  def initialize: (
290
+ sample_messages: ::Array[String],
283
291
  ?campaign_id: String,
284
292
  ?customer_id: String,
285
- ?messaging_use_case_us: Sentdm::Models::Profiles::messaging_use_case_us,
286
- ?sample_messages: ::Array[String]
293
+ ?messaging_use_case_us: Sentdm::Models::Profiles::messaging_use_case_us
287
294
  ) -> void
288
295
 
289
296
  def to_hash: -> {
297
+ sample_messages: ::Array[String],
290
298
  campaign_id: String,
291
299
  customer_id: String,
292
- messaging_use_case_us: Sentdm::Models::Profiles::messaging_use_case_us,
293
- sample_messages: ::Array[String]
300
+ messaging_use_case_us: Sentdm::Models::Profiles::messaging_use_case_us
294
301
  }
295
302
  end
296
303
  end
@@ -2,7 +2,7 @@ module Sentdm
2
2
  module Resources
3
3
  class Contacts
4
4
  def create: (
5
- ?phone_number: String,
5
+ phone_number: String,
6
6
  ?sandbox: bool,
7
7
  ?idempotency_key: String,
8
8
  ?x_profile_id: String,
@@ -16,7 +16,8 @@ module Sentdm
16
16
  def send_: (
17
17
  ?channel: ::Array[String]?,
18
18
  ?sandbox: bool,
19
- ?template: Sentdm::MessageSendParams::Template,
19
+ ?template: Sentdm::MessageSendParams::Template?,
20
+ ?text: String?,
20
21
  ?to: ::Array[String],
21
22
  ?idempotency_key: String,
22
23
  ?x_profile_id: String,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sentdm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.1
4
+ version: 0.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sent
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-06-18 00:00:00.000000000 Z
11
+ date: 2026-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cgi