trycourier 4.26.0 → 4.26.2

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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -0
  3. data/README.md +16 -19
  4. data/lib/courier/client.rb +4 -0
  5. data/lib/courier/models/bulk_add_users_params.rb +26 -0
  6. data/lib/courier/models/bulk_create_job_params.rb +29 -0
  7. data/lib/courier/models/bulk_create_job_response.rb +16 -0
  8. data/lib/courier/models/bulk_list_users_params.rb +33 -0
  9. data/lib/courier/models/bulk_list_users_response.rb +49 -0
  10. data/lib/courier/models/bulk_retrieve_job_params.rb +20 -0
  11. data/lib/courier/models/bulk_retrieve_job_response.rb +76 -0
  12. data/lib/courier/models/bulk_run_job_params.rb +20 -0
  13. data/lib/courier/models/inbound_bulk_message.rb +91 -0
  14. data/lib/courier/models/inbound_bulk_message_user.rb +54 -0
  15. data/lib/courier/models.rb +14 -0
  16. data/lib/courier/resources/broadcasts.rb +16 -9
  17. data/lib/courier/resources/bulk.rb +146 -0
  18. data/lib/courier/resources/send.rb +2 -1
  19. data/lib/courier/version.rb +1 -1
  20. data/lib/courier.rb +11 -0
  21. data/rbi/courier/client.rbi +3 -0
  22. data/rbi/courier/models/bulk_add_users_params.rbi +43 -0
  23. data/rbi/courier/models/bulk_create_job_params.rbi +54 -0
  24. data/rbi/courier/models/bulk_create_job_response.rbi +26 -0
  25. data/rbi/courier/models/bulk_list_users_params.rbi +51 -0
  26. data/rbi/courier/models/bulk_list_users_response.rbi +125 -0
  27. data/rbi/courier/models/bulk_retrieve_job_params.rbi +35 -0
  28. data/rbi/courier/models/bulk_retrieve_job_response.rbi +157 -0
  29. data/rbi/courier/models/bulk_run_job_params.rbi +35 -0
  30. data/rbi/courier/models/inbound_bulk_message.rbi +124 -0
  31. data/rbi/courier/models/inbound_bulk_message_user.rbi +88 -0
  32. data/rbi/courier/models.rbi +14 -0
  33. data/rbi/courier/resources/broadcasts.rbi +26 -4
  34. data/rbi/courier/resources/bulk.rbi +107 -0
  35. data/rbi/courier/resources/send.rbi +2 -1
  36. data/sig/courier/client.rbs +2 -0
  37. data/sig/courier/models/bulk_add_users_params.rbs +28 -0
  38. data/sig/courier/models/bulk_create_job_params.rbs +24 -0
  39. data/sig/courier/models/bulk_create_job_response.rbs +13 -0
  40. data/sig/courier/models/bulk_list_users_params.rbs +28 -0
  41. data/sig/courier/models/bulk_list_users_response.rbs +65 -0
  42. data/sig/courier/models/bulk_retrieve_job_params.rbs +23 -0
  43. data/sig/courier/models/bulk_retrieve_job_response.rbs +66 -0
  44. data/sig/courier/models/bulk_run_job_params.rbs +23 -0
  45. data/sig/courier/models/inbound_bulk_message.rbs +58 -0
  46. data/sig/courier/models/inbound_bulk_message_user.rbs +42 -0
  47. data/sig/courier/models.rbs +14 -0
  48. data/sig/courier/resources/bulk.rbs +34 -0
  49. metadata +35 -2
@@ -0,0 +1,157 @@
1
+ # typed: strong
2
+
3
+ module Courier
4
+ module Models
5
+ class BulkRetrieveJobResponse < Courier::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(
9
+ Courier::Models::BulkRetrieveJobResponse,
10
+ Courier::Internal::AnyHash
11
+ )
12
+ end
13
+
14
+ sig { returns(Courier::Models::BulkRetrieveJobResponse::Job) }
15
+ attr_reader :job
16
+
17
+ sig do
18
+ params(job: Courier::Models::BulkRetrieveJobResponse::Job::OrHash).void
19
+ end
20
+ attr_writer :job
21
+
22
+ sig do
23
+ params(
24
+ job: Courier::Models::BulkRetrieveJobResponse::Job::OrHash
25
+ ).returns(T.attached_class)
26
+ end
27
+ def self.new(job:)
28
+ end
29
+
30
+ sig do
31
+ override.returns({ job: Courier::Models::BulkRetrieveJobResponse::Job })
32
+ end
33
+ def to_hash
34
+ end
35
+
36
+ class Job < Courier::Internal::Type::BaseModel
37
+ OrHash =
38
+ T.type_alias do
39
+ T.any(
40
+ Courier::Models::BulkRetrieveJobResponse::Job,
41
+ Courier::Internal::AnyHash
42
+ )
43
+ end
44
+
45
+ # Bulk message definition. Supports two formats:
46
+ #
47
+ # - V1 format: Requires `event` field (event ID or notification ID)
48
+ # - V2 format: Optionally use `template` (notification ID) or `content` (Elemental
49
+ # content) in addition to `event`
50
+ sig { returns(Courier::InboundBulkMessage) }
51
+ attr_reader :definition
52
+
53
+ sig { params(definition: Courier::InboundBulkMessage::OrHash).void }
54
+ attr_writer :definition
55
+
56
+ sig { returns(Integer) }
57
+ attr_accessor :enqueued
58
+
59
+ sig { returns(Integer) }
60
+ attr_accessor :failures
61
+
62
+ sig { returns(Integer) }
63
+ attr_accessor :received
64
+
65
+ sig do
66
+ returns(
67
+ Courier::Models::BulkRetrieveJobResponse::Job::Status::TaggedSymbol
68
+ )
69
+ end
70
+ attr_accessor :status
71
+
72
+ sig do
73
+ params(
74
+ definition: Courier::InboundBulkMessage::OrHash,
75
+ enqueued: Integer,
76
+ failures: Integer,
77
+ received: Integer,
78
+ status:
79
+ Courier::Models::BulkRetrieveJobResponse::Job::Status::OrSymbol
80
+ ).returns(T.attached_class)
81
+ end
82
+ def self.new(
83
+ # Bulk message definition. Supports two formats:
84
+ #
85
+ # - V1 format: Requires `event` field (event ID or notification ID)
86
+ # - V2 format: Optionally use `template` (notification ID) or `content` (Elemental
87
+ # content) in addition to `event`
88
+ definition:,
89
+ enqueued:,
90
+ failures:,
91
+ received:,
92
+ status:
93
+ )
94
+ end
95
+
96
+ sig do
97
+ override.returns(
98
+ {
99
+ definition: Courier::InboundBulkMessage,
100
+ enqueued: Integer,
101
+ failures: Integer,
102
+ received: Integer,
103
+ status:
104
+ Courier::Models::BulkRetrieveJobResponse::Job::Status::TaggedSymbol
105
+ }
106
+ )
107
+ end
108
+ def to_hash
109
+ end
110
+
111
+ module Status
112
+ extend Courier::Internal::Type::Enum
113
+
114
+ TaggedSymbol =
115
+ T.type_alias do
116
+ T.all(
117
+ Symbol,
118
+ Courier::Models::BulkRetrieveJobResponse::Job::Status
119
+ )
120
+ end
121
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
122
+
123
+ CREATED =
124
+ T.let(
125
+ :CREATED,
126
+ Courier::Models::BulkRetrieveJobResponse::Job::Status::TaggedSymbol
127
+ )
128
+ PROCESSING =
129
+ T.let(
130
+ :PROCESSING,
131
+ Courier::Models::BulkRetrieveJobResponse::Job::Status::TaggedSymbol
132
+ )
133
+ COMPLETED =
134
+ T.let(
135
+ :COMPLETED,
136
+ Courier::Models::BulkRetrieveJobResponse::Job::Status::TaggedSymbol
137
+ )
138
+ ERROR =
139
+ T.let(
140
+ :ERROR,
141
+ Courier::Models::BulkRetrieveJobResponse::Job::Status::TaggedSymbol
142
+ )
143
+
144
+ sig do
145
+ override.returns(
146
+ T::Array[
147
+ Courier::Models::BulkRetrieveJobResponse::Job::Status::TaggedSymbol
148
+ ]
149
+ )
150
+ end
151
+ def self.values
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,35 @@
1
+ # typed: strong
2
+
3
+ module Courier
4
+ module Models
5
+ class BulkRunJobParams < Courier::Internal::Type::BaseModel
6
+ extend Courier::Internal::Type::RequestParameters::Converter
7
+ include Courier::Internal::Type::RequestParameters
8
+
9
+ OrHash =
10
+ T.type_alias do
11
+ T.any(Courier::BulkRunJobParams, Courier::Internal::AnyHash)
12
+ end
13
+
14
+ sig { returns(String) }
15
+ attr_accessor :job_id
16
+
17
+ sig do
18
+ params(
19
+ job_id: String,
20
+ request_options: Courier::RequestOptions::OrHash
21
+ ).returns(T.attached_class)
22
+ end
23
+ def self.new(job_id:, request_options: {})
24
+ end
25
+
26
+ sig do
27
+ override.returns(
28
+ { job_id: String, request_options: Courier::RequestOptions }
29
+ )
30
+ end
31
+ def to_hash
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,124 @@
1
+ # typed: strong
2
+
3
+ module Courier
4
+ module Models
5
+ class InboundBulkMessage < Courier::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(Courier::InboundBulkMessage, Courier::Internal::AnyHash)
9
+ end
10
+
11
+ # Event ID or Notification ID (required). Can be either a Notification ID (e.g.,
12
+ # "FRH3QXM9E34W4RKP7MRC8NZ1T8V8") or a custom Event ID (e.g., "welcome-email")
13
+ # mapped to a notification.
14
+ sig { returns(String) }
15
+ attr_accessor :event
16
+
17
+ sig { returns(T.nilable(String)) }
18
+ attr_accessor :brand
19
+
20
+ # Elemental content (optional, for V2 format). When provided, this will be used
21
+ # instead of the notification associated with the `event` field.
22
+ sig do
23
+ returns(
24
+ T.nilable(
25
+ T.any(Courier::ElementalContentSugar, Courier::ElementalContent)
26
+ )
27
+ )
28
+ end
29
+ attr_accessor :content
30
+
31
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
32
+ attr_accessor :data
33
+
34
+ sig { returns(T.nilable(T::Hash[Symbol, T::Hash[Symbol, T.anything]])) }
35
+ attr_accessor :locale
36
+
37
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
38
+ attr_accessor :override
39
+
40
+ # Notification ID or template ID (optional, for V2 format). When provided, this
41
+ # will be used instead of the notification associated with the `event` field.
42
+ sig { returns(T.nilable(String)) }
43
+ attr_accessor :template
44
+
45
+ # Bulk message definition. Supports two formats:
46
+ #
47
+ # - V1 format: Requires `event` field (event ID or notification ID)
48
+ # - V2 format: Optionally use `template` (notification ID) or `content` (Elemental
49
+ # content) in addition to `event`
50
+ sig do
51
+ params(
52
+ event: String,
53
+ brand: T.nilable(String),
54
+ content:
55
+ T.nilable(
56
+ T.any(
57
+ Courier::ElementalContentSugar::OrHash,
58
+ Courier::ElementalContent::OrHash
59
+ )
60
+ ),
61
+ data: T.nilable(T::Hash[Symbol, T.anything]),
62
+ locale: T.nilable(T::Hash[Symbol, T::Hash[Symbol, T.anything]]),
63
+ override: T.nilable(T::Hash[Symbol, T.anything]),
64
+ template: T.nilable(String)
65
+ ).returns(T.attached_class)
66
+ end
67
+ def self.new(
68
+ # Event ID or Notification ID (required). Can be either a Notification ID (e.g.,
69
+ # "FRH3QXM9E34W4RKP7MRC8NZ1T8V8") or a custom Event ID (e.g., "welcome-email")
70
+ # mapped to a notification.
71
+ event:,
72
+ brand: nil,
73
+ # Elemental content (optional, for V2 format). When provided, this will be used
74
+ # instead of the notification associated with the `event` field.
75
+ content: nil,
76
+ data: nil,
77
+ locale: nil,
78
+ override: nil,
79
+ # Notification ID or template ID (optional, for V2 format). When provided, this
80
+ # will be used instead of the notification associated with the `event` field.
81
+ template: nil
82
+ )
83
+ end
84
+
85
+ sig do
86
+ override.returns(
87
+ {
88
+ event: String,
89
+ brand: T.nilable(String),
90
+ content:
91
+ T.nilable(
92
+ T.any(Courier::ElementalContentSugar, Courier::ElementalContent)
93
+ ),
94
+ data: T.nilable(T::Hash[Symbol, T.anything]),
95
+ locale: T.nilable(T::Hash[Symbol, T::Hash[Symbol, T.anything]]),
96
+ override: T.nilable(T::Hash[Symbol, T.anything]),
97
+ template: T.nilable(String)
98
+ }
99
+ )
100
+ end
101
+ def to_hash
102
+ end
103
+
104
+ # Elemental content (optional, for V2 format). When provided, this will be used
105
+ # instead of the notification associated with the `event` field.
106
+ module Content
107
+ extend Courier::Internal::Type::Union
108
+
109
+ Variants =
110
+ T.type_alias do
111
+ T.any(Courier::ElementalContentSugar, Courier::ElementalContent)
112
+ end
113
+
114
+ sig do
115
+ override.returns(
116
+ T::Array[Courier::InboundBulkMessage::Content::Variants]
117
+ )
118
+ end
119
+ def self.variants
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
@@ -0,0 +1,88 @@
1
+ # typed: strong
2
+
3
+ module Courier
4
+ module Models
5
+ class InboundBulkMessageUser < Courier::Internal::Type::BaseModel
6
+ OrHash =
7
+ T.type_alias do
8
+ T.any(Courier::InboundBulkMessageUser, Courier::Internal::AnyHash)
9
+ end
10
+
11
+ # User-specific data that will be merged with message.data
12
+ sig { returns(T.nilable(T.anything)) }
13
+ attr_reader :data
14
+
15
+ sig { params(data: T.anything).void }
16
+ attr_writer :data
17
+
18
+ sig { returns(T.nilable(Courier::RecipientPreferences)) }
19
+ attr_reader :preferences
20
+
21
+ sig do
22
+ params(
23
+ preferences: T.nilable(Courier::RecipientPreferences::OrHash)
24
+ ).void
25
+ end
26
+ attr_writer :preferences
27
+
28
+ # User profile information. For email-based bulk jobs, `profile.email` is required
29
+ # for provider routing to determine if the message can be delivered. The email
30
+ # address should be provided here rather than in `to.email`.
31
+ sig { returns(T.nilable(T::Hash[Symbol, T.anything])) }
32
+ attr_accessor :profile
33
+
34
+ # User ID (legacy field, use profile or to.user_id instead)
35
+ sig { returns(T.nilable(String)) }
36
+ attr_accessor :recipient
37
+
38
+ # Optional recipient information. Note: For email provider routing, use
39
+ # `profile.email` instead of `to.email`. The `to` field is primarily used for
40
+ # recipient identification and data merging.
41
+ sig { returns(T.nilable(Courier::UserRecipient)) }
42
+ attr_reader :to
43
+
44
+ sig { params(to: T.nilable(Courier::UserRecipient::OrHash)).void }
45
+ attr_writer :to
46
+
47
+ sig do
48
+ params(
49
+ data: T.anything,
50
+ preferences: T.nilable(Courier::RecipientPreferences::OrHash),
51
+ profile: T.nilable(T::Hash[Symbol, T.anything]),
52
+ recipient: T.nilable(String),
53
+ to: T.nilable(Courier::UserRecipient::OrHash)
54
+ ).returns(T.attached_class)
55
+ end
56
+ def self.new(
57
+ # User-specific data that will be merged with message.data
58
+ data: nil,
59
+ preferences: nil,
60
+ # User profile information. For email-based bulk jobs, `profile.email` is required
61
+ # for provider routing to determine if the message can be delivered. The email
62
+ # address should be provided here rather than in `to.email`.
63
+ profile: nil,
64
+ # User ID (legacy field, use profile or to.user_id instead)
65
+ recipient: nil,
66
+ # Optional recipient information. Note: For email provider routing, use
67
+ # `profile.email` instead of `to.email`. The `to` field is primarily used for
68
+ # recipient identification and data merging.
69
+ to: nil
70
+ )
71
+ end
72
+
73
+ sig do
74
+ override.returns(
75
+ {
76
+ data: T.anything,
77
+ preferences: T.nilable(Courier::RecipientPreferences),
78
+ profile: T.nilable(T::Hash[Symbol, T.anything]),
79
+ recipient: T.nilable(String),
80
+ to: T.nilable(Courier::UserRecipient)
81
+ }
82
+ )
83
+ end
84
+ def to_hash
85
+ end
86
+ end
87
+ end
88
+ end
@@ -106,6 +106,16 @@ module Courier
106
106
 
107
107
  BroadcastUpdateParams = Courier::Models::BroadcastUpdateParams
108
108
 
109
+ BulkAddUsersParams = Courier::Models::BulkAddUsersParams
110
+
111
+ BulkCreateJobParams = Courier::Models::BulkCreateJobParams
112
+
113
+ BulkListUsersParams = Courier::Models::BulkListUsersParams
114
+
115
+ BulkRetrieveJobParams = Courier::Models::BulkRetrieveJobParams
116
+
117
+ BulkRunJobParams = Courier::Models::BulkRunJobParams
118
+
109
119
  CancelJourneyRequest = Courier::Models::CancelJourneyRequest
110
120
 
111
121
  CancelJourneyResponse = Courier::Models::CancelJourneyResponse
@@ -178,6 +188,10 @@ module Courier
178
188
 
179
189
  Icons = Courier::Models::Icons
180
190
 
191
+ InboundBulkMessage = Courier::Models::InboundBulkMessage
192
+
193
+ InboundBulkMessageUser = Courier::Models::InboundBulkMessageUser
194
+
181
195
  InboundTrackEventParams = Courier::Models::InboundTrackEventParams
182
196
 
183
197
  Intercom = Courier::Models::Intercom
@@ -31,7 +31,11 @@ module Courier
31
31
  request_options: Courier::RequestOptions::OrHash
32
32
  ).returns(Courier::Broadcast)
33
33
  end
34
- def retrieve(broadcast_id, request_options: {})
34
+ def retrieve(
35
+ # The broadcast to retrieve, identified by the `id` returned when it was created.
36
+ broadcast_id,
37
+ request_options: {}
38
+ )
35
39
  end
36
40
 
37
41
  # Update a broadcast's name. Content is edited via the broadcast's notification
@@ -44,6 +48,7 @@ module Courier
44
48
  ).returns(Courier::Broadcast)
45
49
  end
46
50
  def update(
51
+ # The broadcast to rename.
47
52
  broadcast_id,
48
53
  # New human-readable name.
49
54
  name:,
@@ -77,7 +82,11 @@ module Courier
77
82
  request_options: Courier::RequestOptions::OrHash
78
83
  ).returns(Courier::Broadcast)
79
84
  end
80
- def archive(broadcast_id, request_options: {})
85
+ def archive(
86
+ # The broadcast to archive.
87
+ broadcast_id,
88
+ request_options: {}
89
+ )
81
90
  end
82
91
 
83
92
  # Cancel a broadcast's pending schedule, returning it to the draft state. Only
@@ -88,7 +97,11 @@ module Courier
88
97
  request_options: Courier::RequestOptions::OrHash
89
98
  ).returns(Courier::Broadcast)
90
99
  end
91
- def cancel(broadcast_id, request_options: {})
100
+ def cancel(
101
+ # The broadcast to cancel.
102
+ broadcast_id,
103
+ request_options: {}
104
+ )
92
105
  end
93
106
 
94
107
  # Duplicate a broadcast (and its template) into a new draft named "{source name}
@@ -99,7 +112,12 @@ module Courier
99
112
  request_options: Courier::RequestOptions::OrHash
100
113
  ).returns(Courier::Broadcast)
101
114
  end
102
- def duplicate(broadcast_id, request_options: {})
115
+ def duplicate(
116
+ # The broadcast to copy. The duplicate is created as a new draft and this
117
+ # broadcast is left unchanged.
118
+ broadcast_id,
119
+ request_options: {}
120
+ )
103
121
  end
104
122
 
105
123
  # Author the broadcast's content by replacing the draft elemental content of its
@@ -114,6 +132,7 @@ module Courier
114
132
  ).returns(Courier::NotificationContentMutationResponse)
115
133
  end
116
134
  def put_content(
135
+ # The broadcast whose content you want to replace.
117
136
  broadcast_id,
118
137
  # Elemental content payload. The server defaults `version` when omitted.
119
138
  content:,
@@ -134,6 +153,7 @@ module Courier
134
153
  ).returns(Courier::NotificationContentGetResponse)
135
154
  end
136
155
  def retrieve_content(
156
+ # The broadcast whose content you want to read.
137
157
  broadcast_id,
138
158
  # Accepts `draft`, `published`, or a version string (e.g. `v001`). Defaults to
139
159
  # `draft`.
@@ -157,6 +177,7 @@ module Courier
157
177
  ).returns(Courier::Broadcast)
158
178
  end
159
179
  def schedule(
180
+ # The broadcast to schedule.
160
181
  broadcast_id,
161
182
  # ID of the target list or audience.
162
183
  recipient_id:,
@@ -183,6 +204,7 @@ module Courier
183
204
  ).returns(Courier::Broadcast)
184
205
  end
185
206
  def send_(
207
+ # The broadcast to send.
186
208
  broadcast_id,
187
209
  # ID of the target list or audience.
188
210
  recipient_id:,
@@ -0,0 +1,107 @@
1
+ # typed: strong
2
+
3
+ module Courier
4
+ module Resources
5
+ class Bulk
6
+ # Ingest user data into a Bulk Job.
7
+ #
8
+ # **Important**: For email-based bulk jobs, each user must include `profile.email`
9
+ # for provider routing to work correctly. The `to.email` field is not sufficient
10
+ # for email provider routing.
11
+ sig do
12
+ params(
13
+ job_id: String,
14
+ users: T::Array[Courier::InboundBulkMessageUser::OrHash],
15
+ request_options: Courier::RequestOptions::OrHash
16
+ ).void
17
+ end
18
+ def add_users(
19
+ # A unique identifier representing the bulk job
20
+ job_id,
21
+ users:,
22
+ request_options: {}
23
+ )
24
+ end
25
+
26
+ # Creates a new bulk job for sending messages to multiple recipients.
27
+ #
28
+ # **Required**: `message.event` (event ID or notification ID)
29
+ #
30
+ # **Optional (V2 format)**: `message.template` (notification ID) or
31
+ # `message.content` (Elemental content) can be provided to override the
32
+ # notification associated with the event.
33
+ sig do
34
+ params(
35
+ message: Courier::InboundBulkMessage::OrHash,
36
+ request_options: Courier::RequestOptions::OrHash
37
+ ).returns(Courier::Models::BulkCreateJobResponse)
38
+ end
39
+ def create_job(
40
+ # Bulk message definition. Supports two formats:
41
+ #
42
+ # - V1 format: Requires `event` field (event ID or notification ID)
43
+ # - V2 format: Optionally use `template` (notification ID) or `content` (Elemental
44
+ # content) in addition to `event`
45
+ message:,
46
+ request_options: {}
47
+ )
48
+ end
49
+
50
+ # Returns the users ingested into a bulk job with paging, each carrying the status
51
+ # Courier recorded for it and the id of the message it produced.
52
+ sig do
53
+ params(
54
+ job_id: String,
55
+ cursor: T.nilable(String),
56
+ request_options: Courier::RequestOptions::OrHash
57
+ ).returns(Courier::Models::BulkListUsersResponse)
58
+ end
59
+ def list_users(
60
+ # A unique identifier representing the bulk job
61
+ job_id,
62
+ # A unique identifier that allows for fetching the next set of users added to the
63
+ # bulk job
64
+ cursor: nil,
65
+ request_options: {}
66
+ )
67
+ end
68
+
69
+ # Returns a bulk job's message definition, its status — CREATED, PROCESSING,
70
+ # COMPLETED, or ERROR — and running counts of users received, messages enqueued,
71
+ # and failures. Poll it to follow a job through to completion.
72
+ sig do
73
+ params(
74
+ job_id: String,
75
+ request_options: Courier::RequestOptions::OrHash
76
+ ).returns(Courier::Models::BulkRetrieveJobResponse)
77
+ end
78
+ def retrieve_job(
79
+ # A unique identifier representing the bulk job
80
+ job_id,
81
+ request_options: {}
82
+ )
83
+ end
84
+
85
+ # Starts processing a bulk job, sending to every user ingested into it. Returns
86
+ # 204 immediately; the job runs asynchronously, so poll the job to watch its
87
+ # status and counts.
88
+ sig do
89
+ params(
90
+ job_id: String,
91
+ request_options: Courier::RequestOptions::OrHash
92
+ ).void
93
+ end
94
+ def run_job(
95
+ # A unique identifier representing the bulk job
96
+ job_id,
97
+ request_options: {}
98
+ )
99
+ end
100
+
101
+ # @api private
102
+ sig { params(client: Courier::Client).returns(T.attached_class) }
103
+ def self.new(client:)
104
+ end
105
+ end
106
+ end
107
+ end
@@ -6,7 +6,8 @@ module Courier
6
6
  # across every channel you have configured.
7
7
  class Send
8
8
  # Sends a message to one or more recipients and returns a requestId. Courier
9
- # routes it to email, SMS, push, chat, or in-app based on your rules.
9
+ # routes it to email, SMS, push, chat, or in-app based on your rules. Use the
10
+ # returned requestId to look up delivery status via the Messages API.
10
11
  sig do
11
12
  params(
12
13
  message: Courier::SendMessageParams::Message::OrHash,
@@ -26,6 +26,8 @@ module Courier
26
26
 
27
27
  attr_reader broadcasts: Courier::Resources::Broadcasts
28
28
 
29
+ attr_reader bulk: Courier::Resources::Bulk
30
+
29
31
  attr_reader brands: Courier::Resources::Brands
30
32
 
31
33
  attr_reader digests: Courier::Resources::Digests
@@ -0,0 +1,28 @@
1
+ module Courier
2
+ module Models
3
+ type bulk_add_users_params =
4
+ { job_id: String, users: ::Array[Courier::InboundBulkMessageUser] }
5
+ & Courier::Internal::Type::request_parameters
6
+
7
+ class BulkAddUsersParams < Courier::Internal::Type::BaseModel
8
+ extend Courier::Internal::Type::RequestParameters::Converter
9
+ include Courier::Internal::Type::RequestParameters
10
+
11
+ attr_accessor job_id: String
12
+
13
+ attr_accessor users: ::Array[Courier::InboundBulkMessageUser]
14
+
15
+ def initialize: (
16
+ job_id: String,
17
+ users: ::Array[Courier::InboundBulkMessageUser],
18
+ ?request_options: Courier::request_opts
19
+ ) -> void
20
+
21
+ def to_hash: -> {
22
+ job_id: String,
23
+ users: ::Array[Courier::InboundBulkMessageUser],
24
+ request_options: Courier::RequestOptions
25
+ }
26
+ end
27
+ end
28
+ end