sentdm 0.28.0 → 0.29.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: 41507ba04354a1aa51dc2607fe1e8d1af2ea3f4ec4e09616790d25b8ae139c43
4
- data.tar.gz: 7da6d30368292aaad6c06df6f997c1d5f9e5aac623bad956b818b8670e4b105d
3
+ metadata.gz: 03c0b7afcf0204b627f759019cb3259c2612d4b808233a777b0e8e140953a02a
4
+ data.tar.gz: 16a965ab4e6e9f5ea6a3c826e8ba75dbe78c67e3ea6bbe4aa2f89fbbc32e230c
5
5
  SHA512:
6
- metadata.gz: ea59af208b6faa26d5134072b12e743313712f294506d3d76c465e1a7b76898c75da9144051f8ec5f902cecf7b94950d8c7f73ed067aca29c2489277ac0251c4
7
- data.tar.gz: 37ea3a43dfb7ce5b482fd5972772a3d1b482d4e7085c99dba8d258f68b0023b7ba8fab94857f0bc02c105b9718967b78348e63c8e0f54569350c76b69eaf2cdb
6
+ metadata.gz: 48199066de5c1469b22dadad823243beb75a1325c201627b9a7709c3739362bda1d0278725c081346ee476df2b5bcca55f0f05fc539e5e8180e329bb94c81630
7
+ data.tar.gz: 528a8194f406725b703c4d393b5266e690884d1f94fbd9843ceb537fc52f4e8dbd7ddc259b7fe8b3eebedcdb28dd95605a184b4543797e823000ed9c801b437e
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.29.0](https://github.com/sentdm/sent-dm-ruby/compare/v0.28.0...v0.29.0) (2026-09-06)
4
+
5
+
6
+ ### Features
7
+
8
+ * **api:** sync OpenAPI spec from production ([d619423](https://github.com/sentdm/sent-dm-ruby/commit/d61942394aee7452e991472c466c1e3d71018cb0))
9
+ * **api:** sync OpenAPI spec from production ([c8fa353](https://github.com/sentdm/sent-dm-ruby/commit/c8fa353d8623967fbc94a962b709f6a18771a3d6))
10
+
3
11
  ## [0.28.0](https://github.com/sentdm/sent-dm-ruby/compare/v0.27.0...v0.28.0) (2026-08-31)
4
12
 
5
13
 
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.28.0"
20
+ gem "sentdm", "~> 0.29.0"
21
21
  ```
22
22
 
23
23
  <!-- x-release-please-end -->
@@ -3,6 +3,18 @@
3
3
  module Sentdm
4
4
  module Models
5
5
  class InboundMessageEventPayload < Sentdm::Internal::Type::BaseModel
6
+ # @!attribute inbound_number
7
+ # The contact's number in E.164 format, meaning the number the message came from.
8
+ #
9
+ # @return [String]
10
+ required :inbound_number, String
11
+
12
+ # @!attribute received_at
13
+ # When the message was received, in UTC (yyyy-MM-ddTHH:mm:ssZ).
14
+ #
15
+ # @return [String]
16
+ required :received_at, String
17
+
6
18
  # @!attribute account_id
7
19
  # The account the message belongs to.
8
20
  #
@@ -15,12 +27,6 @@ module Sentdm
15
27
  # @return [String, nil]
16
28
  optional :channel, String
17
29
 
18
- # @!attribute inbound_number
19
- # The contact's number in E.164 format, meaning the number the message came from.
20
- #
21
- # @return [String, nil]
22
- optional :inbound_number, String
23
-
24
30
  # @!attribute message_id
25
31
  # The inbound message.
26
32
  #
@@ -33,12 +39,6 @@ module Sentdm
33
39
  # @return [String, nil]
34
40
  optional :outbound_number, String
35
41
 
36
- # @!attribute received_at
37
- # When the message was received, in UTC (yyyy-MM-ddTHH:mm:ssZ).
38
- #
39
- # @return [String, nil]
40
- optional :received_at, String
41
-
42
42
  # @!attribute text
43
43
  # The message body. Sent as null when the inbound message carried no text, for
44
44
  # example a media-only message. The field is always present, so read it and check
@@ -54,25 +54,25 @@ module Sentdm
54
54
  # @return [String, nil]
55
55
  optional :updated_at, String
56
56
 
57
- # @!method initialize(account_id: nil, channel: nil, inbound_number: nil, message_id: nil, outbound_number: nil, received_at: nil, text: nil, updated_at: nil)
57
+ # @!method initialize(inbound_number:, received_at:, account_id: nil, channel: nil, message_id: nil, outbound_number: nil, text: nil, updated_at: nil)
58
58
  # Some parameter documentations has been truncated, see
59
59
  # {Sentdm::Models::InboundMessageEventPayload} for more details.
60
60
  #
61
61
  # Body of a message.received event. Delivered when a contact messages one of your
62
62
  # numbers.
63
63
  #
64
+ # @param inbound_number [String] The contact's number in E.164 format, meaning the number the message came from.
65
+ #
66
+ # @param received_at [String] When the message was received, in UTC (yyyy-MM-ddTHH:mm:ssZ).
67
+ #
64
68
  # @param account_id [String] The account the message belongs to.
65
69
  #
66
70
  # @param channel [String] The channel the message arrived on, for example sms or whatsapp.
67
71
  #
68
- # @param inbound_number [String] The contact's number in E.164 format, meaning the number the message came from.
69
- #
70
72
  # @param message_id [String] The inbound message.
71
73
  #
72
74
  # @param outbound_number [String] Your number in E.164 format, meaning the number the message was addressed to.
73
75
  #
74
- # @param received_at [String] When the message was received, in UTC (yyyy-MM-ddTHH:mm:ssZ).
75
- #
76
76
  # @param text [String, nil] The message body. Sent as null when the inbound message carried no text, for
77
77
  #
78
78
  # @param updated_at [String] When the message was received, in UTC (yyyy-MM-ddTHH:mm:ssZ). Same value as
@@ -103,6 +103,32 @@ module Sentdm
103
103
  optional :profiles,
104
104
  -> { Sentdm::Internal::Type::ArrayOf[Sentdm::Models::MeRetrieveResponse::Data::Profile] }
105
105
 
106
+ # @!attribute sending_phone_number
107
+ # The SMS sender this account sends from in the United States, in E.164 form. Null
108
+ # when the account has no US SMS sender.
109
+ #
110
+ # The same value as channels.sms.phone_number, published under both names on
111
+ # purpose: sending_phone_number is what this value is already called on GET
112
+ # /v3/profiles, so the same key answers the same question whichever of the two
113
+ # endpoints you ask. Neither name is preferred over the other and neither is
114
+ # deprecated.
115
+ #
116
+ # The same value, not the same presence: this key is always written, including as
117
+ # null, whereas channels.sms.phone_number is left out entirely when there is no
118
+ # sender.
119
+ #
120
+ # @return [String, nil]
121
+ optional :sending_phone_number, String, nil?: true
122
+
123
+ # @!attribute sending_phone_number_profile_id
124
+ # The account that holds sending_phone_number in number inventory: normally this
125
+ # account itself, and a different account when the number is held elsewhere. Null
126
+ # when there is no US sender, or when the sender is not a number drawn from
127
+ # inventory — an alphanumeric sender ID or a short code.
128
+ #
129
+ # @return [String, nil]
130
+ optional :sending_phone_number_profile_id, String, nil?: true
131
+
106
132
  # @!attribute settings
107
133
  # Profile configuration settings
108
134
  #
@@ -129,7 +155,7 @@ module Sentdm
129
155
  # @return [String, nil]
130
156
  optional :type, String
131
157
 
132
- # @!method initialize(id: nil, channels: nil, created_at: nil, description: nil, email: nil, icon: nil, name: nil, organization_id: nil, profiles: nil, settings: nil, short_name: nil, status: nil, type: nil)
158
+ # @!method initialize(id: nil, channels: nil, created_at: nil, description: nil, email: nil, icon: nil, name: nil, organization_id: nil, profiles: nil, sending_phone_number: nil, sending_phone_number_profile_id: nil, settings: nil, short_name: nil, status: nil, type: nil)
133
159
  # Some parameter documentations has been truncated, see
134
160
  # {Sentdm::Models::MeRetrieveResponse::Data} for more details.
135
161
  #
@@ -155,6 +181,10 @@ module Sentdm
155
181
  #
156
182
  # @param profiles [Array<Sentdm::Models::MeRetrieveResponse::Data::Profile>] List of profiles (populated for organization type, empty for user and profile ty
157
183
  #
184
+ # @param sending_phone_number [String, nil] The SMS sender this account sends from in the United States, in E.164 form. Null
185
+ #
186
+ # @param sending_phone_number_profile_id [String, nil] The account that holds sending_phone_number in number inventory: normally this a
187
+ #
158
188
  # @param settings [Sentdm::Models::MeRetrieveResponse::Data::Settings, nil] Profile configuration settings
159
189
  #
160
190
  # @param short_name [String, nil] Short name / abbreviation (only for profile type)
@@ -3,6 +3,14 @@
3
3
  module Sentdm
4
4
  module Models
5
5
  class MessageEventPayload < Sentdm::Internal::Type::BaseModel
6
+ # @!attribute message_status
7
+ # The status the message just reached, for example SENT, DELIVERED, or FAILED.
8
+ # Sent means dispatched and delivered means confirmed, so treat them as distinct
9
+ # outcomes.
10
+ #
11
+ # @return [String]
12
+ required :message_status, String
13
+
6
14
  # @!attribute account_id
7
15
  # The account the message belongs to.
8
16
  #
@@ -29,14 +37,6 @@ module Sentdm
29
37
  # @return [String, nil]
30
38
  optional :message_id, String
31
39
 
32
- # @!attribute message_status
33
- # The status the message just reached, for example SENT, DELIVERED, or FAILED.
34
- # Sent means dispatched and delivered means confirmed, so treat them as distinct
35
- # outcomes.
36
- #
37
- # @return [String, nil]
38
- optional :message_status, String
39
-
40
40
  # @!attribute outbound_number
41
41
  # The recipient's number in E.164 format.
42
42
  #
@@ -62,7 +62,7 @@ module Sentdm
62
62
  # @return [String, nil]
63
63
  optional :updated_at, String
64
64
 
65
- # @!method initialize(account_id: nil, agent_id: nil, channel: nil, message_id: nil, message_status: nil, outbound_number: nil, template_id: nil, template_name: nil, updated_at: nil)
65
+ # @!method initialize(message_status:, account_id: nil, agent_id: nil, channel: nil, message_id: nil, outbound_number: nil, template_id: nil, template_name: nil, updated_at: nil)
66
66
  # Some parameter documentations has been truncated, see
67
67
  # {Sentdm::Models::MessageEventPayload} for more details.
68
68
  #
@@ -70,6 +70,8 @@ module Sentdm
70
70
  # so a single message produces several of these as it moves toward a terminal
71
71
  # status.
72
72
  #
73
+ # @param message_status [String] The status the message just reached, for example SENT, DELIVERED, or
74
+ #
73
75
  # @param account_id [String] The account the message belongs to.
74
76
  #
75
77
  # @param agent_id [String, nil] The agent attributed to the send, when the send was attributed to one.
@@ -78,8 +80,6 @@ module Sentdm
78
80
  #
79
81
  # @param message_id [String] The message this event describes. Stable across every event in the message's lif
80
82
  #
81
- # @param message_status [String] The status the message just reached, for example SENT, DELIVERED, or
82
- #
83
83
  # @param outbound_number [String] The recipient's number in E.164 format.
84
84
  #
85
85
  # @param template_id [String, nil] The template the message was sent from, when it was sent from one.
@@ -3,6 +3,19 @@
3
3
  module Sentdm
4
4
  module Models
5
5
  class TemplateEventPayload < Sentdm::Internal::Type::BaseModel
6
+ # @!attribute status
7
+ # The review status the template just reached, for example APPROVED or REJECTED.
8
+ #
9
+ # @return [String]
10
+ required :status, String
11
+
12
+ # @!attribute whatsapp_template_id
13
+ # The template's identifier with Meta, assigned when the template is submitted for
14
+ # review.
15
+ #
16
+ # @return [String]
17
+ required :whatsapp_template_id, String
18
+
6
19
  # @!attribute account_id
7
20
  # The account the template belongs to.
8
21
  #
@@ -34,12 +47,6 @@ module Sentdm
34
47
  # @return [String, nil]
35
48
  optional :reason, String, nil?: true
36
49
 
37
- # @!attribute status
38
- # The review status the template just reached, for example APPROVED or REJECTED.
39
- #
40
- # @return [String, nil]
41
- optional :status, String
42
-
43
50
  # @!attribute template_id
44
51
  # The template in Sent.
45
52
  #
@@ -52,20 +59,17 @@ module Sentdm
52
59
  # @return [String, nil]
53
60
  optional :template_name, String
54
61
 
55
- # @!attribute whatsapp_template_id
56
- # The template's identifier with Meta, assigned when the template is submitted for
57
- # review.
58
- #
59
- # @return [String, nil]
60
- optional :whatsapp_template_id, String
61
-
62
- # @!method initialize(account_id: nil, category: nil, channel: nil, language: nil, reason: nil, status: nil, template_id: nil, template_name: nil, whatsapp_template_id: nil)
62
+ # @!method initialize(status:, whatsapp_template_id:, account_id: nil, category: nil, channel: nil, language: nil, reason: nil, template_id: nil, template_name: nil)
63
63
  # Some parameter documentations has been truncated, see
64
64
  # {Sentdm::Models::TemplateEventPayload} for more details.
65
65
  #
66
66
  # Body of a template status event. Delivered when a template's review outcome
67
67
  # changes, so you can react without polling.
68
68
  #
69
+ # @param status [String] The review status the template just reached, for example APPROVED or
70
+ #
71
+ # @param whatsapp_template_id [String] The template's identifier with Meta, assigned when the template is submitted for
72
+ #
69
73
  # @param account_id [String] The account the template belongs to.
70
74
  #
71
75
  # @param category [String] The template's category, for example UTILITY, MARKETING, or
@@ -76,13 +80,9 @@ module Sentdm
76
80
  #
77
81
  # @param reason [String, nil] Why the template reached Status, when a reason was given. Populated on a
78
82
  #
79
- # @param status [String] The review status the template just reached, for example APPROVED or
80
- #
81
83
  # @param template_id [String] The template in Sent.
82
84
  #
83
85
  # @param template_name [String] The template's display name.
84
- #
85
- # @param whatsapp_template_id [String] The template's identifier with Meta, assigned when the template is submitted for
86
86
  end
87
87
  end
88
88
  end
@@ -28,6 +28,17 @@ module Sentdm
28
28
  # `rcs`. Each channel has a `configured` boolean. Configured channels expose
29
29
  # additional details such as `phone_number`.
30
30
  #
31
+ # **Sending number:** `sending_phone_number` is the account's US SMS sender. It is
32
+ # intentionally the same value as `channels.sms.phone_number` — the two are kept
33
+ # in step, and it is published under both names because `sending_phone_number` is
34
+ # what this value is called on `GET /v3/profiles`. Read either. One difference:
35
+ # `sending_phone_number` is always present, including as `null`, while
36
+ # `channels.sms.phone_number` is omitted when there is no sender.
37
+ #
38
+ # `sending_phone_number_profile_id` names the account that holds that number in
39
+ # inventory — normally this account, and a different one where a number is shared.
40
+ # Both are `null` when the account has no US SMS sender.
41
+ #
31
42
  # @overload retrieve(x_profile_id: nil, request_options: {})
32
43
  #
33
44
  # @param x_profile_id [String] Profile UUID to scope the request to a child profile. Only organization API keys
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sentdm
4
- VERSION = "0.28.0"
4
+ VERSION = "0.29.0"
5
5
  end
@@ -8,6 +8,14 @@ module Sentdm
8
8
  T.any(Sentdm::InboundMessageEventPayload, Sentdm::Internal::AnyHash)
9
9
  end
10
10
 
11
+ # The contact's number in E.164 format, meaning the number the message came from.
12
+ sig { returns(String) }
13
+ attr_accessor :inbound_number
14
+
15
+ # When the message was received, in UTC (yyyy-MM-ddTHH:mm:ssZ).
16
+ sig { returns(String) }
17
+ attr_accessor :received_at
18
+
11
19
  # The account the message belongs to.
12
20
  sig { returns(T.nilable(String)) }
13
21
  attr_reader :account_id
@@ -22,13 +30,6 @@ module Sentdm
22
30
  sig { params(channel: String).void }
23
31
  attr_writer :channel
24
32
 
25
- # The contact's number in E.164 format, meaning the number the message came from.
26
- sig { returns(T.nilable(String)) }
27
- attr_reader :inbound_number
28
-
29
- sig { params(inbound_number: String).void }
30
- attr_writer :inbound_number
31
-
32
33
  # The inbound message.
33
34
  sig { returns(T.nilable(String)) }
34
35
  attr_reader :message_id
@@ -43,13 +44,6 @@ module Sentdm
43
44
  sig { params(outbound_number: String).void }
44
45
  attr_writer :outbound_number
45
46
 
46
- # When the message was received, in UTC (yyyy-MM-ddTHH:mm:ssZ).
47
- sig { returns(T.nilable(String)) }
48
- attr_reader :received_at
49
-
50
- sig { params(received_at: String).void }
51
- attr_writer :received_at
52
-
53
47
  # The message body. Sent as null when the inbound message carried no text, for
54
48
  # example a media-only message. The field is always present, so read it and check
55
49
  # for null rather than checking whether the key exists.
@@ -68,29 +62,29 @@ module Sentdm
68
62
  # numbers.
69
63
  sig do
70
64
  params(
65
+ inbound_number: String,
66
+ received_at: String,
71
67
  account_id: String,
72
68
  channel: String,
73
- inbound_number: String,
74
69
  message_id: String,
75
70
  outbound_number: String,
76
- received_at: String,
77
71
  text: T.nilable(String),
78
72
  updated_at: String
79
73
  ).returns(T.attached_class)
80
74
  end
81
75
  def self.new(
76
+ # The contact's number in E.164 format, meaning the number the message came from.
77
+ inbound_number:,
78
+ # When the message was received, in UTC (yyyy-MM-ddTHH:mm:ssZ).
79
+ received_at:,
82
80
  # The account the message belongs to.
83
81
  account_id: nil,
84
82
  # The channel the message arrived on, for example sms or whatsapp.
85
83
  channel: nil,
86
- # The contact's number in E.164 format, meaning the number the message came from.
87
- inbound_number: nil,
88
84
  # The inbound message.
89
85
  message_id: nil,
90
86
  # Your number in E.164 format, meaning the number the message was addressed to.
91
87
  outbound_number: nil,
92
- # When the message was received, in UTC (yyyy-MM-ddTHH:mm:ssZ).
93
- received_at: nil,
94
88
  # The message body. Sent as null when the inbound message carried no text, for
95
89
  # example a media-only message. The field is always present, so read it and check
96
90
  # for null rather than checking whether the key exists.
@@ -104,12 +98,12 @@ module Sentdm
104
98
  sig do
105
99
  override.returns(
106
100
  {
101
+ inbound_number: String,
102
+ received_at: String,
107
103
  account_id: String,
108
104
  channel: String,
109
- inbound_number: String,
110
105
  message_id: String,
111
106
  outbound_number: String,
112
- received_at: String,
113
107
  text: T.nilable(String),
114
108
  updated_at: String
115
109
  }
@@ -165,6 +165,28 @@ module Sentdm
165
165
  end
166
166
  attr_writer :profiles
167
167
 
168
+ # The SMS sender this account sends from in the United States, in E.164 form. Null
169
+ # when the account has no US SMS sender.
170
+ #
171
+ # The same value as channels.sms.phone_number, published under both names on
172
+ # purpose: sending_phone_number is what this value is already called on GET
173
+ # /v3/profiles, so the same key answers the same question whichever of the two
174
+ # endpoints you ask. Neither name is preferred over the other and neither is
175
+ # deprecated.
176
+ #
177
+ # The same value, not the same presence: this key is always written, including as
178
+ # null, whereas channels.sms.phone_number is left out entirely when there is no
179
+ # sender.
180
+ sig { returns(T.nilable(String)) }
181
+ attr_accessor :sending_phone_number
182
+
183
+ # The account that holds sending_phone_number in number inventory: normally this
184
+ # account itself, and a different account when the number is held elsewhere. Null
185
+ # when there is no US sender, or when the sender is not a number drawn from
186
+ # inventory — an alphanumeric sender ID or a short code.
187
+ sig { returns(T.nilable(String)) }
188
+ attr_accessor :sending_phone_number_profile_id
189
+
168
190
  # Profile configuration settings
169
191
  sig do
170
192
  returns(T.nilable(Sentdm::Models::MeRetrieveResponse::Data::Settings))
@@ -216,6 +238,8 @@ module Sentdm
216
238
  T::Array[
217
239
  Sentdm::Models::MeRetrieveResponse::Data::Profile::OrHash
218
240
  ],
241
+ sending_phone_number: T.nilable(String),
242
+ sending_phone_number_profile_id: T.nilable(String),
219
243
  settings:
220
244
  T.nilable(
221
245
  Sentdm::Models::MeRetrieveResponse::Data::Settings::OrHash
@@ -246,6 +270,24 @@ module Sentdm
246
270
  # List of profiles (populated for organization type, empty for user and profile
247
271
  # types)
248
272
  profiles: nil,
273
+ # The SMS sender this account sends from in the United States, in E.164 form. Null
274
+ # when the account has no US SMS sender.
275
+ #
276
+ # The same value as channels.sms.phone_number, published under both names on
277
+ # purpose: sending_phone_number is what this value is already called on GET
278
+ # /v3/profiles, so the same key answers the same question whichever of the two
279
+ # endpoints you ask. Neither name is preferred over the other and neither is
280
+ # deprecated.
281
+ #
282
+ # The same value, not the same presence: this key is always written, including as
283
+ # null, whereas channels.sms.phone_number is left out entirely when there is no
284
+ # sender.
285
+ sending_phone_number: nil,
286
+ # The account that holds sending_phone_number in number inventory: normally this
287
+ # account itself, and a different account when the number is held elsewhere. Null
288
+ # when there is no US sender, or when the sender is not a number drawn from
289
+ # inventory — an alphanumeric sender ID or a short code.
290
+ sending_phone_number_profile_id: nil,
249
291
  # Profile configuration settings
250
292
  settings: nil,
251
293
  # Short name / abbreviation (only for profile type)
@@ -272,6 +314,8 @@ module Sentdm
272
314
  organization_id: T.nilable(String),
273
315
  profiles:
274
316
  T::Array[Sentdm::Models::MeRetrieveResponse::Data::Profile],
317
+ sending_phone_number: T.nilable(String),
318
+ sending_phone_number_profile_id: T.nilable(String),
275
319
  settings:
276
320
  T.nilable(Sentdm::Models::MeRetrieveResponse::Data::Settings),
277
321
  short_name: T.nilable(String),
@@ -8,6 +8,12 @@ module Sentdm
8
8
  T.any(Sentdm::MessageEventPayload, Sentdm::Internal::AnyHash)
9
9
  end
10
10
 
11
+ # The status the message just reached, for example SENT, DELIVERED, or FAILED.
12
+ # Sent means dispatched and delivered means confirmed, so treat them as distinct
13
+ # outcomes.
14
+ sig { returns(String) }
15
+ attr_accessor :message_status
16
+
11
17
  # The account the message belongs to.
12
18
  sig { returns(T.nilable(String)) }
13
19
  attr_reader :account_id
@@ -35,15 +41,6 @@ module Sentdm
35
41
  sig { params(message_id: String).void }
36
42
  attr_writer :message_id
37
43
 
38
- # The status the message just reached, for example SENT, DELIVERED, or FAILED.
39
- # Sent means dispatched and delivered means confirmed, so treat them as distinct
40
- # outcomes.
41
- sig { returns(T.nilable(String)) }
42
- attr_reader :message_status
43
-
44
- sig { params(message_status: String).void }
45
- attr_writer :message_status
46
-
47
44
  # The recipient's number in E.164 format.
48
45
  sig { returns(T.nilable(String)) }
49
46
  attr_reader :outbound_number
@@ -72,11 +69,11 @@ module Sentdm
72
69
  # status.
73
70
  sig do
74
71
  params(
72
+ message_status: String,
75
73
  account_id: String,
76
74
  agent_id: T.nilable(String),
77
75
  channel: String,
78
76
  message_id: String,
79
- message_status: String,
80
77
  outbound_number: String,
81
78
  template_id: T.nilable(String),
82
79
  template_name: T.nilable(String),
@@ -84,6 +81,10 @@ module Sentdm
84
81
  ).returns(T.attached_class)
85
82
  end
86
83
  def self.new(
84
+ # The status the message just reached, for example SENT, DELIVERED, or FAILED.
85
+ # Sent means dispatched and delivered means confirmed, so treat them as distinct
86
+ # outcomes.
87
+ message_status:,
87
88
  # The account the message belongs to.
88
89
  account_id: nil,
89
90
  # The agent attributed to the send, when the send was attributed to one.
@@ -94,10 +95,6 @@ module Sentdm
94
95
  # The message this event describes. Stable across every event in the message's
95
96
  # lifecycle, so use it to correlate them.
96
97
  message_id: nil,
97
- # The status the message just reached, for example SENT, DELIVERED, or FAILED.
98
- # Sent means dispatched and delivered means confirmed, so treat them as distinct
99
- # outcomes.
100
- message_status: nil,
101
98
  # The recipient's number in E.164 format.
102
99
  outbound_number: nil,
103
100
  # The template the message was sent from, when it was sent from one.
@@ -113,11 +110,11 @@ module Sentdm
113
110
  sig do
114
111
  override.returns(
115
112
  {
113
+ message_status: String,
116
114
  account_id: String,
117
115
  agent_id: T.nilable(String),
118
116
  channel: String,
119
117
  message_id: String,
120
- message_status: String,
121
118
  outbound_number: String,
122
119
  template_id: T.nilable(String),
123
120
  template_name: T.nilable(String),
@@ -8,6 +8,15 @@ module Sentdm
8
8
  T.any(Sentdm::TemplateEventPayload, Sentdm::Internal::AnyHash)
9
9
  end
10
10
 
11
+ # The review status the template just reached, for example APPROVED or REJECTED.
12
+ sig { returns(String) }
13
+ attr_accessor :status
14
+
15
+ # The template's identifier with Meta, assigned when the template is submitted for
16
+ # review.
17
+ sig { returns(String) }
18
+ attr_accessor :whatsapp_template_id
19
+
11
20
  # The account the template belongs to.
12
21
  sig { returns(T.nilable(String)) }
13
22
  attr_reader :account_id
@@ -41,13 +50,6 @@ module Sentdm
41
50
  sig { returns(T.nilable(String)) }
42
51
  attr_accessor :reason
43
52
 
44
- # The review status the template just reached, for example APPROVED or REJECTED.
45
- sig { returns(T.nilable(String)) }
46
- attr_reader :status
47
-
48
- sig { params(status: String).void }
49
- attr_writer :status
50
-
51
53
  # The template in Sent.
52
54
  sig { returns(T.nilable(String)) }
53
55
  attr_reader :template_id
@@ -62,30 +64,27 @@ module Sentdm
62
64
  sig { params(template_name: String).void }
63
65
  attr_writer :template_name
64
66
 
65
- # The template's identifier with Meta, assigned when the template is submitted for
66
- # review.
67
- sig { returns(T.nilable(String)) }
68
- attr_reader :whatsapp_template_id
69
-
70
- sig { params(whatsapp_template_id: String).void }
71
- attr_writer :whatsapp_template_id
72
-
73
67
  # Body of a template status event. Delivered when a template's review outcome
74
68
  # changes, so you can react without polling.
75
69
  sig do
76
70
  params(
71
+ status: String,
72
+ whatsapp_template_id: String,
77
73
  account_id: String,
78
74
  category: String,
79
75
  channel: String,
80
76
  language: String,
81
77
  reason: T.nilable(String),
82
- status: String,
83
78
  template_id: String,
84
- template_name: String,
85
- whatsapp_template_id: String
79
+ template_name: String
86
80
  ).returns(T.attached_class)
87
81
  end
88
82
  def self.new(
83
+ # The review status the template just reached, for example APPROVED or REJECTED.
84
+ status:,
85
+ # The template's identifier with Meta, assigned when the template is submitted for
86
+ # review.
87
+ whatsapp_template_id:,
89
88
  # The account the template belongs to.
90
89
  account_id: nil,
91
90
  # The template's category, for example UTILITY, MARKETING, or AUTHENTICATION.
@@ -97,30 +96,25 @@ module Sentdm
97
96
  # Why the template reached Status, when a reason was given. Populated on a
98
97
  # rejection.
99
98
  reason: nil,
100
- # The review status the template just reached, for example APPROVED or REJECTED.
101
- status: nil,
102
99
  # The template in Sent.
103
100
  template_id: nil,
104
101
  # The template's display name.
105
- template_name: nil,
106
- # The template's identifier with Meta, assigned when the template is submitted for
107
- # review.
108
- whatsapp_template_id: nil
102
+ template_name: nil
109
103
  )
110
104
  end
111
105
 
112
106
  sig do
113
107
  override.returns(
114
108
  {
109
+ status: String,
110
+ whatsapp_template_id: String,
115
111
  account_id: String,
116
112
  category: String,
117
113
  channel: String,
118
114
  language: String,
119
115
  reason: T.nilable(String),
120
- status: String,
121
116
  template_id: String,
122
- template_name: String,
123
- whatsapp_template_id: String
117
+ template_name: String
124
118
  }
125
119
  )
126
120
  end
@@ -24,6 +24,17 @@ module Sentdm
24
24
  # **Channels:** The `channels` object always includes `sms`, `whatsapp`, and
25
25
  # `rcs`. Each channel has a `configured` boolean. Configured channels expose
26
26
  # additional details such as `phone_number`.
27
+ #
28
+ # **Sending number:** `sending_phone_number` is the account's US SMS sender. It is
29
+ # intentionally the same value as `channels.sms.phone_number` — the two are kept
30
+ # in step, and it is published under both names because `sending_phone_number` is
31
+ # what this value is called on `GET /v3/profiles`. Read either. One difference:
32
+ # `sending_phone_number` is always present, including as `null`, while
33
+ # `channels.sms.phone_number` is omitted when there is no sender.
34
+ #
35
+ # `sending_phone_number_profile_id` names the account that holds that number in
36
+ # inventory — normally this account, and a different one where a number is shared.
37
+ # Both are `null` when the account has no US SMS sender.
27
38
  sig do
28
39
  params(
29
40
  x_profile_id: String,
@@ -2,17 +2,21 @@ module Sentdm
2
2
  module Models
3
3
  type inbound_message_event_payload =
4
4
  {
5
+ inbound_number: String,
6
+ received_at: String,
5
7
  account_id: String,
6
8
  channel: String,
7
- inbound_number: String,
8
9
  message_id: String,
9
10
  outbound_number: String,
10
- received_at: String,
11
11
  text: String?,
12
12
  updated_at: String
13
13
  }
14
14
 
15
15
  class InboundMessageEventPayload < Sentdm::Internal::Type::BaseModel
16
+ attr_accessor inbound_number: String
17
+
18
+ attr_accessor received_at: String
19
+
16
20
  attr_reader account_id: String?
17
21
 
18
22
  def account_id=: (String) -> String
@@ -21,10 +25,6 @@ module Sentdm
21
25
 
22
26
  def channel=: (String) -> String
23
27
 
24
- attr_reader inbound_number: String?
25
-
26
- def inbound_number=: (String) -> String
27
-
28
28
  attr_reader message_id: String?
29
29
 
30
30
  def message_id=: (String) -> String
@@ -33,10 +33,6 @@ module Sentdm
33
33
 
34
34
  def outbound_number=: (String) -> String
35
35
 
36
- attr_reader received_at: String?
37
-
38
- def received_at=: (String) -> String
39
-
40
36
  attr_accessor text: String?
41
37
 
42
38
  attr_reader updated_at: String?
@@ -44,23 +40,23 @@ module Sentdm
44
40
  def updated_at=: (String) -> String
45
41
 
46
42
  def initialize: (
43
+ inbound_number: String,
44
+ received_at: String,
47
45
  ?account_id: String,
48
46
  ?channel: String,
49
- ?inbound_number: String,
50
47
  ?message_id: String,
51
48
  ?outbound_number: String,
52
- ?received_at: String,
53
49
  ?text: String?,
54
50
  ?updated_at: String
55
51
  ) -> void
56
52
 
57
53
  def to_hash: -> {
54
+ inbound_number: String,
55
+ received_at: String,
58
56
  account_id: String,
59
57
  channel: String,
60
- inbound_number: String,
61
58
  message_id: String,
62
59
  outbound_number: String,
63
- received_at: String,
64
60
  text: String?,
65
61
  updated_at: String
66
62
  }
@@ -48,6 +48,8 @@ module Sentdm
48
48
  name: String,
49
49
  organization_id: String?,
50
50
  profiles: ::Array[Sentdm::Models::MeRetrieveResponse::Data::Profile],
51
+ sending_phone_number: String?,
52
+ sending_phone_number_profile_id: String?,
51
53
  settings: Sentdm::Models::MeRetrieveResponse::Data::Settings?,
52
54
  short_name: String?,
53
55
  status: String?,
@@ -87,6 +89,10 @@ module Sentdm
87
89
  ::Array[Sentdm::Models::MeRetrieveResponse::Data::Profile]
88
90
  ) -> ::Array[Sentdm::Models::MeRetrieveResponse::Data::Profile]
89
91
 
92
+ attr_accessor sending_phone_number: String?
93
+
94
+ attr_accessor sending_phone_number_profile_id: String?
95
+
90
96
  attr_accessor settings: Sentdm::Models::MeRetrieveResponse::Data::Settings?
91
97
 
92
98
  attr_accessor short_name: String?
@@ -107,6 +113,8 @@ module Sentdm
107
113
  ?name: String,
108
114
  ?organization_id: String?,
109
115
  ?profiles: ::Array[Sentdm::Models::MeRetrieveResponse::Data::Profile],
116
+ ?sending_phone_number: String?,
117
+ ?sending_phone_number_profile_id: String?,
110
118
  ?settings: Sentdm::Models::MeRetrieveResponse::Data::Settings?,
111
119
  ?short_name: String?,
112
120
  ?status: String?,
@@ -123,6 +131,8 @@ module Sentdm
123
131
  name: String,
124
132
  organization_id: String?,
125
133
  profiles: ::Array[Sentdm::Models::MeRetrieveResponse::Data::Profile],
134
+ sending_phone_number: String?,
135
+ sending_phone_number_profile_id: String?,
126
136
  settings: Sentdm::Models::MeRetrieveResponse::Data::Settings?,
127
137
  short_name: String?,
128
138
  status: String?,
@@ -2,11 +2,11 @@ module Sentdm
2
2
  module Models
3
3
  type message_event_payload =
4
4
  {
5
+ message_status: String,
5
6
  account_id: String,
6
7
  agent_id: String?,
7
8
  channel: String,
8
9
  message_id: String,
9
- message_status: String,
10
10
  outbound_number: String,
11
11
  template_id: String?,
12
12
  template_name: String?,
@@ -14,6 +14,8 @@ module Sentdm
14
14
  }
15
15
 
16
16
  class MessageEventPayload < Sentdm::Internal::Type::BaseModel
17
+ attr_accessor message_status: String
18
+
17
19
  attr_reader account_id: String?
18
20
 
19
21
  def account_id=: (String) -> String
@@ -28,10 +30,6 @@ module Sentdm
28
30
 
29
31
  def message_id=: (String) -> String
30
32
 
31
- attr_reader message_status: String?
32
-
33
- def message_status=: (String) -> String
34
-
35
33
  attr_reader outbound_number: String?
36
34
 
37
35
  def outbound_number=: (String) -> String
@@ -45,11 +43,11 @@ module Sentdm
45
43
  def updated_at=: (String) -> String
46
44
 
47
45
  def initialize: (
46
+ message_status: String,
48
47
  ?account_id: String,
49
48
  ?agent_id: String?,
50
49
  ?channel: String,
51
50
  ?message_id: String,
52
- ?message_status: String,
53
51
  ?outbound_number: String,
54
52
  ?template_id: String?,
55
53
  ?template_name: String?,
@@ -57,11 +55,11 @@ module Sentdm
57
55
  ) -> void
58
56
 
59
57
  def to_hash: -> {
58
+ message_status: String,
60
59
  account_id: String,
61
60
  agent_id: String?,
62
61
  channel: String,
63
62
  message_id: String,
64
- message_status: String,
65
63
  outbound_number: String,
66
64
  template_id: String?,
67
65
  template_name: String?,
@@ -2,18 +2,22 @@ module Sentdm
2
2
  module Models
3
3
  type template_event_payload =
4
4
  {
5
+ status: String,
6
+ whatsapp_template_id: String,
5
7
  account_id: String,
6
8
  category: String,
7
9
  channel: String,
8
10
  language: String,
9
11
  reason: String?,
10
- status: String,
11
12
  template_id: String,
12
- template_name: String,
13
- whatsapp_template_id: String
13
+ template_name: String
14
14
  }
15
15
 
16
16
  class TemplateEventPayload < Sentdm::Internal::Type::BaseModel
17
+ attr_accessor status: String
18
+
19
+ attr_accessor whatsapp_template_id: String
20
+
17
21
  attr_reader account_id: String?
18
22
 
19
23
  def account_id=: (String) -> String
@@ -32,10 +36,6 @@ module Sentdm
32
36
 
33
37
  attr_accessor reason: String?
34
38
 
35
- attr_reader status: String?
36
-
37
- def status=: (String) -> String
38
-
39
39
  attr_reader template_id: String?
40
40
 
41
41
  def template_id=: (String) -> String
@@ -44,32 +44,28 @@ module Sentdm
44
44
 
45
45
  def template_name=: (String) -> String
46
46
 
47
- attr_reader whatsapp_template_id: String?
48
-
49
- def whatsapp_template_id=: (String) -> String
50
-
51
47
  def initialize: (
48
+ status: String,
49
+ whatsapp_template_id: String,
52
50
  ?account_id: String,
53
51
  ?category: String,
54
52
  ?channel: String,
55
53
  ?language: String,
56
54
  ?reason: String?,
57
- ?status: String,
58
55
  ?template_id: String,
59
- ?template_name: String,
60
- ?whatsapp_template_id: String
56
+ ?template_name: String
61
57
  ) -> void
62
58
 
63
59
  def to_hash: -> {
60
+ status: String,
61
+ whatsapp_template_id: String,
64
62
  account_id: String,
65
63
  category: String,
66
64
  channel: String,
67
65
  language: String,
68
66
  reason: String?,
69
- status: String,
70
67
  template_id: String,
71
- template_name: String,
72
- whatsapp_template_id: String
68
+ template_name: String
73
69
  }
74
70
  end
75
71
  end
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.28.0
4
+ version: 0.29.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-08-31 00:00:00.000000000 Z
11
+ date: 2026-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cgi