sentdm 0.25.0 → 0.27.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 (133) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +39 -0
  3. data/README.md +7 -11
  4. data/lib/sentdm/client.rb +4 -0
  5. data/lib/sentdm/models/api_response_of_contact_message_summary.rb +43 -0
  6. data/lib/sentdm/models/api_response_of_conversation_messages_list.rb +43 -0
  7. data/lib/sentdm/models/{sent_dm_services_common_contracts_poc_os_authentication_config.rb → authentication_config.rb} +2 -3
  8. data/lib/sentdm/models/{sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info.rb → brand_business_info.rb} +5 -7
  9. data/lib/sentdm/models/{sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info.rb → brand_compliance_info.rb} +2 -10
  10. data/lib/sentdm/models/{sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info.rb → brand_contact_info.rb} +1 -1
  11. data/lib/sentdm/models/brands_brand_data.rb +9 -13
  12. data/lib/sentdm/models/contact_message_summary.rb +76 -0
  13. data/lib/sentdm/models/contact_retrieve_message_summary_params.rb +26 -0
  14. data/lib/sentdm/models/conversation_list_messages_params.rb +38 -0
  15. data/lib/sentdm/models/conversation_list_params.rb +32 -0
  16. data/lib/sentdm/models/conversation_messages_list.rb +245 -0
  17. data/lib/sentdm/models/inbound_message_event.rb +52 -0
  18. data/lib/sentdm/models/inbound_message_event_payload.rb +81 -0
  19. data/lib/sentdm/models/message_event.rb +53 -0
  20. data/lib/sentdm/models/message_event_payload.rb +92 -0
  21. data/lib/sentdm/models/message_send_response.rb +2 -6
  22. data/lib/sentdm/models/profile_detail.rb +13 -13
  23. data/lib/sentdm/models/profile_update_params.rb +2 -2
  24. data/lib/sentdm/models/profiles/{api_response_of_tcr_campaign_with_use_cases.rb → api_response_of_brand_campaign.rb} +5 -5
  25. data/lib/sentdm/models/profiles/{campaign_list_response.rb → api_response_of_list_of_brand_campaign.rb} +4 -6
  26. data/lib/sentdm/models/profiles/{tcr_campaign_with_use_cases.rb → brand_campaign.rb} +63 -111
  27. data/lib/sentdm/models/profiles/campaign_data.rb +13 -6
  28. data/lib/sentdm/models/profiles/campaign_use_case.rb +71 -0
  29. data/lib/sentdm/models/profiles/{sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data.rb → campaign_use_case_data.rb} +1 -1
  30. data/lib/sentdm/models/{sent_dm_services_common_contracts_poc_os_template_body.rb → template_body.rb} +2 -3
  31. data/lib/sentdm/models/{sent_dm_services_common_contracts_poc_os_template_button.rb → template_button.rb} +5 -6
  32. data/lib/sentdm/models/{sent_dm_services_common_contracts_poc_os_template_button_props.rb → template_button_props.rb} +2 -3
  33. data/lib/sentdm/models/template_definition.rb +15 -19
  34. data/lib/sentdm/models/template_event.rb +52 -0
  35. data/lib/sentdm/models/template_event_payload.rb +88 -0
  36. data/lib/sentdm/models/{sent_dm_services_common_contracts_poc_os_template_footer.rb → template_footer.rb} +1 -1
  37. data/lib/sentdm/models/{sent_dm_services_common_contracts_poc_os_template_header.rb → template_header.rb} +2 -3
  38. data/lib/sentdm/models/webhook_list_events_response.rb +45 -3
  39. data/lib/sentdm/models.rb +44 -27
  40. data/lib/sentdm/resources/contacts.rb +30 -0
  41. data/lib/sentdm/resources/conversations.rb +82 -0
  42. data/lib/sentdm/resources/messages.rb +6 -1
  43. data/lib/sentdm/resources/profiles/campaigns.rb +6 -6
  44. data/lib/sentdm/resources/profiles.rb +34 -22
  45. data/lib/sentdm/resources/users.rb +3 -3
  46. data/lib/sentdm/version.rb +1 -1
  47. data/lib/sentdm.rb +28 -14
  48. data/rbi/sentdm/client.rbi +3 -0
  49. data/rbi/sentdm/models/api_response_of_contact_message_summary.rbi +79 -0
  50. data/rbi/sentdm/models/api_response_of_conversation_messages_list.rbi +79 -0
  51. data/rbi/sentdm/models/{sent_dm_services_common_contracts_poc_os_authentication_config.rbi → authentication_config.rbi} +2 -5
  52. data/rbi/sentdm/models/{sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info.rbi → brand_business_info.rbi} +12 -30
  53. data/rbi/sentdm/models/{sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info.rbi → brand_compliance_info.rbi} +2 -13
  54. data/rbi/sentdm/models/{sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info.rbi → brand_contact_info.rbi} +2 -5
  55. data/rbi/sentdm/models/brands_brand_data.rbi +12 -51
  56. data/rbi/sentdm/models/contact_message_summary.rbi +144 -0
  57. data/rbi/sentdm/models/contact_retrieve_message_summary_params.rbi +49 -0
  58. data/rbi/sentdm/models/conversation_list_messages_params.rbi +65 -0
  59. data/rbi/sentdm/models/conversation_list_params.rbi +51 -0
  60. data/rbi/sentdm/models/conversation_messages_list.rbi +419 -0
  61. data/rbi/sentdm/models/inbound_message_event.rbi +88 -0
  62. data/rbi/sentdm/models/inbound_message_event_payload.rbi +122 -0
  63. data/rbi/sentdm/models/message_event.rbi +86 -0
  64. data/rbi/sentdm/models/message_event_payload.rbi +132 -0
  65. data/rbi/sentdm/models/message_send_response.rbi +2 -4
  66. data/rbi/sentdm/models/profile_detail.rbi +10 -12
  67. data/rbi/sentdm/models/profile_update_params.rbi +2 -2
  68. data/rbi/sentdm/models/profiles/{api_response_of_tcr_campaign_with_use_cases.rbi → api_response_of_brand_campaign.rbi} +8 -10
  69. data/rbi/sentdm/models/profiles/{campaign_list_response.rbi → api_response_of_list_of_brand_campaign.rbi} +5 -13
  70. data/rbi/sentdm/models/profiles/brand_campaign.rbi +299 -0
  71. data/rbi/sentdm/models/profiles/campaign_data.rbi +16 -18
  72. data/rbi/sentdm/models/profiles/campaign_use_case.rbi +110 -0
  73. data/rbi/sentdm/models/profiles/{sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data.rbi → campaign_use_case_data.rbi} +2 -2
  74. data/rbi/sentdm/models/{sent_dm_services_common_contracts_poc_os_template_body.rbi → template_body.rbi} +2 -7
  75. data/rbi/sentdm/models/{sent_dm_services_common_contracts_poc_os_template_button.rbi → template_button.rbi} +6 -22
  76. data/rbi/sentdm/models/{sent_dm_services_common_contracts_poc_os_template_button_props.rbi → template_button_props.rbi} +2 -5
  77. data/rbi/sentdm/models/template_definition.rbi +19 -87
  78. data/rbi/sentdm/models/template_event.rbi +84 -0
  79. data/rbi/sentdm/models/template_event_payload.rbi +131 -0
  80. data/rbi/sentdm/models/{sent_dm_services_common_contracts_poc_os_template_footer.rbi → template_footer.rbi} +2 -5
  81. data/rbi/sentdm/models/{sent_dm_services_common_contracts_poc_os_template_header.rbi → template_header.rbi} +2 -5
  82. data/rbi/sentdm/models/webhook_list_events_response.rbi +60 -4
  83. data/rbi/sentdm/models.rbi +48 -27
  84. data/rbi/sentdm/resources/contacts.rbi +20 -0
  85. data/rbi/sentdm/resources/conversations.rbi +61 -0
  86. data/rbi/sentdm/resources/messages.rbi +6 -1
  87. data/rbi/sentdm/resources/profiles/campaigns.rbi +3 -3
  88. data/rbi/sentdm/resources/profiles.rbi +32 -20
  89. data/rbi/sentdm/resources/users.rbi +3 -2
  90. data/sig/sentdm/client.rbs +2 -0
  91. data/sig/sentdm/models/api_response_of_contact_message_summary.rbs +39 -0
  92. data/sig/sentdm/models/api_response_of_conversation_messages_list.rbs +39 -0
  93. data/sig/sentdm/models/{sent_dm_services_common_contracts_poc_os_authentication_config.rbs → authentication_config.rbs} +2 -2
  94. data/sig/sentdm/models/{sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info.rbs → brand_business_info.rbs} +7 -7
  95. data/sig/sentdm/models/{sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info.rbs → brand_compliance_info.rbs} +2 -7
  96. data/sig/sentdm/models/{sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info.rbs → brand_contact_info.rbs} +2 -2
  97. data/sig/sentdm/models/brands_brand_data.rbs +12 -12
  98. data/sig/sentdm/models/contact_message_summary.rbs +84 -0
  99. data/sig/sentdm/models/contact_retrieve_message_summary_params.rbs +30 -0
  100. data/sig/sentdm/models/conversation_list_messages_params.rbs +38 -0
  101. data/sig/sentdm/models/conversation_list_params.rbs +34 -0
  102. data/sig/sentdm/models/conversation_messages_list.rbs +240 -0
  103. data/sig/sentdm/models/inbound_message_event.rbs +39 -0
  104. data/sig/sentdm/models/inbound_message_event_payload.rbs +69 -0
  105. data/sig/sentdm/models/message_event.rbs +39 -0
  106. data/sig/sentdm/models/message_event_payload.rbs +72 -0
  107. data/sig/sentdm/models/profile_detail.rbs +0 -5
  108. data/sig/sentdm/models/profiles/{campaign_list_response.rbs → api_response_of_brand_campaign.rbs} +6 -6
  109. data/sig/sentdm/models/profiles/{api_response_of_tcr_campaign_with_use_cases.rbs → api_response_of_list_of_brand_campaign.rbs} +6 -6
  110. data/sig/sentdm/models/profiles/brand_campaign.rbs +194 -0
  111. data/sig/sentdm/models/profiles/campaign_data.rbs +12 -7
  112. data/sig/sentdm/models/profiles/campaign_use_case.rbs +66 -0
  113. data/sig/sentdm/models/profiles/{sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data.rbs → campaign_use_case_data.rbs} +2 -2
  114. data/sig/sentdm/models/{sent_dm_services_common_contracts_poc_os_template_body.rbs → template_body.rbs} +2 -2
  115. data/sig/sentdm/models/template_button.rbs +28 -0
  116. data/sig/sentdm/models/{sent_dm_services_common_contracts_poc_os_template_button_props.rbs → template_button_props.rbs} +2 -2
  117. data/sig/sentdm/models/template_definition.rbs +20 -20
  118. data/sig/sentdm/models/template_event.rbs +39 -0
  119. data/sig/sentdm/models/template_event_payload.rbs +76 -0
  120. data/sig/sentdm/models/{sent_dm_services_common_contracts_poc_os_template_footer.rbs → template_footer.rbs} +2 -2
  121. data/sig/sentdm/models/{sent_dm_services_common_contracts_poc_os_template_header.rbs → template_header.rbs} +2 -2
  122. data/sig/sentdm/models/webhook_list_events_response.rbs +18 -5
  123. data/sig/sentdm/models.rbs +44 -18
  124. data/sig/sentdm/resources/contacts.rbs +6 -0
  125. data/sig/sentdm/resources/conversations.rbs +22 -0
  126. data/sig/sentdm/resources/profiles/campaigns.rbs +3 -3
  127. metadata +86 -44
  128. data/lib/sentdm/models/profiles/base_dto.rb +0 -32
  129. data/rbi/sentdm/models/profiles/base_dto.rbi +0 -53
  130. data/rbi/sentdm/models/profiles/tcr_campaign_with_use_cases.rbi +0 -425
  131. data/sig/sentdm/models/profiles/base_dto.rbs +0 -27
  132. data/sig/sentdm/models/profiles/tcr_campaign_with_use_cases.rbs +0 -306
  133. data/sig/sentdm/models/sent_dm_services_common_contracts_poc_os_template_button.rbs +0 -32
@@ -0,0 +1,419 @@
1
+ # typed: strong
2
+
3
+ module Sentdm
4
+ module Models
5
+ class ConversationMessagesList < Sentdm::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(Sentdm::ConversationMessagesList, Sentdm::Internal::AnyHash)
9
+ end
10
+
11
+ # The messages on this page, most recent first.
12
+ sig do
13
+ returns(T.nilable(T::Array[Sentdm::ConversationMessagesList::Message]))
14
+ end
15
+ attr_reader :messages
16
+
17
+ sig do
18
+ params(
19
+ messages: T::Array[Sentdm::ConversationMessagesList::Message::OrHash]
20
+ ).void
21
+ end
22
+ attr_writer :messages
23
+
24
+ # Pagination metadata for list responses
25
+ sig { returns(T.nilable(Sentdm::PaginationMeta)) }
26
+ attr_reader :pagination
27
+
28
+ sig { params(pagination: Sentdm::PaginationMeta::OrHash).void }
29
+ attr_writer :pagination
30
+
31
+ # A paginated list of messages — used by both conversation read endpoints.
32
+ sig do
33
+ params(
34
+ messages: T::Array[Sentdm::ConversationMessagesList::Message::OrHash],
35
+ pagination: Sentdm::PaginationMeta::OrHash
36
+ ).returns(T.attached_class)
37
+ end
38
+ def self.new(
39
+ # The messages on this page, most recent first.
40
+ messages: nil,
41
+ # Pagination metadata for list responses
42
+ pagination: nil
43
+ )
44
+ end
45
+
46
+ sig do
47
+ override.returns(
48
+ {
49
+ messages: T::Array[Sentdm::ConversationMessagesList::Message],
50
+ pagination: Sentdm::PaginationMeta
51
+ }
52
+ )
53
+ end
54
+ def to_hash
55
+ end
56
+
57
+ class Message < Sentdm::Internal::Type::BaseModel
58
+ OrHash =
59
+ T.type_alias do
60
+ T.any(
61
+ Sentdm::ConversationMessagesList::Message,
62
+ Sentdm::Internal::AnyHash
63
+ )
64
+ end
65
+
66
+ sig { returns(T.nilable(String)) }
67
+ attr_reader :id
68
+
69
+ sig { params(id: String).void }
70
+ attr_writer :id
71
+
72
+ sig { returns(T.nilable(Float)) }
73
+ attr_accessor :active_contact_price
74
+
75
+ sig { returns(T.nilable(String)) }
76
+ attr_reader :channel
77
+
78
+ sig { params(channel: String).void }
79
+ attr_writer :channel
80
+
81
+ sig { returns(T.nilable(String)) }
82
+ attr_reader :contact_id
83
+
84
+ sig { params(contact_id: String).void }
85
+ attr_writer :contact_id
86
+
87
+ sig { returns(T.nilable(Time)) }
88
+ attr_reader :created_at
89
+
90
+ sig { params(created_at: Time).void }
91
+ attr_writer :created_at
92
+
93
+ sig { returns(T.nilable(String)) }
94
+ attr_reader :customer_id
95
+
96
+ sig { params(customer_id: String).void }
97
+ attr_writer :customer_id
98
+
99
+ sig { returns(T.nilable(String)) }
100
+ attr_reader :direction
101
+
102
+ sig { params(direction: String).void }
103
+ attr_writer :direction
104
+
105
+ sig do
106
+ returns(
107
+ T.nilable(
108
+ T::Array[Sentdm::ConversationMessagesList::Message::Event]
109
+ )
110
+ )
111
+ end
112
+ attr_accessor :events
113
+
114
+ # Structured message body format for database storage. Preserves channel-specific
115
+ # components (header, body, footer, buttons).
116
+ sig do
117
+ returns(
118
+ T.nilable(Sentdm::ConversationMessagesList::Message::MessageBody)
119
+ )
120
+ end
121
+ attr_reader :message_body
122
+
123
+ sig do
124
+ params(
125
+ message_body:
126
+ T.nilable(
127
+ Sentdm::ConversationMessagesList::Message::MessageBody::OrHash
128
+ )
129
+ ).void
130
+ end
131
+ attr_writer :message_body
132
+
133
+ sig { returns(T.nilable(String)) }
134
+ attr_reader :phone
135
+
136
+ sig { params(phone: String).void }
137
+ attr_writer :phone
138
+
139
+ sig { returns(T.nilable(String)) }
140
+ attr_reader :phone_international
141
+
142
+ sig { params(phone_international: String).void }
143
+ attr_writer :phone_international
144
+
145
+ sig { returns(T.nilable(Float)) }
146
+ attr_accessor :price
147
+
148
+ sig { returns(T.nilable(String)) }
149
+ attr_reader :region_code
150
+
151
+ sig { params(region_code: String).void }
152
+ attr_writer :region_code
153
+
154
+ sig { returns(T.nilable(String)) }
155
+ attr_reader :status
156
+
157
+ sig { params(status: String).void }
158
+ attr_writer :status
159
+
160
+ sig { returns(T.nilable(String)) }
161
+ attr_accessor :template_category
162
+
163
+ sig { returns(T.nilable(String)) }
164
+ attr_accessor :template_id
165
+
166
+ sig { returns(T.nilable(String)) }
167
+ attr_accessor :template_name
168
+
169
+ # Message response for v3 API — same shape as v2 with snake_case JSON conventions
170
+ sig do
171
+ params(
172
+ id: String,
173
+ active_contact_price: T.nilable(Float),
174
+ channel: String,
175
+ contact_id: String,
176
+ created_at: Time,
177
+ customer_id: String,
178
+ direction: String,
179
+ events:
180
+ T.nilable(
181
+ T::Array[
182
+ Sentdm::ConversationMessagesList::Message::Event::OrHash
183
+ ]
184
+ ),
185
+ message_body:
186
+ T.nilable(
187
+ Sentdm::ConversationMessagesList::Message::MessageBody::OrHash
188
+ ),
189
+ phone: String,
190
+ phone_international: String,
191
+ price: T.nilable(Float),
192
+ region_code: String,
193
+ status: String,
194
+ template_category: T.nilable(String),
195
+ template_id: T.nilable(String),
196
+ template_name: T.nilable(String)
197
+ ).returns(T.attached_class)
198
+ end
199
+ def self.new(
200
+ id: nil,
201
+ active_contact_price: nil,
202
+ channel: nil,
203
+ contact_id: nil,
204
+ created_at: nil,
205
+ customer_id: nil,
206
+ direction: nil,
207
+ events: nil,
208
+ # Structured message body format for database storage. Preserves channel-specific
209
+ # components (header, body, footer, buttons).
210
+ message_body: nil,
211
+ phone: nil,
212
+ phone_international: nil,
213
+ price: nil,
214
+ region_code: nil,
215
+ status: nil,
216
+ template_category: nil,
217
+ template_id: nil,
218
+ template_name: nil
219
+ )
220
+ end
221
+
222
+ sig do
223
+ override.returns(
224
+ {
225
+ id: String,
226
+ active_contact_price: T.nilable(Float),
227
+ channel: String,
228
+ contact_id: String,
229
+ created_at: Time,
230
+ customer_id: String,
231
+ direction: String,
232
+ events:
233
+ T.nilable(
234
+ T::Array[Sentdm::ConversationMessagesList::Message::Event]
235
+ ),
236
+ message_body:
237
+ T.nilable(
238
+ Sentdm::ConversationMessagesList::Message::MessageBody
239
+ ),
240
+ phone: String,
241
+ phone_international: String,
242
+ price: T.nilable(Float),
243
+ region_code: String,
244
+ status: String,
245
+ template_category: T.nilable(String),
246
+ template_id: T.nilable(String),
247
+ template_name: T.nilable(String)
248
+ }
249
+ )
250
+ end
251
+ def to_hash
252
+ end
253
+
254
+ class Event < Sentdm::Internal::Type::BaseModel
255
+ OrHash =
256
+ T.type_alias do
257
+ T.any(
258
+ Sentdm::ConversationMessagesList::Message::Event,
259
+ Sentdm::Internal::AnyHash
260
+ )
261
+ end
262
+
263
+ sig { returns(String) }
264
+ attr_accessor :status
265
+
266
+ sig { returns(Time) }
267
+ attr_accessor :timestamp
268
+
269
+ sig { returns(T.nilable(String)) }
270
+ attr_accessor :description
271
+
272
+ # Represents a status change event in a message's lifecycle (v3)
273
+ sig do
274
+ params(
275
+ status: String,
276
+ timestamp: Time,
277
+ description: T.nilable(String)
278
+ ).returns(T.attached_class)
279
+ end
280
+ def self.new(status:, timestamp:, description: nil)
281
+ end
282
+
283
+ sig do
284
+ override.returns(
285
+ {
286
+ status: String,
287
+ timestamp: Time,
288
+ description: T.nilable(String)
289
+ }
290
+ )
291
+ end
292
+ def to_hash
293
+ end
294
+ end
295
+
296
+ class MessageBody < Sentdm::Internal::Type::BaseModel
297
+ OrHash =
298
+ T.type_alias do
299
+ T.any(
300
+ Sentdm::ConversationMessagesList::Message::MessageBody,
301
+ Sentdm::Internal::AnyHash
302
+ )
303
+ end
304
+
305
+ sig do
306
+ returns(
307
+ T.nilable(
308
+ T::Array[
309
+ Sentdm::ConversationMessagesList::Message::MessageBody::Button
310
+ ]
311
+ )
312
+ )
313
+ end
314
+ attr_accessor :buttons
315
+
316
+ sig { returns(T.nilable(String)) }
317
+ attr_reader :content
318
+
319
+ sig { params(content: String).void }
320
+ attr_writer :content
321
+
322
+ sig { returns(T.nilable(String)) }
323
+ attr_accessor :footer
324
+
325
+ sig { returns(T.nilable(String)) }
326
+ attr_accessor :header
327
+
328
+ # Structured message body format for database storage. Preserves channel-specific
329
+ # components (header, body, footer, buttons).
330
+ sig do
331
+ params(
332
+ buttons:
333
+ T.nilable(
334
+ T::Array[
335
+ Sentdm::ConversationMessagesList::Message::MessageBody::Button::OrHash
336
+ ]
337
+ ),
338
+ content: String,
339
+ footer: T.nilable(String),
340
+ header: T.nilable(String)
341
+ ).returns(T.attached_class)
342
+ end
343
+ def self.new(buttons: nil, content: nil, footer: nil, header: nil)
344
+ end
345
+
346
+ sig do
347
+ override.returns(
348
+ {
349
+ buttons:
350
+ T.nilable(
351
+ T::Array[
352
+ Sentdm::ConversationMessagesList::Message::MessageBody::Button
353
+ ]
354
+ ),
355
+ content: String,
356
+ footer: T.nilable(String),
357
+ header: T.nilable(String)
358
+ }
359
+ )
360
+ end
361
+ def to_hash
362
+ end
363
+
364
+ class Button < Sentdm::Internal::Type::BaseModel
365
+ OrHash =
366
+ T.type_alias do
367
+ T.any(
368
+ Sentdm::ConversationMessagesList::Message::MessageBody::Button,
369
+ Sentdm::Internal::AnyHash
370
+ )
371
+ end
372
+
373
+ sig { returns(T.nilable(String)) }
374
+ attr_accessor :postback_data
375
+
376
+ sig { returns(T.nilable(String)) }
377
+ attr_accessor :text
378
+
379
+ sig { returns(T.nilable(String)) }
380
+ attr_reader :type
381
+
382
+ sig { params(type: String).void }
383
+ attr_writer :type
384
+
385
+ sig { returns(T.nilable(String)) }
386
+ attr_reader :value
387
+
388
+ sig { params(value: String).void }
389
+ attr_writer :value
390
+
391
+ sig do
392
+ params(
393
+ postback_data: T.nilable(String),
394
+ text: T.nilable(String),
395
+ type: String,
396
+ value: String
397
+ ).returns(T.attached_class)
398
+ end
399
+ def self.new(postback_data: nil, text: nil, type: nil, value: nil)
400
+ end
401
+
402
+ sig do
403
+ override.returns(
404
+ {
405
+ postback_data: T.nilable(String),
406
+ text: T.nilable(String),
407
+ type: String,
408
+ value: String
409
+ }
410
+ )
411
+ end
412
+ def to_hash
413
+ end
414
+ end
415
+ end
416
+ end
417
+ end
418
+ end
419
+ end
@@ -0,0 +1,88 @@
1
+ # typed: strong
2
+
3
+ module Sentdm
4
+ module Models
5
+ class InboundMessageEvent < Sentdm::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(Sentdm::InboundMessageEvent, Sentdm::Internal::AnyHash)
9
+ end
10
+
11
+ # The specific event within the family, for example message.delivered or
12
+ # message.received. Absent on events that have no subtype, so treat it as
13
+ # optional.
14
+ sig { returns(T.nilable(String)) }
15
+ attr_accessor :event
16
+
17
+ # The event family, for example message or templates. Route on this first, then on
18
+ # event for the specific change.
19
+ sig { returns(T.nilable(String)) }
20
+ attr_reader :field
21
+
22
+ sig { params(field: String).void }
23
+ attr_writer :field
24
+
25
+ # Body of a message.received event. Delivered when a contact messages one of your
26
+ # numbers.
27
+ sig { returns(T.nilable(Sentdm::InboundMessageEventPayload)) }
28
+ attr_reader :payload
29
+
30
+ sig do
31
+ params(
32
+ payload: T.nilable(Sentdm::InboundMessageEventPayload::OrHash)
33
+ ).void
34
+ end
35
+ attr_writer :payload
36
+
37
+ # When Sent emitted the event, in UTC (yyyy-MM-ddTHH:mm:ssZ). This is the emission
38
+ # time, not the time the underlying change happened. Use the timestamp inside the
39
+ # payload for the latter.
40
+ sig { returns(T.nilable(String)) }
41
+ attr_reader :timestamp
42
+
43
+ sig { params(timestamp: String).void }
44
+ attr_writer :timestamp
45
+
46
+ # The envelope Sent POSTs to a subscribed webhook endpoint. Every event shares
47
+ # this shape and varies only in Payload.
48
+ sig do
49
+ params(
50
+ event: T.nilable(String),
51
+ field: String,
52
+ payload: T.nilable(Sentdm::InboundMessageEventPayload::OrHash),
53
+ timestamp: String
54
+ ).returns(T.attached_class)
55
+ end
56
+ def self.new(
57
+ # The specific event within the family, for example message.delivered or
58
+ # message.received. Absent on events that have no subtype, so treat it as
59
+ # optional.
60
+ event: nil,
61
+ # The event family, for example message or templates. Route on this first, then on
62
+ # event for the specific change.
63
+ field: nil,
64
+ # Body of a message.received event. Delivered when a contact messages one of your
65
+ # numbers.
66
+ payload: nil,
67
+ # When Sent emitted the event, in UTC (yyyy-MM-ddTHH:mm:ssZ). This is the emission
68
+ # time, not the time the underlying change happened. Use the timestamp inside the
69
+ # payload for the latter.
70
+ timestamp: nil
71
+ )
72
+ end
73
+
74
+ sig do
75
+ override.returns(
76
+ {
77
+ event: T.nilable(String),
78
+ field: String,
79
+ payload: T.nilable(Sentdm::InboundMessageEventPayload),
80
+ timestamp: String
81
+ }
82
+ )
83
+ end
84
+ def to_hash
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,122 @@
1
+ # typed: strong
2
+
3
+ module Sentdm
4
+ module Models
5
+ class InboundMessageEventPayload < Sentdm::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(Sentdm::InboundMessageEventPayload, Sentdm::Internal::AnyHash)
9
+ end
10
+
11
+ # The account the message belongs to.
12
+ sig { returns(T.nilable(String)) }
13
+ attr_reader :account_id
14
+
15
+ sig { params(account_id: String).void }
16
+ attr_writer :account_id
17
+
18
+ # The channel the message arrived on, for example sms or whatsapp.
19
+ sig { returns(T.nilable(String)) }
20
+ attr_reader :channel
21
+
22
+ sig { params(channel: String).void }
23
+ attr_writer :channel
24
+
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
+ # The inbound message.
33
+ sig { returns(T.nilable(String)) }
34
+ attr_reader :message_id
35
+
36
+ sig { params(message_id: String).void }
37
+ attr_writer :message_id
38
+
39
+ # Your number in E.164 format, meaning the number the message was addressed to.
40
+ sig { returns(T.nilable(String)) }
41
+ attr_reader :outbound_number
42
+
43
+ sig { params(outbound_number: String).void }
44
+ attr_writer :outbound_number
45
+
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
+ # The message body. Sent as null when the inbound message carried no text, for
54
+ # example a media-only message. The field is always present, so read it and check
55
+ # for null rather than checking whether the key exists.
56
+ sig { returns(T.nilable(String)) }
57
+ attr_accessor :text
58
+
59
+ # When the message was received, in UTC (yyyy-MM-ddTHH:mm:ssZ). Same value as
60
+ # ReceivedAt, kept for envelope consistency with outbound events.
61
+ sig { returns(T.nilable(String)) }
62
+ attr_reader :updated_at
63
+
64
+ sig { params(updated_at: String).void }
65
+ attr_writer :updated_at
66
+
67
+ # Body of a message.received event. Delivered when a contact messages one of your
68
+ # numbers.
69
+ sig do
70
+ params(
71
+ account_id: String,
72
+ channel: String,
73
+ inbound_number: String,
74
+ message_id: String,
75
+ outbound_number: String,
76
+ received_at: String,
77
+ text: T.nilable(String),
78
+ updated_at: String
79
+ ).returns(T.attached_class)
80
+ end
81
+ def self.new(
82
+ # The account the message belongs to.
83
+ account_id: nil,
84
+ # The channel the message arrived on, for example sms or whatsapp.
85
+ channel: nil,
86
+ # The contact's number in E.164 format, meaning the number the message came from.
87
+ inbound_number: nil,
88
+ # The inbound message.
89
+ message_id: nil,
90
+ # Your number in E.164 format, meaning the number the message was addressed to.
91
+ outbound_number: nil,
92
+ # When the message was received, in UTC (yyyy-MM-ddTHH:mm:ssZ).
93
+ received_at: nil,
94
+ # The message body. Sent as null when the inbound message carried no text, for
95
+ # example a media-only message. The field is always present, so read it and check
96
+ # for null rather than checking whether the key exists.
97
+ text: nil,
98
+ # When the message was received, in UTC (yyyy-MM-ddTHH:mm:ssZ). Same value as
99
+ # ReceivedAt, kept for envelope consistency with outbound events.
100
+ updated_at: nil
101
+ )
102
+ end
103
+
104
+ sig do
105
+ override.returns(
106
+ {
107
+ account_id: String,
108
+ channel: String,
109
+ inbound_number: String,
110
+ message_id: String,
111
+ outbound_number: String,
112
+ received_at: String,
113
+ text: T.nilable(String),
114
+ updated_at: String
115
+ }
116
+ )
117
+ end
118
+ def to_hash
119
+ end
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,86 @@
1
+ # typed: strong
2
+
3
+ module Sentdm
4
+ module Models
5
+ class MessageEvent < Sentdm::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias { T.any(Sentdm::MessageEvent, Sentdm::Internal::AnyHash) }
8
+
9
+ # The specific event within the family, for example message.delivered or
10
+ # message.received. Absent on events that have no subtype, so treat it as
11
+ # optional.
12
+ sig { returns(T.nilable(String)) }
13
+ attr_accessor :event
14
+
15
+ # The event family, for example message or templates. Route on this first, then on
16
+ # event for the specific change.
17
+ sig { returns(T.nilable(String)) }
18
+ attr_reader :field
19
+
20
+ sig { params(field: String).void }
21
+ attr_writer :field
22
+
23
+ # Body of an outbound message lifecycle event. Delivered once per status change,
24
+ # so a single message produces several of these as it moves toward a terminal
25
+ # status.
26
+ sig { returns(T.nilable(Sentdm::MessageEventPayload)) }
27
+ attr_reader :payload
28
+
29
+ sig do
30
+ params(payload: T.nilable(Sentdm::MessageEventPayload::OrHash)).void
31
+ end
32
+ attr_writer :payload
33
+
34
+ # When Sent emitted the event, in UTC (yyyy-MM-ddTHH:mm:ssZ). This is the emission
35
+ # time, not the time the underlying change happened. Use the timestamp inside the
36
+ # payload for the latter.
37
+ sig { returns(T.nilable(String)) }
38
+ attr_reader :timestamp
39
+
40
+ sig { params(timestamp: String).void }
41
+ attr_writer :timestamp
42
+
43
+ # The envelope Sent POSTs to a subscribed webhook endpoint. Every event shares
44
+ # this shape and varies only in Payload.
45
+ sig do
46
+ params(
47
+ event: T.nilable(String),
48
+ field: String,
49
+ payload: T.nilable(Sentdm::MessageEventPayload::OrHash),
50
+ timestamp: String
51
+ ).returns(T.attached_class)
52
+ end
53
+ def self.new(
54
+ # The specific event within the family, for example message.delivered or
55
+ # message.received. Absent on events that have no subtype, so treat it as
56
+ # optional.
57
+ event: nil,
58
+ # The event family, for example message or templates. Route on this first, then on
59
+ # event for the specific change.
60
+ field: nil,
61
+ # Body of an outbound message lifecycle event. Delivered once per status change,
62
+ # so a single message produces several of these as it moves toward a terminal
63
+ # status.
64
+ payload: nil,
65
+ # When Sent emitted the event, in UTC (yyyy-MM-ddTHH:mm:ssZ). This is the emission
66
+ # time, not the time the underlying change happened. Use the timestamp inside the
67
+ # payload for the latter.
68
+ timestamp: nil
69
+ )
70
+ end
71
+
72
+ sig do
73
+ override.returns(
74
+ {
75
+ event: T.nilable(String),
76
+ field: String,
77
+ payload: T.nilable(Sentdm::MessageEventPayload),
78
+ timestamp: String
79
+ }
80
+ )
81
+ end
82
+ def to_hash
83
+ end
84
+ end
85
+ end
86
+ end