zavudev 0.4.0 → 0.5.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 +4 -4
- data/CHANGELOG.md +24 -0
- data/README.md +1 -1
- data/lib/zavudev/internal/util.rb +19 -6
- data/lib/zavudev/models/message_send_params.rb +59 -1
- data/lib/zavudev/models/webhook_event.rb +6 -0
- data/lib/zavudev/resources/messages.rb +3 -1
- data/lib/zavudev/version.rb +1 -1
- data/rbi/zavudev/internal/util.rbi +8 -0
- data/rbi/zavudev/models/message_send_params.rbi +101 -0
- data/rbi/zavudev/models/webhook_event.rbi +7 -0
- data/rbi/zavudev/resources/messages.rbi +4 -0
- data/sig/zavudev/internal/util.rbs +4 -0
- data/sig/zavudev/models/message_send_params.rbs +54 -0
- data/sig/zavudev/models/webhook_event.rbs +2 -0
- data/sig/zavudev/resources/messages.rbs +1 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b4ef6b1c38f382a0031988389835d7a923e031d506e14fe9f760ffa0e1b653f1
|
|
4
|
+
data.tar.gz: 461d663dc49c09fbb91bf15feaae55818f8cb5a259dc1e551d7d408781436996
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 429315f63bb85c17c6e0be83a569fec22516f393ce234a6f763a4b83b099f8dc116e609dcebfd9034ea6f3034653c6a8e5d571fffcf6763ab30f68db78725d94
|
|
7
|
+
data.tar.gz: 7325d1f541ab42cdb0d40ecfbcc71b72f111cbb88747fb85344af03f49b5126ea0c554afae9379cb0bb0950055d330058cac51755088092c69b1dfcc0eeedccd
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.5.0 (2026-04-03)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.4.1...v0.5.0](https://github.com/zavudev/sdk-ruby/compare/v0.4.1...v0.5.0)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **api:** api update ([c5b49ca](https://github.com/zavudev/sdk-ruby/commit/c5b49ca5d2bf7ad14c267aa0544d929bd6be0ede))
|
|
10
|
+
* **api:** api update ([e08767b](https://github.com/zavudev/sdk-ruby/commit/e08767b2a22bd0597697c7cfc1864e69b9064aed))
|
|
11
|
+
|
|
12
|
+
## 0.4.1 (2026-04-01)
|
|
13
|
+
|
|
14
|
+
Full Changelog: [v0.4.0...v0.4.1](https://github.com/zavudev/sdk-ruby/compare/v0.4.0...v0.4.1)
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* align path encoding with RFC 3986 section 3.3 ([4cc4622](https://github.com/zavudev/sdk-ruby/commit/4cc462282ec8bcf85f123e7bc7cffbf9d4fca1cd))
|
|
19
|
+
* **internal:** correct multipart form field name encoding ([43d6834](https://github.com/zavudev/sdk-ruby/commit/43d6834dab5f8d11e5a6a420b599a78c9f44b936))
|
|
20
|
+
* variable name typo ([9fc59d5](https://github.com/zavudev/sdk-ruby/commit/9fc59d5049ff0a2eb4223ed13d65602e8b6d49a1))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Chores
|
|
24
|
+
|
|
25
|
+
* **ci:** support opting out of skipping builds on metadata-only commits ([6011f4f](https://github.com/zavudev/sdk-ruby/commit/6011f4fb2114cd5abce24ec8a37314abf010b8a4))
|
|
26
|
+
|
|
3
27
|
## 0.4.0 (2026-03-26)
|
|
4
28
|
|
|
5
29
|
Full Changelog: [v0.3.0...v0.4.0](https://github.com/zavudev/sdk-ruby/compare/v0.3.0...v0.4.0)
|
data/README.md
CHANGED
|
@@ -157,7 +157,7 @@ module Zavudev
|
|
|
157
157
|
in Hash | nil => coerced
|
|
158
158
|
coerced
|
|
159
159
|
else
|
|
160
|
-
message = "Expected a #{Hash} or #{Zavudev::Internal::Type::BaseModel}, got #{
|
|
160
|
+
message = "Expected a #{Hash} or #{Zavudev::Internal::Type::BaseModel}, got #{input.inspect}"
|
|
161
161
|
raise ArgumentError.new(message)
|
|
162
162
|
end
|
|
163
163
|
end
|
|
@@ -237,6 +237,11 @@ module Zavudev
|
|
|
237
237
|
end
|
|
238
238
|
end
|
|
239
239
|
|
|
240
|
+
# @type [Regexp]
|
|
241
|
+
#
|
|
242
|
+
# https://www.rfc-editor.org/rfc/rfc3986.html#section-3.3
|
|
243
|
+
RFC_3986_NOT_PCHARS = /[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/
|
|
244
|
+
|
|
240
245
|
class << self
|
|
241
246
|
# @api private
|
|
242
247
|
#
|
|
@@ -247,6 +252,15 @@ module Zavudev
|
|
|
247
252
|
"#{uri.scheme}://#{uri.host}#{":#{uri.port}" unless uri.port == uri.default_port}"
|
|
248
253
|
end
|
|
249
254
|
|
|
255
|
+
# @api private
|
|
256
|
+
#
|
|
257
|
+
# @param path [String, Integer]
|
|
258
|
+
#
|
|
259
|
+
# @return [String]
|
|
260
|
+
def encode_path(path)
|
|
261
|
+
path.to_s.gsub(Zavudev::Internal::Util::RFC_3986_NOT_PCHARS) { ERB::Util.url_encode(_1) }
|
|
262
|
+
end
|
|
263
|
+
|
|
250
264
|
# @api private
|
|
251
265
|
#
|
|
252
266
|
# @param path [String, Array<String>]
|
|
@@ -259,7 +273,7 @@ module Zavudev
|
|
|
259
273
|
in []
|
|
260
274
|
""
|
|
261
275
|
in [String => p, *interpolations]
|
|
262
|
-
encoded = interpolations.map {
|
|
276
|
+
encoded = interpolations.map { encode_path(_1) }
|
|
263
277
|
format(p, *encoded)
|
|
264
278
|
end
|
|
265
279
|
end
|
|
@@ -571,16 +585,15 @@ module Zavudev
|
|
|
571
585
|
y << "Content-Disposition: form-data"
|
|
572
586
|
|
|
573
587
|
unless key.nil?
|
|
574
|
-
|
|
575
|
-
y << "; name=\"#{name}\""
|
|
588
|
+
y << "; name=\"#{key}\""
|
|
576
589
|
end
|
|
577
590
|
|
|
578
591
|
case val
|
|
579
592
|
in Zavudev::FilePart unless val.filename.nil?
|
|
580
|
-
filename =
|
|
593
|
+
filename = encode_path(val.filename)
|
|
581
594
|
y << "; filename=\"#{filename}\""
|
|
582
595
|
in Pathname | IO
|
|
583
|
-
filename =
|
|
596
|
+
filename = encode_path(::File.basename(val.to_path))
|
|
584
597
|
y << "; filename=\"#{filename}\""
|
|
585
598
|
else
|
|
586
599
|
end
|
|
@@ -14,6 +14,13 @@ module Zavudev
|
|
|
14
14
|
# @return [String]
|
|
15
15
|
required :to, String
|
|
16
16
|
|
|
17
|
+
# @!attribute attachments
|
|
18
|
+
# Email attachments. Only supported when channel is 'email'. Maximum 40MB total
|
|
19
|
+
# size.
|
|
20
|
+
#
|
|
21
|
+
# @return [Array<Zavudev::Models::MessageSendParams::Attachment>, nil]
|
|
22
|
+
optional :attachments, -> { Zavudev::Internal::Type::ArrayOf[Zavudev::MessageSendParams::Attachment] }
|
|
23
|
+
|
|
17
24
|
# @!attribute channel
|
|
18
25
|
# Delivery channel. Use 'auto' for intelligent routing. If omitted with non-text
|
|
19
26
|
# messageType, WhatsApp is used. For email recipients, defaults to 'email'.
|
|
@@ -89,12 +96,14 @@ module Zavudev
|
|
|
89
96
|
# @return [String, nil]
|
|
90
97
|
optional :zavu_sender, String
|
|
91
98
|
|
|
92
|
-
# @!method initialize(to:, channel: nil, content: nil, fallback_enabled: nil, html_body: nil, idempotency_key: nil, message_type: nil, metadata: nil, reply_to: nil, subject: nil, text: nil, voice_language: nil, zavu_sender: nil, request_options: {})
|
|
99
|
+
# @!method initialize(to:, attachments: nil, channel: nil, content: nil, fallback_enabled: nil, html_body: nil, idempotency_key: nil, message_type: nil, metadata: nil, reply_to: nil, subject: nil, text: nil, voice_language: nil, zavu_sender: nil, request_options: {})
|
|
93
100
|
# Some parameter documentations has been truncated, see
|
|
94
101
|
# {Zavudev::Models::MessageSendParams} for more details.
|
|
95
102
|
#
|
|
96
103
|
# @param to [String] Recipient phone number in E.164 format, email address, or numeric chat ID (for T
|
|
97
104
|
#
|
|
105
|
+
# @param attachments [Array<Zavudev::Models::MessageSendParams::Attachment>] Email attachments. Only supported when channel is 'email'. Maximum 40MB total si
|
|
106
|
+
#
|
|
98
107
|
# @param channel [Symbol, Zavudev::Models::Channel] Delivery channel. Use 'auto' for intelligent routing. If omitted with non-text m
|
|
99
108
|
#
|
|
100
109
|
# @param content [Zavudev::Models::MessageContent] Additional content for non-text message types.
|
|
@@ -120,6 +129,55 @@ module Zavudev
|
|
|
120
129
|
# @param zavu_sender [String]
|
|
121
130
|
#
|
|
122
131
|
# @param request_options [Zavudev::RequestOptions, Hash{Symbol=>Object}]
|
|
132
|
+
|
|
133
|
+
class Attachment < Zavudev::Internal::Type::BaseModel
|
|
134
|
+
# @!attribute filename
|
|
135
|
+
# Name of the attached file.
|
|
136
|
+
#
|
|
137
|
+
# @return [String]
|
|
138
|
+
required :filename, String
|
|
139
|
+
|
|
140
|
+
# @!attribute content
|
|
141
|
+
# Content of the attached file as a Base64-encoded string.
|
|
142
|
+
#
|
|
143
|
+
# @return [String, nil]
|
|
144
|
+
optional :content, String
|
|
145
|
+
|
|
146
|
+
# @!attribute content_id
|
|
147
|
+
# Content ID for inline images. Reference in HTML as
|
|
148
|
+
# `<img src="cid:your_content_id">`.
|
|
149
|
+
#
|
|
150
|
+
# @return [String, nil]
|
|
151
|
+
optional :content_id, String
|
|
152
|
+
|
|
153
|
+
# @!attribute content_type
|
|
154
|
+
# MIME type of the attachment. If not set, will be derived from the filename.
|
|
155
|
+
#
|
|
156
|
+
# @return [String, nil]
|
|
157
|
+
optional :content_type, String
|
|
158
|
+
|
|
159
|
+
# @!attribute path
|
|
160
|
+
# URL where the attachment file is hosted. The server will fetch the file.
|
|
161
|
+
#
|
|
162
|
+
# @return [String, nil]
|
|
163
|
+
optional :path, String
|
|
164
|
+
|
|
165
|
+
# @!method initialize(filename:, content: nil, content_id: nil, content_type: nil, path: nil)
|
|
166
|
+
# Some parameter documentations has been truncated, see
|
|
167
|
+
# {Zavudev::Models::MessageSendParams::Attachment} for more details.
|
|
168
|
+
#
|
|
169
|
+
# Email attachment. Provide either `content` (base64) or `path` (URL), not both.
|
|
170
|
+
#
|
|
171
|
+
# @param filename [String] Name of the attached file.
|
|
172
|
+
#
|
|
173
|
+
# @param content [String] Content of the attached file as a Base64-encoded string.
|
|
174
|
+
#
|
|
175
|
+
# @param content_id [String] Content ID for inline images. Reference in HTML as `<img src="cid:your_content_i
|
|
176
|
+
#
|
|
177
|
+
# @param content_type [String] MIME type of the attachment. If not set, will be derived from the filename.
|
|
178
|
+
#
|
|
179
|
+
# @param path [String] URL where the attachment file is hosted. The server will fetch the file.
|
|
180
|
+
end
|
|
123
181
|
end
|
|
124
182
|
end
|
|
125
183
|
end
|
|
@@ -30,6 +30,11 @@ module Zavudev
|
|
|
30
30
|
#
|
|
31
31
|
# - `conversation.new`: New conversation started with a contact
|
|
32
32
|
# - `template.status_changed`: WhatsApp template approval status changed
|
|
33
|
+
#
|
|
34
|
+
# **Partner events:**
|
|
35
|
+
#
|
|
36
|
+
# - `invitation.status_changed`: A partner invitation status changed (pending,
|
|
37
|
+
# in_progress, completed, cancelled)
|
|
33
38
|
module WebhookEvent
|
|
34
39
|
extend Zavudev::Internal::Type::Enum
|
|
35
40
|
|
|
@@ -43,6 +48,7 @@ module Zavudev
|
|
|
43
48
|
BROADCAST_STATUS_CHANGED = :"broadcast.status_changed"
|
|
44
49
|
CONVERSATION_NEW = :"conversation.new"
|
|
45
50
|
TEMPLATE_STATUS_CHANGED = :"template.status_changed"
|
|
51
|
+
INVITATION_STATUS_CHANGED = :"invitation.status_changed"
|
|
46
52
|
|
|
47
53
|
# @!method self.values
|
|
48
54
|
# @return [Array<Symbol>]
|
|
@@ -107,10 +107,12 @@ module Zavudev
|
|
|
107
107
|
# - Unverified accounts: 200 messages per channel per day
|
|
108
108
|
# - Complete KYC verification to increase limits to 10,000/day
|
|
109
109
|
#
|
|
110
|
-
# @overload send_(to:, channel: nil, content: nil, fallback_enabled: nil, html_body: nil, idempotency_key: nil, message_type: nil, metadata: nil, reply_to: nil, subject: nil, text: nil, voice_language: nil, zavu_sender: nil, request_options: {})
|
|
110
|
+
# @overload send_(to:, attachments: nil, channel: nil, content: nil, fallback_enabled: nil, html_body: nil, idempotency_key: nil, message_type: nil, metadata: nil, reply_to: nil, subject: nil, text: nil, voice_language: nil, zavu_sender: nil, request_options: {})
|
|
111
111
|
#
|
|
112
112
|
# @param to [String] Body param: Recipient phone number in E.164 format, email address, or numeric ch
|
|
113
113
|
#
|
|
114
|
+
# @param attachments [Array<Zavudev::Models::MessageSendParams::Attachment>] Body param: Email attachments. Only supported when channel is 'email'. Maximum 4
|
|
115
|
+
#
|
|
114
116
|
# @param channel [Symbol, Zavudev::Models::Channel] Body param: Delivery channel. Use 'auto' for intelligent routing. If omitted wit
|
|
115
117
|
#
|
|
116
118
|
# @param content [Zavudev::Models::MessageContent] Body param: Additional content for non-text message types.
|
data/lib/zavudev/version.rb
CHANGED
|
@@ -148,12 +148,20 @@ module Zavudev
|
|
|
148
148
|
end
|
|
149
149
|
end
|
|
150
150
|
|
|
151
|
+
# https://www.rfc-editor.org/rfc/rfc3986.html#section-3.3
|
|
152
|
+
RFC_3986_NOT_PCHARS = T.let(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/, Regexp)
|
|
153
|
+
|
|
151
154
|
class << self
|
|
152
155
|
# @api private
|
|
153
156
|
sig { params(uri: URI::Generic).returns(String) }
|
|
154
157
|
def uri_origin(uri)
|
|
155
158
|
end
|
|
156
159
|
|
|
160
|
+
# @api private
|
|
161
|
+
sig { params(path: T.any(String, Integer)).returns(String) }
|
|
162
|
+
def encode_path(path)
|
|
163
|
+
end
|
|
164
|
+
|
|
157
165
|
# @api private
|
|
158
166
|
sig { params(path: T.any(String, T::Array[String])).returns(String) }
|
|
159
167
|
def interpolate_path(path)
|
|
@@ -16,6 +16,20 @@ module Zavudev
|
|
|
16
16
|
sig { returns(String) }
|
|
17
17
|
attr_accessor :to
|
|
18
18
|
|
|
19
|
+
# Email attachments. Only supported when channel is 'email'. Maximum 40MB total
|
|
20
|
+
# size.
|
|
21
|
+
sig do
|
|
22
|
+
returns(T.nilable(T::Array[Zavudev::MessageSendParams::Attachment]))
|
|
23
|
+
end
|
|
24
|
+
attr_reader :attachments
|
|
25
|
+
|
|
26
|
+
sig do
|
|
27
|
+
params(
|
|
28
|
+
attachments: T::Array[Zavudev::MessageSendParams::Attachment::OrHash]
|
|
29
|
+
).void
|
|
30
|
+
end
|
|
31
|
+
attr_writer :attachments
|
|
32
|
+
|
|
19
33
|
# Delivery channel. Use 'auto' for intelligent routing. If omitted with non-text
|
|
20
34
|
# messageType, WhatsApp is used. For email recipients, defaults to 'email'.
|
|
21
35
|
sig { returns(T.nilable(Zavudev::Channel::OrSymbol)) }
|
|
@@ -106,6 +120,7 @@ module Zavudev
|
|
|
106
120
|
sig do
|
|
107
121
|
params(
|
|
108
122
|
to: String,
|
|
123
|
+
attachments: T::Array[Zavudev::MessageSendParams::Attachment::OrHash],
|
|
109
124
|
channel: Zavudev::Channel::OrSymbol,
|
|
110
125
|
content: Zavudev::MessageContent::OrHash,
|
|
111
126
|
fallback_enabled: T::Boolean,
|
|
@@ -125,6 +140,9 @@ module Zavudev
|
|
|
125
140
|
# Recipient phone number in E.164 format, email address, or numeric chat ID (for
|
|
126
141
|
# Telegram/Instagram).
|
|
127
142
|
to:,
|
|
143
|
+
# Email attachments. Only supported when channel is 'email'. Maximum 40MB total
|
|
144
|
+
# size.
|
|
145
|
+
attachments: nil,
|
|
128
146
|
# Delivery channel. Use 'auto' for intelligent routing. If omitted with non-text
|
|
129
147
|
# messageType, WhatsApp is used. For email recipients, defaults to 'email'.
|
|
130
148
|
channel: nil,
|
|
@@ -160,6 +178,7 @@ module Zavudev
|
|
|
160
178
|
override.returns(
|
|
161
179
|
{
|
|
162
180
|
to: String,
|
|
181
|
+
attachments: T::Array[Zavudev::MessageSendParams::Attachment],
|
|
163
182
|
channel: Zavudev::Channel::OrSymbol,
|
|
164
183
|
content: Zavudev::MessageContent,
|
|
165
184
|
fallback_enabled: T::Boolean,
|
|
@@ -178,6 +197,88 @@ module Zavudev
|
|
|
178
197
|
end
|
|
179
198
|
def to_hash
|
|
180
199
|
end
|
|
200
|
+
|
|
201
|
+
class Attachment < Zavudev::Internal::Type::BaseModel
|
|
202
|
+
OrHash =
|
|
203
|
+
T.type_alias do
|
|
204
|
+
T.any(
|
|
205
|
+
Zavudev::MessageSendParams::Attachment,
|
|
206
|
+
Zavudev::Internal::AnyHash
|
|
207
|
+
)
|
|
208
|
+
end
|
|
209
|
+
|
|
210
|
+
# Name of the attached file.
|
|
211
|
+
sig { returns(String) }
|
|
212
|
+
attr_accessor :filename
|
|
213
|
+
|
|
214
|
+
# Content of the attached file as a Base64-encoded string.
|
|
215
|
+
sig { returns(T.nilable(String)) }
|
|
216
|
+
attr_reader :content
|
|
217
|
+
|
|
218
|
+
sig { params(content: String).void }
|
|
219
|
+
attr_writer :content
|
|
220
|
+
|
|
221
|
+
# Content ID for inline images. Reference in HTML as
|
|
222
|
+
# `<img src="cid:your_content_id">`.
|
|
223
|
+
sig { returns(T.nilable(String)) }
|
|
224
|
+
attr_reader :content_id
|
|
225
|
+
|
|
226
|
+
sig { params(content_id: String).void }
|
|
227
|
+
attr_writer :content_id
|
|
228
|
+
|
|
229
|
+
# MIME type of the attachment. If not set, will be derived from the filename.
|
|
230
|
+
sig { returns(T.nilable(String)) }
|
|
231
|
+
attr_reader :content_type
|
|
232
|
+
|
|
233
|
+
sig { params(content_type: String).void }
|
|
234
|
+
attr_writer :content_type
|
|
235
|
+
|
|
236
|
+
# URL where the attachment file is hosted. The server will fetch the file.
|
|
237
|
+
sig { returns(T.nilable(String)) }
|
|
238
|
+
attr_reader :path
|
|
239
|
+
|
|
240
|
+
sig { params(path: String).void }
|
|
241
|
+
attr_writer :path
|
|
242
|
+
|
|
243
|
+
# Email attachment. Provide either `content` (base64) or `path` (URL), not both.
|
|
244
|
+
sig do
|
|
245
|
+
params(
|
|
246
|
+
filename: String,
|
|
247
|
+
content: String,
|
|
248
|
+
content_id: String,
|
|
249
|
+
content_type: String,
|
|
250
|
+
path: String
|
|
251
|
+
).returns(T.attached_class)
|
|
252
|
+
end
|
|
253
|
+
def self.new(
|
|
254
|
+
# Name of the attached file.
|
|
255
|
+
filename:,
|
|
256
|
+
# Content of the attached file as a Base64-encoded string.
|
|
257
|
+
content: nil,
|
|
258
|
+
# Content ID for inline images. Reference in HTML as
|
|
259
|
+
# `<img src="cid:your_content_id">`.
|
|
260
|
+
content_id: nil,
|
|
261
|
+
# MIME type of the attachment. If not set, will be derived from the filename.
|
|
262
|
+
content_type: nil,
|
|
263
|
+
# URL where the attachment file is hosted. The server will fetch the file.
|
|
264
|
+
path: nil
|
|
265
|
+
)
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
sig do
|
|
269
|
+
override.returns(
|
|
270
|
+
{
|
|
271
|
+
filename: String,
|
|
272
|
+
content: String,
|
|
273
|
+
content_id: String,
|
|
274
|
+
content_type: String,
|
|
275
|
+
path: String
|
|
276
|
+
}
|
|
277
|
+
)
|
|
278
|
+
end
|
|
279
|
+
def to_hash
|
|
280
|
+
end
|
|
281
|
+
end
|
|
181
282
|
end
|
|
182
283
|
end
|
|
183
284
|
end
|
|
@@ -30,6 +30,11 @@ module Zavudev
|
|
|
30
30
|
#
|
|
31
31
|
# - `conversation.new`: New conversation started with a contact
|
|
32
32
|
# - `template.status_changed`: WhatsApp template approval status changed
|
|
33
|
+
#
|
|
34
|
+
# **Partner events:**
|
|
35
|
+
#
|
|
36
|
+
# - `invitation.status_changed`: A partner invitation status changed (pending,
|
|
37
|
+
# in_progress, completed, cancelled)
|
|
33
38
|
module WebhookEvent
|
|
34
39
|
extend Zavudev::Internal::Type::Enum
|
|
35
40
|
|
|
@@ -54,6 +59,8 @@ module Zavudev
|
|
|
54
59
|
T.let(:"conversation.new", Zavudev::WebhookEvent::TaggedSymbol)
|
|
55
60
|
TEMPLATE_STATUS_CHANGED =
|
|
56
61
|
T.let(:"template.status_changed", Zavudev::WebhookEvent::TaggedSymbol)
|
|
62
|
+
INVITATION_STATUS_CHANGED =
|
|
63
|
+
T.let(:"invitation.status_changed", Zavudev::WebhookEvent::TaggedSymbol)
|
|
57
64
|
|
|
58
65
|
sig { override.returns(T::Array[Zavudev::WebhookEvent::TaggedSymbol]) }
|
|
59
66
|
def self.values
|
|
@@ -77,6 +77,7 @@ module Zavudev
|
|
|
77
77
|
sig do
|
|
78
78
|
params(
|
|
79
79
|
to: String,
|
|
80
|
+
attachments: T::Array[Zavudev::MessageSendParams::Attachment::OrHash],
|
|
80
81
|
channel: Zavudev::Channel::OrSymbol,
|
|
81
82
|
content: Zavudev::MessageContent::OrHash,
|
|
82
83
|
fallback_enabled: T::Boolean,
|
|
@@ -96,6 +97,9 @@ module Zavudev
|
|
|
96
97
|
# Body param: Recipient phone number in E.164 format, email address, or numeric
|
|
97
98
|
# chat ID (for Telegram/Instagram).
|
|
98
99
|
to:,
|
|
100
|
+
# Body param: Email attachments. Only supported when channel is 'email'. Maximum
|
|
101
|
+
# 40MB total size.
|
|
102
|
+
attachments: nil,
|
|
99
103
|
# Body param: Delivery channel. Use 'auto' for intelligent routing. If omitted
|
|
100
104
|
# with non-text messageType, WhatsApp is used. For email recipients, defaults to
|
|
101
105
|
# 'email'.
|
|
@@ -45,8 +45,12 @@ module Zavudev
|
|
|
45
45
|
-> top?
|
|
46
46
|
} -> top?
|
|
47
47
|
|
|
48
|
+
RFC_3986_NOT_PCHARS: Regexp
|
|
49
|
+
|
|
48
50
|
def self?.uri_origin: (URI::Generic uri) -> String
|
|
49
51
|
|
|
52
|
+
def self?.encode_path: (String | Integer path) -> String
|
|
53
|
+
|
|
50
54
|
def self?.interpolate_path: (String | ::Array[String] path) -> String
|
|
51
55
|
|
|
52
56
|
def self?.decode_query: (String? query) -> ::Hash[String, ::Array[String]]
|
|
@@ -3,6 +3,7 @@ module Zavudev
|
|
|
3
3
|
type message_send_params =
|
|
4
4
|
{
|
|
5
5
|
to: String,
|
|
6
|
+
attachments: ::Array[Zavudev::MessageSendParams::Attachment],
|
|
6
7
|
channel: Zavudev::Models::channel,
|
|
7
8
|
content: Zavudev::MessageContent,
|
|
8
9
|
fallback_enabled: bool,
|
|
@@ -24,6 +25,12 @@ module Zavudev
|
|
|
24
25
|
|
|
25
26
|
attr_accessor to: String
|
|
26
27
|
|
|
28
|
+
attr_reader attachments: ::Array[Zavudev::MessageSendParams::Attachment]?
|
|
29
|
+
|
|
30
|
+
def attachments=: (
|
|
31
|
+
::Array[Zavudev::MessageSendParams::Attachment]
|
|
32
|
+
) -> ::Array[Zavudev::MessageSendParams::Attachment]
|
|
33
|
+
|
|
27
34
|
attr_reader channel: Zavudev::Models::channel?
|
|
28
35
|
|
|
29
36
|
def channel=: (Zavudev::Models::channel) -> Zavudev::Models::channel
|
|
@@ -76,6 +83,7 @@ module Zavudev
|
|
|
76
83
|
|
|
77
84
|
def initialize: (
|
|
78
85
|
to: String,
|
|
86
|
+
?attachments: ::Array[Zavudev::MessageSendParams::Attachment],
|
|
79
87
|
?channel: Zavudev::Models::channel,
|
|
80
88
|
?content: Zavudev::MessageContent,
|
|
81
89
|
?fallback_enabled: bool,
|
|
@@ -93,6 +101,7 @@ module Zavudev
|
|
|
93
101
|
|
|
94
102
|
def to_hash: -> {
|
|
95
103
|
to: String,
|
|
104
|
+
attachments: ::Array[Zavudev::MessageSendParams::Attachment],
|
|
96
105
|
channel: Zavudev::Models::channel,
|
|
97
106
|
content: Zavudev::MessageContent,
|
|
98
107
|
fallback_enabled: bool,
|
|
@@ -107,6 +116,51 @@ module Zavudev
|
|
|
107
116
|
zavu_sender: String,
|
|
108
117
|
request_options: Zavudev::RequestOptions
|
|
109
118
|
}
|
|
119
|
+
|
|
120
|
+
type attachment =
|
|
121
|
+
{
|
|
122
|
+
filename: String,
|
|
123
|
+
content: String,
|
|
124
|
+
content_id: String,
|
|
125
|
+
content_type: String,
|
|
126
|
+
path: String
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
class Attachment < Zavudev::Internal::Type::BaseModel
|
|
130
|
+
attr_accessor filename: String
|
|
131
|
+
|
|
132
|
+
attr_reader content: String?
|
|
133
|
+
|
|
134
|
+
def content=: (String) -> String
|
|
135
|
+
|
|
136
|
+
attr_reader content_id: String?
|
|
137
|
+
|
|
138
|
+
def content_id=: (String) -> String
|
|
139
|
+
|
|
140
|
+
attr_reader content_type: String?
|
|
141
|
+
|
|
142
|
+
def content_type=: (String) -> String
|
|
143
|
+
|
|
144
|
+
attr_reader path: String?
|
|
145
|
+
|
|
146
|
+
def path=: (String) -> String
|
|
147
|
+
|
|
148
|
+
def initialize: (
|
|
149
|
+
filename: String,
|
|
150
|
+
?content: String,
|
|
151
|
+
?content_id: String,
|
|
152
|
+
?content_type: String,
|
|
153
|
+
?path: String
|
|
154
|
+
) -> void
|
|
155
|
+
|
|
156
|
+
def to_hash: -> {
|
|
157
|
+
filename: String,
|
|
158
|
+
content: String,
|
|
159
|
+
content_id: String,
|
|
160
|
+
content_type: String,
|
|
161
|
+
path: String
|
|
162
|
+
}
|
|
163
|
+
end
|
|
110
164
|
end
|
|
111
165
|
end
|
|
112
166
|
end
|
|
@@ -11,6 +11,7 @@ module Zavudev
|
|
|
11
11
|
| :"broadcast.status_changed"
|
|
12
12
|
| :"conversation.new"
|
|
13
13
|
| :"template.status_changed"
|
|
14
|
+
| :"invitation.status_changed"
|
|
14
15
|
|
|
15
16
|
module WebhookEvent
|
|
16
17
|
extend Zavudev::Internal::Type::Enum
|
|
@@ -25,6 +26,7 @@ module Zavudev
|
|
|
25
26
|
BROADCAST_STATUS_CHANGED: :"broadcast.status_changed"
|
|
26
27
|
CONVERSATION_NEW: :"conversation.new"
|
|
27
28
|
TEMPLATE_STATUS_CHANGED: :"template.status_changed"
|
|
29
|
+
INVITATION_STATUS_CHANGED: :"invitation.status_changed"
|
|
28
30
|
|
|
29
31
|
def self?.values: -> ::Array[Zavudev::Models::webhook_event]
|
|
30
32
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: zavudev
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Zavudev
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-03
|
|
11
|
+
date: 2026-04-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: cgi
|